From a5fe4bf0a031a09d1ee646efc3c1eff322ec0f56 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sat, 4 Mar 2023 00:19:35 +0800 Subject: [PATCH 1/3] New SFX and (supposedly) spatial SFX --- Assets/Scenes/Level1.shade | 25 ++++++++++-- Assets/Scenes/Level2.shade | 38 +++++++++++++++++++ Assets/Scripts/Audio/CS_SoundLoopEmitter.cs | 32 ++++++++++++++++ .../Audio/CS_SoundLoopEmitter.cs.shmeta | 3 ++ .../AIBehaviour/Implemented/Homeowner1.cs | 6 +++ Assets/Scripts/Gameplay/Item/SC_Breakable.cs | 12 +++++- Assets/Scripts/Gameplay/Item/SC_Item.cs | 4 ++ Assets/Scripts/Gameplay/SC_GameManager.cs | 4 -- Assets/Scripts/Gameplay/SC_JumpPad.cs | 4 ++ 9 files changed, 119 insertions(+), 9 deletions(-) create mode 100644 Assets/Scripts/Audio/CS_SoundLoopEmitter.cs create mode 100644 Assets/Scripts/Audio/CS_SoundLoopEmitter.cs.shmeta diff --git a/Assets/Scenes/Level1.shade b/Assets/Scenes/Level1.shade index cd5ba82e..5696d196 100644 --- a/Assets/Scenes/Level1.shade +++ b/Assets/Scenes/Level1.shade @@ -277,7 +277,12 @@ Position Offset: {x: 0, y: 0.5, z: 0} Rotation Offset: {x: 0, y: 0, z: 0} IsActive: true - Scripts: ~ + Scripts: + - Type: SHADE_Scripting.Audio.SoundLoopEmitter + Enabled: true + clipHandlerName: "SFXWash65" + clipPath: "event:/Props/washing_machine_loop" + volume: 0.300000012 - EID: 66 Name: washingMachineDoor IsActive: true @@ -418,7 +423,12 @@ Position Offset: {x: 0, y: 0.5, z: 0} Rotation Offset: {x: 0, y: 0, z: 0} IsActive: true - Scripts: ~ + Scripts: + - Type: SHADE_Scripting.Audio.SoundLoopEmitter + Enabled: true + clipHandlerName: "SFXWash43" + clipPath: "event:/Props/washing_machine_loop" + volume: 0.300000012 - EID: 44 Name: washingMachineDoor IsActive: true @@ -460,7 +470,12 @@ Position Offset: {x: 0, y: 0.5, z: 0} Rotation Offset: {x: 0, y: 0, z: 0} IsActive: true - Scripts: ~ + Scripts: + - Type: SHADE_Scripting.Audio.SoundLoopEmitter + Enabled: true + clipHandlerName: "SFXWash42" + clipPath: "event:/Props/washing_machine_loop" + volume: 0.300000012 - EID: 131081 Name: washingMachineDoor IsActive: true @@ -4121,6 +4136,7 @@ Text: "Score: 0" Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true Scripts: ~ - EID: 206 @@ -4137,6 +4153,7 @@ Text: "Time Left: 200" Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true Scripts: ~ - EID: 238 @@ -4153,6 +4170,7 @@ Text: "" Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true Scripts: ~ - EID: 236 @@ -5302,6 +5320,7 @@ Text: Game Pause Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: false UI Component: Canvas ID: 458 diff --git a/Assets/Scenes/Level2.shade b/Assets/Scenes/Level2.shade index 3989fa4a..9ae69bef 100644 --- a/Assets/Scenes/Level2.shade +++ b/Assets/Scenes/Level2.shade @@ -464,6 +464,8 @@ Enabled: true threshHold: 0.5 ignoreRaccoon: true + breakClipHandlerName: SFXEggBreak144 + breakClipPath: event:/Props/impact_egg - Type: Item Enabled: true Score: 10 @@ -1652,6 +1654,8 @@ Enabled: true threshHold: 4 ignoreRaccoon: true + breakClipHandlerName: SFXWatermelonBreak464 + breakClipPath: event:/Props/impact_watermelon_break - Type: Item Enabled: true Score: 500 @@ -2064,6 +2068,8 @@ Enabled: true threshHold: 4 ignoreRaccoon: true + breakClipHandlerName: SFXWatermelonBreak522 + breakClipPath: event:/Props/impact_watermelon_break - Type: Item Enabled: true Score: 500 @@ -2374,6 +2380,8 @@ Enabled: true threshHold: 4 ignoreRaccoon: true + breakClipHandlerName: SFXWatermelonBreak156 + breakClipPath: event:/Props/impact_watermelon_break - Type: Item Enabled: true Score: 500 @@ -2684,6 +2692,8 @@ Enabled: true threshHold: 0.5 ignoreRaccoon: true + breakClipHandlerName: SFXEggBreak533 + breakClipPath: event:/Props/impact_egg - Type: Item Enabled: true Score: 10 @@ -2903,6 +2913,8 @@ Enabled: true threshHold: 0.5 ignoreRaccoon: true + breakClipHandlerName: SFXEggBreak538 + breakClipPath: event:/Props/impact_egg - Type: Item Enabled: true Score: 10 @@ -3122,6 +3134,8 @@ Enabled: true threshHold: 0.5 ignoreRaccoon: true + breakClipHandlerName: SFXEggBreak543 + breakClipPath: event:/Props/impact_egg - Type: Item Enabled: true Score: 10 @@ -3477,6 +3491,7 @@ Text: My name is Brandon. Font: 174412429 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true UI Component: Canvas ID: 199 @@ -3518,6 +3533,7 @@ Text: My name is Brandon. Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true UI Component: Canvas ID: 199 @@ -3539,6 +3555,7 @@ Text: X2 Font: 174412429 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true UI Component: Canvas ID: 199 @@ -3803,6 +3820,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak1 + breakClipPath: event:/Props/impact_break - EID: 196 Name: Piece1 IsActive: false @@ -4012,6 +4031,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak171 + breakClipPath: event:/Props/impact_break - EID: 65703 Name: Piece1 IsActive: false @@ -4221,6 +4242,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak150 + breakClipPath: event:/Props/impact_break - EID: 149 Name: Piece1 IsActive: false @@ -4430,6 +4453,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak145 + breakClipPath: event:/Props/impact_break - EID: 488 Name: Piece1 IsActive: false @@ -4639,6 +4664,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak492 + breakClipPath: event:/Props/impact_break - EID: 493 Name: Piece1 IsActive: false @@ -4848,6 +4875,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak497 + breakClipPath: event:/Props/impact_break - EID: 498 Name: Piece1 IsActive: false @@ -5057,6 +5086,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak502 + breakClipPath: event:/Props/impact_break - EID: 503 Name: Piece1 IsActive: false @@ -5266,6 +5297,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak507 + breakClipPath: event:/Props/impact_break - EID: 508 Name: Piece1 IsActive: false @@ -5475,6 +5508,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak512 + breakClipPath: event:/Props/impact_break - EID: 513 Name: Piece1 IsActive: false @@ -5684,6 +5719,8 @@ Enabled: true threshHold: 0.100000001 ignoreRaccoon: false + breakClipHandlerName: SFXBreak517 + breakClipPath: event:/Props/impact_break - EID: 518 Name: Piece1 IsActive: false @@ -6183,6 +6220,7 @@ Text: Game Pause Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: false UI Component: Canvas ID: 10 diff --git a/Assets/Scripts/Audio/CS_SoundLoopEmitter.cs b/Assets/Scripts/Audio/CS_SoundLoopEmitter.cs new file mode 100644 index 00000000..7100a23f --- /dev/null +++ b/Assets/Scripts/Audio/CS_SoundLoopEmitter.cs @@ -0,0 +1,32 @@ +using SHADE; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SHADE_Scripting.Audio +{ + public class SoundLoopEmitter : Script + { + [SerializeField] + private string clipHandlerName; + + [SerializeField] + private string clipPath; + + public float volume; + + protected override void awake() + { + AudioHandler.audioClipHandlers[clipHandlerName] = SHADE.Audio.CreateAudioClip(clipPath); + } + + protected override void start() + { + SHADE.Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers[clipHandlerName], GameObject.EntityId); + AudioHandler.audioClipHandlers[clipHandlerName].SetVolume(volume); + AudioHandler.audioClipHandlers[clipHandlerName].Play(); + } + } +} diff --git a/Assets/Scripts/Audio/CS_SoundLoopEmitter.cs.shmeta b/Assets/Scripts/Audio/CS_SoundLoopEmitter.cs.shmeta new file mode 100644 index 00000000..af1a932f --- /dev/null +++ b/Assets/Scripts/Audio/CS_SoundLoopEmitter.cs.shmeta @@ -0,0 +1,3 @@ +Name: CS_SoundLoopEmitter +ID: 154714630 +Type: 9 diff --git a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/Homeowner1.cs b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/Homeowner1.cs index e37aab36..952142d2 100644 --- a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/Homeowner1.cs +++ b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/Homeowner1.cs @@ -112,8 +112,14 @@ public partial class Homeowner1 : BehaviourTree AudioHandler.audioClipHandlers["BGMAdaptive"] = Audio.CreateAudioClip("event:/Music/bgm_adaptive"); AudioHandler.audioClipHandlers["SFXFootstep"] = Audio.CreateAudioClip("event:/Homeowner/homeowner_footsteps"); + Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers["SFXFootstep"], GameObject.EntityId); AudioHandler.audioClipHandlers["SFXDetectAh"] = Audio.CreateAudioClip("event:/Homeowner/homeowner_detect_raccoon"); + Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers["SFXDetectAh"], GameObject.EntityId); AudioHandler.audioClipHandlers["SFXDetectSting"] = Audio.CreateAudioClip("event:/Music/stingers/player_detected"); + AudioHandler.audioClipHandlers["SFXHumming"] = Audio.CreateAudioClip("event:/Homeowner/homeowner_humming"); + Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers["SFXHumming"], GameObject.EntityId); + AudioHandler.audioClipHandlers["SFXHumming"].SetVolume(0.15f); + AudioHandler.audioClipHandlers["SFXHumming"].Play(); if (aiInstance != null && aiInstance != this) RemoveScript(); diff --git a/Assets/Scripts/Gameplay/Item/SC_Breakable.cs b/Assets/Scripts/Gameplay/Item/SC_Breakable.cs index 4ff49791..a42df17d 100644 --- a/Assets/Scripts/Gameplay/Item/SC_Breakable.cs +++ b/Assets/Scripts/Gameplay/Item/SC_Breakable.cs @@ -14,6 +14,12 @@ public class Breakable : Script public bool isBreak { get; set; } private List itemPieces = new List(); + [SerializeField] + private string breakClipHandlerName; + + [SerializeField] + private string breakClipPath; + protected override void awake() { rb = GetComponent(); @@ -32,7 +38,7 @@ public class Breakable : Script isBreak = false; - AudioHandler.audioClipHandlers["SFXBreak"] = Audio.CreateAudioClip("event:/Props/impact_break"); + AudioHandler.audioClipHandlers[breakClipHandlerName] = Audio.CreateAudioClip(breakClipPath); } protected override void update() @@ -76,7 +82,9 @@ public class Breakable : Script GameManager.Instance.itemShatter = false; isBreak = false; - AudioHandler.audioClipHandlers["SFXBreak"].Play(); + Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers[breakClipHandlerName], GameObject.EntityId); + AudioHandler.audioClipHandlers[breakClipHandlerName].Play(); + //Audio.DetachAudioClipFromObject(AudioHandler.audioClipHandlers[breakClipHandlerName]); GameObject.SetActive(false); } } \ No newline at end of file diff --git a/Assets/Scripts/Gameplay/Item/SC_Item.cs b/Assets/Scripts/Gameplay/Item/SC_Item.cs index c8fa1bcd..b315ab08 100644 --- a/Assets/Scripts/Gameplay/Item/SC_Item.cs +++ b/Assets/Scripts/Gameplay/Item/SC_Item.cs @@ -121,11 +121,15 @@ public class Item : Script if (playSound) { + Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers["SFXImpactElastic"], GameObject.EntityId); + Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers["SFXImpactHard"], GameObject.EntityId); if (currCategory == ItemCategory.LIGHT) AudioHandler.audioClipHandlers["SFXImpactElastic"].Play(); else if (currCategory == ItemCategory.MEDIUM || currCategory == ItemCategory.HEAVY) AudioHandler.audioClipHandlers["SFXImpactHard"].Play(); playSound = false; + Audio.DetachAudioClipFromObject(AudioHandler.audioClipHandlers["SFXImpactElastic"]); + Audio.DetachAudioClipFromObject(AudioHandler.audioClipHandlers["SFXImpactHard"]); } if (info.GameObject.GetScript() && !returnBack) diff --git a/Assets/Scripts/Gameplay/SC_GameManager.cs b/Assets/Scripts/Gameplay/SC_GameManager.cs index c16378d9..83dae007 100644 --- a/Assets/Scripts/Gameplay/SC_GameManager.cs +++ b/Assets/Scripts/Gameplay/SC_GameManager.cs @@ -91,10 +91,6 @@ public class GameManager : Script AudioHandler.audioClipHandlers["KitchenAmbience"] = Audio.CreateAudioClip("event:/Ambience/roomtone_kitchen"); AudioHandler.audioClipHandlers["KitchenAmbience"].Play(); - AudioHandler.audioClipHandlers["SFXHumming"] = Audio.CreateAudioClip("event:/Homeowner/homeowner_humming"); - AudioHandler.audioClipHandlers["SFXHumming"].SetVolume(0.15f); - AudioHandler.audioClipHandlers["SFXHumming"].Play(); - if (SceneFadeInOut.Instance != null) SceneFadeInOut.Instance.CallFadeOut(); Application.IsCursorVisible = false; diff --git a/Assets/Scripts/Gameplay/SC_JumpPad.cs b/Assets/Scripts/Gameplay/SC_JumpPad.cs index 0e331f8c..7aa573df 100644 --- a/Assets/Scripts/Gameplay/SC_JumpPad.cs +++ b/Assets/Scripts/Gameplay/SC_JumpPad.cs @@ -1,10 +1,12 @@ using SHADE; +using SHADE_Scripting.Audio; using System; public class JumpPad : Script { protected override void awake() { + AudioHandler.audioClipHandlers["SFXJumpPad"] = Audio.CreateAudioClip("event:/Props/jumppad_boing"); } protected override void update() @@ -15,6 +17,8 @@ public class JumpPad : Script { if (info.GameObject.GetScript() && info.GameObject.GetScript().currentState == PlayerController.RaccoonStates.FALLING) { + Audio.AttachAudioClipToObject(AudioHandler.audioClipHandlers["SFXJumpPad"], GameObject.EntityId); + AudioHandler.audioClipHandlers["SFXJumpPad"].Play(); info.GameObject.GetScript().landedOnJumpPad = true; } } From dc54ae92a2f1eec853e6df3c93b437419da31906 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sat, 4 Mar 2023 04:57:59 +0800 Subject: [PATCH 2/3] AI gets sent to a waypoint of choice when caught --- Assets/Scenes/Level2.shade | 25 +++++---- .../AIBehaviour/Implemented/Homeowner1.cs | 5 ++ .../Implemented/LeafNodes/LeafAttack.cs | 30 +++++++++++ .../Implemented/LeafNodes/LeafChase.cs | 3 +- .../Implemented/LeafNodes/LeafPatrol.cs | 51 ++++++++++++++++--- 5 files changed, 97 insertions(+), 17 deletions(-) diff --git a/Assets/Scenes/Level2.shade b/Assets/Scenes/Level2.shade index 3989fa4a..9659dbc5 100644 --- a/Assets/Scenes/Level2.shade +++ b/Assets/Scenes/Level2.shade @@ -3477,6 +3477,7 @@ Text: My name is Brandon. Font: 174412429 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true UI Component: Canvas ID: 199 @@ -3518,6 +3519,7 @@ Text: My name is Brandon. Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true UI Component: Canvas ID: 199 @@ -3539,6 +3541,7 @@ Text: X2 Font: 174412429 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true UI Component: Canvas ID: 199 @@ -5855,7 +5858,7 @@ Components: ~ Scripts: ~ - EID: 165 - Name: 1 + Name: 0 IsActive: true NumberOfChildren: 0 Components: @@ -5866,7 +5869,7 @@ IsActive: true Scripts: ~ - EID: 164 - Name: 2 + Name: 1 IsActive: true NumberOfChildren: 0 Components: @@ -5877,7 +5880,7 @@ IsActive: true Scripts: ~ - EID: 163 - Name: 3 + Name: 2 IsActive: true NumberOfChildren: 0 Components: @@ -5888,7 +5891,7 @@ IsActive: true Scripts: ~ - EID: 162 - Name: 4 + Name: 3 IsActive: true NumberOfChildren: 0 Components: @@ -5899,7 +5902,7 @@ IsActive: true Scripts: ~ - EID: 161 - Name: 5 + Name: 4 IsActive: true NumberOfChildren: 0 Components: @@ -5910,7 +5913,7 @@ IsActive: true Scripts: ~ - EID: 160 - Name: 6 + Name: 5 IsActive: true NumberOfChildren: 0 Components: @@ -5921,7 +5924,7 @@ IsActive: true Scripts: ~ - EID: 159 - Name: 7 + Name: 6 IsActive: true NumberOfChildren: 0 Components: @@ -5937,7 +5940,7 @@ NumberOfChildren: 0 Components: Transform Component: - Translate: {x: 0.0576689839, y: 0, z: -2.61272359} + Translate: {x: -3.45969725, y: 0, z: -2.61272359} Rotate: {x: -0, y: 0, z: -0} Scale: {x: 1, y: 1, z: 1} IsActive: true @@ -5975,12 +5978,13 @@ - Type: Homeowner1 Enabled: true waypointsPool: 166 + startWaypoint: 162 patrolSpeed: 3 chaseSpeed: 6 turningSpeed: 5 sightDistance: 8 eyeOffset: [0, 1.64999998, 0] - distanceToCapture: 0.5 + distanceToCapture: 0.800000012 captureTime: 0.5 footstepSFXIntervalMultiplier: 0.5 - EID: 12 @@ -6110,7 +6114,7 @@ Components: Transform Component: Translate: {x: 0, y: -300, z: 0} - Rotate: {x: -4.5, y: 2, z: -2.5} + Rotate: {x: 3.25, y: 0.5, z: 4.5} Scale: {x: 400, y: 100, z: 500} IsActive: true Renderable Component: @@ -6183,6 +6187,7 @@ Text: Game Pause Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: false UI Component: Canvas ID: 10 diff --git a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/Homeowner1.cs b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/Homeowner1.cs index e37aab36..3874c611 100644 --- a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/Homeowner1.cs +++ b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/Homeowner1.cs @@ -37,6 +37,9 @@ public partial class Homeowner1 : BehaviourTree private List waypoints; + [SerializeField] + private GameObject startWaypoint; + [SerializeField] [Tooltip("The AI will patrol at this speed")] private float patrolSpeed; @@ -151,6 +154,8 @@ public partial class Homeowner1 : BehaviourTree SetData("distanceToCapture", distanceToCapture); if (GetData("baseCaptureTime") == null || (float)GetData("baseCaptureTime") != captureTime) SetData("baseCaptureTime", captureTime); + if (GetData("startWaypoint") == null || (GameObject)GetData("startWaypoint") != startWaypoint) + SetData("startWaypoint", startWaypoint); events.Tick(); diff --git a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafAttack.cs b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafAttack.cs index 86ac07e0..59470e56 100644 --- a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafAttack.cs +++ b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafAttack.cs @@ -12,6 +12,7 @@ using SHADE; using SHADE_Scripting.AIBehaviour.BehaviourTree; +using SHADE_Scripting.Audio; using System; using System.Collections.Generic; using System.Linq; @@ -98,6 +99,35 @@ public partial class LeafAttack : BehaviourTreeNode if (player.GetScript().stateMachine && !player.GetScript().stateMachine.IsState(typeof(PlayerCaughtState))) player.GetScript().stateMachine.SetState(typeof(PlayerCaughtState)); + //Teleport AI back to home waypoint + int homeIndex = 0; + GameObject? startWaypoint = null; + List? waypoints = (List)GetNodeData("waypoints"); + if (GetNodeData("startWaypoint") != null) + startWaypoint = (GameObject)GetNodeData("startWaypoint"); + if (startWaypoint != null) + { + for (int i = 0; i < waypoints.Count; ++i) + { + if (startWaypoint == waypoints[i]) + { + homeIndex = i; + } + } + } + SetNodeData("currentWaypointIndex", homeIndex); + SetNodeData("playerLastSightedWaypointIndex", homeIndex); + SetNodeData("isAlert", false); + Audio.SetParameterWithLabel("PlayerDetection", "Undetected"); + AudioHandler.audioClipHandlers["SFXHumming"].Play(); + + Transform? transform = (Transform)GetNodeData("transform"); + if (waypoints != null && transform != null) + { + transform.GlobalPosition = waypoints[homeIndex].GetComponent().GlobalPosition; + } + ClearNodeData("target"); + status = BehaviourTreeNodeStatus.SUCCESS; onExit(BehaviourTreeNodeStatus.SUCCESS); return status; diff --git a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafChase.cs b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafChase.cs index 6085c974..982ee818 100644 --- a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafChase.cs +++ b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafChase.cs @@ -60,7 +60,7 @@ public partial class LeafChase : BehaviourTreeNode } } //Debug.Log("Player is nearest " + nearestWaypointIndex); - //Debug.Log("I'm at " + (int)GetNodeData("currentWaypointIndex")); + //Debug.Log("AI going to " + (int)GetNodeData("currentWaypointIndex")); SetNodeData("playerLastSightedWaypointIndex", nearestWaypointIndex); } @@ -78,6 +78,7 @@ public partial class LeafChase : BehaviourTreeNode GetNodeData("distanceToCapture") == null || GetNodeData("baseCaptureTime") == null) { + //Debug.Log("Chase Failure: null values"); status = BehaviourTreeNodeStatus.FAILURE; onExit(BehaviourTreeNodeStatus.FAILURE); return status; diff --git a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafPatrol.cs b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafPatrol.cs index 6199bd19..68f649fa 100644 --- a/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafPatrol.cs +++ b/Assets/Scripts/Gameplay/AIBehaviour/Implemented/LeafNodes/LeafPatrol.cs @@ -29,7 +29,7 @@ public partial class LeafPatrol : BehaviourTreeNode private float chaseSpeed; private float turningSpeed; private float retreatTimer = 0.0f; - private int currentWaypointIndex = 0; + private int currentWaypointIndex = -1; private bool retreatState = false; private bool goingForwards = true; @@ -47,7 +47,7 @@ public partial class LeafPatrol : BehaviourTreeNode //node, and hence we do not need to inherit its constructors public LeafPatrol(string name) : base(name) { - currentWaypointIndex = 0; + currentWaypointIndex = -1; } //When it comes to evaluating, @@ -57,6 +57,42 @@ public partial class LeafPatrol : BehaviourTreeNode //Debug.LogWarning("LeafPatrol"); onEnter(BehaviourTreeNodeStatus.RUNNING); + //Initialise home waypoint + waypoints = (List)GetNodeData("waypoints"); + if (currentWaypointIndex == -1) + { + if (waypoints != null) + { + //Debug.Log("Waypoints not null"); + if (GetNodeData("startWaypoint") != null) + { + //Debug.Log("Getting start waypoint"); + GameObject startWaypoint = (GameObject)(GetNodeData("startWaypoint")); + for (int i = 0; i < waypoints.Count; ++i) + { + if (startWaypoint == waypoints[i]) + { + //Debug.Log("Leaf Patrol Constructor: Start Waypoint Index: " + i.ToString()); + currentWaypointIndex = i; + SetNodeData("currentWaypointIndex", i); + } + } + } + else + { + status = BehaviourTreeNodeStatus.FAILURE; + onExit(BehaviourTreeNodeStatus.FAILURE); + return status; + } + } + else + { + status = BehaviourTreeNodeStatus.FAILURE; + onExit(BehaviourTreeNodeStatus.FAILURE); + return status; + } + } + //Get data if (GetNodeData("transform") == null || GetNodeData("patrolSpeed") == null || @@ -104,12 +140,13 @@ public partial class LeafPatrol : BehaviourTreeNode ClearNodeData("isWaiting"); return; } - waypoints = (List)GetNodeData("waypoints"); - if (waypoints == null) + if (GetNodeData("currentWaypointIndex") != null) { - return; + //2023 Mar 4, 0400, this is needed when the AI teleports back to the first spot after catching + currentWaypointIndex = (int)GetNodeData("currentWaypointIndex"); } - Vector3 targetPosition = waypoints[currentWaypointIndex].GetComponent().GlobalPosition; + //Modulo operator to prevent out of range exceptions + Vector3 targetPosition = waypoints[(currentWaypointIndex % waypoints.Count)].GetComponent().GlobalPosition; //Reach waypoint by X and Z being near enough //Do not consider Y of waypoints yet Vector3 remainingDistance = targetPosition - transform.GlobalPosition; @@ -195,6 +232,8 @@ public partial class LeafPatrol : BehaviourTreeNode //Debug.Log("AI is at " + transform.GlobalPosition.x.ToString() + " " + transform.GlobalPosition.y.ToString() + " " + transform.GlobalPosition.z.ToString()); Vector3 normalisedDifference = targetPosition - transform.GlobalPosition; normalisedDifference.y = 0.0f; //Do not move vertically + //Debug.Log("Leaf Patrol Current Waypoint Index: " + currentWaypointIndex.ToString()); + //Debug.Log("True Difference x " + normalisedDifference.x.ToString() + " z " + normalisedDifference.z.ToString()); normalisedDifference /= normalisedDifference.GetMagnitude(); //Debug.Log("Normalised Difference x " + normalisedDifference.x.ToString() + " z " + normalisedDifference.z.ToString()); From 28949b29ff87c825a787c177ba5f1fdf9938a246 Mon Sep 17 00:00:00 2001 From: mushgunAX Date: Sat, 4 Mar 2023 05:07:39 +0800 Subject: [PATCH 3/3] Level 1 AI start waypoint --- Assets/Scenes/Level1.shade | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Assets/Scenes/Level1.shade b/Assets/Scenes/Level1.shade index cd5ba82e..673481e5 100644 --- a/Assets/Scenes/Level1.shade +++ b/Assets/Scenes/Level1.shade @@ -4121,6 +4121,7 @@ Text: "Score: 0" Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true Scripts: ~ - EID: 206 @@ -4137,6 +4138,7 @@ Text: "Time Left: 200" Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true Scripts: ~ - EID: 238 @@ -4153,6 +4155,7 @@ Text: "" Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: true Scripts: ~ - EID: 236 @@ -4225,6 +4228,7 @@ - Type: Homeowner1 Enabled: true waypointsPool: 234 + startWaypoint: 233 patrolSpeed: 3 chaseSpeed: 6 turningSpeed: 5 @@ -5302,6 +5306,7 @@ Text: Game Pause Font: 176667660 Color: {x: 1, y: 1, z: 1, w: 1} + Text Size: {x: 1, y: 1, z: 1} IsActive: false UI Component: Canvas ID: 458