This commit is contained in:
Spencer Killen 2026-09-27 16:39:05 -06:00
parent 1301335d31
commit d43494753a
Signed by: sjkillen
GPG key ID: 1DAA9D8D7C6ADD05
11 changed files with 3487 additions and 137 deletions

View file

@ -6,6 +6,12 @@ class_name CurrencyMemberSprite
func _ready() -> void: func _ready() -> void:
sync() sync()
Economy.census.connect(census)
func census(p: Production, all):
if p.currency == currency:
p.amount += 1
all.append(self)
func sync(): func sync():
if allegiance != null: if allegiance != null:

View file

@ -8,7 +8,8 @@ signal log(s: String)
@export var currencies: Array[Production] @export var currencies: Array[Production]
@export var members: Array @export var members: Array
signal census(p: Production)
signal census(p: Production, all)
@onready var events: Array[Event] = load_events() @onready var events: Array[Event] = load_events()
@ -20,20 +21,43 @@ func spawn_friendlies():
var p := Production.new() var p := Production.new()
p.currency = currency p.currency = currency
p.amount = 0 p.amount = 0
census.emit(p) var all: Array[Node2D] = []
var delta := p.amount - get_currency_amount(currency) census.emit(p, [])
var delta := get_currency_amount(currency) - p.amount
if delta > 0: if delta > 0:
for i in range(delta): for i in range(delta):
spawn_currency_avatar(currency) spawn_currency_avatar(currency, true)
elif delta < 0:
all.shuffle()
for i in range(min(delta, all.size()-1)):
all[i].queue_free()
func spawn_currency_avatar(currency): func spawn_baddies():
if GameState.spawns_good == null:
spawn_friendlies.call_deferred()
return
for currency in get_all_sentient_currencies():
var delta := get_currency_amount(currency)
for i in range(delta):
spawn_currency_avatar(currency, false)
func spawn_currency_avatar(currency, good: bool):
var troup := preload("res://Troup.tscn").instantiate() var troup := preload("res://Troup.tscn").instantiate()
var spawn: Node2D = GameState.spawns_good.get_children().pick_random() var spawns
if good:
spawns = GameState.spawns_good
else:
spawns = GameState.spawns_bad
var spawn: Node2D = spawns.get_children().pick_random()
troup.top_level = true troup.top_level = true
troup.position = spawn.global_position troup.position = spawn.global_position
var sprite: CurrencyMemberSprite = troup.sprite() var sprite: CurrencyMemberSprite = troup.sprite()
sprite.currency = currency sprite.currency = currency
if good:
sprite.allegiance = preload("res://allegiance/good.tres") sprite.allegiance = preload("res://allegiance/good.tres")
else:
sprite.allegiance = preload("res://allegiance/bad.tres")
get_tree().root.add_child(troup) get_tree().root.add_child(troup)
@ -123,6 +147,7 @@ func simulate():
GameState.add_letter.emit(e.into_letter()) GameState.add_letter.emit(e.into_letter())
if randf() < 0.01: if randf() < 0.01:
LetterGeneration.try_generate_offer() LetterGeneration.try_generate_offer()
spawn_friendlies()
func get_all_currencies_in(dir: StringName): func get_all_currencies_in(dir: StringName):

7
game.gd Normal file
View file

@ -0,0 +1,7 @@
extends Node2D
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Economy.spawn_baddies.call_deferred()
Economy.simulate.call_deferred()

1
game.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://cr1yh02xdul33

View file

@ -1,23 +1,14 @@
[gd_scene format=3 uid="uid://dkui3dlb4vu1c"] [gd_scene format=3 uid="uid://dkui3dlb4vu1c"]
[ext_resource type="PackedScene" uid="uid://bdk1r2u8clllr" path="res://map.tscn" id="1_e2o6t"] [ext_resource type="PackedScene" uid="uid://bdk1r2u8clllr" path="res://map.tscn" id="1_e2o6t"]
[ext_resource type="Script" uid="uid://cr1yh02xdul33" path="res://game.gd" id="1_feb5d"]
[ext_resource type="PackedScene" uid="uid://d06w1wtct0mfs" path="res://test/test_economy.tscn" id="2_feb5d"] [ext_resource type="PackedScene" uid="uid://d06w1wtct0mfs" path="res://test/test_economy.tscn" id="2_feb5d"]
[ext_resource type="PackedScene" uid="uid://coebykrbnhlif" path="res://currency/members/MemberSprite.tscn" id="3_7jktm"]
[ext_resource type="Resource" uid="uid://dn0c1pfq04obw" path="res://currency/sentient/farmer.tres" id="4_ryrav"]
[ext_resource type="Resource" uid="uid://b7lxfjhx4qhts" path="res://allegiance/good.tres" id="5_eow3j"]
[node name="Game" type="Node2D" unique_id=1791439508] [node name="Game" type="Node2D" unique_id=1791439508]
script = ExtResource("1_feb5d")
[node name="map" parent="." unique_id=575553336 instance=ExtResource("1_e2o6t")] [node name="map" parent="." unique_id=575553336 instance=ExtResource("1_e2o6t")]
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1213874033] [node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1213874033]
[node name="TestEconomy" parent="CanvasLayer" unique_id=629898212 instance=ExtResource("2_feb5d")] [node name="TestEconomy" parent="CanvasLayer" unique_id=629898212 instance=ExtResource("2_feb5d")]
[node name="MemberSprite" parent="." unique_id=283117283 instance=ExtResource("3_7jktm")]
offset_left = 294.0
offset_top = 1177.0
offset_right = 345.0
offset_bottom = 1219.0
currency = ExtResource("4_ryrav")
allegiance = ExtResource("5_eow3j")

3540
map.tscn

File diff suppressed because it is too large Load diff

View file

@ -10,7 +10,7 @@ config_version=5
[application] [application]
run/main_scene="uid://dkui3dlb4vu1c" run/main_scene="uid://d1hx10534r452"
config/features=PackedStringArray("4.7") config/features=PackedStringArray("4.7")
[autoload] [autoload]

View file

@ -4,8 +4,3 @@ extends Node2D
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
GameState.spawns_bad = self GameState.spawns_bad = self
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass

View file

@ -4,8 +4,3 @@ extends Node2D
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready() -> void: func _ready() -> void:
GameState.spawns_good = self GameState.spawns_good = self
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass

View file

@ -3,8 +3,8 @@ extends Control
func _on_button_pressed() -> void: func _on_button_pressed() -> void:
Dialogic.start(preload("res://test/timeline.dtl")) Dialogic.start(preload("res://test/timeline.dtl"))
await Dialogic.timeline_ended await Dialogic.timeline_ended
get_tree().change_scene_to_file("res://game.tscn") get_tree().change_scene_to_file.call_deferred("res://game.tscn")
func _on_button_2_pressed() -> void: func _on_button_2_pressed() -> void:
get_tree().change_scene_to_file("res://game.tscn") get_tree().change_scene_to_file.call_deferred("res://game.tscn")

View file

@ -9,7 +9,7 @@ const JUMP_VELOCITY = -400.0
func _ready() -> void: func _ready() -> void:
UserContext. set_target_for . connect(set_target_for) UserContext. set_target_for . connect(set_target_for)
enemTarget = %PlayerGates #enemTarget = %PlayerGates
func set_target_for(who: CurrencyMemberSprite, t: Node2D): func set_target_for(who: CurrencyMemberSprite, t: Node2D):
if %MemberSprite == who: if %MemberSprite == who: