75 lines
1.7 KiB
GDScript
75 lines
1.7 KiB
GDScript
extends Resource
|
|
class_name Card
|
|
|
|
enum Rank {RANK_0, RANK_1, RANK_2, RANK_3}
|
|
enum EffectType {
|
|
MOVEMENT_MODIFIER,
|
|
BOARD_EFFECT,
|
|
PIECE_EFFECT,
|
|
SPECIAL_ACTION
|
|
}
|
|
|
|
var cardName: String
|
|
var rank: Rank
|
|
var description: String
|
|
var duration: int = 0
|
|
var attached_piece: Pawn = null
|
|
var burned: bool = false
|
|
var effectType: EffectType
|
|
var remaining_turns: int = 0
|
|
var unitWhitelist: Array[String] = [] # List of piece types this card can be attached to
|
|
var id: String = Utils.generate_guid()
|
|
var stored_board_flow = null
|
|
var stored_game_state = null
|
|
|
|
func _init():
|
|
remaining_turns = duration
|
|
# print(id)
|
|
|
|
func can_attach_to_piece(piece: Pawn) -> bool:
|
|
# print(unitWhitelist, " | ", piece.name , " | ", unitWhitelist.has(piece.name))
|
|
if unitWhitelist.is_empty():
|
|
return true
|
|
return unitWhitelist.has(piece.name)
|
|
|
|
func apply_effect(target_piece = null, board_flow = null, game_state = null):
|
|
if burned || (target_piece && !can_attach_to_piece(target_piece)):
|
|
print("CARD CANT APPLY AFFECT", burned, " ", target_piece)
|
|
return false
|
|
|
|
remaining_turns = duration
|
|
attached_piece = target_piece
|
|
stored_board_flow = board_flow
|
|
stored_game_state = game_state
|
|
|
|
match rank:
|
|
Rank.RANK_0: burned = true
|
|
Rank.RANK_1: burned = true
|
|
Rank.RANK_2: pass
|
|
Rank.RANK_3: pass
|
|
|
|
return true
|
|
|
|
func update_duration():
|
|
if remaining_turns > 0:
|
|
remaining_turns -= 1
|
|
if remaining_turns <= 0:
|
|
remove_effect()
|
|
burn_or()
|
|
|
|
|
|
func burn_or():
|
|
|
|
match rank:
|
|
Rank.RANK_0: burned = true
|
|
Rank.RANK_1: burned = true
|
|
Rank.RANK_2: pass
|
|
Rank.RANK_3: pass
|
|
return true
|
|
func modify_moves() -> Dictionary:
|
|
return {}
|
|
|
|
|
|
func remove_effect():
|
|
if attached_piece:
|
|
pass
|