Compare commits

..

5 commits

Author SHA1 Message Date
bd628d669e add pause buttons 2025-11-19 18:10:59 -03:00
aaa2d76d37 null ball on level start 2025-11-19 18:10:51 -03:00
4fe3d252b5 level start zoom out before changing states 2025-11-19 17:49:22 -03:00
2d3df6bdca properly finish level 2025-11-19 17:06:47 -03:00
083a935833 move level state under level director scene 2025-11-19 16:57:27 -03:00
6 changed files with 105 additions and 25 deletions

View file

@ -11,8 +11,8 @@ var level: Level
func _ready() -> void:
await owner.ready
level = owner as Level
assert(level != null, "The LevelState state type must be used only in the level scene. It needs the owner to be a Level node.")
level = owner.owner as Level # ugly i know. im so sorry im so fucking sorry TODO: SAFER IMPLEMENTATION
assert(level != null, "The LevelState state type must be used only in the level scene. It needs the owner's parent to be a Level node.")
func _enter(_previous_state_path: String, _data: Dictionary = {}) -> void:

View file

@ -121,6 +121,16 @@ p2_power_hit={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194439,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
p1_pause={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
p2_pause={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194435,"key_label":0,"unicode":45,"location":0,"echo":false,"script":null)
]
}
[layer_names]

View file

@ -1,8 +1,14 @@
[gd_scene load_steps=2 format=3 uid="uid://4eo7g5abxolw"]
[gd_scene load_steps=3 format=3 uid="uid://4eo7g5abxolw"]
[ext_resource type="Script" uid="uid://bio2cjqps6kg1" path="res://scenes/level_director/level_director.gd" id="1_4q8ux"]
[ext_resource type="Script" uid="uid://dikxx4j1auywf" path="res://scenes/levels/states/level_starting.gd" id="2_ywjt3"]
[node name="LevelDirector" type="Node"]
[node name="LevelDirector" type="Node" node_paths=PackedStringArray("initial_state")]
process_mode = 3
script = ExtResource("1_4q8ux")
initial_state = NodePath("Starting")
metadata/_custom_type_script = "uid://dqjaxgmyxq3rx"
[node name="Starting" type="Node" parent="."]
script = ExtResource("2_ywjt3")
metadata/_custom_type_script = "uid://dioh6egp2x760"

