124 lines
3.2 KiB
GDScript
124 lines
3.2 KiB
GDScript
extends StaticBody
|
|
|
|
export(Color) var col1
|
|
export(Color) var col2
|
|
export(Color) var col3
|
|
export(Color) var col4
|
|
export(Color) var col5
|
|
|
|
onready var _lever = get_node("Lever") as StaticBody
|
|
onready var _light1 = get_node("Lights/Light1") as MeshInstance
|
|
onready var _light2 = get_node("Lights/Light2") as MeshInstance
|
|
onready var _light3 = get_node("Lights/Light3") as MeshInstance
|
|
onready var _out1 = get_node("IO Boxes/Output1") as MeshInstance
|
|
onready var _out2 = get_node("IO Boxes/Output2") as MeshInstance
|
|
onready var _out3 = get_node("IO Boxes/Output3") as MeshInstance
|
|
|
|
var _exit_box_num
|
|
var _req_exit_color : Color
|
|
var _out_colors : Array
|
|
var _out_boxes : Array
|
|
var _lights : Array
|
|
var _all_colors : Array
|
|
var _rng = RandomNumberGenerator.new()
|
|
var _is_running = false
|
|
|
|
# constant variables
|
|
const OUT_BOX_DEFAULT_COLOR = Color(0.4, 0.4, 0.4, 1)
|
|
const OUT_BOX_HIGHLIGHT_COLOR = Color(0.6, 0.6, 0.6, 1)
|
|
const NULL_COLOR = Color(0, 0, 0, 1)
|
|
|
|
|
|
func _ready():
|
|
_rng.randomize()
|
|
|
|
_out_boxes = [_out1, _out2, _out3]
|
|
_lights = [_light1, _light2, _light3]
|
|
_all_colors = [col1, col2, col3, col4, col5]
|
|
|
|
_lever.connect("start_machine", self, "_setup_next_combo")
|
|
|
|
var inputs = get_tree().get_nodes_in_group("InputBoxes")
|
|
var counter = 0
|
|
for i in inputs:
|
|
i.lever.connect("flow_changed", self, "_update_pipe_colors")
|
|
i.content_color = _all_colors[counter]
|
|
i.load_content_color()
|
|
counter+=1
|
|
|
|
var forks = get_tree().get_nodes_in_group("PipeForks")
|
|
for f in forks:
|
|
f.connect("flow_changed", self, "_update_pipe_colors")
|
|
|
|
|
|
func _update_pipe_colors():
|
|
var pipes = get_tree().get_nodes_in_group("Pipes")
|
|
|
|
for p in pipes:
|
|
p.update_content_color()
|
|
|
|
if _is_running and not _exit_box_num == null:
|
|
print(_exit_box_num)
|
|
var collider = _out_boxes[_exit_box_num].get_node("ExitCast").get_collider()
|
|
if collider.is_in_group("Pipes"):
|
|
var new_color = collider.content_color
|
|
if new_color != null:
|
|
if new_color == _req_exit_color:
|
|
_lever.blocked = false
|
|
_lever.flick()
|
|
_is_running = false
|
|
_reset_out_boxes()
|
|
print("Game Won!")
|
|
|
|
|
|
|
|
func _setup_next_combo():
|
|
_reset_out_boxes()
|
|
_out_colors.clear()
|
|
_req_exit_color = NULL_COLOR
|
|
|
|
_exit_box_num = _rng.randi()%3
|
|
|
|
_gen_next_col()
|
|
_gen_next_col()
|
|
_gen_next_col()
|
|
|
|
_set_exit_colors(_out_boxes[_exit_box_num])
|
|
_lever.blocked = true
|
|
_is_running = true
|
|
|
|
|
|
func _gen_next_col():
|
|
var next_col = _rng.randi()%5
|
|
while _out_colors.has(next_col):
|
|
next_col = _rng.randi()%5
|
|
_out_colors.append(next_col)
|
|
|
|
|
|
func _set_exit_colors(var box_path):
|
|
var material = SpatialMaterial.new()
|
|
material.albedo_color = OUT_BOX_HIGHLIGHT_COLOR
|
|
box_path.material_override = material
|
|
|
|
var counter = 0
|
|
for l in _lights:
|
|
var material2 = SpatialMaterial.new()
|
|
material2.albedo_color = _all_colors[_out_colors[counter]]
|
|
l.material_override = material2
|
|
|
|
_req_exit_color += material2.albedo_color / 3
|
|
|
|
counter+=1
|
|
|
|
|
|
func _reset_out_boxes():
|
|
var material = SpatialMaterial.new()
|
|
material.albedo_color = OUT_BOX_DEFAULT_COLOR
|
|
_out1.material_override = material
|
|
_out2.material_override = material
|
|
_out3.material_override = material
|
|
|
|
var material2 = SpatialMaterial.new()
|
|
_light1.material_override = material2
|
|
_light2.material_override = material2
|
|
_light3.material_override = material2 |