Compare commits

...

4 commits

Author SHA1 Message Date
d851d35cac wrap player position inside of loop size 2025-11-24 13:59:54 -03:00
b31313ed96 add room loop toggle signal 2025-11-24 13:59:07 -03:00
7d6e5321fa add loop size to room config 2025-11-24 13:58:46 -03:00
c16ec316a8 delete test tileset 2025-11-24 11:50:21 -03:00
6 changed files with 62 additions and 1055 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,9 @@
extends Node
@warning_ignore("unused_signal")
@warning_ignore_start("unused_signal")
## Emitted when the room has transitioned.
signal room_changed(previous_room: StringName, next_room: StringName, waypoint: Waypoint)
## Emitted when the room's loopable state is toggled.
signal room_loop_toggled(enabled: bool, loop_size: Rect2i)

View file

@ -13,6 +13,29 @@ var v_press_tick: int = 0 ## last time vertical axis was pressed
var speed_mult: float = 1.0
var room: Room
var x_min_wrap: float
var x_max_wrap: float
var y_min_wrap: float
var y_max_wrap: float
var wrapping: bool
func _ready() -> void:
# TODO: better way to get current room (signal maybe?)
room = get_parent() as Room
assert(room != null, "no room attached")
if room.config.loopable:
x_min_wrap = room.config.loop_size.position.x
x_max_wrap = room.config.loop_size.size.x
y_min_wrap = room.config.loop_size.position.y
y_max_wrap = room.config.loop_size.size.y
wrapping = true if room.config.loopable else false
EventBus.connect("room_loop_toggled", _on_loop_toggled)
func _input(event: InputEvent) -> void:
if event.is_action_pressed("move_left") or event.is_action_pressed("move_right"):
@ -28,13 +51,20 @@ func get_movement_vector() -> Vector2:
if absf(x_strength) < DEADZONE and absf(y_strength) < DEADZONE:
return Vector2.ZERO
if absf(x_strength) < DEADZONE:
return Vector2(0, signf(y_strength))
if absf(y_strength) < DEADZONE:
return Vector2(signf(x_strength), 0)
if absf(x_strength) < DEADZONE: return Vector2(0, signf(y_strength))
if absf(y_strength) < DEADZONE: return Vector2(signf(x_strength), 0)
# use most recent axis press
if h_press_tick > v_press_tick:
return Vector2(signf(x_strength), 0)
else:
return Vector2(0, signf(y_strength))
if h_press_tick > v_press_tick: return Vector2(signf(x_strength), 0)
else: return Vector2(0, signf(y_strength))
func _on_loop_toggled(enabled: bool, loop_size: Rect2i) -> void:
if enabled:
x_min_wrap = loop_size.position.x
x_max_wrap = loop_size.size.x
y_min_wrap = loop_size.position.y
y_max_wrap = loop_size.size.y
wrapping = true
else: wrapping = false

View file

@ -13,6 +13,10 @@ func _state_physics_update(_delta: float) -> void:
player.velocity = direction * player.max_speed * player.speed_mult
player.move_and_slide()
if player.wrapping:
player.position.x = wrapf(player.position.x, player.x_min_wrap, player.x_max_wrap)
player.position.y = wrapf(player.position.y, player.y_min_wrap, player.y_max_wrap)
#endregion
if watch_state([WALKING]): return

View file

@ -1,8 +1,14 @@
class_name RoomConfig extends Resource
#@export var size: Vector2i = Vector2i.ZERO
@export_group('Camera')
## Whether the camera will (initially) follow the player ot not.
@export var follow_player: bool = true
@export var loopable: bool = false
## Initial position of the camera.
@export var camera_position: Vector2i = Vector2i.ZERO
@export_group('Room Loop')
## Whether the room loops itself or not.
@export var loopable: bool = false
## Section of the room that will loop itself.
@export var loop_size: Rect2i = Rect2i(Vector2i.ZERO, Vector2i.ZERO)

View file

