This commit is contained in:
Tandy 2026-09-26 22:01:36 -06:00
commit 7e21fa7c5c
8 changed files with 102 additions and 22 deletions

View file

@ -8,7 +8,7 @@ func _ready() -> void:
# Called every frame. 'delta' is the elapsed time since the previous frame. # Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void: func _process(_delta: float) -> void:
var mouse: = get_viewport().get_mouse_position() var mouse: = get_viewport().get_mouse_position()
var size: = get_viewport().get_visible_rect().size var size: = get_viewport().get_visible_rect().size
if (mouse.x < (0.10*size.x)): if (mouse.x < (0.10*size.x)):
@ -24,14 +24,18 @@ func _process(delta: float) -> void:
func _input(event): func _input(event):
if event is InputEventMouseButton: if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_WHEEL_UP and event.pressed: if event.button_index == MOUSE_BUTTON_WHEEL_UP and event.pressed:
zoom.x +=1 zoom.x +=1
zoom.y +=1 zoom.y +=1
elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN and event.pressed: elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN and event.pressed:
if zoom.x - 1 < 1:
zoom.x -=1 zoom.x = 1
zoom.y -=1 else:
zoom.x -= 1
if zoom.y - 1 < 1:
zoom.y = 1
else:
zoom.y -= 1

View file

@ -6,6 +6,19 @@ signal production_log(producer: Currency, p: Production)
@export var currencies: Array[Production] @export var currencies: Array[Production]
@export var members: Array @export var members: Array
@onready var events: Array[Event] = load_events()
func load_events() -> Array[Event]:
var dir := "res://random events"
var es: Array[Event] = []
for event_name in ResourceLoader.list_directory(dir):
var event: Event = load(dir + "/" + event_name)
es.push_back(event)
return es
func get_currency(c: Currency) -> Production: func get_currency(c: Currency) -> Production:
sync_currency.call_deferred() sync_currency.call_deferred()
for p in currencies: for p in currencies:
@ -18,6 +31,8 @@ func get_currency(c: Currency) -> Production:
return p return p
func do_bribing(p: Production) -> bool: func do_bribing(p: Production) -> bool:
if get_currency_amount(p.currency) < p.amount:
return false
produce(negate_production(p)) produce(negate_production(p))
return true return true
@ -50,7 +65,7 @@ func produce(production: Production):
var c := get_currency(production.currency) var c := get_currency(production.currency)
c.amount += production.amount c.amount += production.amount
func simulate(): func update_currencies():
productions_update.emit.call_deferred(currencies) productions_update.emit.call_deferred(currencies)
for c in currencies: for c in currencies:
for p in c.currency.production: for p in c.currency.production:
@ -59,6 +74,17 @@ func simulate():
pp.amount = c.amount * p.amount pp.amount = c.amount * p.amount
produce(pp) produce(pp)
func simulate():
update_currencies()
for e in events:
if e.requirements_satisfied() and e.will_happen():
var outcome := e.outcome()
for o in outcome:
produce(o)
production_log.emit(null, o)
if e.timeline != null:
Dialogic.start(e.timeline)
func get_all_currencies_in(dir: StringName): func get_all_currencies_in(dir: StringName):
var reses := ResourceLoader.list_directory(dir) var reses := ResourceLoader.list_directory(dir)
@ -75,4 +101,11 @@ func get_all_inanimate_currencies() -> Array:
return get_all_currencies_in("res://currency/inanimate") return get_all_currencies_in("res://currency/inanimate")
func _ready() -> void: func _ready() -> void:
%SimulateTickTimer.start()
update_currencies()
func _on_timer_timeout() -> void:
if Dialogic.current_timeline != null:
%SimulateTickTimer.start()
return
simulate() simulate()

View file

