ChessBuilder/Systems/Card.gd
2025-01-24 20:06:23 -06:00

58 lines
1.2 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 card_name: String
var rank: Rank
var description: String
var duration: int = 0
var attached_piece: Pawn = null
var burned: bool = false
var effect_type: EffectType
var remaining_turns: int = 0
var unit_whitelist: Array[String] = [] # List of piece types this card can be attached to
func _init():
remaining_turns = duration
func can_attach_to_piece(piece: Pawn) -> bool:
if unit_whitelist.is_empty():
return true
return unit_whitelist.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