Compare commits
5 Commits
master
...
ba71d5e517
Author | SHA1 | Date |
---|---|---|
Manu | ba71d5e517 | |
Manu | 946659aebb | |
Manu | fae33fd00f | |
Manu | 8ff5461763 | |
Manu | 2766390b8f |
|
@ -1,8 +1,11 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://Textures/kb-turbo.png" type="Texture" id=1]
|
||||
[ext_resource path="res://Scenes/Level.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://Scenes/End.tscn" type="PackedScene" id=3]
|
||||
[ext_resource path="res://Music/soundtrack_lead_3.mp3" type="AudioStream" id=4]
|
||||
[ext_resource path="res://Music/soundtrack_drums_3.mp3" type="AudioStream" id=5]
|
||||
[ext_resource path="res://Music/soundtrack_bass_3.mp3" type="AudioStream" id=6]
|
||||
|
||||
[node name="Node2D2" type="Node2D"]
|
||||
|
||||
|
@ -39,9 +42,18 @@ reservoir = 8
|
|||
[node name="Stairs" parent="Floor" index="7"]
|
||||
position = Vector2( 640, 880 )
|
||||
|
||||
[node name="Drum" parent="Floor" index="8"]
|
||||
stream = ExtResource( 5 )
|
||||
|
||||
[node name="Bass" parent="Floor" index="9"]
|
||||
stream = ExtResource( 6 )
|
||||
|
||||
[node name="Reservoir" parent="Floor" index="10"]
|
||||
frame = 8
|
||||
|
||||
[node name="Lead" parent="Floor" index="11"]
|
||||
stream = ExtResource( 4 )
|
||||
|
||||
[node name="Controls" parent="Floor" index="12"]
|
||||
texture = ExtResource( 1 )
|
||||
turbo = true
|
||||
|
|
|
@ -40,6 +40,9 @@ rest = 0.15
|
|||
[node name="Stairs" parent="Floor" index="7"]
|
||||
position = Vector2( 560, 560 )
|
||||
|
||||
[node name="Downstairs" parent="Floor/Stairs" index="0"]
|
||||
z_index = 1
|
||||
|
||||
[node name="Drum" parent="Floor" index="8"]
|
||||
stream = ExtResource( 6 )
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ position = Vector2( -1.68164, -16.8177 )
|
|||
next_level = ExtResource( 6 )
|
||||
start_x = 8
|
||||
start_y = 7
|
||||
stairs_x = 6
|
||||
stairs_y = 6
|
||||
stairs_x = 11
|
||||
stairs_y = 9
|
||||
|
||||
[node name="Floor" parent="Floor" index="0"]
|
||||
modulate = Color( 0.552941, 0.603922, 0.917647, 1 )
|
||||
|
@ -45,7 +45,7 @@ rest = 0.15
|
|||
reservoir = 7
|
||||
|
||||
[node name="Stairs" parent="Floor" index="7"]
|
||||
position = Vector2( 480, 480 )
|
||||
position = Vector2( 960, 720 )
|
||||
|
||||
[node name="Drum" parent="Floor" index="8"]
|
||||
stream = ExtResource( 5 )
|
||||
|
|
|
@ -43,9 +43,11 @@ position = Vector2( 0, -16 )
|
|||
shape = SubResource( 1 )
|
||||
|
||||
[node name="FootSteps" type="AudioStreamPlayer" parent="."]
|
||||
volume_db = -4.0
|
||||
bus = "sfx"
|
||||
script = ExtResource( 2 )
|
||||
streams = [ ExtResource( 4 ), ExtResource( 8 ), ExtResource( 9 ), ExtResource( 15 ), ExtResource( 10 ), ExtResource( 11 ), ExtResource( 12 ), ExtResource( 6 ), ExtResource( 16 ), ExtResource( 7 ), ExtResource( 18 ), ExtResource( 17 ), ExtResource( 13 ), ExtResource( 14 ), ExtResource( 5 ) ]
|
||||
random_strategy = 2
|
||||
|
||||
[node name="Deny" type="AudioStreamPlayer" parent="."]
|
||||
stream = ExtResource( 19 )
|
||||
|
|
|
@ -21,37 +21,19 @@ export var stairs_x := 0
|
|||
export var stairs_y := 0
|
||||
|
||||
var completed := false
|
||||
var saved_steps := []
|
||||
|
||||
class StepSnap:
|
||||
var waste := {}
|
||||
var reservoir : int
|
||||
var player_position : Vector2
|
||||
var player_direction : Player.Movement
|
||||
|
||||
static func snap(var l : Level) -> StepSnap:
|
||||
var step = StepSnap.new()
|
||||
for w in l._waste.get_used_cells():
|
||||
step.waste[w] = l._waste.get_cellv(w)
|
||||
step.reservoir = l._player.reservoir
|
||||
step.player_position = l._player.tile_position
|
||||
step.player_direction = l._player.current_direction
|
||||
return step
|
||||
|
||||
func restore(var l : Level) -> void:
|
||||
l._waste.clear()
|
||||
for w in self.waste:
|
||||
l._waste.set_cellv(w, self.waste[w])
|
||||
l._player.reservoir = self.reservoir
|
||||
l._player.tile_position = self.player_position
|
||||
l._player.current_direction = self.player_direction
|
||||
|
||||
var initial_state
|
||||
|
||||
func _ready():
|
||||
_player.level = self
|
||||
_player.tile_position = Vector2(start_x, start_y)
|
||||
_stairs.visible = false
|
||||
_stairs.modulate = Color.white
|
||||
initial_state = {
|
||||
waste = {},
|
||||
reservoir = _player.reservoir
|
||||
}
|
||||
for w in _waste.get_used_cells():
|
||||
initial_state.waste[w] = _waste.get_cellv(w)
|
||||
|
||||
func _process(_delta):
|
||||
|
||||
|
@ -163,8 +145,6 @@ class Tile:
|
|||
func dash(var direction: Vector2, var tile_limit = INF, var waste_limit = INF) -> Tile:
|
||||
var waste_line = get_waste_line(direction, true, tile_limit)
|
||||
waste_line.resize(min(waste_limit, waste_line.size()))
|
||||
if not waste_line.empty():
|
||||
level.take_snap()
|
||||
for tile in waste_line:
|
||||
tile.set_tile(level._waste, -1)
|
||||
level.check_completed()
|
||||
|
@ -204,26 +184,29 @@ func waste_sound(var number :int):
|
|||
func player_initial_position():
|
||||
_player.level = self
|
||||
_player.tile_position = Vector2(start_x, start_y)
|
||||
_player.update_position()
|
||||
if not Engine.editor_hint:
|
||||
_player.current_direction = _player.movements.back()
|
||||
_player.update_animation()
|
||||
|
||||
func take_snap():
|
||||
if not completed:
|
||||
saved_steps.push_back(StepSnap.snap(self))
|
||||
|
||||
func undo():
|
||||
if not completed and not saved_steps.empty():
|
||||
saved_steps.pop_back().restore(self)
|
||||
|
||||
func reset():
|
||||
if not completed and not saved_steps.empty():
|
||||
saved_steps.front().restore(self)
|
||||
saved_steps.clear()
|
||||
if not completed:
|
||||
|
||||
_waste.clear()
|
||||
for w in initial_state.waste:
|
||||
_waste.set_cellv(w, initial_state.waste[w])
|
||||
|
||||
player_initial_position()
|
||||
|
||||
_player.reservoir = initial_state.reservoir
|
||||
update_reservoir()
|
||||
|
||||
func check_player_stairs():
|
||||
if get_tile_v(_player.tile_position).is_stairs():
|
||||
_player.tile_position = Vector2(stairs_x - 1, stairs_y - 2)
|
||||
_player.current_direction = _player.movements.back()
|
||||
_player.update_position()
|
||||
_player.update_animation()
|
||||
|
||||
func end_of_level():
|
||||
_player.visible = false
|
||||
|
|
|
@ -12,7 +12,7 @@ var level
|
|||
onready var footsteps = $FootSteps
|
||||
onready var deny = $Deny
|
||||
|
||||
var tile_position := Vector2(0,0) setget update_position
|
||||
var tile_position := Vector2(0,0)
|
||||
var last_move_time := 0.0
|
||||
var step_count := 0
|
||||
var stepped := false
|
||||
|
@ -56,7 +56,7 @@ onready var sweeps = [
|
|||
|
||||
var movement_queue = []
|
||||
var current_target = null
|
||||
var current_direction : Movement = movements.back() setget update_animation
|
||||
var current_direction : Movement = movements.back()
|
||||
onready var sprite = $AnimatedSprite as AnimatedSprite
|
||||
|
||||
func _process(delta):
|
||||
|
@ -64,11 +64,9 @@ func _process(delta):
|
|||
if Engine.editor_hint:
|
||||
return
|
||||
|
||||
if Input.is_action_just_pressed("reset"):
|
||||
if Input.is_action_pressed("reset"):
|
||||
level.reset()
|
||||
|
||||
if Input.is_action_just_pressed("undo"):
|
||||
level.undo()
|
||||
return
|
||||
|
||||
if (last_move_time + rest) * 1000 < OS.get_ticks_msec():
|
||||
for movement in movements:
|
||||
|
@ -78,6 +76,7 @@ func _process(delta):
|
|||
var target = level.get_tile_v(tile_position + movement.direction)
|
||||
if target.can_walk(movement.direction) or target.can_push(movement.direction):
|
||||
movement_queue.push_back(movement)
|
||||
|
||||
|
||||
update_animation()
|
||||
|
||||
|
@ -94,7 +93,6 @@ func _process(delta):
|
|||
else:
|
||||
tile.push(current_movement.direction)
|
||||
footsteps.play()
|
||||
level.take_snap()
|
||||
|
||||
if current_target != null:
|
||||
tile_position += current_movement.direction * delta * (speed_dash if dashing else speed)
|
||||
|
@ -146,13 +144,9 @@ func _process(delta):
|
|||
deny.play()
|
||||
|
||||
|
||||
func update_position(var new_pos = false):
|
||||
if new_pos is Vector2:
|
||||
tile_position = new_pos
|
||||
func update_position():
|
||||
position = level._floor.cell_custom_transform * (tile_position + Vector2.ONE / 2 )
|
||||
|
||||
func update_animation(var new_dir = false):
|
||||
if new_dir is Movement:
|
||||
current_direction = new_dir
|
||||
func update_animation():
|
||||
sprite.animation = current_direction.animation
|
||||
sprite.frame = step_count % 2 + (0 if reservoir > 0 else 2)
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 3.4 KiB |
|
@ -37,7 +37,7 @@ run/main_scene="res://Scenes/MainMenu.tscn"
|
|||
boot_splash/image="res://Textures/title-screen.png"
|
||||
config/icon="res://Textures/logo.png"
|
||||
config/macos_native_icon="res://Textures/logo.png"
|
||||
config/windows_native_icon="res://Textures/logo.ico"
|
||||
config/windows_native_icon="res://Textures/logo.png"
|
||||
|
||||
[audio]
|
||||
|
||||
|
@ -105,11 +105,6 @@ reset={
|
|||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
undo={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":90,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[physics]
|
||||
|
||||
|
|
Loading…
Reference in New Issue