mirror of
https://github.com/tonytins/citylimits
synced 2025-08-14 05:34:43 -04:00
Basic AI
- If a power plant is present, the zone animates. Just like the original. - Your budget also goes through the roof This is just a proof-of-concept right now, and will likely crash your machine if you leave it on too long.
This commit is contained in:
parent
5fa863114a
commit
239fa63a0c
9 changed files with 236 additions and 177 deletions
|
@ -1,12 +1,5 @@
|
|||
extends Area2D
|
||||
|
||||
signal grabbed
|
||||
signal has_power
|
||||
|
||||
export var cost: int = 10000
|
||||
export var income: int = 100
|
||||
export var expense: int = 0
|
||||
|
||||
onready var zone = $Sprite
|
||||
onready var quarters = $Quarters
|
||||
onready var animator = $AnimationPlayer
|
||||
|
@ -15,48 +8,32 @@ var can_grab = false
|
|||
var grabbed_offset = Vector2()
|
||||
|
||||
func _ready():
|
||||
SimEvents.connect("budget", self, "_get_budget")
|
||||
connect("grabbed", self, "_grab_zone")
|
||||
zone.frame = 0
|
||||
|
||||
#func _drag_drop(event):
|
||||
# if event is InputEventMouseButton and can_grab:
|
||||
# # Substract from the player's budget and disable grabbing
|
||||
# if SimData.budget >= cost:
|
||||
# SimData.budget -= cost
|
||||
# can_grab = false
|
||||
# grabbed_offset = position - get_global_mouse_position()
|
||||
|
||||
func _drag_drop(event):
|
||||
if event is InputEventMouseButton and can_grab:
|
||||
# Substract from the player's budget and disable grabbing
|
||||
if SimData.budget >= cost:
|
||||
SimData.budget -= cost
|
||||
can_grab = false
|
||||
grabbed_offset = position - get_global_mouse_position()
|
||||
|
||||
func _input(event):
|
||||
_drag_drop(event)
|
||||
#func _input(event):
|
||||
# _drag_drop(event)
|
||||
|
||||
func _process(delta):
|
||||
if can_grab:
|
||||
position = get_global_mouse_position() + grabbed_offset
|
||||
|
||||
func _animante_sprite(animante: bool = true):
|
||||
if zone.hframes > 1 or zone.vframes > 1 and animante:
|
||||
if SimData.has_power == true:
|
||||
animator.play("Animante")
|
||||
else:
|
||||
animator.stop()
|
||||
# if can_grab:
|
||||
# position = get_global_mouse_position() + grabbed_offset
|
||||
|
||||
#func _animante_sprite(animante: bool = true):
|
||||
# if zone.hframes > 1 or zone.vframes > 1 and animante:
|
||||
# animator.play("Animante")
|
||||
# else:
|
||||
# animator.stop()
|
||||
|
||||
func _grab_zone():
|
||||
can_grab = true
|
||||
|
||||
func _get_budget():
|
||||
if SimData.budget >= expense and SimData.has_power:
|
||||
SimData.budget -= expense
|
||||
SimData.expenses = expense
|
||||
|
||||
if SimData.has_power:
|
||||
var total_income = SimData.res_tax * income
|
||||
SimData.budget += total_income
|
||||
SimData.res_income = total_income
|
||||
|
||||
func _on_Zone_body_entered(body: Node):
|
||||
if SimData.has_power and can_grab == false:
|
||||
quarters.start()
|
||||
_animante_sprite()
|
||||
|
||||
func _on_Zone_body_exited(body: Node):
|
||||
quarters.stop()
|
||||
_animante_sprite(false)
|
||||
#func _grab_zone():
|
||||
# can_grab = true
|
||||
|
|
|
@ -17,6 +17,9 @@ var current_power_cap: int
|
|||
var prev_power_cap: int
|
||||
var has_power: bool
|
||||
|
||||
var res_tax: int = 5
|
||||
var res_income: int
|
||||
|
||||
var ticker_files: Array = [
|
||||
"adverts.json",
|
||||
"sammy.json"
|
||||
|
|
20
scripts/simtactics/has_power.gd
Normal file
20
scripts/simtactics/has_power.gd
Normal file
|
@ -0,0 +1,20 @@
|
|||
extends ConditionLeaf
|
||||
|
||||
export var cost: int = 10000
|
||||
export var income: int = 100
|
||||
export var expense: int = 0
|
||||
|
||||
func tick(actor, blackboard):
|
||||
if SimData.has_power:
|
||||
if SimData.budget >= expense:
|
||||
SimData.budget -= expense
|
||||
SimData.expenses = expense
|
||||
|
||||
if SimData.has_power:
|
||||
var total_income = SimData.res_tax * income
|
||||
SimData.budget += total_income
|
||||
SimData.res_income = total_income
|
||||
|
||||
return SUCCESS
|
||||
|
||||
return FAILURE
|
5
scripts/simtactics/turn_on.gd
Normal file
5
scripts/simtactics/turn_on.gd
Normal file
|
@ -0,0 +1,5 @@
|
|||
extends ConditionLeaf
|
||||
|
||||
func tick(actor, blackboard):
|
||||
SimData.has_power = true
|
||||
return RUNNING
|
18
scripts/simtactics/zone.gd
Normal file
18
scripts/simtactics/zone.gd
Normal file
|
@ -0,0 +1,18 @@
|
|||
extends ConditionLeaf
|
||||
|
||||
export var cost: int = 10000
|
||||
export var income: int = 100
|
||||
export var expense: int = 0
|
||||
|
||||
func tick(actor, blackboard):
|
||||
if SimData.has_power:
|
||||
if SimData.budget >= expense:
|
||||
SimData.budget -= expense
|
||||
SimData.expenses = expense
|
||||
|
||||
if SimData.has_power:
|
||||
var total_income = SimData.res_tax * income
|
||||
SimData.budget += total_income
|
||||
SimData.res_income = total_income
|
||||
|
||||
return RUNNING
|
|
@ -1,42 +1,42 @@
|
|||
extends Control
|
||||
|
||||
const TICKER_PATH = "res://json/ticker/"
|
||||
const FNN_LOGO = "res://assets/ticker/fnn.png"
|
||||
const CONFIG_FILE = "config.json"
|
||||
|
||||
onready var ticker_text = $Status/NewsBtn
|
||||
onready var ticker_box = $Windows/NewsWindow/News
|
||||
onready var ticker_window = $Windows/NewsWindow
|
||||
|
||||
var news_file: String = ""
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var all_news: Array = []
|
||||
var speices: Array = [
|
||||
"Cat",
|
||||
"Fennec",
|
||||
"Fox"
|
||||
]
|
||||
|
||||
var json_files: Array = []
|
||||
|
||||
func _load_json():
|
||||
var file = File.new()
|
||||
if file.file_exists(news_file):
|
||||
file.open(news_file, file.READ)
|
||||
var result = parse_json(file.get_as_text())
|
||||
return result
|
||||
|
||||
func _index_news():
|
||||
var news = _load_json()
|
||||
all_news.clear()
|
||||
all_news = news["ticker"]
|
||||
randomize()
|
||||
all_news.shuffle()
|
||||
|
||||
func _ready():
|
||||
ticker_window.window_title = JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "outlet")
|
||||
|
||||
_randomize_news(json_files)
|
||||
#const TICKER_PATH = "res://json/ticker/"
|
||||
#const FNN_LOGO = "res://assets/ticker/fnn.png"
|
||||
#const CONFIG_FILE = "config.json"
|
||||
#
|
||||
#onready var ticker_text = $Status/NewsBtn
|
||||
#onready var ticker_box = $Windows/NewsWindow/News
|
||||
#onready var ticker_window = $Windows/NewsWindow
|
||||
#
|
||||
#var news_file: String = ""
|
||||
#var rng = RandomNumberGenerator.new()
|
||||
#var all_news: Array = []
|
||||
#var speices: Array = [
|
||||
# "Cat",
|
||||
# "Fennec",
|
||||
# "Fox"
|
||||
#]
|
||||
#
|
||||
#var json_files: Array = []
|
||||
#
|
||||
#func _load_json():
|
||||
# var file = File.new()
|
||||
# if file.file_exists(news_file):
|
||||
# file.open(news_file, file.READ)
|
||||
# var result = parse_json(file.get_as_text())
|
||||
# return result
|
||||
#
|
||||
#func _index_news():
|
||||
# var news = _load_json()
|
||||
# all_news.clear()
|
||||
# all_news = news["ticker"]
|
||||
# randomize()
|
||||
# all_news.shuffle()
|
||||
#
|
||||
#func _ready():
|
||||
# ticker_window.window_title = JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "outlet")
|
||||
#
|
||||
# _randomize_news(json_files)
|
||||
|
||||
#func _process(delta):
|
||||
# var prev_json_Files = json_files
|
||||
|
@ -60,73 +60,64 @@ func _ready():
|
|||
# for files in city_life:
|
||||
# json_files.append(files)
|
||||
|
||||
func _array_check(list1, list2):
|
||||
for item in list1:
|
||||
if item in list2:
|
||||
return true
|
||||
|
||||
return false
|
||||
|
||||
func _start_alert(message):
|
||||
# if ticker_text.items.size() > 1:
|
||||
# ticker_text.clear()
|
||||
#func _array_check(list1, list2):
|
||||
# for item in list1:
|
||||
# if item in list2:
|
||||
# return true
|
||||
#
|
||||
# return false
|
||||
#
|
||||
#func _start_alert(message):
|
||||
## if ticker_text.items.size() > 1:
|
||||
## ticker_text.clear()
|
||||
##
|
||||
## SimData.on_alert = true
|
||||
## news_file = str(TICKER_PATH + "ticker_alerts.json")
|
||||
## ticker_text.add_item(all_news)
|
||||
#
|
||||
# pass
|
||||
#
|
||||
#func _randomize_news(files: Array):
|
||||
# if all_news == null:
|
||||
# json_files = JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "ticker_files")
|
||||
#
|
||||
# for file in files:
|
||||
# news_file = str(TICKER_PATH + file)
|
||||
# _load_json()
|
||||
# _index_news()
|
||||
#
|
||||
# rng.randomize()
|
||||
# randomize()
|
||||
# files.shuffle()
|
||||
#
|
||||
# var news_range = rng.randi_range(0, all_news.size() - 1)
|
||||
# var news_text: String = all_news[news_range]
|
||||
#
|
||||
# if "[competing_outlet]" in news_text:
|
||||
# news_text = news_text.replace("[competing_outlet]", JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "competing_outlet"))
|
||||
#
|
||||
# if "[outlet]" in news_text:
|
||||
# news_text = news_text.replace("[outlet]", JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "outlet"))
|
||||
#
|
||||
# if "[species]" in news_text:
|
||||
# speices.shuffle()
|
||||
# var speices_range = rng.randi_range(speices.size() - 1)
|
||||
# news_text = news_text.replace("[species]", speices[speices_range])
|
||||
#
|
||||
# if "[city]" in news_text:
|
||||
# news_text = news_text.replace("[city]", SimData.city_name)
|
||||
#
|
||||
# if "[mayor]" in news_text:
|
||||
# news_text = news_text.replace("[mayor]", SimData.mayor_name)
|
||||
#
|
||||
# # Prevent stack overflaw
|
||||
# if ticker_box.items.size() > 10:
|
||||
# ticker_box.clear()
|
||||
#
|
||||
# _randomize_news(json_files)
|
||||
# _add_news(news_text)
|
||||
#
|
||||
#func _add_news(news_item):
|
||||
# ticker_text.text = news_item
|
||||
# ticker_box.add_item(news_item)
|
||||
#
|
||||
# SimData.on_alert = true
|
||||
# news_file = str(TICKER_PATH + "ticker_alerts.json")
|
||||
# ticker_text.add_item(all_news)
|
||||
|
||||
pass
|
||||
|
||||
func _randomize_news(files: Array):
|
||||
if all_news == null:
|
||||
json_files = JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "ticker_files")
|
||||
|
||||
for file in files:
|
||||
news_file = str(TICKER_PATH + file)
|
||||
_load_json()
|
||||
_index_news()
|
||||
|
||||
rng.randomize()
|
||||
randomize()
|
||||
files.shuffle()
|
||||
|
||||
var news_range = rng.randi_range(0, all_news.size() - 1)
|
||||
var news_text: String = all_news[news_range]
|
||||
|
||||
if "[competing_outlet]" in news_text:
|
||||
news_text = news_text.replace("[competing_outlet]", JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "competing_outlet"))
|
||||
|
||||
if "[outlet]" in news_text:
|
||||
news_text = news_text.replace("[outlet]", JsonHelper.key_value(TICKER_PATH, CONFIG_FILE, "outlet"))
|
||||
|
||||
if "[species]" in news_text:
|
||||
speices.shuffle()
|
||||
var speices_range = rng.randi_range(speices.size() - 1)
|
||||
news_text = news_text.replace("[species]", speices[speices_range])
|
||||
|
||||
if "[city]" in news_text:
|
||||
news_text = news_text.replace("[city]", SimData.city_name)
|
||||
|
||||
if "[mayor]" in news_text:
|
||||
news_text = news_text.replace("[mayor]", SimData.mayor_name)
|
||||
|
||||
# Prevent stack overflaw
|
||||
if ticker_box.items.size() > 10:
|
||||
ticker_box.clear()
|
||||
|
||||
_randomize_news(json_files)
|
||||
_add_news(news_text)
|
||||
|
||||
func _add_news(news_item):
|
||||
ticker_text.text = news_item
|
||||
ticker_box.add_item(news_item)
|
||||
|
||||
func _on_NewsBtn_pressed():
|
||||
ticker_window.show()
|
||||
|
||||
func _on_RotateNews_timeout():
|
||||
rng.randomize()
|
||||
randomize()
|
||||
all_news.shuffle()
|
||||
json_files.shuffle()
|
||||
_randomize_news(json_files)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue