mirror of
https://github.com/tonytins/citylimits
synced 2025-06-25 09:24:44 -04:00
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:
parent
49a1186115
commit
e5505a3244
243 changed files with 3853 additions and 224 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
4
scripts/city_planner.gd
Normal file
|
@ -0,0 +1,4 @@
|
|||
extends "res://scripts/advisor_window.gd"
|
||||
|
||||
func _ready():
|
||||
SimEvents.connect("city_planner", self, "_start_dialogue")
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
4
scripts/finance_advisor.gd
Normal file
4
scripts/finance_advisor.gd
Normal file
|
@ -0,0 +1,4 @@
|
|||
extends "res://scripts/advisor_window.gd"
|
||||
|
||||
func _ready():
|
||||
SimEvents.connect("financial_advisor", self, "_start_dialogue")
|
|
@ -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
16
scripts/power_station.gd
Normal 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
43
scripts/tax_window.gd
Normal 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
18
scripts/windows.gd
Normal 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()
|
Loading…
Add table
Add a link
Reference in a new issue