ChessBuilder/Systems/Card.gd

60 lines
1.3 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()
func _init():
remaining_turns = duration
# print(id)
func can_attach_to_piece(piece: Pawn) -> bool:
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)):
return false
remaining_turns = duration
attached_piece = target_piece
match rank:
Rank.RANK_0: burned = true
Rank.RANK_1: burned = true
Rank.RANK_2: pass
Rank.RANK_3: pass
return modify_moves()
func update_duration():
if remaining_turns > 0:
remaining_turns -= 1
if remaining_turns <= 0:
remove_effect()
func modify_moves() -> Dictionary:
return {}
func remove_effect():
if attached_piece:
pass