diff --git a/GUI.gd b/GUI.gd index a1a0362..4b95783 100644 --- a/GUI.gd +++ b/GUI.gd @@ -26,11 +26,9 @@ func _draw(): draw_texture(cursor, pos1, Color.yellow) if p1_s > 0: - var mouse_pos = get_viewport().get_mouse_position() - if $Hotbar.get_rect().has_point(mouse_pos): - return - mouse_pos = Vector2(floor(mouse_pos.x/8)*8, floor(mouse_pos.y/8)*8) - draw_texture(cursor_sprites[p1_s], mouse_pos, Color(0.75, 0.75, 0.75, 0.75)) + var mouse_pos = get_parent().get_cursor_snapped_position() + if mouse_pos.x >= 0: # Not much point checking y too + draw_texture(cursor_sprites[p1_s], mouse_pos, Color(0.75, 0.75, 0.75, 0.75)) func _input(event): diff --git a/GameoverSplash.tscn b/GameoverSplash.tscn new file mode 100644 index 0000000..25568db --- /dev/null +++ b/GameoverSplash.tscn @@ -0,0 +1,229 @@ +[gd_scene load_steps=24 format=2] + +[ext_resource path="res://FranticFactoryLogo.png" type="Texture" id=1] +[ext_resource path="res://assets/UI_Start_Button.tres" type="DynamicFont" id=2] +[ext_resource path="res://assets/styles/MainSplashButton.tres" type="StyleBox" id=3] +[ext_resource path="res://assets/styles/MainSplashButtonYellow.tres" type="StyleBox" id=4] +[ext_resource path="res://assets/styles/MainSplashButtonBlack.tres" type="StyleBox" id=5] +[ext_resource path="res://MainSplash.gd" type="Script" id=6] +[ext_resource path="res://assets/UI_Youdied.tres" type="DynamicFont" id=7] + +[sub_resource type="VisualShaderNodeInput" id=1] +input_name = "color" + +[sub_resource type="VisualShaderNodeColorOp" id=2] +output_port_for_preview = 0 +operator = 2 + +[sub_resource type="VisualShaderNodeScalarFunc" id=3] +output_port_for_preview = 0 +function = 0 + +[sub_resource type="VisualShaderNodeScalarOp" id=4] + +[sub_resource type="VisualShaderNodeScalarFunc" id=5] +output_port_for_preview = 0 +function = 12 + +[sub_resource type="VisualShaderNodeScalarOp" id=6] +default_input_values = [ 0, 0.0, 1, 0.15708 ] +operator = 2 + +[sub_resource type="VisualShaderNodeInput" id=7] +input_name = "time" + +[sub_resource type="VisualShaderNodeInput" id=8] +input_name = "screen_uv" + +[sub_resource type="VisualShaderNodeScalarOp" id=9] +operator = 1 + +[sub_resource type="VisualShaderNodeVectorDecompose" id=10] + +[sub_resource type="VisualShaderNodeScalarOp" id=11] + +[sub_resource type="VisualShaderNodeScalarFunc" id=12] +function = 17 + +[sub_resource type="VisualShaderNodeScalarOp" id=13] +output_port_for_preview = 0 +default_input_values = [ 0, 0.0, 1, 0.33 ] +operator = 9 + +[sub_resource type="VisualShaderNodeScalarOp" id=14] +default_input_values = [ 0, 0.0, 1, 20.0 ] +operator = 2 + +[sub_resource type="VisualShader" id=15] +code = "shader_type canvas_item; + + + +void vertex() { +// Output:0 + +} + +void fragment() { +// Input:10 + vec3 n_out10p0 = COLOR.rgb; + +// Input:3 + vec3 n_out3p0 = vec3(SCREEN_UV, 0.0); + +// VectorDecompose:5 + float n_out5p0 = n_out3p0.x; + float n_out5p1 = n_out3p0.y; + float n_out5p2 = n_out3p0.z; + +// ScalarOp:4 + float n_out4p0 = n_out5p0 - n_out5p1; + +// ScalarOp:9 + float n_in9p1 = 20.00000; + float n_out9p0 = n_out4p0 * n_in9p1; + +// Input:2 + float n_out2p0 = TIME; + +// ScalarOp:15 + float n_in15p1 = 0.15708; + float n_out15p0 = n_out2p0 * n_in15p1; + +// ScalarFunc:12 + float n_out12p0 = sin(n_out15p0); + +// ScalarOp:13 + float n_out13p0 = n_out2p0 + n_out12p0; + +// ScalarOp:6 + float n_out6p0 = n_out9p0 + n_out13p0; + +// ScalarFunc:7 + float n_out7p0 = fract(n_out6p0); + +// ScalarFunc:14 + float n_out14p0 = abs(n_out12p0); + +// ScalarOp:8 + float n_out8p0 = step(n_out7p0, n_out14p0); + +// ColorOp:11 + vec3 n_out11p0 = min(n_out10p0, vec3(n_out8p0)); + +// Output:0 + COLOR.rgb = n_out11p0; + +} + +void light() { +// Output:0 + +} +" +mode = 1 +flags/light_only = false +nodes/fragment/0/position = Vector2( 1120, 20 ) +nodes/fragment/2/node = SubResource( 7 ) +nodes/fragment/2/position = Vector2( 20, 220 ) +nodes/fragment/3/node = SubResource( 8 ) +nodes/fragment/3/position = Vector2( 0, 60 ) +nodes/fragment/4/node = SubResource( 9 ) +nodes/fragment/4/position = Vector2( 220, 40 ) +nodes/fragment/5/node = SubResource( 10 ) +nodes/fragment/5/position = Vector2( 0, 120 ) +nodes/fragment/6/node = SubResource( 11 ) +nodes/fragment/6/position = Vector2( 500, 160 ) +nodes/fragment/7/node = SubResource( 12 ) +nodes/fragment/7/position = Vector2( 620, 80 ) +nodes/fragment/8/node = SubResource( 13 ) +nodes/fragment/8/position = Vector2( 800, 80 ) +nodes/fragment/9/node = SubResource( 14 ) +nodes/fragment/9/position = Vector2( 380, 40 ) +nodes/fragment/10/node = SubResource( 1 ) +nodes/fragment/10/position = Vector2( 780, 20 ) +nodes/fragment/11/node = SubResource( 2 ) +nodes/fragment/11/position = Vector2( 960, 20 ) +nodes/fragment/12/node = SubResource( 3 ) +nodes/fragment/12/position = Vector2( 180, 300 ) +nodes/fragment/13/node = SubResource( 4 ) +nodes/fragment/13/position = Vector2( 320, 180 ) +nodes/fragment/14/node = SubResource( 5 ) +nodes/fragment/14/position = Vector2( 360, 320 ) +nodes/fragment/15/node = SubResource( 6 ) +nodes/fragment/15/position = Vector2( 20, 280 ) +nodes/fragment/connections = PoolIntArray( 5, 0, 4, 0, 5, 1, 4, 1, 6, 0, 7, 0, 7, 0, 8, 0, 4, 0, 9, 0, 10, 0, 11, 0, 8, 0, 11, 1, 11, 0, 0, 0, 3, 0, 5, 0, 2, 0, 13, 0, 9, 0, 6, 0, 13, 0, 6, 1, 12, 0, 14, 0, 14, 0, 8, 1, 12, 0, 13, 1, 15, 0, 12, 0, 2, 0, 15, 0 ) + +[sub_resource type="ShaderMaterial" id=16] +shader = SubResource( 15 ) + +[node name="MainSplash" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource( 6 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="ColorRect" type="ColorRect" parent="."] +material = SubResource( 16 ) +anchor_right = 1.0 +anchor_bottom = 1.0 +color = Color( 1, 0, 0, 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="MainLogo" type="TextureRect" parent="."] +modulate = Color( 1, 1, 1, 0.486275 ) +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +texture = ExtResource( 1 ) +expand = true +stretch_mode = 6 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="StartButton" type="Button" parent="."] +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +margin_left = -50.0 +margin_top = -40.0 +margin_right = 50.0 +margin_bottom = -10.0 +focus_mode = 0 +custom_styles/hover = ExtResource( 3 ) +custom_styles/pressed = ExtResource( 4 ) +custom_styles/normal = ExtResource( 5 ) +custom_fonts/font = ExtResource( 2 ) +shortcut_in_tooltip = false +text = "Restart" +__meta__ = { +"_edit_lock_": true, +"_edit_use_anchors_": false +} + +[node name="Label" type="Label" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_vertical = 1 +custom_fonts/font = ExtResource( 7 ) +custom_colors/font_color = Color( 0, 0, 0, 1 ) +text = "A machine overheated +You died" +align = 1 +valign = 1 +[connection signal="pressed" from="StartButton" to="." method="_on_StartButton_pressed"] diff --git a/Main.gd b/Main.gd index 0eab671..2597379 100644 --- a/Main.gd +++ b/Main.gd @@ -25,26 +25,45 @@ func update_cursor(size): var game_starting_tween = null func _on_MainSplash_start_pressed(): - if not game_starting_tween: + if (not game_starting_tween) and splash: start_game() +onready var splash = $"GUI/MainSplash" +var map = null const splash_scroll_time = 0.67 func start_game(): game_starting_tween = Tween.new() add_child(game_starting_tween) - game_starting_tween.interpolate_property($"GUI/MainSplash", "anchor_top", 0, 1, splash_scroll_time) - game_starting_tween.interpolate_property($"GUI/MainSplash", "anchor_bottom", 1, 2, splash_scroll_time) + game_starting_tween.interpolate_property(splash, "anchor_top", 0, 1, splash_scroll_time) + game_starting_tween.interpolate_property(splash, "anchor_bottom", 1, 2, splash_scroll_time) game_starting_tween.interpolate_property($"GUI/Hotbar", "anchor_top", 2, 1, splash_scroll_time) game_starting_tween.interpolate_property($"GUI/Hotbar", "anchor_bottom", 2, 1, splash_scroll_time) game_starting_tween.start() var timer = get_tree().create_timer(splash_scroll_time) timer.connect("timeout", self, "remove_splash") - add_child_below_node($bgm, map1.instance()) + map = map1.instance() + add_child_below_node($bgm, map) func remove_splash(): remove_child(game_starting_tween) game_starting_tween.queue_free() game_starting_tween = null - var splash = $"GUI/MainSplash" $GUI.remove_child(splash) splash.queue_free() + splash = null + + +func get_cursor_snapped_position(): + var mouse_pos = get_viewport().get_mouse_position() + if $"GUI/Hotbar".get_rect().has_point(mouse_pos): + return Vector2(-1, -1) + return Vector2(floor(mouse_pos.x/8)*8, floor(mouse_pos.y/8)*8) + +var gameover_splash = preload("res://GameoverSplash.tscn") +func game_over(): + splash = gameover_splash.instance() + $GUI.add_child(splash) + splash.connect("start_pressed", self, "_on_MainSplash_start_pressed") + remove_child(map) + map.queue_free() + map = null diff --git a/assets/UI_Youdied.tres b/assets/UI_Youdied.tres new file mode 100644 index 0000000..15b4373 --- /dev/null +++ b/assets/UI_Youdied.tres @@ -0,0 +1,9 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://assets/NotoSans.tres" type="DynamicFontData" id=1] + +[resource] +size = 40 +outline_size = 2 +outline_color = Color( 1, 1, 0, 1 ) +font_data = ExtResource( 1 ) diff --git a/machine.gd b/machine.gd index a0a298a..715b62b 100644 --- a/machine.gd +++ b/machine.gd @@ -67,6 +67,8 @@ func _process(delta): return self.working = false idle_time += delta + if idle_time >= max_idle_time: + $"/root/Main".game_over() var overspeed = clamp(floor(idle_time/2)*2, 1, 8) $sprite.material.set_shader_param('rps', overspeed*anim_speed) else: