101 lines
2.1 KiB
GDScript
101 lines
2.1 KiB
GDScript
extends Node
|
|
class_name GameState
|
|
|
|
signal card_drawn(card: Card)
|
|
|
|
enum Faction {Scavangers, Kingdom, Emporium}
|
|
|
|
class Player:
|
|
var name: String;
|
|
var id: int;
|
|
var deck: Array;
|
|
var hand: Array;
|
|
var discard: Array;
|
|
var combat: int;
|
|
var trade: int;
|
|
|
|
class Card:
|
|
var name: String;
|
|
var cost: int;
|
|
var primaryAbilityEffects: Array;
|
|
var allyAbility: Faction;
|
|
var allyAbilityEffects: Array;
|
|
var acquireAbilityEffects: Array;
|
|
var faction: Faction;
|
|
|
|
|
|
# effects
|
|
class TradeGainEffect:
|
|
static func NewTradeGainEffect(amount: int):
|
|
return {Type = "TradeGain", Amount = amount}
|
|
|
|
static func TradeGainDisplay():
|
|
pass
|
|
|
|
static func ProcessTradeGainEffect(effect, state):
|
|
state.trade = effect.Amount;
|
|
|
|
class CombatGainEffect:
|
|
static func NewCombatGainEffect(amount: int):
|
|
return {Type = "CombatGain", Amount = amount}
|
|
|
|
static func CombatGainDisplay():
|
|
pass
|
|
|
|
static func ProcessCombatGainEffect(effect, state):
|
|
state.trade = effect.Amount;
|
|
|
|
# make cards
|
|
static func make_scout():
|
|
var card := Card.new();
|
|
card.name = "Scout"
|
|
card.cost = 0;
|
|
card.primaryAbilityEffects = [TradeGainEffect.NewTradeGainEffect(1)];
|
|
return card;
|
|
|
|
static func make_viper():
|
|
var card := Card.new();
|
|
card.name = "Viper"
|
|
card.cost = 0;
|
|
card.primaryAbilityEffects = [CombatGainEffect.NewCombatGainEffect(1)];
|
|
return card;
|
|
|
|
static func make_starting_deck():
|
|
var deck = [];
|
|
for i in range(8):
|
|
deck.append(make_scout())
|
|
for i in range(2):
|
|
deck.append(make_viper())
|
|
return deck;
|
|
|
|
|
|
var player = Player.new()
|
|
var rng = RandomNumberGenerator.new()
|
|
|
|
func draw_card():
|
|
var cardId = rng.randi_range(0, player.deck.size()-1)
|
|
var card = player.deck[cardId]
|
|
player.hand.append(card)
|
|
player.deck.remove_at(cardId)
|
|
card_drawn.emit(card)
|
|
|
|
|
|
func draw_cards(n: int):
|
|
for i in range(n):
|
|
draw_card()
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
player.name = "placeholder"
|
|
player.deck = make_starting_deck()
|
|
draw_cards(5)
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta: float) -> void:
|
|
pass
|
|
|
|
|
|
|
|
func _on_button_button_down() -> void:
|
|
draw_cards(5)
|