@ -1,9 +1,8 @@
[gd_scene load_steps=6 format=4 uid="uid://dcecget4734ra"]
[gd_scene load_steps=5 format=3 uid="uid://dcecget4734ra"]
[ext_resource type="PackedScene" uid="uid://bxhyxox662buj" path="res://scenes/room/room.tscn" id="1_tbqj1"]
[ext_resource type="Script" uid="uid://bamoq5wi0lkdy" path="res://scenes/room/room_config.gd" id="2_06s2n"]
[ext_resource type="TileSet" uid="uid://pq8rue1s8kgc" path="res://assets/world/wall_tileset.tres" id="3_06s2n"]
[ext_resource type="TileSet" uid="uid://t04s2nurgwro" path="res://assets/world/floor_tileset.tres" id="3_gs3vs"]
[ext_resource type="Texture2D" uid="uid://cl3pdverm8pok" path="res://assets/yuki.png" id="3_06s2n"]
[sub_resource type="Resource" id="Resource_t5fpq"]
script = ExtResource("2_06s2n")
@ -12,11 +11,7 @@ metadata/_custom_type_script = "uid://bamoq5wi0lkdy"
[node name="Room" instance=ExtResource("1_tbqj1")]
config = SubResource("Resource_t5fpq")
[node name="FloorTilemap" type="TileMapLayer" parent="." index="2"]
tile_map_data = PackedByteArray("AAAGAAkAAAAAAAIAAAAGAAgAAAAAAAEAAAAHAAYAAAABAAMAAAAGAAcAAAAAAAAAAAAIAAYAAAADAAIAAAAIAAUAAAABAAAAAAAJAAUAAAACAAMAAAAKAAUAAAACAAIAAAAKAAQAAAAAAAAAAAALAAUAAAADAAAAAAALAAYAAAAAAAIAAAALAAcAAQACAAMAAAAMAAcAAQACAAMAAAANAAcAAQADAAMAAAANAAYAAAABAAMAAAAOAAYAAAADAAIAAAAOAAUAAAABAAAAAAAPAAUAAAACAAMAAAAQAAUAAAADAAAAAAAQAAYAAAAAAAIAAAARAAcAAAAAAAAAAAARAAgAAAAAAAEAAAARAAkAAAAAAAIAAAARAAoAAgACAAMAAAAQAAoAAgABAAMAAAAQAAsAAQABAAAAAAAQAAwAAQADAAIAAAAQAA0AAgABAAAAAAAPAA0AAQADAAIAAAAOAA0AAQABAAMAAAANAA0AAAADAAMAAAAMAA0AAAACAAMAAAALAA0AAAABAAMAAAAKAA4AAgABAAMAAAAJAA4AAAAAAAMAAAAIAA0AAgABAAMAAAAHAA0AAQALAAMAAAAGAA0AAQAIAAMAAAAGAAwAAQAIAAAAAAAHAAwAAQAHAAEAAAAJAAsAAAABAAMAAAAIAAwAAAAAAAMAAAAMAAsAAgABAAMAAAALAAsAAAADAAMAAAAKAAsAAAACAAMAAAANAAsAAgACAAMAAAAOAAsAAgACAAMAAAAPAAsAAgADAAMAAAARAAsAAQACAAMAAAASAAsAAQADAAMAAAATAAsAAgABAAEAAAAVAAsAAgADAAMAAAAUAAsAAgACAAMAAAAWAAsAAAAAAAAAAAAWAAwAAAABAAEAAAAXAAwAAAACAAMAAAAYAAwAAAACAAAAAAAYAA0AAAAAAAIAAAAZAAwAAAACAAMAAAAaAAwAAAADAAIAAAAaAAsAAAAAAAAAAAAWAA0AAAAAAAEAAAAWAA4AAAAAAAEAAAAWAA8AAAAAAAIAAAAVABAAAQAEAAMAAAAVABIAAAAAAAMAAAAVABEAAQALAAMAAAAVABMAAgABAAMAAAAUABMAAAAAAAMAAAASABIAAAADAAMAAAATABMAAQADAAMAAAARABIAAAACAAMAAAAQABIAAAABAAMAAAAPABEAAAADAAMAAAAOABEAAAABAAAAAAAOABIAAAADAAIAAAANABIAAAACAAMAAAAMABIAAAABAAAAAAAMABMAAAAAAAIAAAALABMAAQADAAAAAAALABQAAQABAAIAAAALABUAAAABAAMAAAAMABUAAAACAAMAAAANABUAAAACAAMAAAAOABUAAAACAAMAAAAPABUAAAACAAMAAAAQABUAAAADAAMAAAARABQAAAABAAMAAAASABQAAAACAAMAAAATABQAAAADAAMAAAAWABMAAgADAAAAAAAXABMAAAABAAMAAAAYABMAAAACAAMAAAAZABMAAAADAAIAAAAZABIAAAABAAAAAAAaABIAAAACAAMAAAAbABIAAAAFAAMAAAAbABEAAAAIAAEAAAAcABEAAAALAAIAAAAcABIAAAAGAAMAAAAdABIAAAADAAAAAAAdABMAAAABAAIAAAAeABMAAAADAAMAAAAeABQAAgACAAMAAAAfABQAAgADAAIAAAAhABQAAAACAAMAAAAgABQAAAABAAMAAAAiABQAAAADAAMAAAAjABMAAAAAAAIAAAAjABIAAAAAAAEAAAAjABEAAAADAAAAAAAiABEAAAABAAIAAAAiABAAAAADAAAAAAAhABAAAAACAAMAAAAgABAAAAABAAMAAAAfABAAAgADAAAAAAAbABAAAAAIAAAAAAAcABAAAAAGAAAAAAAdABAAAAADAAMAAAAeABAAAgABAAIAAAAaAA8AAgACAAMAAAAZAA8AAgACAAMAAAAZAA4AAAAAAAMAAAAMABAAAQACAAMAAAANAA8AAQAAAAAAAAAOAA4AAgACAAMAAAAPAAwAAQABAAAAAAATAAoAAgADAAAAAAAUAAoAAQABAAMAAAAVAAoAAQADAAMAAAAVAAwAAQAAAAAAAAAVAA0AAQAAAAEAAAAVAA4AAQAAAAEAAAAVAA8AAQAAAAEAAAAUABEAAQAIAAMAAAAUABIAAgADAAMAAAATABIAAgABAAMAAAASABMAAQACAAMAAAARABMAAQACAAMAAAAQABMAAQABAAMAAAAPABQAAQADAAMAAAAOABQAAQACAAMAAAANABQAAQACAAMAAAAMABQAAQACAAMAAAAKABMAAQACAAMAAAAJABMAAQACAAMAAAAIABMAAQACAAMAAAAHABMAAQACAAMAAAAGABMAAQABAAIAAAAGABIAAQAAAAAAAAAFABEAAQAAAAIAAAAFABAAAQAAAAAAAAAFAA8AAgAIAAMAAAAGAA4AAgAKAAAAAAAHAAsAAQABAAEAAAAIAAsAAQADAAMAAAAJAAoAAQABAAMAAAAKAAoAAQACAAMAAAALAAoAAQACAAMAAAANAAoAAQADAAIAAAAMAAoAAQACAAMAAAANAAkAAQABAAAAAAAOAAkAAQADAAIAAAAOAAgAAQAAAAAAAAAKAAcAAQABAAMAAAAJAAgAAQADAAMAAAAIAAgAAQABAAAAAAAIAAkAAQAAAAIAAAAHAAoAAQAAAAAAAAAIAA4AAQAAAAMAAAAIAA8AAgACAAMAAAAJAA8AAgADAAMAAAALABAAAQABAAMAAAAKAA8AAQAAAAMAAAANABAAAQADAAIAAAAPABAAAgADAAIAAAAOABAAAgABAAMAAAASABAAAQABAAMAAAARABAAAgAAAAMAAAAQABAAAQAAAAMAAAAUABAAAQAFAAAAAAATABAAAQACAAMAAAAWABAAAQADAAMAAAAYABAAAgADAAIAAAAXABAAAgABAAAAAAAZABAAAQAAAAMAAAAbAA4AAQAAAAMAAAAcAA0AAQABAAMAAAAdAA0AAQADAAIAAAAdAAwAAQAAAAEAAAAdAAsAAQADAAAAAAAbAAoAAQAAAAMAAAAcAAsAAQABAAMAAAAYAAoAAgAJAAMAAAAZAAoAAgAGAAMAAAAaAAoAAgADAAMAAAAVAAkAAgACAAMAAAAWAAkAAgAFAAAAAAAXAAoAAgAJAAMAAAAUAAkAAgABAAMAAAASAAkAAQABAAMAAAATAAkAAQADAAMAAAAXABQAAgACAAMAAAAXABIAAgAAAAIAAAAXABEAAgAAAAEAAAAYAA8AAgABAAAAAAAbAA8AAgACAAMAAAAcAA8AAgACAAMAAAAdAA8AAgACAAMAAAAeAA8AAgADAAAAAAAfABEAAgAAAAEAAAAfABIAAgAAAAEAAAAfABMAAgAAAAEAAAAdABQAAgACAAMAAAAaABQAAgACAAMAAAAbABQAAgACAAMAAAAcABQAAgACAAMAAAAZABQAAgACAAMAAAAYABQAAgACAAMAAAAWABQAAgABAAIAAAASABEAAgAAAAMAAAAQAA8AAgALAAMAAAAPAA8AAgAEAAIAAAANAA4AAgACAAMAAAAMAA4AAgACAAMAAAALAA4AAgACAAMAAAAHAA8AAgAGAAMAAAAGAA8AAgAJAAMAAAAFAA4AAgAIAAAAAAALAAwAAgADAAMAAAAKAAwAAgABAAMAAAAJAA0AAgADAAMAAAAHAA4AAgALAAAAAAASAAoAAgACAAMAAAAXAAkAAgAKAAAAAAAYAAkAAgAKAAAAAAAZAAkAAgALAAAAAAAWAAoAAgAIAAMAAAATAAwAAgADAAIAAAASAAwAAgACAAMAAAARAAwAAgABAAAAAAARAA0AAgADAAIAAAAQAA4AAgAHAAEAAAAPAA4AAgAFAAAAAAA=")
tile_set = ExtResource("3_gs3vs")
collision_enabled = false
[node name="WallTilemap" type="TileMapLayer" parent="." index="3" groups=["wall"]]
tile_map_data = PackedByteArray("AAAHAAAAAAABAAMAAAAIAAAAAAADAAIAAAAIAP//AAABAAAAAAAJAP//AAACAAMAAAAKAP//AAACAAMAAAALAP//AAACAAMAAAAMAP//AAADAAMAAAANAAAAAAABAAMAAAAOAAAAAAACAAMAAAAPAAAAAAADAAAAAAAPAAEAAAAAAAIAAAAQAAIAAAAAAAAAAAAQAAMAAAAAAAEAAAAQAAQAAAADAAEAAAAQAAUAAAAAAAEAAAAQAAYAAAADAAIAAAAPAAYAAAABAAAAAAAPAAcAAAADAAIAAAAOAAcAAAABAAMAAAANAAgAAAADAAMAAAAMAAgAAAABAAAAAAAMAAkAAAADAAIAAAALAAkAAAACAAMAAAAKAAkAAAACAAMAAAAJAAkAAAABAAIAAAAJAAgAAAADAAAAAAAIAAgAAAACAAMAAAAHAAgAAAABAAIAAAAHAAcAAAADAAAAAAAGAAcAAAABAAIAAAAGAAYAAAADAAAAAAAFAAYAAAABAAIAAAAFAAUAAAAAAAEAAAAFAAQAAAADAAAAAAAEAAQAAAABAAIAAAAEAAMAAAADAAAAAAADAAMAAAABAAMAAAANAAMAAAAFAAAAAAAOAAMAAAAHAAEAAAAOAAQAAAAGAAMAAAANAAQAAAAEAAIAAAANAAUAAAAAAAIAAAAMAAMAAAABAAMAAAAOAAIAAAAAAAAAAAAPAAQAAAACAAMAAAA=")
tile_set = ExtResource("3_06s2n")
[node name="Sprite2D" type="Sprite2D" parent="." index="2"]
position = Vector2(232, 144)
texture = ExtResource("3_06s2n")
offset = Vector2(0, -50)