@tool class_name Ground2D extends Node2D @export_group("Player", "player_") @export var player_y_fixed := true @export var player_y := 40: set(val): player_y = val if is_node_ready(): _reset_player_positon() @export var reset_player_pos := false: set(val): reset_player_pos = false _reset_player_positon() @export_group("Sound") @export_enum("none", "ghost", "walking", "running", "crawling", "concrete") var footstep_type: String = "concrete": set(val): footstep_type = val if is_node_ready(): _load_footstep_audio() @onready var player = %MainPlayer as MainPlayer @onready var directional_light := %DirectionalLight2D as DirectionalLight2D @onready var bg_sprite = %BGSprite2D as Sprite2D @onready var foreground = %ParallaxForeground as ParallaxBackground @onready var footstep_audio = %FootstepAudioPlayer as RandomAudioStreamPlayer const FOOTSTEP_AUDIO = { #"wood": preload("res://config/audio/footstep/footstep_wood.tres"), #"carpet": preload("res://config/audio/footstep/footstep_carpet.tres"), "concrete": preload("res://config/audio/footstep/footstep_concrete.tres"), #"grass": preload("res://config/audio/footstep/footstep_grass.tres"), #"snow": preload("res://config/audio/footstep/footstep_snow.tres"), "ghost": preload("res://config/audio/sfx/footstep_ghost.tres"), "walking": preload("res://config/audio/sfx/footstep_walking.tres"), "running": preload("res://config/audio/sfx/footstep_running.tres"), "crawling": preload("res://config/audio/sfx/footstep_crawling.tres"), } func _ready() -> void: foreground.layer = GlobalConfig.CANVAS_LAYER_FG _reset_player_positon() if Engine.is_editor_hint(): return _set_camera_and_player_boundary() _load_footstep_audio() # %ColorRectTop.visible = true # %ColorRectBottom.visible = true func _reset_player_positon(): player.position.y = player_y player.position.x = $DeployLayer/portal_left.position.x func _set_camera_and_player_boundary(): # set current_boarder by bg size if bg_sprite.texture and not Engine.is_editor_hint(): var size = bg_sprite.texture.get_size() * bg_sprite.scale # camera rect var camera_size = Vector2(max(564.0, size.x), max(size.y, 316.0)) var camera_upleft = Vector2(0, -camera_size.y / 2.0) var camera_rect = Rect2(camera_upleft, camera_size) # player rect should be set centered, with 30px x padding var up_left = Vector2(0, -size.y / 2.0) size.x -= 36.0 up_left.x = bg_sprite.position.x + 18.0 var player_rect = Rect2(up_left, size) SceneManager.set_camera_boundary(camera_rect) SceneManager.set_player_boundary(player_rect) if GlobalConfig.DEBUG: print("_set_camera_and_player_boundary:", camera_rect, player_rect) func _load_footstep_audio(): # foot step sound footstep_audio.audio_collections.clear() if footstep_type != "none": var audio = FOOTSTEP_AUDIO[footstep_type] as AudioStreamCollection footstep_audio.audio_collections.append(audio) func play_footstep_sound() -> void: if not footstep_audio.audio_collections.is_empty(): footstep_audio.play_random()