SC3k-style Ordinances

This wound up being a bigger commit than I had initially planned.

- New SC3k-style policies based on the advisor code.
- Added license file to Font Awesome folder.
- Refactored the advisor code so it can handle multiple files.
- Updated icons. Should be more consistent now.
- Replaced Sims with Animals in ticker text.
- Moved dialogs to windows directory.
This commit is contained in:
Tony Bark 2021-05-27 10:33:08 -04:00
parent 346ceaacb9
commit 72e2c96542
76 changed files with 2489 additions and 458 deletions

View file

@ -15,31 +15,64 @@ onready var rank_label = $Container/Advisor/RankLbl
onready var name_label = $Container/Advisor/NameLbl
onready var description_label = $Container/DescriptionLbl
func _start_dialogue(advisor, message):
if advisor == SimData.Advisors.CITY_PLANNER:
dialogue_file = "res://dialog/advisors/cityplanner.json"
_load_dialogue()
avatar_texture.texture = preload("res://sprites/avatars/cindy.png")
name_label.text = "Cindy Diamond"
rank_label.text = "City Planner"
elif advisor == SimData.Advisors.FINANCIAL:
dialogue_file = "res://dialog/advisors/finacial.json"
_load_dialogue()
avatar_texture.texture = preload("res://sprites/avatars/kit.png")
name_label.text = "Kit Welsh"
rank_label.text = "Financial Advisor"
elif advisor == SimData.Advisors.FINANCIAL:
dialogue_file = "res://dialog/advisors/transport.json"
_load_dialogue()
avatar_texture.texture = preload("res://sprites/avatars/zc.png")
name_label.text = "Zack Casey"
rank_label.text = "Transportation Advisor"
enum JsonFile {
ANNOUNCEMENTS,
ANALYSIS
}
func _ready():
SimEvents.connect("advisor_message", self, "_advisor_dialogue")
SimEvents.connect("policy_analysis", self, "_analysis_dialouge")
func _init_advisor(file, advisor):
match advisor:
SimData.Advisors.CITY_PLANNER:
match file:
JsonFile.ANNOUNCEMENTS:
dialogue_file = "res://dialog/advisors/cityplanner.json"
JsonFile.ANALYSIS:
dialogue_file = "res://dialog/policies/cityplanner_analysis.json"
avatar_texture.texture = preload("res://sprites/avatars/cindy.png")
name_label.text = "Cindy Diamond"
rank_label.text = "City Planner"
SimData.Advisors.FINANCIAL:
match file:
JsonFile.ANNOUNCEMENTS:
dialogue_file = "res://dialog/advisors/finacial.json"
JsonFile.ANALYSIS:
dialogue_file = "res://dialog/policies/finacial_analysis.json"
avatar_texture.texture = preload("res://sprites/avatars/kit.png")
name_label.text = "Kit Welsh"
rank_label.text = "Financial Advisor"
SimData.Advisors.TRANSPORT:
match file:
JsonFile.ANNOUNCEMENTS:
dialogue_file = "res://dialog/advisors/transport.json"
JsonFile.ANALYSIS:
dialogue_file = "res://dialog/policies/transport_analysis.json"
avatar_texture.texture = preload("res://sprites/avatars/zc.png")
name_label.text = "Zack Casey"
rank_label.text = "Transportation Advisor"
func _launch_advisor_window(key):
_index_dialogue()
description_label.text = dialogue_keys[message].text
window_title = dialogue_keys[message].name
description_label.text = dialogue_keys[key].text
window_title = dialogue_keys[key].name
show()
func _advisor_dialogue(advisor, message):
_init_advisor(JsonFile.ANNOUNCEMENTS, advisor)
_launch_advisor_window(message)
func _analysis_dialouge(advisor, policy):
_init_advisor(JsonFile.ANALYSIS, advisor)
_launch_advisor_window(policy)
func _index_dialogue():
var dialogue = _load_dialogue()
dialogue_keys.clear()
@ -52,6 +85,3 @@ func _load_dialogue():
file.open(dialogue_file, file.READ)
var dialogue = parse_json(file.get_as_text())
return dialogue
func _ready():
SimEvents.connect("advisor_message", self, "_start_dialogue")

