Tax system

- New tax system
- Advisor window modeled after SC3k's
- Advisor start_dialogue() function is now connected to a SimEvent "advisor_message" signal
- Advisor windows are now autoloaded and no longer part of the core interface node
- Added 3D buildings from Micropolis repo
This commit is contained in:
Tony Bark 2021-05-22 04:12:18 -04:00
parent 49a1186115
commit e5505a3244
243 changed files with 3853 additions and 224 deletions

View file

@ -3,10 +3,8 @@ extends KinematicBody2D
signal grabbed
export var cost: int = 10000
export var income: int
export var expense: int
enum IsPowerStation {TRUE, FALSE}
export(IsPowerStation) var power_station = IsPowerStation.FALSE
export var income: int = 100
export var expense: int = 0
onready var zone = $Sprite
onready var quarters = $Quarters
@ -17,21 +15,18 @@ var grabbed_offset = Vector2()
func _ready():
SimEvents.connect("budget", self, "_get_budget")
SimEvents.connect("has_power", self, "_power_zone")
connect("grabbed", self, "_grab_zone")
func _input(event):
func _drag_drop(event):
if event is InputEventMouseButton and can_grab:
# Disable grabbing
can_grab = false
grabbed_offset = position - get_global_mouse_position()
# Substract from the player's budget
# Substract from the player's budget and disable grabbing
if SimData.budget >= cost:
SimData.budget -= cost
if power_station == IsPowerStation.TRUE:
SimEvents.emit_signal("has_power")
can_grab = false
grabbed_offset = position - get_global_mouse_position()
func _input(event):
_drag_drop(event)
func _process(delta):
if can_grab:
@ -52,13 +47,13 @@ func _animante_sprite(animante: bool = true):
func _grab_zone():
can_grab = true
func _power_zone():
SimData.has_power = true
func _get_budget():
if SimData.budget >= expense:
if SimData.budget >= expense and SimData.has_power:
SimData.budget -= expense
SimData.expenses = expense
if SimData.budget >= income:
SimData.budget += income
if SimData.has_power:
var total_income = SimData.res_tax * income
SimData.budget += total_income
SimData.res_income = total_income

View file

@ -5,7 +5,6 @@ export(String, FILE, "*.json") var dialogue_file
export var character: String
export var rank: String
export(Texture) var avatar
export var dialog = 0
var dialogue_keys = []
var dialogue_name = ""
@ -16,19 +15,20 @@ onready var rank_label = $Container/Advisor/RankLbl
onready var name_label = $Container/Advisor/NameLbl
onready var description_label = $Container/DescriptionLbl
func start_dialogue():
index_dialogue()
description_label.text = dialogue_keys[dialog].text
window_title = dialogue_keys[dialog].name
func _start_dialogue(message):
_load_dialogue(dialogue_file)
_index_dialogue()
description_label.text = dialogue_keys[message].text
window_title = dialogue_keys[message].name
show()
func index_dialogue():
var dialogue = load_dialogue(dialogue_file)
func _index_dialogue():
var dialogue = _load_dialogue(dialogue_file)
dialogue_keys.clear()
for key in dialogue:
dialogue_keys.append(dialogue[key])
func load_dialogue(file_path):
func _load_dialogue(file_path):
var file = File.new()
if file.file_exists(file_path):
file.open(file_path, file.READ)
@ -36,8 +36,6 @@ func load_dialogue(file_path):
return dialogue
func _ready():
load_dialogue(dialogue_file)
start_dialogue()
avatar_texture.texture = avatar
name_label.text = character
rank_label.text = rank

View file

@ -1,21 +1,29 @@
extends Node
# Hard-coded for now
var city_name: String = "Furtropolis"
var city_name: String = "Furtropolis" # Hard-coded, for now
var year: int = 1980
var prev_quarter: int
var quarter: int = 1
var population: int = 0
var news_ticker: String
var budget: int = 20000
var prev_budget: int
var expenses: int
var power_grid: int
const currency: String = "§"
var power_grid: int # Number of power stations in the area. Helps provide redundancies.
var power_capacity: int
var current_power_cap: int
var prev_power_cap: int
var has_power: bool
var res_tax: int
var comm_tax: int
var indust_tax: int
var res_tax: int = 1
var comm_tax: int = 1
var indust_tax: int = 1
var res_income: int
var comm_income: int
var ind_income: int
var fire_tax: int
var police_tax: int

