From d4a03d680b7a7f195bfa04141fc535bd96fb6ea3 Mon Sep 17 00:00:00 2001 From: rsxri Date: Thu, 24 Apr 2025 11:30:55 +0100 Subject: [PATCH] -misc: tidied up few bits of code where possible and time allowed --- MB_FYP/assets/icon/ShipBlue.ico | Bin 0 -> 113800 bytes MB_FYP/assets/icon/ShipBlue.png | Bin 0 -> 3958 bytes MB_FYP/assets/icon/ShipBlue.png.import | 34 +++++++++++++ MB_FYP/export_presets.cfg | 65 +++++++++++++++++++++++++ MB_FYP/project.godot | 63 ++++++++++++++++++++++-- MB_FYP/scenes/system/game.tscn | 13 +++-- MB_FYP/scenes/ui/input_menu.tscn | 9 ---- MB_FYP/scenes/ui/main_menu.tscn | 39 +++++++++++---- MB_FYP/scenes/ui/pause_menu.tscn | 1 + MB_FYP/script/entities/Laser.cs | 7 +-- MB_FYP/script/entities/ai_fighter.cs | 15 +----- MB_FYP/script/entities/asteroid.cs | 8 +-- MB_FYP/script/entities/player.cs | 8 --- MB_FYP/script/entities/ship.cs | 4 +- MB_FYP/script/ui/input_menu.cs | 19 ++++++-- MB_FYP/script/ui/main_menu.cs | 22 ++++++++- MB_FYP/script/ui/pause_menu.cs | 2 +- MB_FYP/script/ui/upgrade_menu.cs | 19 ++------ MB_FYP/script/util/wavecontroller.cs | 30 ++++++------ 19 files changed, 261 insertions(+), 97 deletions(-) create mode 100644 MB_FYP/assets/icon/ShipBlue.ico create mode 100644 MB_FYP/assets/icon/ShipBlue.png create mode 100644 MB_FYP/assets/icon/ShipBlue.png.import create mode 100644 MB_FYP/export_presets.cfg diff --git a/MB_FYP/assets/icon/ShipBlue.ico b/MB_FYP/assets/icon/ShipBlue.ico new file mode 100644 index 0000000000000000000000000000000000000000..728a1dda3659aee7864acf4c74f8c689ed294256 GIT binary patch literal 113800 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 body.Faction is ship.ShipFaction.FRIENDLY or ship.ShipFaction.PLAYER, ship.ShipFaction.FRIENDLY => body.Faction is ship.ShipFaction.ENEMY or ship.ShipFaction.ACE, ship.ShipFaction.ACE => body.Faction is ship.ShipFaction.FRIENDLY or ship.ShipFaction.PLAYER, - _ => throw new ArgumentOutOfRangeException() // thank you rider very cool }; } private void OnBodyEntered(Node body) { - GD.Print("Laser hit something: ", body.Name); if (body is ship target) { if (Shooter != null && !ValidTargetFaction(target)) { - GD.Print("friendly fire"); QueueFree(); } else { - GD.Print("Hit type: ", body.GetType()); target.ShipDamage(Shooter.Damage); QueueFree(); } } - else if (body is StaticBody2D) + else if (body is StaticBody2D) // border detection { - //GD.Print("laser hit border"); QueueFree(); } } diff --git a/MB_FYP/script/entities/ai_fighter.cs b/MB_FYP/script/entities/ai_fighter.cs index c9c3a16..3eacc4d 100644 --- a/MB_FYP/script/entities/ai_fighter.cs +++ b/MB_FYP/script/entities/ai_fighter.cs @@ -59,11 +59,6 @@ public partial class ai_fighter : ship } // SETUP - private void SetupAI() - { - return; - } - public void UpdateHealthLabel(int health) { _healthLabel.Text = health.ToString(); @@ -96,11 +91,7 @@ public partial class ai_fighter : ship private void HandleFiring(double delta) { - //GD.Print(Name, ": checking fire"); - //GD.Print(Name, ": fireTimer = ", fireTimer); - - FireTimer -= (float)delta; // countdown to next shot available if (FireTimer > 0f) return; // if countdown not finished then no shoot @@ -112,12 +103,8 @@ public partial class ai_fighter : ship float angleDiff = Mathf.Abs(Mathf.AngleDifference(Rotation, angleToTarget)); float distance = GlobalPosition.DistanceTo(_currentTarget.GlobalPosition); - //GD.Print(Name, ": angleDiff = ", Mathf.RadToDeg(angleDiff)); - if (angleDiff < 0.4f && distance <= EngageDistance + 200f) // fire when in range and mostly aligned { - //GD.Print(Name, ": angleDiff = ", angleDiff, ", distance = ", distance); - ShootLaser(); FireTimer = FireCooldown; // resets cooldown } @@ -140,7 +127,7 @@ public partial class ai_fighter : ship } if (shipParent == null) { - GD.Print("No shipParent found"); + //GD.Print("No shipParent found"); return null; } diff --git a/MB_FYP/script/entities/asteroid.cs b/MB_FYP/script/entities/asteroid.cs index 28063fa..098b9ba 100644 --- a/MB_FYP/script/entities/asteroid.cs +++ b/MB_FYP/script/entities/asteroid.cs @@ -71,8 +71,8 @@ public partial class asteroid : Area2D public void Explode(ship shooter) { //DEBUG PRINT - GD.Print($"DEBUG: Explode() called for {Name} at {GlobalPosition}"); - GD.Print($"DEBUG: {Name} calling Explode()"); + //GD.Print($"DEBUG: Explode() called for {Name} at {GlobalPosition}"); + //GD.Print($"DEBUG: {Name} calling Explode()"); EmitSignal(SignalName.Exploded, GlobalPosition, (int)Size, shooter); QueueFree(); } @@ -88,8 +88,8 @@ public partial class asteroid : Area2D if (body is ship ship) { ship.ShipDamage((30)); - GD.Print(("ship asteroid collide")); - GD.Print(ship.Name, ship.Health); + //GD.Print(("ship asteroid collide")); + //GD.Print(ship.Name, ship.Health); } else if (body is StaticBody2D) { diff --git a/MB_FYP/script/entities/player.cs b/MB_FYP/script/entities/player.cs index dccf986..43092e0 100644 --- a/MB_FYP/script/entities/player.cs +++ b/MB_FYP/script/entities/player.cs @@ -23,11 +23,6 @@ public partial class player : ship // Inherits from base ship class private void GetInput() { - /*LookAt(GetGlobalMousePosition()); //used for mouse-based rotation and movement - Velocity = Transform.X * Input.GetAxis("down", "up") * Speed; - */ - - // Movement, could probably move into its own methods instead of GetInput() RotationDirection = (int)Input.GetAxis("left", "right"); _angularVelocity += RotationDirection * _angularAccel; _angularVelocity = Mathf.Clamp(_angularVelocity, -RotationSpeed, RotationSpeed); @@ -37,18 +32,15 @@ public partial class player : ship // Inherits from base ship class _angularVelocity = Mathf.MoveToward(_angularVelocity, 0f, FlightAssistValue); } - //GD.Print(RotationDirection); Velocity += (Transform.X * Input.GetAxis("strafe_left", "strafe_right") * StrafeSpeed) + (Transform.Y * Input.GetAxis("up", "down") * MainSpeed); Velocity = Velocity.LimitLength(MaxSpeed); - //move into selection statement for toggling between fa off and on if(Input.GetAxis("strafe_left", "strafe_right") == 0){ Velocity = Velocity.MoveToward(Vector2.Zero, FlightAssistValue); } else if(Input.GetAxis("down", "up") == 0){ Velocity = Velocity.MoveToward(Vector2.Zero, FlightAssistValue); } - //FA toggle if (Input.IsActionJustPressed("toggle_fa")) { diff --git a/MB_FYP/script/entities/ship.cs b/MB_FYP/script/entities/ship.cs index 8211c7d..c64b71b 100644 --- a/MB_FYP/script/entities/ship.cs +++ b/MB_FYP/script/entities/ship.cs @@ -49,8 +49,6 @@ public partial class ship : CharacterBody2D protected virtual void ShootLaser() { - GD.Print(Name, ": firing laser"); - Laser laser = LaserScene.Instantiate(); laser.Position = LaserSpawn.GlobalPosition + -Transform.Y * 25f; laser.Shooter = this; @@ -197,7 +195,7 @@ public partial class ship : CharacterBody2D protected virtual void Explode() { - GD.Print(Name, " exploded"); + //GD.Print(Name, " exploded"); QueueFree(); } diff --git a/MB_FYP/script/ui/input_menu.cs b/MB_FYP/script/ui/input_menu.cs index b77dd64..e09ece4 100644 --- a/MB_FYP/script/ui/input_menu.cs +++ b/MB_FYP/script/ui/input_menu.cs @@ -18,6 +18,8 @@ public partial class input_menu : CenterContainer private Button _inpFA; private Button _inpPause; + private bool _buttonInit = false; + public override void _Ready() { awaitingLabel = GetNode