View file

@ -1,17 +1,22 @@
extends Node
const CURRENCY: String = "§"
var city_name: String = "Furtropolis" # Hard-coded, for now
var mayor_name: String = "Defecto"
var year: int = 1980
var prev_quarter: int
var quarter: int = 1
var population: int = 0
var budget: int = 20000
var expenses: int
var is_alert: bool = false
var on_alert: bool = false
var has_ctower: bool = false # Central Tower
const currency: String = "§"
var year: int = 2000
var prev_year: int
var month: int = 1
var prev_month: int
var day: int = 1
var prev_day: int
var total_days: int = 1
var power_grid: int # Number of power stations in the area. Helps provide redundancies.
var power_capacity: int
@ -37,18 +42,50 @@ enum GameSpeed {
FAST
}
enum Advisors {
CITY_PLANNER,
FINANCIAL
enum Level {
EASY,
MEDIUM,
HARD
}
func starting_budget(lev: int):
if lev == 1 or lev == 0:
budget = 20000
elif lev == 2:
budget = 10000
elif lev == 3:
budget = 5000
else:
budget = NAN
enum Advisors {
CITY_PLANNER,
FINANCIAL,
TRANSPORT
}
enum Ordinances {
# Education
CPR_TRAINING,
PRO_READING,
NHOOD_WATCH,
# Financial
PARKING_FINES,
GAMBLING,
SALES_TAX,
# Promo
ANNUAL_CARNIVAL,
BUSINESS_ADS,
CITY_BEAUTY,
TOURIST_ADS
# Health & Safety
FREE_CLINICS,
JUNIOR_SPORTS,
SMOKING_BAN,
VOLUNTEER_FIRE,
SMOKE_DETECTOR,
# Environment
ENERGY_CONSERVATION,
HOMELESS_SHELTERS,
CLEAN_AIR_ACT,
TIRE_RECYCLE
}
func starting_budget(lev = Level.EASY):
match lev:
Level.EASY:
budget = 20000
Level.MEDIUM:
budget = 10000
Level.HARD:
budget = 5000

View file

@ -3,8 +3,15 @@ extends Node
signal has_power
signal budget
signal game_speed
signal policy_message(policy)
signal policy_analysis(advisor, policy)
signal advisor_message(advisor, message)
# News
signal send_alert(message)
signal resume_news
# Policies
signal clean_air_act
signal energy_saving

View file

@ -1,10 +1,10 @@
extends HBoxContainer
onready var city_name = $CityNameLbl
onready var budget = $BudgetLbl
onready var year = $YearCtr/YearLbl
onready var budget = $BudgetCtr/BudgetLbl
onready var calendar = $YearCtr/CalendarLbl
func _process(delta):
city_name.text = SimData.city_name
budget.text = SimData.currency + str(SimData.budget)
year.text = str(SimData.year)
budget.text = str(SimData.budget)
calendar.text = str(SimData.day) + "/" + str(SimData.month) + "/" + str(SimData.year)

View file

@ -10,9 +10,13 @@ enum {
const valid_commands = [
["money", [ARG_STRING] ],
["whereyoufrom", [ARG_STRING] ],
["whatyearisit", [ARG_STRING] ]
["whatyearisit", [ARG_STRING] ],
["show_policy", [ARG_INT]]
]
func show_policy(policy):
SimEvents.emit_signal("policy_message", policy)
func _budget_print(value: int):
return "Budget increased to " + str(value)

View file

@ -1,20 +1,45 @@
extends Node2D
onready var rotate_news = $RotateNews
onready var quarters = $Quarters
onready var day_cycle = $DayCycle
onready var turtle_btn = $Controls/Status/SpeedCtr/TurtleBtn
onready var cheeta_btn = $Controls/Status/SpeedCtr/CheetaBtn
func _ready():
SimEvents.connect("resume_news", self, "_resume_rotation")
SimEvents.connect("send_alert", self, "_stop_news")
func _on_Quarters_timeout():
SimData.year += 1
SimData.prev_quarter = SimData.quarter
SimEvents.emit_signal("budget")
func _stop_news():
rotate_news.stop()
func _resume_rotation():
rotate_news.start()
func _on_DayCycle_timeout():
if SimData.prev_day < 30:
SimData.day += 1
if SimData.prev_day == 30:
SimData.month =+ 1
SimData.prev_month = SimData.month
SimData.day = 1
SimEvents.emit_signal("budget")
if SimData.prev_month == 12:
SimData.prev_year = SimData.year
SimData.total_days = 1
SimData.month = 1
SimData.year += 1
SimData.prev_day = SimData.day
func _on_TurtleBtn_toggled(button_pressed):
if button_pressed:
day_cycle.wait_time = 12
cheeta_btn.pressed = false
func _on_CheetaBtn_toggled(button_pressed):
if button_pressed:
day_cycle.wait_time = 2
turtle_btn.pressed = false

69
scripts/policy_window.gd Normal file
View file

@ -0,0 +1,69 @@
extends WindowDialog
var dialogue_file = "res://dialog/policies/policies.json"
var dialogue_keys = []
var dialogue_name = ""
var dialogue_text = ""
var policy: int
onready var ordinance_label = $OrdinanceLbl
onready var description_label = $DescPanel/DescriptionLbl
func _start_dialogue(ordinance):
_index_dialogue()
match ordinance:
1:
policy = 1
2:
policy = 2
3:
policy = 3
var proposel: String = dialogue_keys[policy].text
if "[name]" in proposel:
proposel = proposel.replace("[name]", SimData.mayor_name)
if "[city]" in proposel:
proposel = proposel.replace("[city]", SimData.city_name)
description_label.text = proposel
ordinance_label.text = dialogue_keys[policy].name
show()
func _index_dialogue():
var dialogue = _load_dialogue()
dialogue_keys.clear()
for key in dialogue:
dialogue_keys.append(dialogue[key])
func _load_dialogue():
var file = File.new()
if file.file_exists(dialogue_file):
file.open(dialogue_file, file.READ)
var dialogue = parse_json(file.get_as_text())
return dialogue
func _ready():
SimEvents.connect("policy_message", self, "_start_dialogue")
func _on_IgnoreBtn_pressed():
policy = 0
description_label.text = ""
ordinance_label.text = ""
hide()
func _on_EnectBtn_pressed():
match policy:
1: SimEvents.emit_signal("energy_saving")
2: SimEvents.emit_signal("clean_air_act")
func _on_AnalysisBtn_pressed():
match policy:
1: SimEvents.emit_signal("policy_analysis", SimData.Advisors.CITY_PLANNER, policy)
2: SimEvents.emit_signal("policy_analysis", SimData.Advisors.CITY_PLANNER, policy)
3: SimEvents.emit_signal("policy_analysis", SimData.Advisors.CITY_PLANNER, policy)

View file

@ -5,6 +5,11 @@ onready var ticker_text = $TickerTxt
var news_file = ""
var rng = RandomNumberGenerator.new()
var news_keys = []
var speices = [
"Cat",
"Fennec",
"Fox"
]
func _index_news():
var news = _load_news()
@ -30,12 +35,8 @@ func _ready():
SimEvents.connect("resume_news", self, "_resume_ticker")
_random_news("res://dialog/ticker/ticker.json")
func _process(delta):
if get_tree().paused:
ticker_text.text = "Simulation Paused"
func _start_alert(message):
SimData.is_alert = true
SimData.on_alert = true
news_file = "res://dialog/ticker/ticker_alerts.json"
ticker_text.text = news_keys[message].text
@ -56,6 +57,11 @@ func _random_news(file):
elif "[outlet]" in news:
news = news.replace("[outlet]", "Pawprint Press")
if "[species]" in news:
randomize()
speices.shuffle()
news = news.replace("[species]", speices[rng.randi()%speices.size()])
if "[city]" in news:
news = news.replace("[city]", SimData.city_name)

View file

@ -4,7 +4,6 @@ onready var debug_console = $Console
onready var tax_window = $TaxWindow
onready var advsior_meet_window = $AdvisorMeet
onready var tools_window = $ToolsWindow
# onready var news_ticker = $
func _ready():
SimEvents.emit_signal("advisor_message", SimData.Advisors.CITY_PLANNER, 0)