From 4392367ef68717a0c8e3ff8b3e2489d122881f78 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 28 Jan 2026 13:15:32 -0700 Subject: [PATCH] Consolodated jump logic --- Assets/Scenes/DEVSCENES/IQEnemy.cs | 43 ++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/Assets/Scenes/DEVSCENES/IQEnemy.cs b/Assets/Scenes/DEVSCENES/IQEnemy.cs index 9a4dadf..1201398 100644 --- a/Assets/Scenes/DEVSCENES/IQEnemy.cs +++ b/Assets/Scenes/DEVSCENES/IQEnemy.cs @@ -10,25 +10,32 @@ public partial class IQEnemy : CharacterBody2D // Enemy Stats public int IQ; public float HP; - float MaxHP, RegenerationAmmount, RegenerationInterval, WalkSpeed, JumpHeight, DetectionRange; + float MaxHP, RegenerationAmmount, RegenerationInterval, WalkSpeed, JumpHeight, JumpInterval, DetectionRange; // Enemy Conditions - bool GroundDetected, LedgeDetected, WallDetected; + bool GroundDetected, LedgeDetected, WallDetected, CanJump; String FacingDirection; // Enemy Abilities - bool AbilityJump, AbilityMove, AbilityAttack, AbilityDash, AbilityCloak, AbilityTeleport, AbilityRegenerate = false; + bool AbilityJump, AbilityMove, AbilityAttack, AbilityDash, AbilityCloak, AbilityTeleport, AbilityRegenerate; public override void _Ready() { // Read & Set Abilities if (HasMeta("AbilityJump")) AbilityJump = (bool)GetMeta("AbilityJump"); + else AbilityJump = true; if (HasMeta("AbilityMove")) AbilityMove = (bool)GetMeta("AbilityMove"); + else AbilityMove = true; if (HasMeta("AbilityAttack")) AbilityAttack = (bool)GetMeta("AbilityAttack"); + else AbilityAttack = true; if (HasMeta("AbilityDash")) AbilityDash = (bool)GetMeta("AbilityDash"); + else AbilityDash = false; if (HasMeta("AbilityCloak")) AbilityCloak = (bool)GetMeta("AbilityCloak"); + else AbilityCloak = false; if (HasMeta("AbilityTeleport")) AbilityTeleport = (bool)GetMeta("AbilityTeleport"); + else AbilityTeleport = false; if (HasMeta("AbilityRegenerate")) AbilityRegenerate = (bool)GetMeta("AbilityRegenerate"); + else AbilityRegenerate = true; if (HasMeta("RegenerationAmmount")) RegenerationAmmount = (float)GetMeta("RegenerationAmmount"); else RegenerationAmmount = 1.0f; if (HasMeta("RegenerationInterval")) RegenerationInterval = (float)GetMeta("RegenerationInterval"); @@ -37,6 +44,8 @@ public partial class IQEnemy : CharacterBody2D else WalkSpeed = 20.0f; if (HasMeta("JumpHeight")) JumpHeight = (float)GetMeta("JumpHeight"); else JumpHeight = 250.0f; + if (HasMeta("JumpInterval")) JumpInterval = (float)GetMeta("JumpInterval"); + else JumpInterval = 1.0f; if (HasMeta("DetectionRange")) DetectionRange = (float)GetMeta("DetectionRange"); else DetectionRange = 100.0f; JumpHeight *= -1; @@ -58,6 +67,7 @@ public partial class IQEnemy : CharacterBody2D GroundDetected = false; LedgeDetected = false; WallDetected = false; + CanJump = AbilityJump; // Apply IQ based permenant modifiers IQ = (int)GetMeta("IQ"); // Read IQ @@ -83,12 +93,17 @@ public partial class IQEnemy : CharacterBody2D if (AbilityRegenerate){ if (GlobalTimer % RegenerationInterval == 0) Regenerate(RegenerationAmmount); } + // Jump Cooldown + if (AbilityJump){ + if (GlobalTimer % JumpInterval == 0) CanJump = true; + } // Movement // Add gravity. if (GroundDetected == false) Velocity = new Vector2(Velocity[0],Velocity[1] + 10); #region 20IQ + if (AbilityMove){ if (IQ >= 0 && IQ <= 20){ // Goomba ahh diddy blud if (GroundDetected && LedgeDetected == false) Flip(); // Flip when presented with a ledge if (WallDetected) Flip(); // Flip when comeing in contact with a wall @@ -98,16 +113,16 @@ public partial class IQEnemy : CharacterBody2D #region 30IQ if (IQ > 20 && IQ <= 30){ // Goomba w/ hopps (no judy) Velocity = new Vector2(WalkSpeed * VAH.Scale[0], Velocity[1]); // Walk - if (WallDetected && GroundDetected && Velocity[1] == 0) Velocity = new Vector2(Velocity[0], JumpHeight); // Jump + if (WallDetected && GroundDetected && Velocity[1] == 0) Jump(); if (WallDetected && GroundDetected && Velocity[1] > 0) Flip(); // Wall too high } #endregion #region 40IQ if (IQ > 30 && IQ <= 40){ // Adds jumping when reaching edge as feature (also adding directional x force) Velocity = (GroundDetected) ? new Vector2(WalkSpeed * VAH.Scale[0], Velocity[1]) : new Vector2(WalkSpeed * VAH.Scale[0] / 2, Velocity[1]); // Walk on air or ground - if (WallDetected && GroundDetected && Velocity[1] == 0) Velocity = new Vector2(Velocity[0], JumpHeight); // Jump - //if (GroundDetected && LedgeDetected == false && Velocity[1] == 0) Velocity = new Vector2(Velocity[0] * 50, JumpHeight); // Jump at ledge - if (GroundDetected && LedgeDetected == false && Velocity[1] == 0) Velocity = new Vector2(Velocity[0], JumpHeight); // Jump at ledge + if (WallDetected && GroundDetected && Velocity[1] == 0) Jump(); + //if (GroundDetected && LedgeDetected == false && Velocity[1] == 0) Velocity = new Vector2(Velocity[0] * 50, JumpHeight); // Jump at ledge with x motion + if (GroundDetected && LedgeDetected == false && Velocity[1] == 0) Jump(); // Jump at ledge if (WallDetected && GroundDetected && Velocity[1] > 0) Flip(); // Wall too high } #endregion @@ -118,15 +133,15 @@ public partial class IQEnemy : CharacterBody2D float DistanceFromPlayerX = GlobalPosition[0] - CurrentLevel[2].GetNode("Player").GlobalPosition[0]; if (DistanceFromPlayerX > (30.0f / (IQ / 4))) if (VAH.Scale[0] > 0)Flip(); // left of player if (DistanceFromPlayerX < (-30.0f / (IQ / 4))) if (VAH.Scale[0] < 0)Flip(); // right of player - if (DistanceFromPlayerX < (-30.0f / (IQ / 4)) && GroundDetected && GlobalPosition[0] > CurrentLevel[2].GetNode("Player").GlobalPosition[1]) Velocity = new Vector2(Velocity[0], JumpHeight); // Jump when player is overhead + if (DistanceFromPlayerX < (-30.0f / (IQ / 4)) && GroundDetected && GlobalPosition[0] > CurrentLevel[2].GetNode("Player").GlobalPosition[1]) Jump(); // Jump when player is overhead } else { // Patrol if (WallDetected && GroundDetected && Velocity[1] > 0)Flip(); // Wall too high } // Common Behaviors Velocity = (GroundDetected) ? new Vector2(WalkSpeed * VAH.Scale[0], Velocity[1]) : new Vector2(WalkSpeed * VAH.Scale[0] / 2, Velocity[1]); // Walk on air or ground - if (WallDetected && GroundDetected && Velocity[1] == 0) Velocity = new Vector2(Velocity[0], JumpHeight); // Jump - //if (GroundDetected && LedgeDetected == false && Velocity[1] == 0) Velocity = new Vector2(Velocity[0] * 50, JumpHeight); // Jump at ledge - if (GroundDetected && LedgeDetected == false && Velocity[1] == 0) Velocity = new Vector2(Velocity[0], JumpHeight); // Jump at ledge + if (WallDetected && GroundDetected && Velocity[1] == 0) Jump(); // Jump + //if (GroundDetected && LedgeDetected == false && Velocity[1] == 0) Velocity = new Vector2(Velocity[0] * 50, JumpHeight); // Jump at ledge with x motion + if (GroundDetected && LedgeDetected == false && Velocity[1] == 0) Jump(); // Jump at ledge } #endregion #region 80IQ @@ -144,6 +159,7 @@ public partial class IQEnemy : CharacterBody2D #region 140IQ if (IQ > 120 && IQ <= 140){ // Advanced movement options } + } #endregion MoveAndSlide(); // Updates physics applied this frame } @@ -156,6 +172,11 @@ public partial class IQEnemy : CharacterBody2D else if (FacingDirection == "LEFT"){FacingDirection = "RIGHT";} } + void Jump(){ + if (GroundDetected && CanJump) {Velocity = new Vector2(Velocity[0], JumpHeight); + CanJump = false;} + } + bool DetectsPlayer(){ var CurrentLevel = GetTree().Root.GetChildren(); return (GlobalPosition.DistanceTo(CurrentLevel[2].GetNode("Player").GlobalPosition) <= DetectionRange) ? true : false;