mirror of
https://github.com/JHDev2006/Super-Mario-Bros.-Remastered-Public.git
synced 2025-10-22 23:48:11 +00:00
added the game
This commit is contained in:
81
Scripts/Classes/Entities/Objects/Track.gd
Normal file
81
Scripts/Classes/Entities/Objects/Track.gd
Normal file
@@ -0,0 +1,81 @@
|
||||
class_name Track
|
||||
extends Node2D
|
||||
const TRACK_PIECE = preload("uid://4gxhnql5bjk6")
|
||||
|
||||
@export var path := []
|
||||
var pieces := []
|
||||
var length := 0
|
||||
|
||||
@export_enum("Closed", "Open") var start_point := 0
|
||||
@export_enum("Closed", "Open") var end_point := 0
|
||||
@export var invisible := false:
|
||||
set(value):
|
||||
invisible = value
|
||||
update_pieces()
|
||||
|
||||
var editing := false
|
||||
|
||||
const DIRECTIONS := [
|
||||
Vector2i(-1, -1), # 0
|
||||
Vector2i.UP, # 1
|
||||
Vector2i(1, -1), # 2
|
||||
Vector2i.RIGHT, # 3
|
||||
Vector2i(1, 1), # 4
|
||||
Vector2i.DOWN, # 5
|
||||
Vector2i(-1, 1), # 6
|
||||
Vector2i.LEFT # 7
|
||||
]
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
$Point.frame = int(start_point == 0)
|
||||
visible = not (invisible and LevelEditor.playing_level)
|
||||
if editing and Global.current_game_mode == Global.GameMode.LEVEL_EDITOR:
|
||||
if Input.is_action_just_pressed("editor_open_menu") or Input.is_action_just_pressed("ui_cancel"):
|
||||
editing = false
|
||||
Global.level_editor.current_state = LevelEditor.EditorState.IDLE
|
||||
update_pieces()
|
||||
|
||||
func _ready() -> void:
|
||||
for i in path:
|
||||
add_piece(i, false)
|
||||
update_pieces()
|
||||
|
||||
func update_pieces() -> void:
|
||||
var idx := 0
|
||||
for i in $Pieces.get_children():
|
||||
i.idx = idx
|
||||
i.editing = idx >= path.size() and editing
|
||||
if idx > 0:
|
||||
i.starting_direction = -path[idx - 1]
|
||||
else:
|
||||
i.starting_direction = Vector2i.ZERO
|
||||
if idx <= path.size() - 1:
|
||||
i.connecting_direction = path[idx]
|
||||
else:
|
||||
i.connecting_direction = Vector2i.ZERO
|
||||
i.update_direction_textures()
|
||||
idx += 1
|
||||
|
||||
func add_piece(new_direction := Vector2i.ZERO, add_to_arr := true) -> void:
|
||||
var piece = TRACK_PIECE.instantiate()
|
||||
var next_position := new_direction * 16
|
||||
for i in length:
|
||||
next_position += path[i] * 16
|
||||
piece.position = next_position
|
||||
$Pieces.add_child(piece)
|
||||
piece.owner = self
|
||||
pieces.append(piece)
|
||||
piece.idx = length
|
||||
piece.reset_physics_interpolation()
|
||||
if add_to_arr:
|
||||
path.append(new_direction)
|
||||
length += 1
|
||||
update_pieces()
|
||||
|
||||
func remove_last_piece() -> void:
|
||||
$Pieces.get_child($Pieces.get_child_count() - 1).queue_free()
|
||||
await get_tree().process_frame
|
||||
path.pop_back()
|
||||
pieces.pop_back()
|
||||
length -= 1
|
||||
update_pieces()
|
Reference in New Issue
Block a user