View file

@ -3,3 +3,5 @@ extends Node
signal has_power
signal budget
signal game_speed
signal city_planner(message)
signal financial_advisor(message)

4
scripts/city_planner.gd Normal file
View file

@ -0,0 +1,4 @@
extends "res://scripts/advisor_window.gd"
func _ready():
SimEvents.connect("city_planner", self, "_start_dialogue")

View file

@ -1,10 +1,10 @@
extends BoxContainer
extends HBoxContainer
onready var city_name = $CityNameLbl
onready var money = $Money/MoneyLbl
onready var budget = $BudgetLbl
onready var year = $YearLbl
func _process(delta):
city_name.text = SimData.city_name
money.text = str(SimData.budget)
budget.text = SimData.currency + str(SimData.budget)
year.text = "Y" + str(SimData.year)

View file

@ -1,8 +0,0 @@
extends Control
onready var debug_console = $Console
onready var advisor = $AdvsiorNotice
func _process(delta):
if Input.is_action_pressed("ui_cheats"):
debug_console.show()

View file

@ -0,0 +1,4 @@
extends "res://scripts/advisor_window.gd"
func _ready():
SimEvents.connect("financial_advisor", self, "_start_dialogue")

View file

@ -37,13 +37,13 @@ func make_water():
func _on_ResBtn_pressed():
var new_zone = preload("res://scenes/zones/Zone.tscn")
var new_zone = preload("res://scenes/deparments/Zone.tscn")
var instance = new_zone.instance()
add_child(instance)
instance.emit_signal("grabbed")
func _on_CoalBtn_pressed():
var new_zone = preload("res://scenes/zones/Coal.tscn")
var new_zone = preload("res://scenes/deparments/CoalPlant.tscn")
var instance = new_zone.instance()
add_child(instance)
instance.emit_signal("grabbed")

16
scripts/power_station.gd Normal file
View file

@ -0,0 +1,16 @@
extends "res://scripts/zone.gd"
func _ready():
SimEvents.connect("has_power", self, "_power_zones")
func _power_zones():
SimData.power_grid += 1
if SimData.power_grid <= 1:
SimData.has_power = true
func _input(event):
_drag_drop(event)
if can_grab == false:
SimEvents.emit_signal("has_power")

43
scripts/tax_window.gd Normal file
View file

@ -0,0 +1,43 @@
extends WindowDialog
onready var res_slider = $TaxSlidersCtr/ResCtr/ResSlider
onready var com_slider = $TaxSlidersCtr/ComCtr/ComSlider
onready var ind_slider = $TaxSlidersCtr/IndCtr/IndSlider
onready var res_rate = $PrecentCtr/ResPctLbl
onready var com_rate = $PrecentCtr/ComPctLbl
onready var ind_rate = $PrecentCtr/IndPctLbl
onready var annual_income = $IncomeCtr/IcnomeLbl
func _ready():
if SimData.res_tax >= 0:
res_slider.value = SimData.res_tax
res_rate.text = str(SimData.res_tax) + "%"
if SimData.res_tax >= 0:
com_slider.value = SimData.comm_tax
com_rate.text = str(SimData.comm_tax) + "%"
if SimData.indust_tax >= 0:
ind_slider.value = SimData.indust_tax
ind_rate.text = str(SimData.indust_tax) + "%"
func _process(delta):
var total_income = int(SimData.res_income + SimData.comm_income + SimData.ind_income)
if total_income >= 1:
annual_income.text = "Income: " + SimData.currency + str(total_income) + "/yr"
func _on_ResSlider_value_changed(value):
SimData.res_tax = int(value)
res_rate.text = str(value) + "%"
func _on_ComSlider_value_changed(value):
SimData.comm_tax = int(value)
com_rate.text = str(value) + "%"
func _on_IndSlider_value_changed(value):
SimData.indust_tax = int(value)
ind_rate.text = str(value) + "%"

18
scripts/windows.gd Normal file
View file

@ -0,0 +1,18 @@
extends Control
onready var debug_console = $Console
onready var tax_window = $TaxWindow
onready var advsior_meet_window = $AdvisorMeet
func _ready():
SimEvents.emit_signal("city_planner", 0)
func _process(delta):
if Input.is_action_pressed("ui_cheats"):
debug_console.show()
func _on_TaxBtn_pressed():
tax_window.show()
func _on_AdvsiorBtn_pressed():
advsior_meet_window.show()