diff --git a/max-effort/Objects/bench_press.tscn b/max-effort/Objects/bench_press.tscn index 80e6fe5..ff5ee31 100644 --- a/max-effort/Objects/bench_press.tscn +++ b/max-effort/Objects/bench_press.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=5 format=3 uid="uid://dxq2510ywj1hy"] +[gd_scene load_steps=4 format=3 uid="uid://dxq2510ywj1hy"] [ext_resource type="PackedScene" uid="uid://dn8y3bgovnh4a" path="res://Objects/bench_press_stickman.tscn" id="2_0c1tm"] [ext_resource type="Texture2D" uid="uid://dsovna2tmb4o3" path="res://Sprites/bench.png" id="2_ky8t4"] @@ -9,14 +9,17 @@ [node name="System" type="BenchPressSystem" parent="."] [node name="Bench" type="Sprite2D" parent="."] -position = Vector2(11, 1) +z_index = 1 +position = Vector2(11, 128.5) scale = Vector2(2.086, 2.086) texture = ExtResource("2_ky8t4") [node name="BenchPressStickman" parent="." instance=ExtResource("2_0c1tm")] +position = Vector2(0, 127.5) [node name="Barbell" type="Sprite2D" parent="."] -position = Vector2(22, -5) +z_index = 1 +position = Vector2(22, 122.5) scale = Vector2(2.432, 2.432) texture = ExtResource("3_ky8t4") @@ -24,4 +27,4 @@ texture = ExtResource("3_ky8t4") player_anim = NodePath("../BenchPressStickman") barbell = NodePath("../Barbell") animation_name = "default" -bar_positions = Array[Vector2]([Vector2(19, -5), Vector2(19, -19), Vector2(21, -36), Vector2(21, -15), Vector2(23, 3), Vector2(22, 11), Vector2(22, -1), Vector2(22, -1)]) +bar_positions = Array[Vector2]([Vector2(19, 123), Vector2(19, 109), Vector2(21, 92), Vector2(21, 113), Vector2(23, 131), Vector2(22, 139), Vector2(22, 127), Vector2(22, 127)]) diff --git a/max-effort/Objects/bench_press_stickman.tscn b/max-effort/Objects/bench_press_stickman.tscn index 2475c72..3482d18 100644 --- a/max-effort/Objects/bench_press_stickman.tscn +++ b/max-effort/Objects/bench_press_stickman.tscn @@ -42,5 +42,6 @@ animations = [{ }] [node name="BenchPressStickman" type="AnimatedSprite2D"] +z_index = 1 sprite_frames = SubResource("SpriteFrames_edqll") speed_scale = 0.0 diff --git a/max-effort/Objects/deadlift.tscn b/max-effort/Objects/deadlift.tscn index 7519f08..adc54ad 100644 --- a/max-effort/Objects/deadlift.tscn +++ b/max-effort/Objects/deadlift.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=3 format=3 uid="uid://dx1k40qfioaas"] +[gd_scene load_steps=2 format=3 uid="uid://dx1k40qfioaas"] [ext_resource type="Texture2D" uid="uid://cbgn8aspf7oi0" path="res://Sprites/barbell.png" id="2_ltxro"] @@ -10,5 +10,6 @@ bar_visual = NodePath("../Barbell") end_pos = Vector2(0, -30) [node name="Barbell" type="Sprite2D" parent="."] +z_index = 1 scale = Vector2(2, 2) texture = ExtResource("2_ltxro") diff --git a/max-effort/Objects/hazard_animated.tscn b/max-effort/Objects/hazard_animated.tscn index 7306892..3074d47 100644 --- a/max-effort/Objects/hazard_animated.tscn +++ b/max-effort/Objects/hazard_animated.tscn @@ -4,6 +4,7 @@ anim_sprite = NodePath("AnimatedSprite2D") click_area = NodePath("Area2D") click_shape = NodePath("Area2D/CollisionShape2D") +z_index = 1 [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] diff --git a/max-effort/Scenes/main.tscn b/max-effort/Scenes/main.tscn index 4d06e4f..d3c8ddf 100644 --- a/max-effort/Scenes/main.tscn +++ b/max-effort/Scenes/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=3 uid="uid://xtm08af0e82g"] +[gd_scene load_steps=13 format=3 uid="uid://xtm08af0e82g"] [ext_resource type="Shader" uid="uid://dndm4jfifooyk" path="res://Shaders/TunnelVision.gdshader" id="1_jjgbg"] [ext_resource type="DayConfig" uid="uid://d30pwvrr7m72j" path="res://Resources/Day_Day1.tres" id="2_8gbba"] @@ -8,6 +8,12 @@ [ext_resource type="PackedScene" uid="uid://bqxc62tofqger" path="res://Objects/hazard_animated.tscn" id="4_21xkr"] [ext_resource type="DayConfig" uid="uid://b0j1f8h6tioaf" path="res://Resources/Day_Day2.tres" id="4_344ge"] [ext_resource type="HazardDef" uid="uid://xsxsa2m5ryjr" path="res://Resources/Hazard_Phone.tres" id="6_344ge"] +[ext_resource type="Texture2D" uid="uid://fulcxnac5453" path="res://Sprites/gym_bg.png" id="9_ynf5e"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_bo1nx"] +shader = ExtResource("1_jjgbg") +shader_parameter/vignette_intensity = 0.0 +shader_parameter/vignette_color = Color(0, 0, 0, 1) [sub_resource type="Curve" id="Curve_bo1nx"] _data = [Vector2(0, 0), 0.0, 1.4, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0] @@ -17,56 +23,19 @@ point_count = 2 max_tunnel_intensity = 0.7 vision_curve = SubResource("Curve_bo1nx") -[sub_resource type="ShaderMaterial" id="ShaderMaterial_bo1nx"] -shader = ExtResource("1_jjgbg") -shader_parameter/vignette_intensity = 0.0 -shader_parameter/vignette_color = Color(0, 0, 0, 1) - [node name="Main" type="Node"] -[node name="Systems" type="Node" parent="."] +[node name="CanvasLayer" type="CanvasLayer" parent="."] +layer = -10 -[node name="PlayerInputSystem" type="PlayerInputSystem" parent="Systems"] - -[node name="TunnelSystem" type="TunnelSystem" parent="Systems" node_paths=PackedStringArray("vignette_overlay")] -config = SubResource("TunnelConfig_8gbba") -vignette_overlay = NodePath("../../Ui/Vignette") - -[node name="SoundManager" type="SoundManager" parent="Systems"] -bank = ExtResource("2_21xkr") - -[node name="GameManager" type="GameManager" parent="Systems" node_paths=PackedStringArray("hazard_system", "minigame_container", "win_screen", "lose_screen")] -days = Array[DayConfig]([ExtResource("2_8gbba"), ExtResource("4_344ge")]) -hazard_system = NodePath("../HazardSystem") -minigame_container = NodePath("../../GameContainer") -win_screen = NodePath("../../Ui/Win") -lose_screen = NodePath("../../Ui/Lose") -main_menu_scene = ExtResource("4_6bp64") - -[node name="CameraShakeSystem" type="CameraShakeSystem" parent="Systems" node_paths=PackedStringArray("camera")] -camera = NodePath("../../Camera2D") -min_focus_for_shake = 0.7 - -[node name="HazardSystem" type="HazardSystem" parent="Systems" node_paths=PackedStringArray("spawn_locations")] -possible_hazards = Array[HazardDef]([ExtResource("3_kry3j"), ExtResource("6_344ge")]) -spawn_locations = [NodePath("../../HazardSpots/Right"), NodePath("../../HazardSpots/Left"), NodePath("../../HazardSpots/Top"), NodePath("../../HazardSpots/Down")] -hazard_prefab = ExtResource("4_21xkr") - -[node name="GameContainer" type="Node" parent="."] - -[node name="HazardSpots" type="Node2D" parent="."] - -[node name="Right" type="Marker2D" parent="HazardSpots"] -position = Vector2(502, 0) - -[node name="Top" type="Marker2D" parent="HazardSpots"] -position = Vector2(0, -228) - -[node name="Down" type="Marker2D" parent="HazardSpots"] -position = Vector2(0, 212) - -[node name="Left" type="Marker2D" parent="HazardSpots"] -position = Vector2(-500, 0) +[node name="BG" type="TextureRect" parent="CanvasLayer"] +z_index = -8 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("9_ynf5e") [node name="Ui" type="CanvasLayer" parent="."] @@ -77,7 +46,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -mouse_filter = 2 +mouse_filter = 1 [node name="LiftProgressBar" type="LiftProgressBar" parent="Ui"] anchors_preset = 12 @@ -166,6 +135,50 @@ text = "Restart" layout_mode = 2 text = "Go to menu" +[node name="Systems" type="Node" parent="."] + +[node name="PlayerInputSystem" type="PlayerInputSystem" parent="Systems"] + +[node name="TunnelSystem" type="TunnelSystem" parent="Systems" node_paths=PackedStringArray("vignette_overlay")] +config = SubResource("TunnelConfig_8gbba") +vignette_overlay = NodePath("../../Ui/Vignette") + +[node name="SoundManager" type="SoundManager" parent="Systems"] +bank = ExtResource("2_21xkr") + +[node name="GameManager" type="GameManager" parent="Systems" node_paths=PackedStringArray("hazard_system", "minigame_container", "win_screen", "lose_screen")] +days = Array[DayConfig]([ExtResource("2_8gbba"), ExtResource("4_344ge")]) +hazard_system = NodePath("../HazardSystem") +minigame_container = NodePath("../../GameContainer") +win_screen = NodePath("../../Ui/Win") +lose_screen = NodePath("../../Ui/Lose") +main_menu_scene = ExtResource("4_6bp64") + +[node name="CameraShakeSystem" type="CameraShakeSystem" parent="Systems" node_paths=PackedStringArray("camera")] +camera = NodePath("../../Camera2D") +min_focus_for_shake = 0.7 + +[node name="HazardSystem" type="HazardSystem" parent="Systems" node_paths=PackedStringArray("spawn_locations")] +possible_hazards = Array[HazardDef]([ExtResource("3_kry3j"), ExtResource("6_344ge")]) +spawn_locations = [NodePath("../../HazardSpots/Right"), NodePath("../../HazardSpots/Left"), NodePath("../../HazardSpots/Top"), NodePath("../../HazardSpots/Down")] +hazard_prefab = ExtResource("4_21xkr") + +[node name="GameContainer" type="Node" parent="."] + +[node name="HazardSpots" type="Node2D" parent="."] + +[node name="Right" type="Marker2D" parent="HazardSpots"] +position = Vector2(502, 0) + +[node name="Top" type="Marker2D" parent="HazardSpots"] +position = Vector2(0, -228) + +[node name="Down" type="Marker2D" parent="HazardSpots"] +position = Vector2(0, 212) + +[node name="Left" type="Marker2D" parent="HazardSpots"] +position = Vector2(-500, 0) + [node name="Camera2D" type="Camera2D" parent="."] [connection signal="pressed" from="Ui/Win/MarginContainer/VBoxContainer/Next day" to="Systems/GameManager" method="on_next_day_pressed"] diff --git a/max-effort/Sprites/gym_bg.kra b/max-effort/Sprites/gym_bg.kra new file mode 100644 index 0000000..d1b9dae Binary files /dev/null and b/max-effort/Sprites/gym_bg.kra differ diff --git a/max-effort/Sprites/gym_bg.png b/max-effort/Sprites/gym_bg.png new file mode 100644 index 0000000..a659060 Binary files /dev/null and b/max-effort/Sprites/gym_bg.png differ diff --git a/max-effort/Sprites/gym_bg.png.import b/max-effort/Sprites/gym_bg.png.import new file mode 100644 index 0000000..e443334 --- /dev/null +++ b/max-effort/Sprites/gym_bg.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://fulcxnac5453" +path="res://.godot/imported/gym_bg.png-d2f4fcd719f5f9e1da9e916b8624c185.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/gym_bg.png" +dest_files=["res://.godot/imported/gym_bg.png-d2f4fcd719f5f9e1da9e916b8624c185.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/rust/src/systems/deadlift_system.rs b/rust/src/systems/deadlift_system.rs index a3c1f1e..b0f480c 100644 --- a/rust/src/systems/deadlift_system.rs +++ b/rust/src/systems/deadlift_system.rs @@ -21,11 +21,15 @@ pub struct DeadliftSystem { start_pos: Vector2, #[export] end_pos: Vector2, + #[export] + grace_duration: f32, current_bar_height: f32, hold_timer: f32, is_lift_complete: bool, active_hazard_count: i32, + grace_timer: f32, + is_lifting: bool, event_bus: Option>, base: Base, @@ -44,6 +48,9 @@ impl INode for DeadliftSystem { bar_visual: None, start_pos: Vector2::ZERO, end_pos: Vector2::ZERO, + grace_duration: 1.5, + grace_timer: 1.5, + is_lifting: false, current_bar_height: 0.0, hold_timer: 0.0, @@ -74,7 +81,13 @@ impl INode for DeadliftSystem { &self.base().callable("on_lift_completed"), ); + bus.connect( + consts::FOCUS_RELEASED, + &self.base().callable("on_focus_released"), + ); + self.event_bus = Some(bus); + self.grace_timer = self.grace_duration; } fn process(&mut self, delta: f64) { @@ -89,6 +102,22 @@ impl INode for DeadliftSystem { let dt = delta as f32; + if !self.is_lifting && self.active_hazard_count > 0 { + self.grace_timer -= dt; + + if self.grace_timer <= 0.0 { + godot_print!("Deadlift Failed: Dropped bar due to hazards!"); + + self.current_bar_height = 0.0; + + bus.clone().bind_mut().publish_lift_completed(false); + self.is_lift_complete = true; + return; + } + } else { + self.grace_timer = self.grace_duration; + } + if self.current_bar_height > 0.0 { self.current_bar_height -= self.gravity * dt; self.current_bar_height = self.current_bar_height.max(0.0); @@ -131,6 +160,12 @@ impl DeadliftSystem { return; } + self.is_lifting = true; + + if self.active_hazard_count > 0 { + return; + } + self.current_bar_height += self.power_per_click * delta; self.current_bar_height = self.current_bar_height.min(self.bar_height); } @@ -152,4 +187,9 @@ impl DeadliftSystem { self.active_hazard_count = 0; } } + + #[func] + fn on_focus_released(&mut self) { + self.is_lifting = false; + } }