@ -62,3 +62,8 @@ metadata/_custom_type_script = "uid://dddyxbkq0ienn"
[node name="Economy" type="Node" unique_id=1950923383] [node name="Economy" type="Node" unique_id=1950923383]
script = ExtResource("1_csm0v") script = ExtResource("1_csm0v")
currencies = Array[ExtResource("2_tljx8")]([SubResource("Resource_g3220"), SubResource("Resource_bb1uu"), SubResource("Resource_vw3jp"), SubResource("Resource_xg8li"), SubResource("Resource_f6kxb"), SubResource("Resource_6u4g3"), SubResource("Resource_aqv3t"), SubResource("Resource_g2km3")]) currencies = Array[ExtResource("2_tljx8")]([SubResource("Resource_g3220"), SubResource("Resource_bb1uu"), SubResource("Resource_vw3jp"), SubResource("Resource_xg8li"), SubResource("Resource_f6kxb"), SubResource("Resource_6u4g3"), SubResource("Resource_aqv3t"), SubResource("Resource_g2km3")])
[node name="SimulateTickTimer" type="Timer" parent="." unique_id=1726107261]
unique_name_in_owner = true
[connection signal="timeout" from="SimulateTickTimer" to="." method="_on_timer_timeout"]

View file

@ -4,3 +4,27 @@ class_name Event
@export var extra_mods: Array[Production] @export var extra_mods: Array[Production]
@export var timeline: DialogicTimeline @export var timeline: DialogicTimeline
@export var requirements: Array[Production] @export var requirements: Array[Production]
enum EventNature {
Random,
Certain,
}
@export var probability: float = 0.005
@export var nature: EventNature = EventNature.Random
func requirements_satisfied() -> bool:
for requirement in requirements:
if Economy.get_currency_amount(requirement.currency) < requirement.amount:
return false
return true
func will_happen() -> bool:
if nature == EventNature.Certain:
return true
return randf() <= probability
func outcome() -> Array[Production]:
var stuff: Array[Production] = [modified_resource]
stuff.append_array(extra_mods)
return stuff

12
game.tscn Normal file
View file

