60 lines
1.3 KiB
GDScript
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 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
|
|
var id: String = Utils.generate_guid()
|
|
|
|
func _init():
|
|
remaining_turns = duration
|
|
# print(id)
|
|
|
|
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
|