Files
berry-dash-godot-remake/Scripts/Player.cs
T
2026-02-24 15:32:33 -07:00

134 lines
5.1 KiB
C#

using Godot;
public partial class Player : Node2D {
private float ScreenBorders = 120f;
private float VelocityY = 0f;
private bool doLeft = false;
private bool doRight = false;
private bool doJump = false;
public override void _Ready() {
var ScreenSize = GetViewport().GetVisibleRect().Size;
var WindowSize = DisplayServer.WindowGetSize();
var WindowScale = WindowSize / ScreenSize;
Position = new Vector2(x: DisplayServer.WindowGetSize().X / 2, y: (WindowSize.Y / WindowScale.Y) - 100);
if (Utils.IsMobile()) GetNode<Control>("/root/Game/CanvasLayer/MobileButtons").Visible = true;
}
public override void _Process(double delta) {
var ScreenSize = GetViewport().GetVisibleRect().Size;
var WindowSize = DisplayServer.WindowGetSize();
var WindowScale = WindowSize / ScreenSize;
Vector2 Pos = Position;
if (!Globals.IsPaused) {
if ((Utils.IsMobile() ? doLeft : Input.IsKeyPressed(Key.Left) || Input.IsKeyPressed(Key.A)) && Pos.X > ScreenBorders) {
GetNode<Sprite2D>("Texture").FlipH = false;
Pos.X -= Globals.MovementSpeed * (float)delta;
}
float ScreenWidth = (WindowSize.X / WindowScale.X) - ScreenBorders;
if ((Utils.IsMobile() ? doRight : Input.IsKeyPressed(Key.Right) || Input.IsKeyPressed(Key.D)) && Pos.X < ScreenWidth) {
GetNode<Sprite2D>("Texture").FlipH = true;
Pos.X += Globals.MovementSpeed * (float)delta;
}
if ((Utils.IsMobile() ? doJump : Input.IsKeyPressed(Key.Space)) && Pos.Y >= 976) {
VelocityY = Globals.JumpHeight;
GetNode<AudioStreamPlayer>("JumpSoundPlayer").Play();
}
}
if (!Globals.IsPaused) {
if (VelocityY < 600f) {
VelocityY += Globals.Gravity * (float)delta;
}
Pos.Y += VelocityY * (float)delta;
if (Pos.Y > 976) {
Pos.Y = 976;
VelocityY = 0;
}
Position = Pos;
}
// Effect handling
if (Globals.ActiveEffect != "none" && !Globals.IsPaused) {
Globals.EffectTimer -= (float)delta;
}
if (Globals.EffectTimer < 0f) {
Globals.EffectTimer = 0f;
Globals.ActiveEffect = "none";
}
if (Globals.ActiveEffect == "none") {
Globals.MovementSpeed = Globals.DefaultMovementSpeed;
Globals.BerrySpeed = Globals.DefaultBerrySpeed;
} else if (Globals.ActiveEffect == "ultra") {
Globals.MovementSpeed = Globals.DefaultMovementSpeed * 2f;
Globals.BerrySpeed = Globals.DefaultBerrySpeed;
} else if (Globals.ActiveEffect == "slow") {
Globals.MovementSpeed = Globals.DefaultMovementSpeed / 2f;
Globals.BerrySpeed = Globals.DefaultBerrySpeed;
} else if (Globals.ActiveEffect == "speedy") {
Globals.MovementSpeed = Globals.DefaultMovementSpeed * 2f;
Globals.BerrySpeed = Globals.DefaultBerrySpeed * 2f;
}
if (!Utils.IsMobile() && Input.IsActionJustPressed("EscapeKey")) {
if (!Globals.IsPaused) {
PackedScene PauseMenu = GD.Load<PackedScene>("res://Prefabs/PauseMenu.tscn");
Control PauseMenuInstance = PauseMenu.Instantiate<Control>();
PauseMenuInstance.Position = new Vector2(x: 0, y: 0);
PauseMenuInstance.ZIndex = -1;
GetNode<CanvasLayer>("/root/Game/CanvasLayer").AddChild(PauseMenuInstance);
Globals.IsPaused = true;
AudioStreamPlayer MusicPlayer = GetNode<AudioStreamPlayer>("/root/Game/MusicPlayer");
MusicPlayer.StreamPaused = !MusicPlayer.StreamPaused;
} else {
AudioStreamPlayer MusicPlayer = GetNode<AudioStreamPlayer>("/root/Game/MusicPlayer");
MusicPlayer.StreamPaused = !MusicPlayer.StreamPaused;
Globals.IsPaused = false;
GetNode<Control>("/root/Game/CanvasLayer/PauseMenu").QueueFree();
}
}
}
private void MobileLeftMoveDown() => doLeft = true;
private void MobileLeftMoveUp() => doLeft = false;
private void MobileRightMoveDown() => doRight = true;
private void MobileRightMoveUp() => doRight = false;
private void MobileJumpMoveDown() => doJump = true;
private void MobileJumpMoveUp() => doJump = false;
private void MobilePausePressed() {
if (Utils.IsMobile()) GetNode<Control>("/root/Game/CanvasLayer/MobileButtons").Visible = false;
PackedScene PauseMenu = GD.Load<PackedScene>("res://Prefabs/PauseMenu.tscn");
Control PauseMenuInstance = PauseMenu.Instantiate<Control>();
PauseMenuInstance.Position = new Vector2(x: 0, y: 0);
PauseMenuInstance.ZIndex = -1;
GetNode<CanvasLayer>("/root/Game/CanvasLayer").AddChild(PauseMenuInstance);
Globals.IsPaused = true;
AudioStreamPlayer MusicPlayer = GetNode<AudioStreamPlayer>("/root/Game/MusicPlayer");
MusicPlayer.StreamPaused = !MusicPlayer.StreamPaused;
}
}