@ -0,0 +1,12 @@
[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://d06w1wtct0mfs" path="res://test/test_economy.tscn" id="2_feb5d"]
[node name="Game" type="Node2D" unique_id=1791439508]
[node name="map" parent="." unique_id=575553336 instance=ExtResource("1_e2o6t")]
[node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1213874033]
[node name="TestEconomy" parent="CanvasLayer" unique_id=629898212 instance=ExtResource("2_feb5d")]

View file

@ -3,15 +3,12 @@
[ext_resource type="Script" uid="uid://bkptc7j6c1r7p" path="res://gui/currency_inspector_panel.gd" id="1_tj5vo"] [ext_resource type="Script" uid="uid://bkptc7j6c1r7p" path="res://gui/currency_inspector_panel.gd" id="1_tj5vo"]
[ext_resource type="Texture2D" uid="uid://bplvus0ytk2f8" path="res://thumbnails/beer.png" id="2_p4bd1"] [ext_resource type="Texture2D" uid="uid://bplvus0ytk2f8" path="res://thumbnails/beer.png" id="2_p4bd1"]
[node name="CurrencyInspectorPanel" type="Control" unique_id=169191981] [node name="CurrencyInspectorPanel" type="Panel" unique_id=1489159816]
custom_minimum_size = Vector2(0, 100) custom_minimum_size = Vector2(500, 100)
layout_mode = 3
anchors_preset = 11 anchors_preset = 11
anchor_left = 1.0 anchor_left = 1.0
anchor_right = 1.0 anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
offset_left = -188.0
offset_right = -188.0
grow_horizontal = 0 grow_horizontal = 0
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_tj5vo") script = ExtResource("1_tj5vo")
@ -19,14 +16,10 @@ script = ExtResource("1_tj5vo")
[node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=362599487] [node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=362599487]
custom_minimum_size = Vector2(400, 0) custom_minimum_size = Vector2(400, 0)
custom_maximum_size = Vector2(400, -1) custom_maximum_size = Vector2(400, -1)
layout_mode = 1 layout_mode = 0
anchors_preset = 5 offset_left = 50.0
anchor_left = 0.5 offset_right = 450.0
anchor_right = 0.5 offset_bottom = 503.0
offset_left = -253.0
offset_right = 47.0
offset_bottom = 149.0
grow_horizontal = 2
[node name="InspectedCurrency" type="Label" parent="VBoxContainer" unique_id=1206438498] [node name="InspectedCurrency" type="Label" parent="VBoxContainer" unique_id=1206438498]
unique_name_in_owner = true unique_name_in_owner = true

View file

@ -10,7 +10,7 @@ config_version=5
[application] [application]
run/main_scene="uid://d06w1wtct0mfs" run/main_scene="uid://dkui3dlb4vu1c"
config/features=PackedStringArray("4.7") config/features=PackedStringArray("4.7")
[autoload] [autoload]
@ -136,5 +136,6 @@ dialogic_default_action={
[rendering] [rendering]
textures/canvas_textures/default_texture_filter=0
rendering_device/driver.windows="d3d12" rendering_device/driver.windows="d3d12"
renderer/rendering_method="gl_compatibility" renderer/rendering_method="gl_compatibility"

View file

@ -19,8 +19,13 @@ grow_horizontal = 2
grow_vertical = 2 grow_vertical = 2
script = ExtResource("1_s48qe") script = ExtResource("1_s48qe")
[node name="ProductionChart" parent="." unique_id=1301678172 instance=ExtResource("2_jd86c")] [node name="ScrollContainer2" type="ScrollContainer" parent="." unique_id=872959271]
layout_mode = 0 layout_mode = 0
offset_right = 432.0
offset_bottom = 297.0
[node name="ProductionChart" parent="ScrollContainer2" unique_id=1301678172 instance=ExtResource("2_jd86c")]
layout_mode = 2
[node name="ScrollContainer" parent="." unique_id=587807919 instance=ExtResource("3_n4oyp")] [node name="ScrollContainer" parent="." unique_id=587807919 instance=ExtResource("3_n4oyp")]
layout_mode = 1 layout_mode = 1
@ -51,6 +56,7 @@ grow_horizontal = 0
grow_vertical = 2 grow_vertical = 2
[node name="VBoxContainer" type="VBoxContainer" parent="Control" unique_id=74649172] [node name="VBoxContainer" type="VBoxContainer" parent="Control" unique_id=74649172]
visible = false
layout_mode = 0 layout_mode = 0
offset_right = 40.0 offset_right = 40.0
offset_bottom = 40.0 offset_bottom = 40.0
@ -71,6 +77,7 @@ text = "OpenInbox"
layout_mode = 1 layout_mode = 1
[node name="MemberInspectorPanel" parent="." unique_id=1641024074 instance=ExtResource("5_i7808")] [node name="MemberInspectorPanel" parent="." unique_id=1641024074 instance=ExtResource("5_i7808")]
custom_minimum_size = Vector2(0, 100)
layout_mode = 1 layout_mode = 1
offset_left = -189.0 offset_left = -189.0
offset_right = -189.0 offset_right = -189.0
@ -79,6 +86,7 @@ offset_right = -189.0
layout_mode = 1 layout_mode = 1
[node name="MemberSprite" parent="." unique_id=283117283 instance=ExtResource("6_vua3v")] [node name="MemberSprite" parent="." unique_id=283117283 instance=ExtResource("6_vua3v")]
visible = false
instance_shader_parameters/border_color = Color(1, 0, 0, 1) instance_shader_parameters/border_color = Color(1, 0, 0, 1)
instance_shader_parameters/border_width = 0.16 instance_shader_parameters/border_width = 0.16
instance_shader_parameters/fill_color = Color(1, 0.7529412, 0.79607844, 1) instance_shader_parameters/fill_color = Color(1, 0.7529412, 0.79607844, 1)