52
scenes/levels/level1.tscn Normal file

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,9 @@
extends LevelState
var trans_tween: Tween
func _enter(_previous_state_path: String, _data: Dictionary = {"round": 0, "restart": false}) -> void:
get_tree().paused = true
assert((_data["round"] as int) in range(3), "round number is invalid")
@ -17,10 +20,6 @@ func _enter(_previous_state_path: String, _data: Dictionary = {"round": 0, "rest
level.scoreboard = Vector2i(0,0)
level.restarted = false
if level.current_round + 1 == 4:
finished.emit(FINISHING)
return
assert(
(level.player_1 != null and level.player_2 != null) or
(level.player_1 == null and level.player_2 == null),
@ -30,12 +29,24 @@ func _enter(_previous_state_path: String, _data: Dictionary = {"round": 0, "rest
if level.player_1 != null and level.player_2 != null:
level.player_1.queue_free()
level.player_2.queue_free()
if level.ball != null:
level.ball.queue_free()
assert(level.player_1 == null and level.player_2 == null, "players werent nulled")
assert(level.ball == null, "ball wasnt nulled")
level.current_round += 1
if level.current_round == 4:
finished.emit(FINISHING)
return
level.player_1 = _instantiate_player(1)
level.player_2 = _instantiate_player(2)
level.ball = _instantiate_ball()
_trans_zoom_out(level.ball.global_position, Vector2(4,4), 2)
func _instantiate_player(id: int) -> Player:
@ -62,3 +73,20 @@ func _instantiate_ball() -> Ball:
b.global_position = s.global_position
return b
func _trans_zoom_out(pos: Vector2, zoom_in: Vector2, duration: float = 1) -> void:
if trans_tween:
trans_tween.kill()
assert(trans_tween == null, "transgender tween wasnt nulled")
trans_tween = create_tween()
level.camera.global_position = pos
level.camera.zoom = zoom_in
trans_tween.tween_property(level.camera, "zoom", Vector2(1,1), duration).set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT)
trans_tween.tween_callback(func() -> void:
finished.emit(PLAYING)
trans_tween = null
)

View file

@ -1,27 +1,11 @@
[gd_scene load_steps=6 format=4 uid="uid://d3c6aioatcy20"]
[gd_scene load_steps=4 format=3 uid="uid://d3c6aioatcy20"]
[ext_resource type="TileSet" uid="uid://doja61ouvb77l" path="res://resources/tilesets/level.tres" id="1_uu6xs"]
[ext_resource type="PackedScene" uid="uid://642nm6c4mpxx" path="res://scenes/player/player.tscn" id="2_r0du0"]
[ext_resource type="PackedScene" uid="uid://c0kslsucl4xhy" path="res://scenes/tilemaps/block_tile_layer.tscn" id="2_tbgi4"]
[ext_resource type="PackedScene" uid="uid://cmgwv41ht3q4j" path="res://scenes/ball/ball.tscn" id="3_r0du0"]
[ext_resource type="PackedScene" uid="uid://7nljh05o8b8e" path="res://scenes/level_camera/level_camera_2d.tscn" id="4_jyhfs"]
[node name="Main" type="Node"]
[node name="FloorTilemap" type="TileMapLayer" parent="."]
tile_map_data = PackedByteArray("AAAEAAAAAgAAAAAAAAAEAAEAAgAAAAAAAAAEAAIAAgAAAAAAAAAEAAMAAgAAAAAAAAAEAAQAAgAAAAAAAAAEAAUAAgAAAAAAAAAEAAYAAgAAAAAAAAAEAAcAAgAAAAAAAAAEAAgAAgAAAAAAAAAEAAkAAgAAAAAAAAAEAAoAAgAAAAAAAAAEAAsAAgAAAAAAAAAEAAwAAgAAAAAAAAAEAA0AAgAAAAAAAAAEAA4AAgAAAAAAAAAFAAAAAgAAAAAAAAAFAAEAAgAAAAAAAAAFAAIAAgAAAAAAAAAFAAMAAgAAAAAAAAAFAAQAAgAAAAAAAAAFAAUAAgAAAAAAAAAFAAYAAgAAAAAAAAAFAAcAAgAAAAAAAAAFAAgAAgAAAAAAAAAFAAkAAgAAAAAAAAAFAAoAAgAAAAAAAAAFAAsAAgAAAAAAAAAFAAwAAgAAAAAAAAAFAA0AAgAAAAAAAAAFAA4AAgAAAAAAAAAGAAAAAgAAAAAAAAAGAAEAAgAAAAAAAAAGAAIAAgAAAAAAAAAGAAMAAgAAAAAAAAAGAAQAAgAAAAAAAAAGAAUAAgAAAAAAAAAGAAYAAgAAAAAAAAAGAAcAAgAAAAAAAAAGAAgAAgAAAAAAAAAGAAkAAgAAAAAAAAAGAAoAAgAAAAAAAAAGAAsAAgAAAAAAAAAGAAwAAgAAAAAAAAAGAA0AAgAAAAAAAAAGAA4AAgAAAAAAAAAHAAAAAgAAAAAAAAAHAAEAAgAAAAAAAAAHAAIAAgAAAAAAAAAHAAMAAgAAAAAAAAAHAAQAAgAAAAAAAAAHAAUAAgAAAAAAAAAHAAYAAgAAAAAAAAAHAAcAAgAAAAAAAAAHAAgAAgAAAAAAAAAHAAkAAgAAAAAAAAAHAAoAAgAAAAAAAAAHAAsAAgAAAAAAAAAHAAwAAgAAAAAAAAAHAA0AAgAAAAAAAAAHAA4AAgAAAAAAAAAIAAAAAgAAAAAAAAAIAAEAAgAAAAAAAAAIAAIAAgAAAAAAAAAIAAMAAgAAAAAAAAAIAAQAAgAAAAAAAAAIAAUAAgAAAAAAAAAIAAYAAgAAAAAAAAAIAAcAAgAAAAAAAAAIAAgAAgAAAAAAAAAIAAkAAgAAAAAAAAAIAAoAAgAAAAAAAAAIAAsAAgAAAAAAAAAIAAwAAgAAAAAAAAAIAA0AAgAAAAAAAAAIAA4AAgAAAAAAAAAJAAAAAgAAAAAAAAAJAAEAAgAAAAAAAAAJAAIAAgAAAAAAAAAJAAMAAgAAAAAAAAAJAAQAAgAAAAAAAAAJAAUAAgAAAAAAAAAJAAYAAgAAAAAAAAAJAAcAAgAAAAAAAAAJAAgAAgAAAAAAAAAJAAkAAgAAAAAAAAAJAAoAAgAAAAAAAAAJAAsAAgAAAAAAAAAJAAwAAgAAAAAAAAAJAA0AAgAAAAAAAAAJAA4AAgAAAAAAAAAKAAAAAgAAAAAAAAAKAAEAAgAAAAAAAAAKAAIAAgAAAAAAAAAKAAMAAgAAAAAAAAAKAAQAAgAAAAAAAAAKAAUAAgAAAAAAAAAKAAYAAgAAAAAAAAAKAAcAAgAAAAAAAAAKAAgAAgAAAAAAAAAKAAkAAgAAAAAAAAAKAAoAAgAAAAAAAAAKAAsAAgAAAAAAAAAKAAwAAgAAAAAAAAAKAA0AAgAAAAAAAAAKAA4AAgAAAAAAAAALAAAAAgAAAAAAAAALAAEAAgAAAAAAAAALAAIAAgAAAAAAAAALAAMAAgAAAAAAAAALAAQAAgAAAAAAAAALAAUAAgAAAAAAAAALAAYAAgAAAAAAAAALAAcAAgAAAAAAAAALAAgAAgAAAAAAAAALAAkAAgAAAAAAAAALAAoAAgAAAAAAAAALAAsAAgAAAAAAAAALAAwAAgAAAAAAAAALAA0AAgAAAAAAAAALAA4AAgAAAAAAAAAMAAAAAgAAAAAAAAAMAAEAAgAAAAAAAAAMAAIAAgAAAAAAAAAMAAMAAgAAAAAAAAAMAAQAAgAAAAAAAAAMAAUAAgAAAAAAAAAMAAYAAgAAAAAAAAAMAAcAAgAAAAAAAAAMAAgAAgAAAAAAAAAMAAkAAgAAAAAAAAAMAAoAAgAAAAAAAAAMAAsAAgAAAAAAAAAMAAwAAgAAAAAAAAAMAA0AAgAAAAAAAAAMAA4AAgAAAAAAAAANAAAAAgAAAAAAAAANAAEAAgAAAAAAAAANAAIAAgAAAAAAAAANAAMAAgAAAAAAAAANAAQAAgAAAAAAAAANAAUAAgAAAAAAAAANAAYAAgAAAAAAAAANAAcAAgAAAAAAAAANAAgAAgAAAAAAAAANAAkAAgAAAAAAAAANAAoAAgAAAAAAAAANAAsAAgAAAAAAAAANAAwAAgAAAAAAAAANAA0AAgAAAAAAAAANAA4AAgAAAAAAAAAOAAAAAgAAAAAAAAAOAAEAAgAAAAAAAAAOAAIAAgAAAAAAAAAOAAMAAgAAAAAAAAAOAAQAAgAAAAAAAAAOAAUAAgAAAAAAAAAOAAYAAgAAAAAAAAAOAAcAAgAAAAAAAAAOAAgAAgAAAAAAAAAOAAkAAgAAAAAAAAAOAAoAAgAAAAAAAAAOAAsAAgAAAAAAAAAOAAwAAgAAAAAAAAAOAA0AAgAAAAAAAAAOAA4AAgAAAAAAAAAPAAAAAgAAAAAAAAAPAAEAAgAAAAAAAAAPAAIAAgAAAAAAAAAPAAMAAgAAAAAAAAAPAAQAAgAAAAAAAAAPAAUAAgAAAAAAAAAPAAYAAgAAAAAAAAAPAAcAAgAAAAAAAAAPAAgAAgAAAAAAAAAPAAkAAgAAAAAAAAAPAAoAAgAAAAAAAAAPAAsAAgAAAAAAAAAPAAwAAgAAAAAAAAAPAA0AAgAAAAAAAAAPAA4AAgAAAAAAAAA=")
tile_set = ExtResource("1_uu6xs")
collision_enabled = false
metadata/_edit_lock_ = true
[node name="WallTilemap" type="TileMapLayer" parent="."]
tile_map_data = PackedByteArray("AAADAA0AAwAEAAIAAAADAAwAAwAEAAIAAAADAAsAAwAEAAIAAAADAAoAAwAEAAIAAAADAAkAAwAEAAIAAAADAAgAAwAEAAIAAAADAAcAAwAEAAIAAAADAAYAAwAEAAIAAAADAAUAAwAEAAIAAAADAAQAAwAEAAIAAAADAAMAAwAEAAIAAAADAAIAAwAEAAIAAAADAAEAAwAEAAIAAAAQAA0AAwAEAAIAAAAQAAwAAwAEAAIAAAAQAAsAAwAEAAIAAAAQAAoAAwAEAAIAAAAQAAkAAwAEAAIAAAAQAAgAAwAEAAIAAAAQAAcAAwAEAAIAAAAQAAYAAwAEAAIAAAAQAAUAAwAEAAIAAAAQAAQAAwAEAAIAAAAQAAMAAwAEAAIAAAAQAAIAAwAEAAIAAAAQAAEAAwAEAAIAAAADAAAAAwAEAAEAAAAQAAAAAwAEAAEAAAADAA4AAwAEAAMAAAAQAA4AAwAEAAMAAAAEAAoAAwAHAAQAAAAEAAsAAwAFAAQAAAAEAAwAAwAHAAAAAAAEAA0AAwAGAAUAAAAEAA4AAwAGAAcAAAAFAAsAAwAHAAQAAAAFAAwAAwAFAAQAAAAFAA0AAwAHAAUAAAAFAA4AAwAHAAcAAAAGAAwAAwAHAAQAAAAGAA0AAwAEAAEAAAAGAA4AAwAEAAMAAAANAAwAAwAHAAMAAAANAA0AAwAEAAEAAAANAA4AAwAEAAMAAAAOAAsAAwAHAAMAAAAOAAwAAwAGAAMAAAAOAA0AAwAHAAIAAAAOAA4AAwAGAAcAAAAPAAoAAwAHAAMAAAAPAAsAAwAGAAMAAAAPAAwAAwAEAAEAAAAPAA0AAwAEAAMAAAAPAA4AAwAHAAcAAAAFAAAAAwAGAAUAAAAGAAAAAwAHAAUAAAANAAAAAwAEAAEAAAAOAAAAAwAGAAAAAAAGAAIAAwAGAAQAAAAFAAMAAwAGAAQAAAAEAAQAAwAGAAQAAAANAAIAAwAFAAMAAAAOAAMAAwAFAAMAAAAPAAQAAwAFAAMAAAAOAAIAAwAGAAMAAAAPAAMAAwAGAAMAAAAFAAIAAwAFAAIAAAAEAAMAAwAFAAIAAAANAAEAAwAEAAMAAAAGAAEAAwAHAAIAAAAEAAEAAwAEAAQAAAAFAAEAAwAHAAcAAAAEAAAAAwAEAAAAAAAPAAIAAwAEAAQAAAAOAAEAAwAHAAAAAAAEAAIAAwAEAAUAAAAPAAEAAwAGAAMAAAAPAAAAAwAGAAMAAAAEAAcAAAAAAAAAAAAEAAYAAAAAAAAAAAAFAAYAAAAAAAAAAAAGAAYAAAAAAAAAAAAHAAYAAAAAAAAAAAAIAAYAAAAAAAAAAAAJAAYAAAAAAAAAAAAKAAYAAAAAAAAAAAALAAYAAAAAAAAAAAAMAAYAAAAAAAAAAAANAAYAAAAAAAAAAAAOAAYAAAAAAAAAAAAPAAYAAAAAAAAAAAAPAAcAAAAAAAAAAAAOAAcAAAAAAAAAAAANAAcAAAAAAAAAAAAMAAcAAAAAAAAAAAALAAcAAAAAAAAAAAAKAAcAAAAAAAAAAAAJAAcAAAAAAAAAAAAIAAcAAAAAAAAAAAAHAAcAAAAAAAAAAAAGAAcAAAAAAAAAAAAFAAcAAAAAAAAAAAA=")
tile_set = ExtResource("1_uu6xs")
metadata/_edit_lock_ = true
[node name="BlockTileLayer" parent="." instance=ExtResource("2_tbgi4")]
tile_map_data = PackedByteArray("AAAHAA0ABAAAAAcAAAAIAA0ABAAAAAcAAAAJAA0ABAAAAAcAAAAKAA0ABAAAAAcAAAALAA0ABAAAAAcAAAAMAA0ABAAAAAcAAAAHAAEABAAAAAcAAAAIAAEABAAAAAcAAAAJAAEABAAAAAcAAAAKAAEABAAAAAcAAAALAAEABAAAAAcAAAAMAAEABAAAAAcAAAA=")
[node name="Player1" parent="." instance=ExtResource("2_r0du0")]
position = Vector2(141, 184)