From b26b1bbdd34cf088a66c6648e9571a8e7e85a6bb Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Mon, 29 Oct 2018 00:15:11 -0500 Subject: [PATCH 01/33] Started working on dynamic AIPhase loading --- Assets/Scripts/Boss Core/AI/AIPhase.cs | 14 ++------------ Assets/Scripts/Boss Core/AI/PhaseDictionary.cs | 8 ++++---- Assets/Scripts/Boss Core/Phases.meta | 8 ++++++++ Assets/Scripts/Boss Core/Phases/Phase_Test.cs | 16 ++++++++++++++++ .../Scripts/Boss Core/Phases/Phase_Test.cs.meta | 11 +++++++++++ 5 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 Assets/Scripts/Boss Core/Phases.meta create mode 100644 Assets/Scripts/Boss Core/Phases/Phase_Test.cs create mode 100644 Assets/Scripts/Boss Core/Phases/Phase_Test.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/AIPhase.cs b/Assets/Scripts/Boss Core/AI/AIPhase.cs index 0621342..b1aa8ad 100644 --- a/Assets/Scripts/Boss Core/AI/AIPhase.cs +++ b/Assets/Scripts/Boss Core/AI/AIPhase.cs @@ -10,10 +10,10 @@ namespace AI public partial class AIPhase { // What's the amount of health we have this phase? - public int maxHealth = 100; + public int MaxHealth { get; set; } = 100; // How big is the arena this phase? - public float maxArenaRadius = 50f; + public float MaxArenaRadius { get; set; } = 50f; private List phaseSequences; private List scriptedSequences; @@ -29,16 +29,6 @@ public AIPhase() repeatingScriptedSequences = new List(); } - public AIPhase SetMaxHealth(int health) { - this.maxHealth = health; - return this; - } - - public AIPhase SetMaxArenaRadius(float width) { - this.maxArenaRadius = width; - return this; - } - public AIPhase AddSequence(int weight, AISequence sequence) { phaseSequences.Add(new AIPhaseComponent(weight, sequence)); totalWeight += weight; diff --git a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs b/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs index e6d5211..44c8583 100644 --- a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs +++ b/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs @@ -86,8 +86,8 @@ public static void Load() { ; PHASE_TUTORIAL_1 = new AIPhase() - .SetMaxHealth(20) - .SetMaxArenaRadius(0.75f * 50f) + //.SetMaxHealth(20) + //.SetMaxArenaRadius(0.75f * 50f) .AddSequence(10, new Moves.Basic.Sweep().Wait(1f)) .AddSequence(10, new Moves.Basic.Sweep(reverse: true).Wait(1f)) .AddSequence(10, new Moves.Basic.Sweep_Back_And_Forth().Wait(1f)) @@ -103,12 +103,12 @@ public static void Load() { ; PHASE_TUTORIAL_2 = new AIPhase() - .SetMaxHealth(20) + //.SetMaxHealth(20) .AddSequence(10, new Moves.Tutorial2.Force_Block()) ; PHASE_TUTORIAL_3 = new AIPhase() - .SetMaxHealth(20) + //.SetMaxHealth(20) .AddSequence(10, new Moves.Basic.AOE_131()) .AddSequence(10, new Moves.Tutorial3.Shoot_AOE(90)) .AddSequence(10, new Moves.Tutorial3.Shoot_AOE(120)) diff --git a/Assets/Scripts/Boss Core/Phases.meta b/Assets/Scripts/Boss Core/Phases.meta new file mode 100644 index 0000000..d45273c --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05952e8cf6ad04c1ba72c6c08abe83c9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Test.cs b/Assets/Scripts/Boss Core/Phases/Phase_Test.cs new file mode 100644 index 0000000..166d9c1 --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases/Phase_Test.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Phases +{ + public class Phase_Test : AIPhase + { + + public Phase_Test() + { + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Test.cs.meta b/Assets/Scripts/Boss Core/Phases/Phase_Test.cs.meta new file mode 100644 index 0000000..1463341 --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases/Phase_Test.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 739b3ed7653cd4e68b898d835ebf47b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 1bb0db50415032b451789aaeffca8110c368529a Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Mon, 29 Oct 2018 16:56:59 -0500 Subject: [PATCH 02/33] Added dynamic phase loading, fixed shield throw (mostly), boss reset, and WIP AIRoutine logic for high level phase control --- Assets/Resources/Prefabs/Shield.prefab | 92 +++++++++- Assets/Scenes/BossScene.unity | 66 ++++++-- Assets/Scripts/Boss Core/AI/AIPhase.cs | 19 ++- Assets/Scripts/Boss Core/AI/AIRoutine.cs | 32 ++++ Assets/Scripts/Boss Core/AI/AIRoutine.cs.meta | 11 ++ Assets/Scripts/Boss Core/AI/AISequence.cs | 2 +- .../Scripts/Boss Core/AI/PhaseDictionary.cs | 78 +-------- Assets/Scripts/Boss Core/AOE/AOE.cs | 2 +- Assets/Scripts/Boss Core/BossController.cs | 96 ++++++----- .../Moves/Basic_Generators/PlayerLock.cs | 4 +- .../Moves/Basic_Generators/Shoot1.cs | 2 +- .../Moves/Basic_Generators/Shoot3.cs | 2 +- .../Moves/Basic_Generators/ShootAOE.cs | 4 +- .../Moves/Basic_Generators/ShootArc.cs | 2 +- .../Moves/Basic_Generators/Strafe.cs | 4 +- .../Moves/Basic_Generators/Teleport.cs | 12 +- Assets/Scripts/Boss Core/Phases/Phase_Test.cs | 12 +- .../Boss Core/Phases/Phase_Tutorial_1.cs | 30 ++++ .../Boss Core/Phases/Phase_Tutorial_1.cs.meta | 11 ++ .../Boss Core/Phases/Phase_Tutorial_2.cs | 18 ++ .../Boss Core/Phases/Phase_Tutorial_2.cs.meta | 11 ++ .../Boss Core/Phases/Phase_Tutorial_3.cs | 21 +++ .../Boss Core/Phases/Phase_Tutorial_3.cs.meta | 11 ++ .../Boss Core/Projectile/Projectile.cs | 2 +- .../Projectile/ProjectileComponent.cs | 6 +- .../Boss Core/Projectile/ProjectileCurving.cs | 2 +- .../Projectile/ProjectileDeathHex.cs | 2 +- .../Boss Core/Projectile/ProjectileHoming.cs | 2 +- .../Projectile/ProjectileLightning.cs | 2 +- .../StatusComponents/ShieldThrown.cs | 60 +------ Assets/Scripts/GameManager.cs | 9 +- Assets/Scripts/KeepOnArena.cs | 6 +- Assets/Scripts/ThrownShield.cs | 160 ++++++++++++++++++ Assets/Scripts/ThrownShield.cs.meta | 11 ++ Assets/Scripts/ThrownShieldTrigger.cs | 24 +++ Assets/Scripts/ThrownShieldTrigger.cs.meta | 11 ++ Assets/Scripts/UI/Elements/BossHealthBar.cs | 2 +- ProjectSettings/DynamicsManager.asset | 2 +- ProjectSettings/TagManager.asset | 2 +- 39 files changed, 618 insertions(+), 227 deletions(-) create mode 100644 Assets/Scripts/Boss Core/AI/AIRoutine.cs create mode 100644 Assets/Scripts/Boss Core/AI/AIRoutine.cs.meta create mode 100644 Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs create mode 100644 Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs.meta create mode 100644 Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs create mode 100644 Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs.meta create mode 100644 Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs create mode 100644 Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs.meta create mode 100644 Assets/Scripts/ThrownShield.cs create mode 100644 Assets/Scripts/ThrownShield.cs.meta create mode 100644 Assets/Scripts/ThrownShieldTrigger.cs create mode 100644 Assets/Scripts/ThrownShieldTrigger.cs.meta diff --git a/Assets/Resources/Prefabs/Shield.prefab b/Assets/Resources/Prefabs/Shield.prefab index b91447a..a6ab460 100644 --- a/Assets/Resources/Prefabs/Shield.prefab +++ b/Assets/Resources/Prefabs/Shield.prefab @@ -11,6 +11,23 @@ Prefab: m_SourcePrefab: {fileID: 0} m_RootGameObject: {fileID: 1507530396552222} m_IsPrefabAsset: 1 +--- !u!1 &1168528406709094 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4860285585461024} + - component: {fileID: 135034493210033750} + - component: {fileID: 114185634914605470} + m_Layer: 15 + m_Name: BossCollisionTrigger + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &1507530396552222 GameObject: m_ObjectHideFlags: 0 @@ -24,6 +41,8 @@ GameObject: - component: {fileID: 54870832810018796} - component: {fileID: 64894460222652124} - component: {fileID: 114517361295349430} + - component: {fileID: 114353084420896766} + - component: {fileID: 114821543164598386} m_Layer: 13 m_Name: Shield m_TagString: Untagged @@ -40,10 +59,24 @@ Transform: m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] + m_Children: + - {fileID: 4860285585461024} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!4 &4860285585461024 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168528406709094} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4835478478862716} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &23303720274358774 MeshRenderer: m_ObjectHideFlags: 1 @@ -97,7 +130,7 @@ Rigidbody: m_Drag: 1 m_AngularDrag: 0.25 m_UseGravity: 0 - m_IsKinematic: 1 + m_IsKinematic: 0 m_Interpolate: 0 m_Constraints: 0 m_CollisionDetection: 0 @@ -115,6 +148,28 @@ MeshCollider: m_CookingOptions: 14 m_SkinWidth: 0.01 m_Mesh: {fileID: 4300000, guid: 91730964b14ca404bb67f5ff48b75c91, type: 3} +--- !u!114 &114185634914605470 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168528406709094} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a5aa3fd8e627444c69b97187b32a0291, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114353084420896766 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1507530396552222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ead5bed827a7c40198a19b7ac5172c78, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!114 &114517361295349430 MonoBehaviour: m_ObjectHideFlags: 1 @@ -126,3 +181,36 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 0705ae61cf8e6400da45dd37c18f65d6, type: 3} m_Name: m_EditorClassIdentifier: + shouldReset: 0 +--- !u!114 &114821543164598386 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1507530396552222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 70dae659e9d6bae4db41c2b2fc0b7d77, type: 3} + m_Name: + m_EditorClassIdentifier: + faction: 1 + health: 0 + healthMax: 0 + shields: 0 + shieldsMax: 0 + shieldRegen: 0 + shieldDelayMax: 0 + movespeed: + baseValue: 0 +--- !u!135 &135034493210033750 +SphereCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168528406709094} + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 1 + m_Center: {x: 0, y: 0, z: 0.2} diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index c798e87..bb6e4f9 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -1933,6 +1933,52 @@ Prefab: m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} m_IsPrefabAsset: 0 +--- !u!1001 &294711393 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_LocalRotation.x + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_RootOrder + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 1507530396552222, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} + m_IsPrefabAsset: 0 --- !u!1001 &296469258 Prefab: m_ObjectHideFlags: 0 @@ -7652,43 +7698,43 @@ Prefab: objectReference: {fileID: 0} - target: {fileID: 1258213056334190, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1361199117965970, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1279753824129228, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1076956229501808, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1852215713901966, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1065768404458646, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1705574593270298, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1246922315647794, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1617057268946778, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1889529610353062, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_Layer - value: 10 + value: 14 objectReference: {fileID: 0} - target: {fileID: 1361199117965970, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: m_IsActive diff --git a/Assets/Scripts/Boss Core/AI/AIPhase.cs b/Assets/Scripts/Boss Core/AI/AIPhase.cs index b1aa8ad..15f80aa 100644 --- a/Assets/Scripts/Boss Core/AI/AIPhase.cs +++ b/Assets/Scripts/Boss Core/AI/AIPhase.cs @@ -9,11 +9,26 @@ namespace AI { public partial class AIPhase { - // What's the amount of health we have this phase? + /// + /// What's the amount of health we have this phase? + /// + /// The max health. public int MaxHealth { get; set; } = 100; - // How big is the arena this phase? + /// + /// How big is the arena this phase? + /// + /// The max arena radius. public float MaxArenaRadius { get; set; } = 50f; + + /// + /// If this value is true, we adjust the probability weights of the moves to be + /// closer to the global difficulty parameter. This parameter is based on how + /// aggressive the player is + how much damage they've taken recently (indicating + /// their proficiency at this difficulty). + /// + /// true if dynamic difficulty; otherwise, false. + public bool DynamicDifficulty { get; set; } = false; private List phaseSequences; private List scriptedSequences; diff --git a/Assets/Scripts/Boss Core/AI/AIRoutine.cs b/Assets/Scripts/Boss Core/AI/AIRoutine.cs new file mode 100644 index 0000000..6b0eaa4 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/AIRoutine.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AI +{ + public class AIRoutine + { + public List Phases { get; private set; } + public AIPhase CurrentPhase + { + get + { + return phaseIndex > Phases.Count ? null : Phases[phaseIndex]; + } + } + private int phaseIndex = -1; + + public AIRoutine() { + Phases = new List(); + } + + public AIPhase NextPhase() { + phaseIndex++; + return CurrentPhase; + } + + public void Reset() { + phaseIndex = -1; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/AIRoutine.cs.meta b/Assets/Scripts/Boss Core/AI/AIRoutine.cs.meta new file mode 100644 index 0000000..2975dbf --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/AIRoutine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05873f5566ce1408393733780e1c5fae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/AISequence.cs b/Assets/Scripts/Boss Core/AI/AISequence.cs index 48805ec..69c2916 100644 --- a/Assets/Scripts/Boss Core/AI/AISequence.cs +++ b/Assets/Scripts/Boss Core/AI/AISequence.cs @@ -39,7 +39,7 @@ private static void CheckAllowInstantiation() public static ProxyVector3 PLAYER_POSITION = new ProxyVector3(() => { return GameManager.Player.transform.position + World.Arena.CENTER; }); public static ProxyVector3 DELAYED_PLAYER_POSITION = new ProxyVector3(() => { - return BossController.isPlayerLocked ? BossController.playerLockPosition : GameManager.Player.transform.position + World.Arena.CENTER; + return GameManager.Boss.isPlayerLocked ? GameManager.Boss.playerLockPosition : GameManager.Player.transform.position + World.Arena.CENTER; }); public static ProxyVector3 BOSS_POSITION = new ProxyVector3(() => { return GameManager.Boss.transform.position; }); public static ProxyVector3 RANDOM_IN_ARENA = new ProxyVector3(() => diff --git a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs b/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs index 44c8583..c567ed5 100644 --- a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs +++ b/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs @@ -7,35 +7,7 @@ namespace AI { public partial class AIPhase - { - - //public static AIPhase PHASE_TEST = new AIPhase() - //.AddSequence(10, HOMING_STRAFE_WAVE_SHOOT) - // ; - public static AIPhase PHASE_TEST; - - /* - * Teaches the player basic movement and throwing. - * - * Should consist of moves that are easy to dodge by running or dashing, - * and have plenty of time in between to throw a shield. - * - * Should probably disable shield blocking for this phase. - */ - public static AIPhase PHASE_TUTORIAL_1; - - /* - * Teaches the player that the shield exists. - * - * Should consist of both dashing and blocking attacks, with plenty - * of time to throw shield between. - */ - public static AIPhase PHASE_TUTORIAL_2; - - /* - * Introduces AOEs (and how shield interacts with them). - */ - public static AIPhase PHASE_TUTORIAL_3; + { public static AIPhase PHASE1; @@ -65,56 +37,11 @@ public partial class AIPhase /* * TODO: Add some form of progress indicator to this. - * TODO: Make this load in Phases dynamically (like moves are) */ public static void Load() { AISequence.ShouldAllowInstantiation = true; - PHASE_TEST = new AIPhase() - //.AddSequence(10, Moves.Basic.PINCER) - .AddSequence(10, new Moves.Test.Lightning_Arena().Times(2)) - .AddSequence(10, new Moves.Test.Quick_Waves()) - .AddSequence(10, new Moves.Test.Double_Laser_Sweep_AOE()) - .AddSequence(10, new Moves.Test.Double_Laser_Sweep()) - .AddSequence(10, new Moves.Test.Pincer_Sweep()) - //.AddScriptedSequence(0, new Moves.Test.Test().Times(75)) - //.AddSequence(10, AISequence.Pause(100f)) - .AddSequence(10, new Moves.Test.SpinReverse().Wait(2f)) - .AddSequence(10, new Moves.Test.Random_Leading()) - .AddSequence(10, new Moves.Test.Sniper_Final()) - .AddSequence(10, new Moves.Basic.Shoot_Death_Hex()) - ; - - PHASE_TUTORIAL_1 = new AIPhase() - //.SetMaxHealth(20) - //.SetMaxArenaRadius(0.75f * 50f) - .AddSequence(10, new Moves.Basic.Sweep().Wait(1f)) - .AddSequence(10, new Moves.Basic.Sweep(reverse: true).Wait(1f)) - .AddSequence(10, new Moves.Basic.Sweep_Back_And_Forth().Wait(1f)) - .AddSequence(10, new Moves.Basic.Sweep_Both().Wait(1f)) - .AddSequence(10, new Moves.Tutorial1.Shoot_1_Several()) - .AddSequence(10, new Moves.Tutorial1.Shoot_3_Several()) - .AddSequence(3, new Moves.Tutorial1.Shoot_Arc(70)) - .AddSequence(4, new Moves.Tutorial1.Shoot_Arc(120)) - .AddSequence(3, new Moves.Tutorial1.Shoot_Arc(150)) - .AddSequence(3, new Moves.Tutorial1.Shoot_Arc(70, true)) - .AddSequence(4, new Moves.Tutorial1.Shoot_Arc(120, true)) - .AddSequence(3, new Moves.Tutorial1.Shoot_Arc(150, true)) - ; - - PHASE_TUTORIAL_2 = new AIPhase() - //.SetMaxHealth(20) - .AddSequence(10, new Moves.Tutorial2.Force_Block()) - ; - - PHASE_TUTORIAL_3 = new AIPhase() - //.SetMaxHealth(20) - .AddSequence(10, new Moves.Basic.AOE_131()) - .AddSequence(10, new Moves.Tutorial3.Shoot_AOE(90)) - .AddSequence(10, new Moves.Tutorial3.Shoot_AOE(120)) - .AddSequence(10, new Moves.Tutorial3.Shoot_AOE(360)) - ; - + /* PHASE1 = new AIPhase() //.AddSequence(10, SHOOT3_WAVE3) .AddSequence(10, new Moves.Basic.Shoot_2_Waves()) @@ -152,6 +79,7 @@ public static void Load() { .AddScriptedSequence(3, new Moves.Basic.Shoot1(new Projectiles.ProjectileHoming()).Wait(1f)) .AddScriptedSequence(4, new Moves.Basic.Shoot1(new Projectiles.ProjectileLightning()).Wait(1f)); ; + */ } } diff --git a/Assets/Scripts/Boss Core/AOE/AOE.cs b/Assets/Scripts/Boss Core/AOE/AOE.cs index 46f2abd..7cd8455 100644 --- a/Assets/Scripts/Boss Core/AOE/AOE.cs +++ b/Assets/Scripts/Boss Core/AOE/AOE.cs @@ -133,7 +133,7 @@ public void ShouldDestroyOnOutOfBounds(bool to) { #endregion - public AOE() : this(BossController.self) { } + public AOE() : this(GameManager.Boss.self) { } public AOE(Entity self) { diff --git a/Assets/Scripts/Boss Core/BossController.cs b/Assets/Scripts/Boss Core/BossController.cs index 4395b74..fdb994b 100644 --- a/Assets/Scripts/Boss Core/BossController.cs +++ b/Assets/Scripts/Boss Core/BossController.cs @@ -20,43 +20,31 @@ public class BossController : MonoBehaviour { // Toggles insane mode. This just makes everything a living hell. // Specifically, every waiting period is reduced and movement speed is buffed. - public static bool insaneMode; + public bool insaneMode; [SerializeField] public bool DebugMode = true; // The Entity representing this faction. Assigned to projectiles we create. - public static CombatCore.Entity self; - public static string BOSS_NAME = "Boss"; + public CombatCore.Entity self; // Used for the "PlayerLock" move. Keeps track of the current player position // for events and sequences that need a slightly out of date version. - public static Vector3 playerLockPosition; - public static bool isPlayerLocked; + public Vector3 playerLockPosition; // Should only be accessed via DelayedPlayerPosition. + public bool isPlayerLocked; // Should only be set via PlayerLock() AISequence. // Phase iteration logic - private static List phases; - private static AIPhase currentPhase; - private static int phaseIndex = -1; + private AIRoutine routine; // Event queue variables. How we schedule our attacks. - private static Queue queuedSequences; - private static Queue events; - private static bool paused; - private static bool running; + private Queue queuedSequences; + private bool paused; + private bool running = true; - private void Awake() + void Awake() { - //eventQueue = new EventQueue(); - //eventQueue = GameManager.EventQueue; - - queuedSequences = new Queue(); - events = new Queue(); - paused = false; - running = true; - self = GetComponent(); - self.name = BOSS_NAME; + queuedSequences = new Queue(); } // Use this for initialization @@ -66,16 +54,26 @@ void Start() AIPhase.Load(); Profiler.EndSample(); + AIRoutine mainRoutine = new AIRoutine + { + Phases = { + new Phases.Phase_Tutorial_1(), + new Phases.Phase_Tutorial_2(), + new Phases.Phase_Tutorial_3() + } + }; - phases = new List(); + AIRoutine testRoutine = new AIRoutine + { + Phases = { + new Phases.Phase_Test() + } + }; - //phases.Add(AIPhase.PHASE_TUTORIAL_1); - //phases.Add(AIPhase.PHASE_TUTORIAL_2); - //phases.Add(AIPhase.PHASE_TUTORIAL_3); - //phases.Add(AIPhase.PHASE1); - phases.Add(AIPhase.PHASE_TEST); - //phases.Add(AIPhase.PHASE_UNIT_TEST); + routine = mainRoutine; + //routine = testRoutine; + // Kick off the execution engine StartCoroutine(ExecuteQueue()); NextPhase(); } @@ -83,15 +81,13 @@ void Start() /* * Transitions to the next phase by loading in the next set of moves. */ - public static void NextPhase() { - phaseIndex++; - if (phaseIndex > phases.Count) { - Debug.LogError("You win!"); - } + public void NextPhase() { + queuedSequences.Clear(); + + routine.NextPhase(); - currentPhase = phases[phaseIndex]; - self.healthMax = currentPhase.maxHealth; - GameManager.Arena.RadiusInWorldUnits = currentPhase.maxArenaRadius; + self.healthMax = routine.CurrentPhase.MaxHealth; + GameManager.Arena.RadiusInWorldUnits = routine.CurrentPhase.MaxArenaRadius; // Heal up to the new max health. CombatCore.Entity.HealEntity(self, float.PositiveInfinity); @@ -99,9 +95,23 @@ public static void NextPhase() { self.SetInvincible(true); Add(new Moves.Basic.Teleport(World.Arena.CENTER).Wait(3f)); Add(new AISequence(() => { self.SetInvincible(false); })); + } + + public void ResetBoss() + { + // Flush the execution engine + StopCoroutine("Dash"); + StopCoroutine("Glare"); + StopCoroutine("Execute"); + StopCoroutine("ExecuteAsync"); + queuedSequences.Clear(); + + // Reset the routine and restart it + routine.Reset(); + NextPhase(); } - public static void Add(AISequence sequence) + public void Add(AISequence sequence) { if (GameManager.Boss.DebugMode) { @@ -145,7 +155,7 @@ void Update() // If the queue ran out of events, pull the next AISequence in the phase if (queuedSequences.Count == 0) { - Add(currentPhase.GetNext()); + Add(routine.CurrentPhase.GetNext()); } } @@ -168,7 +178,7 @@ private IEnumerator ExecuteQueue() } // event queue - private static IEnumerator Execute(AISequence sequence) + private IEnumerator Execute(AISequence sequence) { if (sequence.events != null) { @@ -194,7 +204,7 @@ private static IEnumerator Execute(AISequence sequence) } } - public static void ExecuteAsync(AISequence sequence) + public void ExecuteAsync(AISequence sequence) { GameManager.Boss.StartCoroutine(Execute(sequence)); } @@ -205,7 +215,7 @@ public static void ExecuteAsync(AISequence sequence) * This happens separately from the event queue, and will pause any future * events until after this dash is completed. */ - public static IEnumerator Dash(Vector3 targetPosition) + public IEnumerator Dash(Vector3 targetPosition) { paused = true; @@ -238,7 +248,7 @@ public static IEnumerator Dash(Vector3 targetPosition) * Should be used when launching an attack at the player to let them know * about the boundless depths of white-hot furi that the boss has for them. */ - public static void Glare() + public void Glare() { Quaternion lookRotation = Quaternion.LookRotation(GameManager.Player.transform.position - GameManager.Boss.transform.position); GameManager.Boss.transform.rotation = lookRotation; diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs index 3c7ac30..8af7c57 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs @@ -12,9 +12,9 @@ public PlayerLock(bool enableLock = true) : base { if (enableLock) { - playerLockPosition = GameManager.Player.transform.position; + GameManager.Boss.playerLockPosition = GameManager.Player.transform.position; } - isPlayerLocked = enableLock; + GameManager.Boss.isPlayerLocked = enableLock; } ) { diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot1.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot1.cs index 4300f04..f639240 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot1.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot1.cs @@ -10,7 +10,7 @@ public Shoot1(Projectile skeleton = null) : base ( () => { - Glare(); + GameManager.Boss.Glare(); Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); newStruc.Create(); diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot3.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot3.cs index 32193d3..7c8cf3a 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot3.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot3.cs @@ -11,7 +11,7 @@ public Shoot3(Projectile skeleton = null) : base ( () => { - Glare(); + GameManager.Boss.Glare(); for (int i = 0; i < 3; i++) { diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootAOE.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootAOE.cs index e36f164..1cadef0 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootAOE.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootAOE.cs @@ -11,8 +11,8 @@ public class ShootAOE : AISequence public ShootAOE(AOE skeleton = null) : base ( () => - { - Glare(); + { + GameManager.Boss.Glare(); skeleton = skeleton != null ? skeleton.Clone() : new AOE(); skeleton.Create(); } diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs index 404d063..bb151d3 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs @@ -12,7 +12,7 @@ public ShootArc(int density = 50, float from = 0, float to = 360, Projectile ske () => { //long start = System.DateTime.Now.Ticks; - Glare(); + GameManager.Boss.Glare(); // Ensure that "from" is always less than "to". if (to < from) diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs index 9053eab..068c203 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs @@ -12,12 +12,12 @@ public class Strafe : AISequence ( () => { - self.movespeed.LockTo(speed); + GameManager.Boss.self.movespeed.LockTo(speed); Vector3 oldPosVector = GameManager.Boss.transform.position - center; Quaternion rot = Quaternion.AngleAxis(degrees, clockwise ? Vector3.up : Vector3.down); - GameManager.Boss.StartCoroutine(Dash((rot * oldPosVector) + center)); + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash((rot * oldPosVector) + center)); } ) {} diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs index b7d76ef..7566dd9 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs @@ -1,6 +1,4 @@ using AI; -using Projectiles; -using static BossController; using UnityEngine; namespace Moves.Basic @@ -11,11 +9,11 @@ public Teleport(Vector3? target = null, int speed = 25) : base ( () => { - self.movespeed.LockTo(speed); + GameManager.Boss.self.movespeed.LockTo(speed); if (target.HasValue) { - GameManager.Boss.StartCoroutine(Dash(target.Value)); - Glare(); + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(target.Value)); + GameManager.Boss.Glare(); return; } @@ -54,9 +52,9 @@ public Teleport(Vector3? target = null, int speed = 25) : base } while (rawPosition.magnitude > 50f); rawPosition.y = 1.31f; - GameManager.Boss.StartCoroutine(Dash(rawPosition)); + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(rawPosition)); - Glare(); + GameManager.Boss.Glare(); } ) { diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Test.cs b/Assets/Scripts/Boss Core/Phases/Phase_Test.cs index 166d9c1..6a6f3ed 100644 --- a/Assets/Scripts/Boss Core/Phases/Phase_Test.cs +++ b/Assets/Scripts/Boss Core/Phases/Phase_Test.cs @@ -7,10 +7,18 @@ namespace Phases { public class Phase_Test : AIPhase - { - + { public Phase_Test() { + AddSequence(10, new Moves.Test.Lightning_Arena().Times(2)); + AddSequence(10, new Moves.Test.Quick_Waves()); + AddSequence(10, new Moves.Test.Double_Laser_Sweep_AOE()); + AddSequence(10, new Moves.Test.Double_Laser_Sweep()); + AddSequence(10, new Moves.Test.Pincer_Sweep()); + AddSequence(10, new Moves.Test.SpinReverse().Wait(2f)); + AddSequence(10, new Moves.Test.Random_Leading()); + AddSequence(10, new Moves.Test.Sniper_Final()); + AddSequence(10, new Moves.Basic.Shoot_Death_Hex()); } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs new file mode 100644 index 0000000..7b5078d --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Phases +{ + public class Phase_Tutorial_1 : AIPhase + { + public Phase_Tutorial_1() + { + MaxHealth = 20; + MaxArenaRadius = 0.75f * 50f; + + AddSequence(10, new Moves.Basic.Sweep().Wait(1f)); + AddSequence(10, new Moves.Basic.Sweep(reverse: true).Wait(1f)); + AddSequence(10, new Moves.Basic.Sweep_Back_And_Forth().Wait(1f)); + AddSequence(10, new Moves.Basic.Sweep_Both().Wait(1f)); + AddSequence(10, new Moves.Tutorial1.Shoot_1_Several()); + AddSequence(10, new Moves.Tutorial1.Shoot_3_Several()); + AddSequence(3, new Moves.Tutorial1.Shoot_Arc(70)); + AddSequence(4, new Moves.Tutorial1.Shoot_Arc(120)); + AddSequence(3, new Moves.Tutorial1.Shoot_Arc(150)); + AddSequence(3, new Moves.Tutorial1.Shoot_Arc(70, true)); + AddSequence(4, new Moves.Tutorial1.Shoot_Arc(120, true)); + AddSequence(3, new Moves.Tutorial1.Shoot_Arc(150, true)); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs.meta b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs.meta new file mode 100644 index 0000000..d04d870 --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af786d74db30d4da4ae629c17edc39f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs new file mode 100644 index 0000000..feaa083 --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Phases +{ + public class Phase_Tutorial_2 : AIPhase + { + public Phase_Tutorial_2() + { + MaxHealth = 20; + + AddSequence(10, new Moves.Tutorial2.Force_Block()); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs.meta b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs.meta new file mode 100644 index 0000000..24cbfca --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ff2a7efd99204d5a89bf105f7bd1c9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs new file mode 100644 index 0000000..a6b8bcd --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Phases +{ + public class Phase_Tutorial_3 : AIPhase + { + public Phase_Tutorial_3() + { + MaxHealth = 20; + + AddSequence(10, new Moves.Basic.AOE_131()); + AddSequence(10, new Moves.Tutorial3.Shoot_AOE(90)); + AddSequence(10, new Moves.Tutorial3.Shoot_AOE(120)); + AddSequence(10, new Moves.Tutorial3.Shoot_AOE(360)); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs.meta b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs.meta new file mode 100644 index 0000000..521c6ef --- /dev/null +++ b/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e875cb8c9ce82400fb6cdd33b4313c4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Projectile/Projectile.cs b/Assets/Scripts/Boss Core/Projectile/Projectile.cs index 7e7f5e6..8c44862 100644 --- a/Assets/Scripts/Boss Core/Projectile/Projectile.cs +++ b/Assets/Scripts/Boss Core/Projectile/Projectile.cs @@ -46,7 +46,7 @@ public class Projectile #region Constructors - public Projectile() : this(BossController.self) { } + public Projectile() : this(GameManager.Boss.self) { } public Projectile(Entity entity) { diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs index a4bd4fe..6461995 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs @@ -120,7 +120,7 @@ void Update() if (currentTime >= maxTime) { - BossController.ExecuteAsync(data.OnDestroyTimeout(this)); + GameManager.Boss.ExecuteAsync(data.OnDestroyTimeout(this)); //Destroy(this.gameObject); Cleanup(); } @@ -135,7 +135,7 @@ void Update() Profiler.BeginSample("Bounds check"); if (trans.position.sqrMagnitude > 5625f) { - BossController.ExecuteAsync(data.OnDestroyOutOfBounds(this)); + GameManager.Boss.ExecuteAsync(data.OnDestroyOutOfBounds(this)); Cleanup(); } @@ -171,7 +171,7 @@ public virtual void OnTriggerEnter(Collider other) { //Debug.Log("Projectile collided, should apply damage"); Entity.DamageEntity(otherEntity, data.Entity, data.Damage); - BossController.ExecuteAsync(data.OnDestroyCollision(this)); + GameManager.Boss.ExecuteAsync(data.OnDestroyCollision(this)); Destroy(this.gameObject); } diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs index c0801ff..b2ca7cb 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs @@ -17,7 +17,7 @@ public class ProjectileCurving : Projectile private readonly bool leavesTrail; public ProjectileCurving(float curveAmount, bool leavesTrail) - : this(BossController.self, curveAmount, leavesTrail) + : this(GameManager.Boss.self, curveAmount, leavesTrail) { } public ProjectileCurving(Entity self, float curveAmount, bool leavesTrail) diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs index 8018013..e45cda7 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs @@ -8,7 +8,7 @@ namespace Projectiles public class ProjectileDeathHex : Projectile { - public ProjectileDeathHex() : this(BossController.self) { } + public ProjectileDeathHex() : this(GameManager.Boss.self) { } public ProjectileDeathHex(Entity self) : base(self) { MaxTime = 1f; diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs index 644c8a7..6b0054a 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs @@ -20,7 +20,7 @@ public class ProjectileHoming : Projectile // Was this projectile once close to the player? private bool wasClose; - public ProjectileHoming() : this(BossController.self) { } + public ProjectileHoming() : this(GameManager.Boss.self) { } public ProjectileHoming(Entity self) : base(self) { } diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs index cfc7ea5..f952434 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs @@ -16,7 +16,7 @@ public class ProjectileLightning : Projectile private int count; private readonly int numSpawners = 30; - public ProjectileLightning(int level=0) : this(BossController.self, level) { } + public ProjectileLightning(int level=0) : this(GameManager.Boss.self, level) { } public ProjectileLightning(Entity self, int level) : this(self, level, 1f) { } diff --git a/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs b/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs index 668bc4f..91eefed 100644 --- a/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs +++ b/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs @@ -18,75 +18,17 @@ public override void OnApply(Entity subject) { GameManager.HeldShield.SetActive(false); - // TODO: fix this to work properly. Projectile system will be private to Boss - // in some future release. - - // Spawns a homing projectile - ProjectileComponent homingProj = new ProjectileHoming(subject) - { - Target = target, - MaxTime = 2f, - Size = Size.MEDIUM, - OnDestroyTimeout = StopMoving, - OnDestroyOutOfBounds = StopMoving, - OnDestroyCollision = Bounce - }.Create(); - - - //.. and then makes a shield instance as a child of the projectile - GameObject.Destroy(homingProj.GetComponent()); - // Try to spawn a shield. If one exists (it shouldn't), fail. if (GameManager.ThrownShield == null) { GameManager.ThrownShield = GameObject.Instantiate(Resources.Load("Prefabs/Shield")); GameManager.ThrownShield.name = "Thrown Shield"; GameManager.ThrownShield.transform.position = subject.transform.position; - GameManager.ThrownShield.transform.parent = homingProj.transform; + //GameManager.ThrownShield.transform.parent = homingProj.transform; GameManager.ThrownShield.GetComponent().shouldReset = false; } } - // Just make the shield freeze - private static readonly ProjectileCallback StopMoving = (self) => - { - Transform child = self.transform.GetChild(0); - Rigidbody body = child.GetComponent(); - self.gameObject.AddComponent(); - - body.useGravity = true; - body.isKinematic = false; - body.velocity = Vector3.zero; - - self.transform.GetChild(0).GetComponent().shouldReset = true; - self.transform.GetChild(0).parent = null; - return AI.AISequence.Pause(0f); - }; - - // Makes the shield "bounce" in a randomized direction - private static readonly ProjectileCallback Bounce = (self) => - { - self.gameObject.AddComponent(); - if (self.transform.childCount < 1) return AI.AISequence.Pause(0f); - Rigidbody body = self.transform.GetChild(0).GetComponent(); - body.useGravity = true; - body.isKinematic = false; - - // Randomly choose (relative) left or right as a base direction - float degrees = Random.Range(0, 2) == 0 ? -90 : 90; - - // Add +/- 45 degrees to that direction - float offset = Random.Range(-1f, 1f); - degrees += offset * 45f; - - // Then make the shield go that way - Quaternion rotation = Quaternion.AngleAxis(degrees, Vector3.up); - body.AddForce(250f * (rotation * self.GetComponent().velocity.normalized), ForceMode.Impulse); - self.transform.GetChild(0).GetComponent().shouldReset = true; - self.transform.GetChild(0).parent = null; - return AI.AISequence.Pause(0f); - }; - public override void OnRevert(Entity subject) { GameObject.Destroy(GameManager.ThrownShield); diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index 9679ea7..6908af2 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -59,7 +59,7 @@ public static float TimeScale private GameObject thrownShield = null; [SerializeField] - private HUD hud; + private HUD hud = null; #endregion #region STATIC_METHODS @@ -79,9 +79,10 @@ public static void ResetGame() Boss.transform.position = instance.startingBossPosition; Entity bossData = Player.GetComponent (); Entity.HealEntity (bossData, float.PositiveInfinity); - bossData.ClearStatuses (); - //TODO reset boss behavior - + bossData.ClearStatuses (); + //TODO reset boss behavior + + Boss.ResetBoss(); Debug.Log ("Reset boss"); //player diff --git a/Assets/Scripts/KeepOnArena.cs b/Assets/Scripts/KeepOnArena.cs index a4025bd..6cc5ee8 100644 --- a/Assets/Scripts/KeepOnArena.cs +++ b/Assets/Scripts/KeepOnArena.cs @@ -21,7 +21,11 @@ void Update () { { float randomDegrees = Random.Range(0f, 359f); float randomWidth = Random.Range(5f, GameManager.Arena.RadiusInWorldUnits); - transform.position = (Quaternion.AngleAxis(randomDegrees, Vector3.up) * (randomWidth * Vector3.forward)) + Vector3.up * 10f; + transform.position = (Quaternion.AngleAxis(randomDegrees, Vector3.up) * (randomWidth * Vector3.forward)) + Vector3.up * 10f; + + if (GetComponent() != null) { + GetComponent().velocity = Vector3.zero; + } } } } diff --git a/Assets/Scripts/ThrownShield.cs b/Assets/Scripts/ThrownShield.cs new file mode 100644 index 0000000..d8cc334 --- /dev/null +++ b/Assets/Scripts/ThrownShield.cs @@ -0,0 +1,160 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using CombatCore; + +public class ThrownShield : MonoBehaviour { + + private Entity entity; + private Transform bossTransform; + + private Rigidbody body; + private KeepOnArena keepOnArenaScript; + + // How fast do we move? + private const BossCore.Speed speed = BossCore.Speed.LIGHTNING; + + // How many degrees per update can the shield rotate? + // Proportional to the speed; more curve at higher speeds. + private const float homingScale = (float)speed / 7f; + + // Was this projectile once close to the boss? + private bool wasClose; + + private float curDivergence; + private float maxDivergence = 110f; + + private float currentTime; + private const float maxTime = 2f; + + private bool shouldUpdate = true; + + // Use this for initialization + void Start () { + entity = GetComponent(); + bossTransform = GameManager.Boss.transform; + + body = GetComponent(); + keepOnArenaScript = GetComponent(); + + //body.velocity = (float)speed * (bossTransform.position - transform.position).normalized; + body.velocity = (float)speed * (GameManager.Player.GetDashTargetPoint() - transform.position).normalized; + } + + // Update is called once per frame + void Update () { + if (!shouldUpdate) { + return; + } + + // Out of time + currentTime += Time.deltaTime; + if (currentTime > maxTime) { + StopUpdating(); + } + + // Out of bounds + if (transform.position.magnitude > GameManager.Arena.RadiusInWorldUnits) + { + StopUpdating(); + } + + // Calculate the ideal values (i.e., where we want to face to hit the boss) + Vector3 idealVelocity = ((float)speed) * (bossTransform.position - transform.position).normalized; + float idealRotation = Vector3.SignedAngle(idealVelocity, body.velocity, Vector3.up); + + // Calculate distance between the shield and the boss + float distance = Vector3.Distance(bossTransform.position, transform.position); + + // If this is our first time close to the boss, set the respective flag + if (!wasClose && distance < 10f) + { + wasClose = true; + } + + // If we are too far away (and were close to boss), stop tracking + // If we curved the maximum amount possible in our lifetime, stop tracking + if ((wasClose && distance > 10f) || curDivergence >= maxDivergence) + { + return; + } + + // Feathering; we want to have a weak, tapered homing effect far away from the boss. + float feathering = 1f; + if (distance > 10f && distance < 25f) + { + feathering = (25f - distance) / 15f; + } + + // If we're within a certain amount of degrees offset from the boss, home in on him + if (Mathf.Abs(idealRotation) < 180f) + { + Quaternion rot = Quaternion.AngleAxis(-Mathf.Sign(idealRotation) * homingScale * feathering, Vector3.up); + body.velocity = rot * body.velocity; + curDivergence += homingScale; + } + //Debug.Log("Current velocity magnitude: " + body.velocity.magnitude); + } + + public void OnShieldTriggerEntered(Collider other) + { + if (!shouldUpdate) + { + return; + } + + GameObject otherObject = other.gameObject; + Entity otherEntity = otherObject.GetComponentInParent(); + Debug.Log(otherObject.name); + if (otherEntity != null) + { + // Do damage if the target isn't invincible and not on our team + if (otherEntity.GetFaction() != Entity.Faction.player) + { + if (!otherEntity.IsInvincible()) + { + Entity.DamageEntity(otherEntity, entity, 5f); + } + Bounce(); + } + } + } + + // Just stop updating the shield; velocity will decay + private void StopUpdating() + { + shouldUpdate = false; + + body.useGravity = true; + body.isKinematic = false; + + // Make sure it'll stay on the arena + keepOnArenaScript.shouldReset = true; + } + + // Bounce off the boss + private void Bounce() + { + shouldUpdate = false; + + body.useGravity = true; + body.isKinematic = false; + + // Randomly choose straight left or right as a base direction + float degrees = Random.Range(0, 2) == 0 ? -90 : 90; + + // Add a +/- 45 degree offset from the base + float offset = Random.Range(-1f, 1f); + degrees += offset * 45f; + + // Make the shield go that way + Quaternion rotation = Quaternion.AngleAxis(degrees, Vector3.up); + Vector3 force = rotation * body.velocity.normalized; + body.velocity = Vector3.zero; + body.AddForce(250f * force, ForceMode.Impulse); + + // Make sure the shield stays on the arena + keepOnArenaScript.shouldReset = true; + } +} diff --git a/Assets/Scripts/ThrownShield.cs.meta b/Assets/Scripts/ThrownShield.cs.meta new file mode 100644 index 0000000..0ebd1b1 --- /dev/null +++ b/Assets/Scripts/ThrownShield.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ead5bed827a7c40198a19b7ac5172c78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ThrownShieldTrigger.cs b/Assets/Scripts/ThrownShieldTrigger.cs new file mode 100644 index 0000000..1f32ab9 --- /dev/null +++ b/Assets/Scripts/ThrownShieldTrigger.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +/* + * Very basic pass-through for the thrown shield. + * We want the shield on a layer separate from the boss (so that it doesn't clip + * into him), but it still needs to have a trigger for detecting collisions. + */ +public class ThrownShieldTrigger : MonoBehaviour { + + private ThrownShield shield; + + // Use this for initialization + void Start () { + shield = GetComponentInParent(); + } + + private void OnTriggerEnter(Collider other) + { + shield.OnShieldTriggerEntered(other); + } +} diff --git a/Assets/Scripts/ThrownShieldTrigger.cs.meta b/Assets/Scripts/ThrownShieldTrigger.cs.meta new file mode 100644 index 0000000..669921c --- /dev/null +++ b/Assets/Scripts/ThrownShieldTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5aa3fd8e627444c69b97187b32a0291 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/Elements/BossHealthBar.cs b/Assets/Scripts/UI/Elements/BossHealthBar.cs index 2bb5f7f..060a42f 100644 --- a/Assets/Scripts/UI/Elements/BossHealthBar.cs +++ b/Assets/Scripts/UI/Elements/BossHealthBar.cs @@ -106,7 +106,7 @@ private IEnumerator TransitionPhases() activeBar = transform.GetChild (activeBarIndex).GetComponent (); prevBar.Front.fillAmount = 0f; - BossController.NextPhase(); + GameManager.Boss.NextPhase(); for (float dur = phaseTransitionDuration, initDur = dur; dur > 0f; dur -= Time.deltaTime) { diff --git a/ProjectSettings/DynamicsManager.asset b/ProjectSettings/DynamicsManager.asset index 69d870a..27959d1 100644 --- a/ProjectSettings/DynamicsManager.asset +++ b/ProjectSettings/DynamicsManager.asset @@ -17,7 +17,7 @@ PhysicsManager: m_ClothInterCollisionDistance: 0 m_ClothInterCollisionStiffness: 0 m_ContactsGeneration: 1 - m_LayerCollisionMatrix: ff8cffffff8cffffff8cffffffffffffff8cffffff8cffffffffffffffffffffc894ffffc884ffffff8fffffffacffffc881ffffc8c8ffffc8a0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff + m_LayerCollisionMatrix: ff0cffffff0cffffff0cffffffffffffff0cffffff0cffffffffffffffffffffc814ffffc804ffffff2fffffff2cffffc821ffffc81cffffc880ffffc840ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff m_AutoSimulation: 1 m_AutoSyncTransforms: 1 m_ClothInterCollisionSettingsToggle: 0 diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset index 5229afa..83616de 100644 --- a/ProjectSettings/TagManager.asset +++ b/ProjectSettings/TagManager.asset @@ -20,7 +20,7 @@ TagManager: - Shield - Shield_Object - Boss - - + - Shield_Object_Trigger - - - From 4592e682b3cbdecc2898453583a82f128c994640 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Mon, 29 Oct 2018 23:10:44 -0500 Subject: [PATCH 03/33] TODO fix shield; when it goes OOB gravity makes it go down and homing makes it YEET and shooting stars meme --- Assets/Resources/Prefabs/Shield.prefab | 8 ++-- Assets/Scenes/BossScene.unity | 46 ------------------- Assets/Scripts/Boss Core/AOE/AOE.cs | 10 ++-- .../Boss Core/Moves/Test/Quick_Waves.cs | 1 - Assets/Scripts/Boss Core/Moves/Test/Test.cs | 1 - .../StatusComponents/ShieldThrown.cs | 2 +- Assets/Scripts/ThrownShield.cs | 1 + Assets/Scripts/UI/Elements/HUD.cs | 2 +- GlobalSuppressions.cs | 5 ++ 9 files changed, 18 insertions(+), 58 deletions(-) create mode 100644 GlobalSuppressions.cs diff --git a/Assets/Resources/Prefabs/Shield.prefab b/Assets/Resources/Prefabs/Shield.prefab index a6ab460..c6f5f51 100644 --- a/Assets/Resources/Prefabs/Shield.prefab +++ b/Assets/Resources/Prefabs/Shield.prefab @@ -127,12 +127,12 @@ Rigidbody: m_GameObject: {fileID: 1507530396552222} serializedVersion: 2 m_Mass: 10 - m_Drag: 1 - m_AngularDrag: 0.25 + m_Drag: 0 + m_AngularDrag: 0 m_UseGravity: 0 m_IsKinematic: 0 m_Interpolate: 0 - m_Constraints: 0 + m_Constraints: 112 m_CollisionDetection: 0 --- !u!64 &64894460222652124 MeshCollider: @@ -212,5 +212,5 @@ SphereCollider: m_IsTrigger: 1 m_Enabled: 1 serializedVersion: 2 - m_Radius: 1 + m_Radius: 2 m_Center: {x: 0, y: 0, z: 0.2} diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index bb6e4f9..b286fa8 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -1933,52 +1933,6 @@ Prefab: m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} m_IsPrefabAsset: 0 ---- !u!1001 &294711393 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_LocalRotation.x - value: -0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 4835478478862716, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_RootOrder - value: 11 - objectReference: {fileID: 0} - - target: {fileID: 1507530396552222, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 5eaae6381bb6d4abc91bd8d41c41e324, type: 2} - m_IsPrefabAsset: 0 --- !u!1001 &296469258 Prefab: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Boss Core/AOE/AOE.cs b/Assets/Scripts/Boss Core/AOE/AOE.cs index 7cd8455..4b58d56 100644 --- a/Assets/Scripts/Boss Core/AOE/AOE.cs +++ b/Assets/Scripts/Boss Core/AOE/AOE.cs @@ -14,10 +14,12 @@ public class AOE // This is a hack. It works, but the compiler will give a warning about hiding // the outer method. There's probably a better way, but this gives nice syntax. - - //public class RegionObj { - // public RegionObj On(float from, float to) { - // // Do the actual math here +// public class RegionObj { +//#pragma warning disable RECS0146 // Member hides static member from outer class +// public RegionObj On(float from, float to) +// { +//#pragma warning restore RECS0146 // Member hides static member from outer class + // // Do the actual math here // return new RegionObj(); // } //} diff --git a/Assets/Scripts/Boss Core/Moves/Test/Quick_Waves.cs b/Assets/Scripts/Boss Core/Moves/Test/Quick_Waves.cs index 6b21a00..9cbed23 100644 --- a/Assets/Scripts/Boss Core/Moves/Test/Quick_Waves.cs +++ b/Assets/Scripts/Boss Core/Moves/Test/Quick_Waves.cs @@ -7,7 +7,6 @@ using Projectiles; using AOEs; using BossCore; -using static BossController; namespace Moves.Test { diff --git a/Assets/Scripts/Boss Core/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/Moves/Test/Test.cs index cc9a051..9a431a7 100644 --- a/Assets/Scripts/Boss Core/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/Moves/Test/Test.cs @@ -38,7 +38,6 @@ public Test() : base new ShootArc(500, 0, 360, new Projectile { MaxTime = 2f }).Wait(0.05f) ) { - } } } diff --git a/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs b/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs index 91eefed..9387e46 100644 --- a/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs +++ b/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs @@ -23,7 +23,7 @@ public override void OnApply(Entity subject) { GameManager.ThrownShield = GameObject.Instantiate(Resources.Load("Prefabs/Shield")); GameManager.ThrownShield.name = "Thrown Shield"; - GameManager.ThrownShield.transform.position = subject.transform.position; + GameManager.ThrownShield.transform.position = subject.transform.position + World.Arena.CENTER; //GameManager.ThrownShield.transform.parent = homingProj.transform; GameManager.ThrownShield.GetComponent().shouldReset = false; } diff --git a/Assets/Scripts/ThrownShield.cs b/Assets/Scripts/ThrownShield.cs index d8cc334..4462144 100644 --- a/Assets/Scripts/ThrownShield.cs +++ b/Assets/Scripts/ThrownShield.cs @@ -92,6 +92,7 @@ void Update () { { Quaternion rot = Quaternion.AngleAxis(-Mathf.Sign(idealRotation) * homingScale * feathering, Vector3.up); body.velocity = rot * body.velocity; + body.velocity = new Vector3(body.velocity.x, 0, body.velocity.z); curDivergence += homingScale; } //Debug.Log("Current velocity magnitude: " + body.velocity.magnitude); diff --git a/Assets/Scripts/UI/Elements/HUD.cs b/Assets/Scripts/UI/Elements/HUD.cs index 7934738..06b8a30 100644 --- a/Assets/Scripts/UI/Elements/HUD.cs +++ b/Assets/Scripts/UI/Elements/HUD.cs @@ -16,7 +16,7 @@ public class HUD : MonoBehaviour private Image shieldIndicator = null; [SerializeField] - private Image shieldPointer; + private Image shieldPointer = null; [SerializeField] private Color[] shieldIndicatorColors = new Color[2]; diff --git a/GlobalSuppressions.cs b/GlobalSuppressions.cs new file mode 100644 index 0000000..aa734b3 --- /dev/null +++ b/GlobalSuppressions.cs @@ -0,0 +1,5 @@ + +// This file is used by Code Analysis to maintain SuppressMessage +// attributes that are applied to this project. +// Project-level suppressions either have no target or are given +// a specific target and scoped to a namespace, type, member, etc. From 03423db38be09d38dfebdffac72681b4d6c7d7c9 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Tue, 30 Oct 2018 01:25:49 -0500 Subject: [PATCH 04/33] removed global suppressions --- GlobalSuppressions.cs | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 GlobalSuppressions.cs diff --git a/GlobalSuppressions.cs b/GlobalSuppressions.cs deleted file mode 100644 index aa734b3..0000000 --- a/GlobalSuppressions.cs +++ /dev/null @@ -1,5 +0,0 @@ - -// This file is used by Code Analysis to maintain SuppressMessage -// attributes that are applied to this project. -// Project-level suppressions either have no target or are given -// a specific target and scoped to a namespace, type, member, etc. From fece0357b1ef3588775d268367637cfcb7892a03 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Tue, 30 Oct 2018 16:58:20 -0500 Subject: [PATCH 05/33] Added tweaks to homing for shield throw. Added bounciness and other silly stuff. --- Assets/PhysicsMaterials.meta | 8 ++ Assets/PhysicsMaterials/Bouncy.physicMaterial | 13 +++ .../Bouncy.physicMaterial.meta | 8 ++ Assets/Resources/Prefabs/Shield.prefab | 6 +- Assets/Scenes/BossScene.unity | 10 ++ Assets/Scripts/Boss Core/BossController.cs | 13 ++- Assets/Scripts/KeepOnArena.cs | 12 +- Assets/Scripts/ThrownShield.cs | 110 +++++++----------- 8 files changed, 102 insertions(+), 78 deletions(-) create mode 100644 Assets/PhysicsMaterials.meta create mode 100644 Assets/PhysicsMaterials/Bouncy.physicMaterial create mode 100644 Assets/PhysicsMaterials/Bouncy.physicMaterial.meta diff --git a/Assets/PhysicsMaterials.meta b/Assets/PhysicsMaterials.meta new file mode 100644 index 0000000..fc8196e --- /dev/null +++ b/Assets/PhysicsMaterials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ee45bf8d0de6492c869c6f0eab6ca8d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PhysicsMaterials/Bouncy.physicMaterial b/Assets/PhysicsMaterials/Bouncy.physicMaterial new file mode 100644 index 0000000..fd4ad7c --- /dev/null +++ b/Assets/PhysicsMaterials/Bouncy.physicMaterial @@ -0,0 +1,13 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!134 &13400000 +PhysicMaterial: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Bouncy + dynamicFriction: 0.6 + staticFriction: 0.6 + bounciness: 1 + frictionCombine: 0 + bounceCombine: 0 diff --git a/Assets/PhysicsMaterials/Bouncy.physicMaterial.meta b/Assets/PhysicsMaterials/Bouncy.physicMaterial.meta new file mode 100644 index 0000000..79747e0 --- /dev/null +++ b/Assets/PhysicsMaterials/Bouncy.physicMaterial.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c312a3df19ece4f449a4ff753efa6599 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 13400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Prefabs/Shield.prefab b/Assets/Resources/Prefabs/Shield.prefab index c6f5f51..5ad2250 100644 --- a/Assets/Resources/Prefabs/Shield.prefab +++ b/Assets/Resources/Prefabs/Shield.prefab @@ -132,7 +132,7 @@ Rigidbody: m_UseGravity: 0 m_IsKinematic: 0 m_Interpolate: 0 - m_Constraints: 112 + m_Constraints: 116 m_CollisionDetection: 0 --- !u!64 &64894460222652124 MeshCollider: @@ -140,7 +140,7 @@ MeshCollider: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1507530396552222} - m_Material: {fileID: 0} + m_Material: {fileID: 13400000, guid: c312a3df19ece4f449a4ff753efa6599, type: 2} m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 3 @@ -212,5 +212,5 @@ SphereCollider: m_IsTrigger: 1 m_Enabled: 1 serializedVersion: 2 - m_Radius: 2 + m_Radius: 1 m_Center: {x: 0, y: 0, z: 0.2} diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index b286fa8..70c895c 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -7717,6 +7717,16 @@ Prefab: - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: DebugMode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + propertyPath: isPlayerLocked + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + propertyPath: Chill value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] diff --git a/Assets/Scripts/Boss Core/BossController.cs b/Assets/Scripts/Boss Core/BossController.cs index fdb994b..f51ca87 100644 --- a/Assets/Scripts/Boss Core/BossController.cs +++ b/Assets/Scripts/Boss Core/BossController.cs @@ -20,10 +20,14 @@ public class BossController : MonoBehaviour { // Toggles insane mode. This just makes everything a living hell. // Specifically, every waiting period is reduced and movement speed is buffed. - public bool insaneMode; + [SerializeField] + private bool insaneMode; + + [SerializeField] + private bool DebugMode = true; [SerializeField] - public bool DebugMode = true; + private bool Chill = false; // The Entity representing this faction. Assigned to projectiles we create. public CombatCore.Entity self; @@ -149,8 +153,9 @@ public void Add(AISequence sequence) // Update is called once per frame void Update() { - // Every frame, prompt the queue for then next event. - //GameManager.EventQueue.Update(); + if (Chill) { + return; + } // If the queue ran out of events, pull the next AISequence in the phase if (queuedSequences.Count == 0) diff --git a/Assets/Scripts/KeepOnArena.cs b/Assets/Scripts/KeepOnArena.cs index 6cc5ee8..d310a7a 100644 --- a/Assets/Scripts/KeepOnArena.cs +++ b/Assets/Scripts/KeepOnArena.cs @@ -6,10 +6,11 @@ public class KeepOnArena : MonoBehaviour { public bool shouldReset = false; + private Rigidbody body; // Use this for initialization void Start () { - + this.body = GetComponent(); } // Update is called once per frame @@ -23,8 +24,13 @@ void Update () { float randomWidth = Random.Range(5f, GameManager.Arena.RadiusInWorldUnits); transform.position = (Quaternion.AngleAxis(randomDegrees, Vector3.up) * (randomWidth * Vector3.forward)) + Vector3.up * 10f; - if (GetComponent() != null) { - GetComponent().velocity = Vector3.zero; + if (body != null) + { + Debug.Log("YEET"); + body.velocity = Vector3.zero; + body.drag = 0f; + //body.AddForce(100f * new Vector3(0f, -1f, 0f), ForceMode.Impulse); + body.AddForceAtPosition(100f * Vector3.down, new Vector3(Random.value, 0f, Random.value)); } } } diff --git a/Assets/Scripts/ThrownShield.cs b/Assets/Scripts/ThrownShield.cs index 4462144..9c4b6d6 100644 --- a/Assets/Scripts/ThrownShield.cs +++ b/Assets/Scripts/ThrownShield.cs @@ -13,22 +13,15 @@ public class ThrownShield : MonoBehaviour { private KeepOnArena keepOnArenaScript; // How fast do we move? - private const BossCore.Speed speed = BossCore.Speed.LIGHTNING; - - // How many degrees per update can the shield rotate? - // Proportional to the speed; more curve at higher speeds. - private const float homingScale = (float)speed / 7f; - - // Was this projectile once close to the boss? - private bool wasClose; - - private float curDivergence; - private float maxDivergence = 110f; + private const BossCore.Speed speed = BossCore.Speed.LIGHTNING; private float currentTime; private const float maxTime = 2f; - private bool shouldUpdate = true; + private float initialIdealRotation; + private float distance; + + private bool shouldDoDamage = true; // Use this for initialization void Start () { @@ -38,69 +31,48 @@ void Start () { body = GetComponent(); keepOnArenaScript = GetComponent(); - //body.velocity = (float)speed * (bossTransform.position - transform.position).normalized; + // Compute the angle between shield throw and the boss. Save that value body.velocity = (float)speed * (GameManager.Player.GetDashTargetPoint() - transform.position).normalized; + + Vector3 idealPosition = bossTransform.position - transform.position; + idealPosition = new Vector3(idealPosition.x, 0, idealPosition.z); + + Vector3 idealVelocity = ((float)speed) * idealPosition.normalized; + initialIdealRotation = Vector3.SignedAngle(idealVelocity, body.velocity, Vector3.up); + + // Grab the initial distance between the player and boss; used for computing curvature + distance = idealPosition.magnitude; } // Update is called once per frame void Update () { - if (!shouldUpdate) { - return; - } - - // Out of time + // Out of time; fall down and don't home anymore (disable this script) currentTime += Time.deltaTime; if (currentTime > maxTime) { - StopUpdating(); + enabled = false; + Unfreeze(); } - // Out of bounds + // Out of bounds; continue to home, but also fall down if (transform.position.magnitude > GameManager.Arena.RadiusInWorldUnits) { - StopUpdating(); + Unfreeze(); } - // Calculate the ideal values (i.e., where we want to face to hit the boss) - Vector3 idealVelocity = ((float)speed) * (bossTransform.position - transform.position).normalized; - float idealRotation = Vector3.SignedAngle(idealVelocity, body.velocity, Vector3.up); - - // Calculate distance between the shield and the boss - float distance = Vector3.Distance(bossTransform.position, transform.position); - - // If this is our first time close to the boss, set the respective flag - if (!wasClose && distance < 10f) + // If the initial rotation is "close enough", then curve the shield throw + // so that it'll hit the boss. + if (Mathf.Abs(initialIdealRotation) < 12.5f) { - wasClose = true; - } - - // If we are too far away (and were close to boss), stop tracking - // If we curved the maximum amount possible in our lifetime, stop tracking - if ((wasClose && distance > 10f) || curDivergence >= maxDivergence) - { - return; + Quaternion rotation = Quaternion.AngleAxis(-initialIdealRotation * Time.deltaTime * (130f / distance), Vector3.up); + body.velocity = rotation * body.velocity; } - - // Feathering; we want to have a weak, tapered homing effect far away from the boss. - float feathering = 1f; - if (distance > 10f && distance < 25f) - { - feathering = (25f - distance) / 15f; - } - - // If we're within a certain amount of degrees offset from the boss, home in on him - if (Mathf.Abs(idealRotation) < 180f) - { - Quaternion rot = Quaternion.AngleAxis(-Mathf.Sign(idealRotation) * homingScale * feathering, Vector3.up); - body.velocity = rot * body.velocity; - body.velocity = new Vector3(body.velocity.x, 0, body.velocity.z); - curDivergence += homingScale; - } - //Debug.Log("Current velocity magnitude: " + body.velocity.magnitude); } public void OnShieldTriggerEntered(Collider other) - { - if (!shouldUpdate) + { + // If we've already done damage, we can't do damage again until the player + // picks up the shield and rethrows it. + if (!shouldDoDamage) { return; } @@ -117,19 +89,24 @@ public void OnShieldTriggerEntered(Collider other) { Entity.DamageEntity(otherEntity, entity, 5f); } + + // Bounce off the target and prevent duplicate damage. Bounce(); + shouldDoDamage = false; } } } - // Just stop updating the shield; velocity will decay - private void StopUpdating() + // Makes the shield fall down due to gravity, and interact with objects in the world + private void Unfreeze() { - shouldUpdate = false; - + // Unfreeze y position constraint; make it spin for fun + body.constraints = RigidbodyConstraints.None; body.useGravity = true; body.isKinematic = false; + body.drag = 1f; + // Make sure it'll stay on the arena keepOnArenaScript.shouldReset = true; } @@ -137,10 +114,8 @@ private void StopUpdating() // Bounce off the boss private void Bounce() { - shouldUpdate = false; - - body.useGravity = true; - body.isKinematic = false; + enabled = false; + Unfreeze(); // Randomly choose straight left or right as a base direction float degrees = Random.Range(0, 2) == 0 ? -90 : 90; @@ -151,11 +126,10 @@ private void Bounce() // Make the shield go that way Quaternion rotation = Quaternion.AngleAxis(degrees, Vector3.up); + //Debug.Log("Bounce degree offset: " + degrees); Vector3 force = rotation * body.velocity.normalized; + //Debug.Log("Bounce force: " + force); body.velocity = Vector3.zero; body.AddForce(250f * force, ForceMode.Impulse); - - // Make sure the shield stays on the arena - keepOnArenaScript.shouldReset = true; } } From aefa62c856d0da7d52efd3df2e24158a2597d621 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Wed, 31 Oct 2018 09:38:01 -0500 Subject: [PATCH 06/33] Added synthwave art style. Like the bloom, but need to tone it down. Maybe will go to cyberpunk style later. --- Assets/Art/.DS_Store | Bin 6148 -> 0 bytes Assets/Art/Materials.meta | 8 + Assets/Art/Materials/Grid Material.mat | 80 +++++ Assets/Art/Materials/Grid Material.mat.meta | 8 + Assets/Art/Shaders.meta | 8 + Assets/Art/Shaders/GridShader.shader | 64 ++++ Assets/Art/Shaders/GridShader.shader.meta | 9 + Assets/Resources/Art/Materials/Arena.mat | 76 +++++ Assets/Resources/Art/Materials/Arena.mat.meta | 8 + Assets/Scenes/ArtScene.unity | 304 ++++++++++++++++++ Assets/Scenes/ArtScene.unity.meta | 7 + Assets/Scenes/BossScene_Profiles.meta | 8 + .../Main Camera Profile.asset | 61 ++++ .../Main Camera Profile.asset.meta | 8 + Assets/Scripts/.DS_Store | Bin 6148 -> 0 bytes Assets/Scripts/Boss Core/BossController.cs | 4 +- Packages/.DS_Store | Bin 6148 -> 0 bytes Packages/manifest.json | 1 + ProjectSettings/ProjectSettings.asset | 16 +- 19 files changed, 666 insertions(+), 4 deletions(-) delete mode 100644 Assets/Art/.DS_Store create mode 100644 Assets/Art/Materials.meta create mode 100644 Assets/Art/Materials/Grid Material.mat create mode 100644 Assets/Art/Materials/Grid Material.mat.meta create mode 100644 Assets/Art/Shaders.meta create mode 100644 Assets/Art/Shaders/GridShader.shader create mode 100644 Assets/Art/Shaders/GridShader.shader.meta create mode 100644 Assets/Resources/Art/Materials/Arena.mat create mode 100644 Assets/Resources/Art/Materials/Arena.mat.meta create mode 100644 Assets/Scenes/ArtScene.unity create mode 100644 Assets/Scenes/ArtScene.unity.meta create mode 100644 Assets/Scenes/BossScene_Profiles.meta create mode 100644 Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset create mode 100644 Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset.meta delete mode 100644 Assets/Scripts/.DS_Store delete mode 100644 Packages/.DS_Store diff --git a/Assets/Art/.DS_Store b/Assets/Art/.DS_Store deleted file mode 100644 index bcdbe57d5d9d59bba16d9c99bea757dae1834a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKISv9b4733uBpOP}e1RWC2uiB`00oE!fdqnjE8fM^7#|HRbkLx&cPJ}4%0{*?eA}Z@ z0V+TRr~nn90^e02>+5Lz-D7zg6`%rtpn!cJ3f!i$i7P5V1^!9_9W0u~98b#H+IgJS+5%t0E$0q5!`vwtyc`3)9AjbSca;(5S$#6?g!%Srv)^ diff --git a/Assets/Art/Materials.meta b/Assets/Art/Materials.meta new file mode 100644 index 0000000..3528fe7 --- /dev/null +++ b/Assets/Art/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c36478d684f8344a68db709c54d13e11 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Materials/Grid Material.mat b/Assets/Art/Materials/Grid Material.mat new file mode 100644 index 0000000..1f162b9 --- /dev/null +++ b/Assets/Art/Materials/Grid Material.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Grid Material + m_Shader: {fileID: 4800000, guid: fe405e6e316b542f7a18e43fa99caf04, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _GridSpacing: 3 + - _GridThickness: 0.05 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _BaseColour: {r: 0, g: 0.103773594, b: 0.09549645, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _GridColour: {r: 0.9150943, g: 0.14244394, b: 0.7264947, a: 1} diff --git a/Assets/Art/Materials/Grid Material.mat.meta b/Assets/Art/Materials/Grid Material.mat.meta new file mode 100644 index 0000000..a9bc447 --- /dev/null +++ b/Assets/Art/Materials/Grid Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bdcf1fbccc71742df9e5db52282bfd1c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Shaders.meta b/Assets/Art/Shaders.meta new file mode 100644 index 0000000..6bac765 --- /dev/null +++ b/Assets/Art/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 753b3985017dc4f97afdcbf7b48c62c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Shaders/GridShader.shader b/Assets/Art/Shaders/GridShader.shader new file mode 100644 index 0000000..f2fee4f --- /dev/null +++ b/Assets/Art/Shaders/GridShader.shader @@ -0,0 +1,64 @@ +Shader "Custom/GridShader" { + + Properties { + _GridThickness ("Grid Thickness", Float) = 0.01 + _GridSpacing ("Grid Spacing", Float) = 10.0 + _GridColour ("Grid Colour", Color) = (0.5, 0.5, 0.5, 0.5) + _BaseColour ("Base Colour", Color) = (0.0, 0.0, 0.0, 0.0) + } + + SubShader { + Tags { "Queue" = "Transparent" } + + Pass { + ZWrite Off + Blend SrcAlpha OneMinusSrcAlpha + + CGPROGRAM + + // Define the vertex and fragment shader functions + #pragma vertex vert + #pragma fragment frag + + // Access Shaderlab properties + uniform float _GridThickness; + uniform float _GridSpacing; + uniform float4 _GridColour; + uniform float4 _BaseColour; + + // Input into the vertex shader + struct vertexInput { + float4 vertex : POSITION; + }; + + // Output from vertex shader into fragment shader + struct vertexOutput { + float4 pos : SV_POSITION; + float4 worldPos : TEXCOORD0; + }; + + // VERTEX SHADER + vertexOutput vert(vertexInput input) { + vertexOutput output; + output.pos = UnityObjectToClipPos(input.vertex); + // Calculate the world position coordinates to pass to the fragment shader + output.worldPos = mul(unity_ObjectToWorld, input.vertex); + return output; + } + + // FRAGMENT SHADER + float4 frag(vertexOutput input) : COLOR { + if (frac(input.worldPos.x/_GridSpacing) < _GridThickness || frac(input.worldPos.y/_GridSpacing) < _GridThickness) { + return _GridColour; + } + else if (frac(input.worldPos.x/_GridSpacing) < _GridThickness || frac(input.worldPos.z/_GridSpacing) < _GridThickness) { + return _GridColour; + } + else { + return _BaseColour; + } + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Art/Shaders/GridShader.shader.meta b/Assets/Art/Shaders/GridShader.shader.meta new file mode 100644 index 0000000..94a761f --- /dev/null +++ b/Assets/Art/Shaders/GridShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: fe405e6e316b542f7a18e43fa99caf04 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Art/Materials/Arena.mat b/Assets/Resources/Art/Materials/Arena.mat new file mode 100644 index 0000000..292b256 --- /dev/null +++ b/Assets/Resources/Art/Materials/Arena.mat @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Arena + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Resources/Art/Materials/Arena.mat.meta b/Assets/Resources/Art/Materials/Arena.mat.meta new file mode 100644 index 0000000..2fbffa9 --- /dev/null +++ b/Assets/Resources/Art/Materials/Arena.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55245a9ea47244c1d9a82d8150017996 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/ArtScene.unity b/Assets/Scenes/ArtScene.unity new file mode 100644 index 0000000..fa92610 --- /dev/null +++ b/Assets/Scenes/ArtScene.unity @@ -0,0 +1,304 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657826, g: 0.49641263, b: 0.57481676, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &527865755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 527865758} + - component: {fileID: 527865757} + - component: {fileID: 527865756} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &527865756 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 527865755} + m_Enabled: 1 +--- !u!20 &527865757 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 527865755} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &527865758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 527865755} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1122118464 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: bdcf1fbccc71742df9e5db52282bfd1c, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + m_IsPrefabAsset: 0 +--- !u!1 &1955234693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1955234695} + - component: {fileID: 1955234694} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1955234694 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1955234693} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1955234695 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1955234693} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} diff --git a/Assets/Scenes/ArtScene.unity.meta b/Assets/Scenes/ArtScene.unity.meta new file mode 100644 index 0000000..b5d346e --- /dev/null +++ b/Assets/Scenes/ArtScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 36a3f40e2b1484f73bca7d6eb3acf64a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/BossScene_Profiles.meta b/Assets/Scenes/BossScene_Profiles.meta new file mode 100644 index 0000000..febc934 --- /dev/null +++ b/Assets/Scenes/BossScene_Profiles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb2093fcdd7bb42b7823e04cd76af507 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset b/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset new file mode 100644 index 0000000..17edd3e --- /dev/null +++ b/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset @@ -0,0 +1,61 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3} + m_Name: Main Camera Profile + m_EditorClassIdentifier: + settings: + - {fileID: 114983641764871360} +--- !u!114 &114983641764871360 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 48a79b01ea5641d4aa6daa2e23605641, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + intensity: + overrideState: 0 + value: 0 + threshold: + overrideState: 0 + value: 1 + softKnee: + overrideState: 0 + value: 0.5 + clamp: + overrideState: 0 + value: 65472 + diffusion: + overrideState: 0 + value: 7 + anamorphicRatio: + overrideState: 0 + value: 0 + color: + overrideState: 0 + value: {r: 1, g: 1, b: 1, a: 1} + fastMode: + overrideState: 0 + value: 0 + dirtTexture: + overrideState: 0 + value: {fileID: 0} + defaultState: 1 + dirtIntensity: + overrideState: 0 + value: 0 diff --git a/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset.meta b/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset.meta new file mode 100644 index 0000000..669556c --- /dev/null +++ b/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7393ac972e45b4a3daea905a6409d06d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/.DS_Store b/Assets/Scripts/.DS_Store deleted file mode 100644 index 99982f751b8ebfcdc07efdcd024f0ae0dfd30ebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ8r^25S;-Rpfr>z_X@ee${{D<0u+g85SEOR+EvcQ(emb_DAtk&i3Yu~X5Q|2 z-dcWz$0H)zf4;wnY(!)QHVnwO8|={fHiRnLH1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Date: Wed, 31 Oct 2018 16:55:40 -0500 Subject: [PATCH 07/33] Added basic modular city block models. TODO need to texture them, and add building models dynamically --- Assets/Art/Models/City_Road.blend | Bin 0 -> 444272 bytes Assets/Art/Models/City_Road.blend.meta | 99 +++++ Assets/Art/Models/City_Roundabout_Arena.blend | Bin 0 -> 474196 bytes .../Models/City_Roundabout_Arena.blend.meta | 96 +++++ .../Models/City_Roundabout_Arena_Raw.blend | Bin 0 -> 463440 bytes .../City_Roundabout_Arena_Raw.blend.meta | 96 +++++ Assets/Scenes/CityScene.unity | 388 ++++++++++++++++++ Assets/Scenes/CityScene.unity.meta | 7 + Assets/Scripts/Boss Core/Moves/Test/Pincer.cs | 12 +- 9 files changed, 690 insertions(+), 8 deletions(-) create mode 100644 Assets/Art/Models/City_Road.blend create mode 100644 Assets/Art/Models/City_Road.blend.meta create mode 100644 Assets/Art/Models/City_Roundabout_Arena.blend create mode 100644 Assets/Art/Models/City_Roundabout_Arena.blend.meta create mode 100644 Assets/Art/Models/City_Roundabout_Arena_Raw.blend create mode 100644 Assets/Art/Models/City_Roundabout_Arena_Raw.blend.meta create mode 100644 Assets/Scenes/CityScene.unity create mode 100644 Assets/Scenes/CityScene.unity.meta diff --git a/Assets/Art/Models/City_Road.blend b/Assets/Art/Models/City_Road.blend new file mode 100644 index 0000000000000000000000000000000000000000..e9b1271a86101d7f16b7c1927e585ca847c0efc3 GIT binary patch literal 444272 zcmeEv2Vhl2_V<0MkB-#PA4LegLqJFe0)ik#v62YEWDNw9puoEFtQ-BiyRL1~T@~xH z->$pXH7X{dX(-Z5=qL!WW6$DBzH{!(@4kC)?oHmy3n8p`U@|lJo^xjAoHJ+2otc+7 zdE8~mlXAOgB+ zfBW7o|9dw1`-Z`}AvEc>IqNd7E);_cA}B>U>*54l4}taPKcp7rTFa6gr+n0%_< z*B1T%B|4CM&ZUhHT$R*w>*Uy>B`p8zCv-i^vQ~9~!tU)mmR{VcOR2H_kJ{I{bJwG- z8#meAp+&Qu)TT>^4ITMG`=-s`qxQd%`Bay3hg>>#>T;0ezEUrHj^n)(3cJs?KIhUV zn%r6T@Z1Mna!LHb*h}Iz_U#e9w`0SI9lsi(>|UOz98Kw}_74Z38(rJB+cmgTw%?`>%`e*4GAyh#sYj!&EPKemZG(oplanW^eME<*&9?S#p?olW z_~;#d`wZCEA}nlQr#4Y*32$Fa%-Fr0cU{WAX|v{ssl9uh_HWb!pRI3lz$|ZbTI&PG zP24+j_~>12BHbTM9o%Ne_3>Sgj`TD?+ND*SeI1%L-_pKGlN}u|YO!BRdq zf6(Rt3=3TtI%LF_mZ4##unmN>v0am4i6I>Ywv z(Q6Cag1$X_Z)xsw9VU94Io;FKZAYh;t+#PJSZ~+&b6*fF?F$J%5L<60e|~mDa=Yy_ z$9CKmAD_IF$9jng<5ZhIecbR}vqoLChh%!BXWN#W`gMxhHg#BwwJd+;5w-vQom#Zq z&^jVgodfiX?z@}i->qGTP3@aD`+)j|(&%m%m(ZHRCTjN|vqT?PP8B9Aki(5u$<>y1XcU;3V9ns74F3JCcR$-x=+J-Bt zP47YLKx8N0qw$|Af0FYKlDBH#d5lQohRs+X;&H;r5tnFlfnasOZtV9o)1bk6n%nK5_#PSue!%jS z^4IKpRqKPn%HOW<|6i6rY(2M2$fh>Js}g%|W%<+E(0-;jyq9N#=c1;YL7QZJq)*2- z>$)^+ype4BzA62bEnQl-DQOuVzOh9}sAkh0`3FC)v1=E#W$PhRgw%iRXMLKR+;%(k zYS_h{H?(W$R@Vp_E@4RTq8_a-+Sn!{d~3f>ZP(2m*LDZnpdKAN@9x;5r8>6ba?@O3 zYuBjunvLiA#DKm7)xN>5UNw1MRp0-=*8b0ht!J6CtRZhsw{O^B3)_B@`?l8MVS6v> z*JA^8BxUr#^qt=eqi zaX*a%)b*qh!$+&@0yUAd9nLR7{^!cpv&^~8L$>;Gaf-5M+=zZfmyR9szW%vB-nnVx zP16QPs`97te<}HW(OrA&@X*>Y#kY+dIc7J_^LA2SuybI)fweN$H|s%FW4{Z%{X_1x zF|OCk4RWt)%xJa=j8EuXEydO7>k2b?eYS2y;nukx>LThD8DECYXRwO+RV z#Qp69SWiaP!nZuwc7MVPQU0~Lc6To24&7kAVvn?4Sl9CRr|+*%?VtO2=2305QI|ojmcJ^Dxf?@lGE)^0%G?!q)rKhV=ZjibL+TLCcE1-7}W0-8($zGS%fAz@M?- z`ELKUW$VwE-1V}pPUq@c{{Hm+=S%*zW$Vwk+#UH_+jP6JX>Hm1`XYD8pF@B8fVvt3 z_&fHitM(7M^Ll-3uV%Z(>GsR$c{nn<>wD4dT5TEVX}@LS=t1l8Za|mzyEx8r&zjI= z_oaP9wQq9cV+O1n-m}X_z@D$rpLyUfQU2z&JCg5a+8d|smw~(nc5T0*bJIq&<*W5+;MaBd+P#zce2rF5yZqm}FZM@PG$JODxTrQS3 zj{8&8(lLxC|LSP^^SEi%GWC$)7-c@~3!>+dsE?*8QsLuII@ga;|&t;)w9? zet+||stkX(=$bXXBE!FV`0Cb&S(X#~cHeVP#;o^&<585eQwH|jy7byh3nxT(J(}3P z9S_1U!Knn^`*p7x(!8#`ntV9#gB@+JNMwyH8PpK@x!&f4k6sL^phkSy;YU!4oO z{rh9;@K%%24B?l_)SydworUc=Hytd{e#AZ5T5)~yYF7TcZymk ztMc;uN6B8=wclW$lkNAX?`PT9sQq&v&pPa{+`)r~Z%x~H^_amQKQKl4DR*4dX^yjJ zy#NgL?Il-^8h9kRXP3=4T^6?y&o88~x-r1H9s>p-f7SuN+dpi*zkR$}W?XOX8(D8g zw{LxL(e$KB^1b(0S8N>8qS=WNZCf6o`QKM$12mYf7swod>s?hJa4zK^;MmXa_8+LN z*USFZd!`)XI_vGljg!V~OYGLMR1e2-8q4jUpK^(6_wUWTVr}=Z(DL8ie62br_+ODf z^Wj|00RkBNaocBCW&5wGt!G(U$sO{3XmM&u&xr7E|8L>d+Ia85yg3`Xx|FlL767%HKhG5+L7hY8q?T-9v#ck=^IDLEC)YW4;wyhUy zKwKVf<5kTA&z1aL{*V3C#&6aBYijHLl{@o?{j%#OuN~C9$;Twa?VP6h-Mc*_BfcIP z)$(Xc?{2&MHE#GB&F|FpAAZlev0!R~sv9@YNZ!yb#Pt)|hPC`|?)Xu=Cidx8Z{*Kq zs%i{yuI2y%%HPob{aw4`y6HX3oprq`d#8s-oaIjT{RFMytm9{oEV*G*kFd}mA6Rtl z+S}$__Ad4Rg@EOd?f*I&*p47LyHV&LRIC?L&d0z8Z zZNg*AeCs-Y`t>~ZTfiR|&w2mRB{yhu#s{gNVBOKvtq<|4#sKF+{sH#=EPu8AQ^>Mc zw<%tH~nx_yVm=XdUUFHas?m! z3GMoTb1?^~f&5tqQhRo3x0^l1D_%$=JAMa^UCFXtj-mC2$a6HbV zFVf=O z2T~z_)(5nG4qsb7`EXU`cjR4J-e#UuH4m)KIY14^eunn1FS{f6>Se3vS5YfJS&{#yIzeT#w4-yL~d%iGKsJNeh<96$+t-H+Qo zyHuQ$qqw?v(OiBf?Vp^h;*(t;P+Mcb8p>a5|2zh)s{GEo;B>%l9#|Xl=dmBjznI#u zKl}X%%-{^;e@D*2$=Qy7c6~r?%mIQJ`#J63^ew|qe!)Jsn+Mj$7%&L=vmtQWe;w(7 z)fk{QOE~Snj%3gF!>SLcjX3~y`z*(r^!=M z2TuF1V;wN}0e14Iy8`(fAGcA}$BY_V>D+J-eLu_JY5#RBd$s|3`SX6eDRD!~ywj8l zmiL5Fv7g^KZ^4Ir25j`G*snqr!R7CR5&w~sxr>{wfc_5u_THA}xyu6n`@I&kcis^Q7 zDYgGYI0v3Mc=*R2m+Qpni=$7)_aFSpz}9V#M>lTrWr(8uK=S`B$^WYeMQKBASt0xX zIHeC#zwhRBLq!=9r6_;lxQ%n#|9Q|IZtvJ{L+4papS-@w3CRDFp1lu~y+1y%Rhttd zJ>8GdIN;MB5fL9=K7R6{eiya;qFZR_$s4XqKR{jn&+QfEEsvrcYo#d5N#NZ((>-Y< z?>~}W?NT%;(!vXQ;o|KpD2n&`2EQ}ge|=mWB*#%~$ZsqKNYE5*Gq6Go2t zgyerZanSH>*IjYluB@9DA1Aq&U4P~E2iX2!a&hlZdNysguY;nTAXz`zLQ!reJ$RAy z;4@19ne0L+jr+RO^E+s6a1#v-tNJ#OihJuwM=Gkix5ANi&1G%HJM;m3c8Sifef{Uz zO6m0RlaEsWzKzbkmi51=0x$Hjg;Pp3g#c4-GA!+Ew|A+Wxof zX})))XM+YOX`XkmPt)cn*$$*$GxsPx|1_@ezz>^*gnUMlP6$Za*1(4I|Bv2&-8b?a z=(jl23B9P#a>tpKkM9!am+Es_xomu{>0ftE-v7~~?M~w?)TZAJIf*fV+U{@u^%t}j zbRa8h@d?-ggw))*?N(*it)*>zsD25W2ATftasY2VfI8Uf=o&$RA;S zmp{sfF#xBTuLk*7aYtM&$)B|$ReCRl6?AX(PrMEZ9ngnt7Y;qzCdf!&-FEAUSb~Lul$4j=0{@IoZ9{=l`1{IV4K3;%bsx0>`F2s}fl5Kd0bz#;O#=GmF3*1jYA7C5m8^7yg zdGvjNKk~1IZ@!SRRr|*~yHKwWmVE{H6GcnJS<;G!l!}iZq%qlV>))86zUTtxfn1&w zkG1=H?C97J$Bv3UK>l#&P9F6RbrJ^4O7B??wc%2U2)tGMuPP5N1A8y~PMx}(p-?U3 z@0_2h)@5;pmk;T^lkN!F&-aDl{dIA} zP9e_s1kl|-2ax{VqHEu$`$cylUEf00-gBQXJ@ez_AKQKR{qL0TAGuulctAtth(}Ql zkUviTF!>)_E6T^Tj&s(dxXw-_`%CLO-}1T+edpUl>wNc6{2F?8BdrI$OzVA*(YjwB z#XrZgO4WJ)u%Qf&B-;k`6H~h>Cx%|+ z-hb8TL3{Ob;yWPeUZCUsn=~x#5gzts-^LAhj*Mz`oaafjF7~s>rKoqo^F8o=8a4Q^ ze-m*RJl_L9uz8aYMxUp<;2~3ls;<*r;H>xX{ER)1^NAO#Kls}&XHMiPWxpAz9J^G_l{Abof{K>3rX z4Dx5$1?ylF5XKWh9y?U(EApoH`FMCs_nr~Wl`lVfr2T1?U(_!64oH&ovEQUkEmH4* zq_vTY!^4g*pL_Yc=S%*ODZ*{PZGZHmN7{Y~xx%(_9Uxa3{y^g+RrmFCDUS0vipNve z#&$WwZ3RA|n^H_`xVMsgfAY|`9cuqaDg2o|we{sB@4IVB{w(iQou}wIbI=Db<)F?h zh7BG0Iepjoj`lO`zwMflN0?vx9%%b9-vQ~NZ<>G09iZL`!*@W^U6H%_POx(!f5;Re z%W!HZ<-{$q%E{xuQ@(<1Y3}>eKW^>wX+o6pSWLp{Tk)5$|d?8aW4Ze*J#juzwN z5kq4>>K+++lK1nljC*wIa)|8n#wLogo9nOh%$Imw+8e4U6A5mVht~JW@9d~3B^3Ub z{8{>zb0_J;Z>9V{Ctdh0rI%6qEo%R7QTu;_?0>Z4ze^=h_}Xay{^qRKo67&sPKxVD z|F-Rpb9;EBBge+Tqn??LkewUxHcEsWR398LK!FzGgZds1~TDSSI zXQRg3Xiv@8?VC2+MP>O9$#pkX<_?OhZB(H+$uN@Sv5h?c#!U!)kBK5VzFNgz90F4m zYTs9rEH`-Qn;!Z1yO0hvQ28|ZoO#xd=;cXKJnXGbe#B}>g_Wvft|C7YZ~`Tb1Kwo|z&P+Y|O zwFI||<;!Iu|6hJi@{gc;LH;g!-?-AXzQX{`=T7(Q)a5@6%WXEg zMa#X>EnBZ9x*t=~y~NMAh`(Nv&wHFEpFp0(tonEgz3kaG5zZ&HhhjLT6)MX`9@!2_ zPOYe{5%m5?lF0|G5A^Q8eM3uv70r7_JKX@teVmXD!=~cz;35sf`58bRBJ9&$8Dr1=PDaqk` zlIKC<(=#60FH3wXB7PK7{4C*w5dHg!e>V{?k5XD8y3Y~(9Foo3oVIgpn>;iQA^b-f zhUDLjXq3^jGLqw834bs7H^}dyGKA3cv*eGHZnP%ZjG}ls`6HwYk+diGdMe+ml{|)8;5cA6hE!fAYL;$`bSYrO*6R$#v7u;UihOy_mmXj{u z!S&?#%yZ(!4tjosU|%6US*VD1SwS$Gm(RQ;kL@JmdkFqNtUo0G%320gou;NRqQRgPqk z;i2|U;arAe-6A^2$TsxgG}nPcb{r@9-cCk1igbA?m17~*A&g+VP?~LYb$f9Hp}PH> zO4-4)K3p)4_}q@<_!Po$+LuXq9x0po*klRKT+G~_BOHDlVhDD{rCW$XdWQk@2SsF`wD)~wuzqYr9SE<@=sE`ooFI+p(HD)ps6~4p_JQD zPHuN(Z+V{lFv;ofEPs;G6CN=p{)oaOQB%+f1_kgyjDO>A_Yu$kOvT zJe>NFNR}z<38f<_-GD+0e({dwovQN}3`0ovlSt+td&IYrZz%kT(nqK*j=f+iQ9lZr zO2vR@eYjv8+hZCWHzZr!hqkK^*!EvP*!MqCid3ov`~}ti|0lSAekuXM_R4{m_{nuA1ottu5wSVY<6AGUHuk!(I z-wAzo(BXx{3r7bW9dLBO(E鍠Uz|jFm2OJ%6bimO8M+Y1oaCE@Y0Y?WM9dLBO z(E鍠Uz|jFm2OJ%6bimO8M+Y1oaCE@Y0Y?WM9dLBO(E鍠Uz|jFm2OJ%6 zbimO8M+Y1oaCE@Y0Y?WM9dLBO(E鍂XIxu1K)WmqY4Xt=b;a6vu%ZpAGMe%q% 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

1JI-|H>dB_7jVYwr6|-pYquDdr$oVN}la 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 JDxMzr`yWx53e^Ar literal 0 HcmV?d00001 diff --git a/Assets/Art/Models/City_Road.blend.meta b/Assets/Art/Models/City_Road.blend.meta new file mode 100644 index 0000000..5b2a0ad --- /dev/null +++ b/Assets/Art/Models/City_Road.blend.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: c42c1e757cc9e46e080b91a1d882203e +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: None__Untitled + 2100002: unnamed + 2100004: None__Untitled_001 + 2300000: //RootNode + 3300000: //RootNode + 4300000: Plane + 7400000: Default Take + 9500000: //RootNode + 2186277476908879412: ImportLogs + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 1 + hasPreviousCalculatedGlobalScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Models/City_Roundabout_Arena.blend b/Assets/Art/Models/City_Roundabout_Arena.blend new file mode 100644 index 0000000000000000000000000000000000000000..07fdfb0f62c8dd215561b5a7b7ff19e50a6de74b GIT binary patch literal 474196 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

jFQYbyi^n@U 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%0AY^+4)@ED!LGZhe=1f3OHirrS(DsKVAD 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 ZAUa6D?JE6MnK!dJikB}|1W*6?`+wh&vs(ZF literal 0 HcmV?d00001 diff --git a/Assets/Art/Models/City_Roundabout_Arena.blend.meta b/Assets/Art/Models/City_Roundabout_Arena.blend.meta new file mode 100644 index 0000000..08a406a --- /dev/null +++ b/Assets/Art/Models/City_Roundabout_Arena.blend.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: cbab7eb80f5474b2296096bc2587ab61 +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: unnamed + 2300000: //RootNode + 3300000: //RootNode + 4300000: Circle + 7400000: Default Take + 9500000: //RootNode + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 1 + hasPreviousCalculatedGlobalScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Models/City_Roundabout_Arena_Raw.blend b/Assets/Art/Models/City_Roundabout_Arena_Raw.blend new file mode 100644 index 0000000000000000000000000000000000000000..2dcf43a498dc9ff713e9dc2e75ed3ca18c6bc3cb GIT binary patch literal 463440 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


$(QoKv~JJ$p%T7^nJ#&8Xa9w+wA z%vIDh6iNL(?EAp0!-5zA;(lW5)U*)ES(z@tlZ#Yl1gts75pSa*8yUYh8qc=~rt}8o z>7&meA}yX7gsovw<&vFjA)hN=c!?-ppEztk3Rg6!Iw}BWqp4Y)F@=6RyS0a-$P0Wwd^vI3ASF2&Dv}EC6+8%ZC#e) zBFrkk{#D7~ynht~jFT8&eCS`Jn-Kk5{a_iAM5d_KOUz!AHaDR6kcNTH4s2g>g(H%c zH!GAFoG(IiV%Cm2192PcC?>^zXiu#s7TQJF%CL$?xfr@)puI@L{FF8t{UouNJzT6_ zaP|*ELLb%FtCc*RLRE{tp@CUSN81t~h*UZBNq9M3SrwAGST^F2DukJ|m{Dwd2-97? zgKaw01;wuyonl91NNh@COUa!@V-9}_2%8e>;HvBkOhO$7z>+-O!dtV`a$nKjiGdmO z;1pB7Vwmn@>Vhb>um|B!%7~a$PkT%{-k$mOSQwZps+=b1vF_`J=Ay9Au~yRGGM&-j zi;OHw*cy+jy1$dk$C5=tlB?8e`?U8UnRKEpW5dFrr$J?7)_|0ioqzge=SJ6R8;bF* z?cr1}EICzH7LDvz&mrby4`f_QdLPWW+0g{qI>9PQv&J}mUb;*-rM#ATI!0ryv#Uda zlng@`H%sGHMB&a{(J&23lr;fXQJLxaRNA_awOpShDf_5BlG9tQ8DX^3s_E(WSkbK# z+HLAWHaW4rq?4IsQ?8x|hltf2m2>S&P)5a0D<{+A7!flq6dqWnw;%O&;%KSF|FIO)Q#+fz;7X%JJSuc@xiyZ$!T@k?*->wGHg+CM%2#)4gk^Y zP?JFG+r1?O79co^Aq$r`##t-nhy~M4C#V5(bXk#!XvC83oW!d*>8HJM(g;~G*NEB$ zX|kn)kaEEE+B6@{+>8E_qt4=dC=2s-4@5~FRhChG>Vpu6rqzQ?ftS@V0)M|2RH-_w zyu=}4xZ;nxbah+f#cNl(gb5IKX&vZ-)zD=)=|oqHA%}JsxI7CNSj~pt?ll3cZ1eb) z)i{>uqQZcK4BO56Sy$e2K)u8SfWoXCFZ07L7I*DelUY2*ZkTy_7J3+K`G}jEkMX#s zoYGH;-y0_!6eCgnSS?H6X)UD|<3{ak;U-I+Mhm0Xuilm9Y1Ut{9(QTUPHJ=t`z!-H zEY!+0fLd&SfgUb5+(RjGngA?ZHWEuZkss@2gr}jTzei$`Y}y#GwB{b2*Z~lIh1#1L zZ=k@mW04S0HKe3YVM z-cNT~udtSk#NA6$$0U@FPJ12f*MRKdt_|0D4eezF zuV3r=F$!-Zj%!NIjuZ6NF!Lgluv()-IOWm=o+&7Da5vh&I0Hh6v}FLVD%CDBVidix z&_n6Z>L51A5`Dcn$9XYr1eKtMU^3Q)CJW1s4Ji5iP*Cmq^^qZ_A$=YDH)EqjKkI%9 zK`Wtp#1OGs;OvN{5+887q?9>efmx90Y^`2(E~s`fQY!;kbGD-TWpf=Y#(bQ+*2Riu z=2wr<(~3~57}#>PuV{6b1_0Z4Bd=np0a;DRJW}ON)k5zm2EeO$#4fifOc{8(MIUbr zxz{t-Mo^u>qS3+Hodg6MDj0Q_SwA$(q)-bhkhK{lG>4=uS&jHZc|hh-4$*_YobJdQ z(w!S|$K^amA}a{vBJ5bI^b)^|ER2_a5NcF?n_j+CYcAd?)yDPW7~1*O(9UT{1MqSh zrj0}${mc&N{0O!f2*^Xr(nKz>krAnm>3}zD7#OM{m+PEM(Sl4Auwjb#GC)g6O7w-k zTTaF4rU8o2E?b1{rh0lLig%_7AXK!?{b)}70sIgl_2*Tx;Dd^kXu>hFiG&eTj&YI; zhjAHO$JNddstx?MeH;6&Wdle?I-Ln~Habh}kS_77JLQlGWGZh>tM=EKr?LgIusjy!ND8&MG~k<_rCW4Kqa+mLq1R!^PY6>8ot z-L%4vw{-$~057j><7l`TD5Ae+!l}Lj&JR#(w?}kg z25p{Vq1QtxfQaL<-RrH`8S~srPIkAoR%WUlIs{8G>?E0(}b%|D8EegypbJ+RL@Gqq;R_ZQxB`nj~nnk)F>XSul zRsDOY3enHJ*ur##h&h~hxtm_N1QltY`?R~EHsbnVFTqru%X_?hQG8#mH6Eq0COOt7hs$XMSrh8)vbSJw4oO5>7QL0| zkBzOw+v+z+40qW}(dA<^i0K%TKQ#e`m9%c}3yS2fVxGw#^DObkJXMjp(JC}6s{7(i znJ3<26>CgD^E+>KNZ{%yc9yWY#w*cIcA@m!vupAviiTXXt3oi7UuP1fs|}Iz&^zJ$ za!DIz6xY(o32W%LTYZ8iQn8MV6NzMw(#lM#A_Z#V#p!vOOI|EI7+m@kG_Nq;Teyl0i9Z zUj{XXo|s`^5XE%)MVj5WQ5yLxnyX~xiqBsp$QC}TY!&Xx@gC&i%*Uu?g|#4gN~#@E z1+5VGnWN-UbhrXX?-OEzFFdiFz_LpzO_;YSO%>C{-># zO0v|&iPd;JQ66cg0e>xRs+m`DGEd19N4<&(aEg=sOudLC~ftN(7H70$lRbJ}ptbyRzgbIoT%bMrD^J>t;T@ zN}?}m8RqSlAef0`Ol4X*H?57kmgx4(Z@X_ZisX*0aax>=qUufYQnOVIxl6-rQ7c7^ zD_n8@!a7xaNj{87!I2T{U=rPD)QpW4edQ6bE|gtfc0=@+N7Bt%3`B1r=m#bs5Mv+V+=>F9j>#ry(?^s%=np#Q@116ePyA;d-u9Q16G zTCx1N@hD%t0bt<4P-u&iI@e%;CM>^)fT#mF~ixM21XpFXgJXWlJ}3Cfh3OHqkcI zw&F*(j`P&IyeTwwGJva+QA>L15r?H2cH3bz@R`S#eq3v;PY=1@mw&TJsttB-#QS^K za0a*b4|#Id)G}Y!xQWFeW6UP6Gg!C^&$@{8<4jgJpqSMb3#64 zj=`P?iJxW>A3EBxGej+cIhS5i+S$+SuX7Q`u2R~$>I{8{mTmkpo(Y5NXJk0wFH#j7 zwGXRhWUE|l6zPCfVHt03+dX2gxJ$v@Q82>t7?s*US2XR$q5R{puGS;ojJD24BIe85 ztlT}28S0EH_hR1K%kkz>#bNEnS`#P2nC?bbs|_h@_?{IlRSzSX%sg0E%4T0O;iA=x z78+}}sI*vilt??Mw#W({iyb;gN-kMWqsoG{FK_Ga)R^p>;UO#g16jgFVfps3!+ zL{dVby@6HBrMINN>nM1s>9RVc3YVKcGj3AWbPR58Vx=vq$l@Wcx;l|v!!qJR>)g{W z?J+fo-Dp7IvO;i;A7Jpc0qKcRX~)%OH5#EuqhDw23baOrIohMIQ{O zRfp5@g5uMfS6>zKktP|Vlu&fPjNChYM(pCT=`f8ExIalP=;Sr1Ix%i>mZDO|&zLJD z=c+c!=_)nsgv_imJLn>*!NrZn9l%yEW6MZ&*0@?#vgKVmxhLp2I?8RMmQ0nMz_w2v zH!+w@v+3ZtefF8_E_>%aOAuuA5u{{-=)6KNHmiqarb2VZN@GADr7g#ZXi`~b@o?>-yA`!3BjSbVIcq#Z! zgpLW5h-Q`o65-4t101&jz!Ej6V&Vi}N{ zv4LKn?_0^kaJnN$;?{B|Zf$%_^u@*X1D0~6jS$;Z!7~p_1gm8kf)<>&h(?^>HH9kk+Tf=V_;}1+=#7cy@mvpXGTOqg$nOf)1AST>?p#EWIq=&h>L*lO#^ z@Y4R(&jEwQFk->}WGWzppVRuNO91&mewiPmcB^vJ%Uo%vz$9 z!_NEm<4cHdg`=BLR8r7oIc63}R-U%3Efio^?e}9) zG1Z$fRF^hkE&5C%?}I%qtd!D4ZRlaro6f<}AQRg<(da?`Nk1BhnfJsG$!NC;76JB| zDR*PwcnTbYUw8(;6PPug;{4C#;*^eiI9P@?XPThOf*~Yp@b-loYcf_=t1msI`Qihc z>7EZw?(CuaXw0o;F;1E3C^pv0n7pVO;O`u+py|6x1d45r>Mi}lZ1Q> z)J#Ss{9BNWwu&UyQ#kLf=+_vlWm4;Ct#ZXxSRHLNI1%*EZvS!Ard%$X zS|hc-Z7KxG6|N1_N@?tR(UL%WvW#V!U*mvV^yn4%ch3BDP)5k|rtdztedbgXpAaK? z*)eanNz%{mQCCF*)ZB-8s~+CBx!Oq)CJ|^SN!sNE?}`f)t$eMGU65vv6x}-7)hf$_ zXjgV1YzfKrelfZ&e6zB{J|-olMI)V)qFD%wlo zPms_T-3$W5ATyEAQll7|o7ZnU^6iI@aM<>UnQ2(=@6l3f<|U;8AFrvEqK8Z|IO|B? zg-bSz*=;)3$VDD4M0!_c1tw|qB~u`mz>{G8ek`ed>2_AT9c<4yrK>%*&WJOIfAo;G zTV{I5Zm3N#O2=vfgDiapmn(an!pS}HqZ-PWzGJ&_tqj&&=$}k7g~d`8#?w71$8mlJ z$8yerT1A_t6PfWllPu36I;a6Qd1x7z`6~8^;%&BJbWt?9Hj$#ke3$|fOVVOs!I+&^@jSUqmF}}E!%LvSB z;iI8oArBIF<-T7Gvt3TTZw1j&?o(F1b? zm&9y|ZL(^0Heg*#CM4WqZWyNAq=qqMI`1bYsJ*MDq$1;x6vG(Io;IBg2Uo@)Q-zvb zNN}Dyw9KVVIq|jdM&S?e46z8+oqau09GfPH#%xLJxXd-4F51JXn@%md^~oB&=&YTy zFCeyAwbMD`Mw+j8r{1KaxENS7f6S_wJR@d08eglbv{!2$sUjF4*+ZS`lNkzzCE76S zdlTjub7%HsJ1}~z)7UmW4aM0U%M5sm6J&W!bJs)AxO8lv7iY*%-~O&m zjGE#y98l#neGQ*Xkh#r!t?8FFQtO2pi!`ys49O(3imc7py4sp7Tm!efC^0$i)1%0p zqRFjTzG*-{OKr8UT&?wsma6%94ZnQ71`|{zWDcc5n_0#OjP%QA45j0p-n}3>j&aAV zf&NIsbqrby#{B6>Ou9lrz*-{7AEA?eW6uO1!|a$G1DiwIsW!%(3B zos1KH)SK9iP7E+vL_=hBsUM=1K;^?6C|V)6rj+@Xp=Z%ba+Vi!mgukoIn9PScRHIV zf-Z12Jm%a3`Xu!`gpf{AXKeHhyHb?WOR%@QrY^_hh zq|~(C?VF33jVxZQs#ZYPQdp3ggmx{Z0YvWK#c7A#(ajgQc&KP*>~1$QHf4s!Qg4EC znJqaD3DMaaRUBZVLA~%+iPXR4V_BL~YknnBm0$O9whxNhE}il zjT>eHZlOmXamOMSY4qI@yNHp_G?gvbhw3pR)B z&y_|^3Nr*V=@oNoz=a)K_0f(64Q%jxJt=yIi+yA|y4>hB8Sja*fwWOG&-6^$)=HP1kMh znlZrW*uQhQtvT6l;+q6)%R0yMMfrwRwFM{xS01CEV>!fr0XPO6s|;pHk1gFEIc08U zJ}cT9*D@k=sCya!%y8Dfm#!k{d_ROQ`fu!O?)JWBpL+DYeSGxMX(_IB@=74ZPkz6r z)Msz0Brfg1I7Hdq871Cd<|l>BPqvdK{H>+D{O|(kRQ9!x7OAJSPJ<<-HDk>SlUmxx zSEKueG=0}7_8qhL?M9!eRfeKq>26I(Sg@ea8vmC=!VeeiY$(d0zEuwiF_KEtR!rZ8 zrL$u60Za+Uau8oGaS0m_`e+fHB_bIJ(VIOb`Z^#@-@eWwmAE3%gK5R~Q7eC-G

X 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 literal 0 HcmV?d00001 diff --git a/Assets/Art/Models/City_Roundabout_Arena_Raw.blend.meta b/Assets/Art/Models/City_Roundabout_Arena_Raw.blend.meta new file mode 100644 index 0000000..ed8059e --- /dev/null +++ b/Assets/Art/Models/City_Roundabout_Arena_Raw.blend.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: afce4d105847347248074578564bb6cb +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2100000: unnamed + 2300000: //RootNode + 3300000: //RootNode + 4300000: Circle + 7400000: Default Take + 9500000: //RootNode + externalObjects: {} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + previousCalculatedGlobalScale: 1 + hasPreviousCalculatedGlobalScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/CityScene.unity b/Assets/Scenes/CityScene.unity new file mode 100644 index 0000000..97b42f4 --- /dev/null +++ b/Assets/Scenes/CityScene.unity @@ -0,0 +1,388 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.496413, b: 0.5748175, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_TemporalCoherenceThreshold: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 10 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringMode: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ShowResolutionOverlay: 1 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &578436824 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalPosition.x + value: -50 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalPosition.z + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_Name + value: City_Road (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + m_IsPrefabAsset: 0 +--- !u!1 &653669955 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 653669957} + - component: {fileID: 653669956} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &653669956 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 653669955} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &653669957 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 653669955} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1001 &1415128236 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + propertyPath: m_LocalPosition.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} + m_IsPrefabAsset: 0 +--- !u!1 &1493192389 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1493192392} + - component: {fileID: 1493192391} + - component: {fileID: 1493192390} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1493192390 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1493192389} + m_Enabled: 1 +--- !u!20 &1493192391 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1493192389} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1493192392 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1493192389} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1001 &1772548818 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalPosition.x + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalPosition.z + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + m_IsPrefabAsset: 0 diff --git a/Assets/Scenes/CityScene.unity.meta b/Assets/Scenes/CityScene.unity.meta new file mode 100644 index 0000000..c49df55 --- /dev/null +++ b/Assets/Scenes/CityScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e4a39cff47acd492bbbb97b961b6f308 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs b/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs index d89784f..10a9fe2 100644 --- a/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs +++ b/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs @@ -1,13 +1,9 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - +using System.Collections.Generic; using AI; +using BossCore; using Moves.Basic; using Projectiles; -using AOEs; -using BossCore; -using static BossController; +using UnityEngine; namespace Moves.Test { @@ -19,7 +15,7 @@ public Pincer(float offset=0f, Speed speed=Speed.SNIPE) : base //Debug.Log("Pincer sees player at: " + GameManager.Player.transform.position); Debug.Log("Pincer called"); List sequences = new List(); - + ¸ float curveAmount = -4f * // base (float)speed * // turning radius is tighter when we go faster From 29280a401c6cf981effac0d3f40818de683eefb8 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Thu, 1 Nov 2018 09:52:00 -0500 Subject: [PATCH 08/33] WIP --- Assets/Art/Materials/Grid Material.mat | 4 +- Assets/Art/Models/City_Road.blend | Bin 444272 -> 478808 bytes Assets/Art/Models/City_Road.blend.meta | 5 +- Assets/Art/Models/City_Road.blend1 | Bin 0 -> 454684 bytes Assets/Art/Models/City_Road.blend1.meta | 7 ++ Assets/Resources/Art/Materials/Arena.mat | 2 +- Assets/Scenes/BossScene.unity | 80 +++++++++++++++++- .../Main Camera Profile.asset | 30 +++---- 8 files changed, 107 insertions(+), 21 deletions(-) create mode 100644 Assets/Art/Models/City_Road.blend1 create mode 100644 Assets/Art/Models/City_Road.blend1.meta diff --git a/Assets/Art/Materials/Grid Material.mat b/Assets/Art/Materials/Grid Material.mat index 1f162b9..c2215f3 100644 --- a/Assets/Art/Materials/Grid Material.mat +++ b/Assets/Art/Materials/Grid Material.mat @@ -62,7 +62,7 @@ Material: - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 - - _GridSpacing: 3 + - _GridSpacing: 5 - _GridThickness: 0.05 - _Metallic: 0 - _Mode: 0 @@ -77,4 +77,4 @@ Material: - _BaseColour: {r: 0, g: 0.103773594, b: 0.09549645, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _GridColour: {r: 0.9150943, g: 0.14244394, b: 0.7264947, a: 1} + - _GridColour: {r: 0, g: 0.9999995, b: 1, a: 1} diff --git a/Assets/Art/Models/City_Road.blend b/Assets/Art/Models/City_Road.blend index e9b1271a86101d7f16b7c1927e585ca847c0efc3..c4e430ae4840ec4d59cd96cbfee19189e0362a78 100644 GIT binary patch literal 478808 zcmeEP31Ah)`QMiWcpwVi5j>(;jTaz?Mup_%0K$zNl6ob9JV-Pom;?;g%JXcr-c}p6 zl@zUwf9qMaQ85XJ8WjcacvU>A(Q2h?ZPZr&-?uZreY2C@-)Z$`F-Ea z&d$#4%a}G{M%IMc$1NXq;z_e9m~9xwgD=R!IB^+#^~lwm^0T; z68$qa^=G;4*bm8zygcvnFz{@^vjNWrc4-@EApNiMY+#qQ0oMO}^73q9*P9n{--rHH z-?N2X#}-t*JB2-4_-Wh1Dwi?9vxT3w-t$QBe1+(8(sf5^4aB#Kt~~GB=`rX?*B#}< z7DApa?3A{^{kS6?N0ZO;JX_eg#>Qy$8x5^z3p@Y zTj+hZ&|SLjNUmoKy~7q*4;|^MyYoF;*m1VNbN24mZ#42fTj+UPh(

Nz1mtSDtru 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ʟewwE|71PS%r?elde|&cr#| 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 I`s(lh0r?gWtN;K2 delta 84652 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 BmaG5( diff --git a/Assets/Art/Models/City_Road.blend.meta b/Assets/Art/Models/City_Road.blend.meta index 5b2a0ad..2505d27 100644 --- a/Assets/Art/Models/City_Road.blend.meta +++ b/Assets/Art/Models/City_Road.blend.meta @@ -7,7 +7,10 @@ ModelImporter: 400000: //RootNode 2100000: None__Untitled 2100002: unnamed - 2100004: None__Untitled_001 + 2100004: None__Concrete16_png + 2100006: Sidewalk_002__Untitled + 2100008: Sidewalk_002 + 2100010: Sidewalk_002__Concrete16_png 2300000: //RootNode 3300000: //RootNode 4300000: Plane diff --git a/Assets/Art/Models/City_Road.blend1 b/Assets/Art/Models/City_Road.blend1 new file mode 100644 index 0000000000000000000000000000000000000000..b22cea5b070b43e42e3c3ec5e7d06ebe4bfaae81 GIT binary patch literal 454684 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%0AiX~ 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 literal 0 HcmV?d00001 diff --git a/Assets/Art/Models/City_Road.blend1.meta b/Assets/Art/Models/City_Road.blend1.meta new file mode 100644 index 0000000..3d51791 --- /dev/null +++ b/Assets/Art/Models/City_Road.blend1.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3409065c5b8674db784200f110218a66 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Art/Materials/Arena.mat b/Assets/Resources/Art/Materials/Arena.mat index 292b256..23b8385 100644 --- a/Assets/Resources/Art/Materials/Arena.mat +++ b/Assets/Resources/Art/Materials/Arena.mat @@ -72,5 +72,5 @@ Material: - _UVSec: 0 - _ZWrite: 1 m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index 70c895c..2388767 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -572,7 +572,7 @@ Prefab: - target: {fileID: 2300000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Materials.Array.data[0] value: - objectReference: {fileID: 2100000, guid: 595fb6ee6d2874170b611f5de99c9e04, type: 2} + objectReference: {fileID: 2100000, guid: bdcf1fbccc71742df9e5db52282bfd1c, type: 2} - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Layer value: 11 @@ -8201,6 +8201,8 @@ GameObject: - component: {fileID: 1369181891} - component: {fileID: 1369181893} - component: {fileID: 1369181892} + - component: {fileID: 1369181895} + - component: {fileID: 1369181894} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -8267,10 +8269,84 @@ Camera: m_HDR: 1 m_AllowMSAA: 1 m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 + m_ForceIntoRT: 1 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 +--- !u!114 &1369181894 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1369181890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: 7393ac972e45b4a3daea905a6409d06d, type: 2} + isGlobal: 1 + blendDistance: 0 + weight: 1 + priority: 0 +--- !u!114 &1369181895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1369181890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} + m_Name: + m_EditorClassIdentifier: + volumeTrigger: {fileID: 1369181891} + volumeLayer: + serializedVersion: 2 + m_Bits: 4294967295 + stopNaNPropagation: 1 + antialiasingMode: 0 + temporalAntialiasing: + jitterSpread: 0.75 + sharpness: 0.25 + stationaryBlending: 0.95 + motionBlending: 0.85 + subpixelMorphologicalAntialiasing: + quality: 2 + fastApproximateAntialiasing: + fastMode: 0 + keepAlpha: 0 + fog: + enabled: 1 + excludeSkybox: 1 + debugLayer: + lightMeter: + width: 512 + height: 256 + showCurves: 1 + histogram: + width: 512 + height: 256 + channel: 3 + waveform: + exposure: 0.12 + height: 256 + vectorscope: + size: 256 + exposure: 0.12 + overlaySettings: + linearDepth: 0 + motionColorIntensity: 4 + motionGridSize: 64 + colorBlindnessType: 0 + colorBlindnessStrength: 1 + m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} + m_ShowToolkit: 0 + m_ShowCustomSorter: 0 + breakBeforeColorGrading: 0 + m_BeforeTransparentBundles: [] + m_BeforeStackBundles: [] + m_AfterStackBundles: [] --- !u!1001 &1377803165 Prefab: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset b/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset index 17edd3e..39bec05 100644 --- a/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset +++ b/Assets/Scenes/BossScene_Profiles/Main Camera Profile.asset @@ -29,28 +29,28 @@ MonoBehaviour: overrideState: 1 value: 1 intensity: - overrideState: 0 - value: 0 + overrideState: 1 + value: 3 threshold: - overrideState: 0 - value: 1 + overrideState: 1 + value: 0 softKnee: - overrideState: 0 - value: 0.5 + overrideState: 1 + value: 0.6 clamp: - overrideState: 0 - value: 65472 + overrideState: 1 + value: 65438.05 diffusion: - overrideState: 0 - value: 7 + overrideState: 1 + value: 3.91 anamorphicRatio: - overrideState: 0 - value: 0 + overrideState: 1 + value: -0.95 color: - overrideState: 0 - value: {r: 1, g: 1, b: 1, a: 1} + overrideState: 1 + value: {r: 1, g: 0, b: 0.9230766, a: 1} fastMode: - overrideState: 0 + overrideState: 1 value: 0 dirtTexture: overrideState: 0 From 6fcff58b4565ae76076151a6f952d4c11058c740 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Thu, 1 Nov 2018 16:57:24 -0500 Subject: [PATCH 09/33] Added WIP city model --- Assets/Resources/Models.meta | 8 + .../{Art => Resources}/Models/City_Road.blend | Bin .../Models/City_Road.blend.meta | 0 .../Models/City_Roundabout_Arena.blend | Bin .../Models/City_Roundabout_Arena.blend.meta | 0 Assets/Resources/Prefabs/City_Block_1.prefab | 1339 +++++++++++++++++ .../Prefabs/City_Block_1.prefab.meta | 8 + Assets/Scenes/CityScene.unity | 177 +-- Assets/Scripts/Boss Core/Moves/Test/Pincer.cs | 8 +- Assets/Scripts/CityGen.meta | 8 + Assets/Scripts/CityGen/CityGen.cs | 35 + Assets/Scripts/CityGen/CityGen.cs.meta | 11 + 12 files changed, 1456 insertions(+), 138 deletions(-) create mode 100644 Assets/Resources/Models.meta rename Assets/{Art => Resources}/Models/City_Road.blend (100%) rename Assets/{Art => Resources}/Models/City_Road.blend.meta (100%) rename Assets/{Art => Resources}/Models/City_Roundabout_Arena.blend (100%) rename Assets/{Art => Resources}/Models/City_Roundabout_Arena.blend.meta (100%) create mode 100644 Assets/Resources/Prefabs/City_Block_1.prefab create mode 100644 Assets/Resources/Prefabs/City_Block_1.prefab.meta create mode 100644 Assets/Scripts/CityGen.meta create mode 100644 Assets/Scripts/CityGen/CityGen.cs create mode 100644 Assets/Scripts/CityGen/CityGen.cs.meta diff --git a/Assets/Resources/Models.meta b/Assets/Resources/Models.meta new file mode 100644 index 0000000..d513491 --- /dev/null +++ b/Assets/Resources/Models.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9380ce1feeb647c6a66a07024a3c512 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Models/City_Road.blend b/Assets/Resources/Models/City_Road.blend similarity index 100% rename from Assets/Art/Models/City_Road.blend rename to Assets/Resources/Models/City_Road.blend diff --git a/Assets/Art/Models/City_Road.blend.meta b/Assets/Resources/Models/City_Road.blend.meta similarity index 100% rename from Assets/Art/Models/City_Road.blend.meta rename to Assets/Resources/Models/City_Road.blend.meta diff --git a/Assets/Art/Models/City_Roundabout_Arena.blend b/Assets/Resources/Models/City_Roundabout_Arena.blend similarity index 100% rename from Assets/Art/Models/City_Roundabout_Arena.blend rename to Assets/Resources/Models/City_Roundabout_Arena.blend diff --git a/Assets/Art/Models/City_Roundabout_Arena.blend.meta b/Assets/Resources/Models/City_Roundabout_Arena.blend.meta similarity index 100% rename from Assets/Art/Models/City_Roundabout_Arena.blend.meta rename to Assets/Resources/Models/City_Roundabout_Arena.blend.meta diff --git a/Assets/Resources/Prefabs/City_Block_1.prefab b/Assets/Resources/Prefabs/City_Block_1.prefab new file mode 100644 index 0000000..5c66d9f --- /dev/null +++ b/Assets/Resources/Prefabs/City_Block_1.prefab @@ -0,0 +1,1339 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 0} + m_RootGameObject: {fileID: 1506512691538210} + m_IsPrefabAsset: 1 +--- !u!1 &1027895699995956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4290117243793974} + - component: {fileID: 33529012950762950} + - component: {fileID: 23257910468295458} + - component: {fileID: 65255819364519140} + m_Layer: 0 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1133220579174930 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4054154317352462} + - component: {fileID: 33190183600326264} + - component: {fileID: 23932206563308208} + - component: {fileID: 65881971093601544} + m_Layer: 0 + m_Name: Cube (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1169945014693734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4956203202837210} + - component: {fileID: 33815294207273740} + - component: {fileID: 23926730859994018} + - component: {fileID: 65240561125305972} + m_Layer: 0 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1207173479789308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4032252277103200} + - component: {fileID: 33975841518649014} + - component: {fileID: 23186785162816808} + - component: {fileID: 65627860566008100} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1397925415378568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4737195023352646} + - component: {fileID: 33639959762678408} + - component: {fileID: 23918968401317338} + - component: {fileID: 65397031301662894} + m_Layer: 0 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1425336255125958 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4651250948247620} + - component: {fileID: 33124124492606336} + - component: {fileID: 23238843841723392} + - component: {fileID: 65719951778067444} + m_Layer: 0 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1464423558229544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4414561296069632} + - component: {fileID: 33643230953398594} + - component: {fileID: 23306354978854406} + - component: {fileID: 65586751101424906} + m_Layer: 0 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1492373306534858 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4044690180077786} + - component: {fileID: 33006682189655708} + - component: {fileID: 23607670054074398} + - component: {fileID: 65338543262470926} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1506512691538210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4031330876344230} + m_Layer: 0 + m_Name: City_Block_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1562841005236674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4186086607964720} + - component: {fileID: 33255626650554854} + - component: {fileID: 23528614263550180} + - component: {fileID: 95328859741658296} + m_Layer: 0 + m_Name: City_Road + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1680109176636150 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4779052425820150} + - component: {fileID: 33891754732412896} + - component: {fileID: 23176674774580040} + - component: {fileID: 65546847688922262} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1682041934598956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4870653106158340} + - component: {fileID: 33191503764523900} + - component: {fileID: 23302363344270116} + - component: {fileID: 65539510440911926} + m_Layer: 0 + m_Name: Cube (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1684443135579090 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4570609840030984} + - component: {fileID: 33352886422670994} + - component: {fileID: 23054167771980782} + - component: {fileID: 65379019322882134} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1933961509669242 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4690477397994866} + - component: {fileID: 33647861142404992} + - component: {fileID: 23788660648294734} + - component: {fileID: 65108474645266212} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1935210650208172 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4781792084434874} + - component: {fileID: 33513738100278634} + - component: {fileID: 23542551901135848} + - component: {fileID: 65225092174814678} + m_Layer: 0 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1977860023230076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4688868759379106} + - component: {fileID: 33898532341291464} + - component: {fileID: 23471486432827660} + - component: {fileID: 65860402039743926} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4031330876344230 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506512691538210} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4186086607964720} + - {fileID: 4570609840030984} + - {fileID: 4032252277103200} + - {fileID: 4779052425820150} + - {fileID: 4044690180077786} + - {fileID: 4781792084434874} + - {fileID: 4690477397994866} + - {fileID: 4956203202837210} + - {fileID: 4688868759379106} + - {fileID: 4651250948247620} + - {fileID: 4870653106158340} + - {fileID: 4290117243793974} + - {fileID: 4414561296069632} + - {fileID: 4054154317352462} + - {fileID: 4737195023352646} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4032252277103200 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207173479789308} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -25, y: 30.15, z: 6.1} + m_LocalScale: {x: 20, y: 60, z: 10} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4044690180077786 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1492373306534858} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -20, y: 18.2, z: -5.4} + m_LocalScale: {x: 10, y: 35, z: 30} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4054154317352462 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1133220579174930} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -29.4, y: 14.9, z: -17.7} + m_LocalScale: {x: 10, y: 25, z: 10} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4186086607964720 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1562841005236674} + m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!4 &4290117243793974 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1027895699995956} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -14.6, y: 15.8, z: -29.8} + m_LocalScale: {x: 15, y: 30, z: 10} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4414561296069632 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1464423558229544} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 13.7, y: 13.7, z: -29.8} + m_LocalScale: {x: 15, y: 25, z: 10} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4570609840030984 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1684443135579090} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -20.2, y: 15.15, z: 24.2} + m_LocalScale: {x: 30, y: 30, z: 20} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4651250948247620 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1425336255125958} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 22.6, y: 22.8, z: 23.2} + m_LocalScale: {x: 20, y: 45, z: 20} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4688868759379106 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1977860023230076} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.8, y: 15.15, z: 1.7} + m_LocalScale: {x: 30, y: 30, z: 20} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4690477397994866 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1933961509669242} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.6, y: 23.9, z: -29.8} + m_LocalScale: {x: 10, y: 45, z: 10} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4737195023352646 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397925415378568} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 26.7, y: 9.9, z: 5.1} + m_LocalScale: {x: 10, y: 20, z: 10} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4779052425820150 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1680109176636150} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -25, y: 22.8, z: 0.9} + m_LocalScale: {x: 20, y: 45, z: 20} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4781792084434874 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1935210650208172} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 27.9, y: 29.1, z: -19.8} + m_LocalScale: {x: 10, y: 55, z: 30} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4870653106158340 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1682041934598956} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -29.4, y: 9.9, z: -29.8} + m_LocalScale: {x: 10, y: 20, z: 10} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!4 &4956203202837210 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169945014693734} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.4, y: 23.9, z: 27.8} + m_LocalScale: {x: 12, y: 45, z: 12} + m_Children: [] + m_Father: {fileID: 4031330876344230} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &23054167771980782 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1684443135579090} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23176674774580040 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1680109176636150} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23186785162816808 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207173479789308} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23238843841723392 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1425336255125958} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23257910468295458 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1027895699995956} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23302363344270116 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1682041934598956} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23306354978854406 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1464423558229544} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23471486432827660 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1977860023230076} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23528614263550180 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1562841005236674} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100006, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + - {fileID: 2100008, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + - {fileID: 2100010, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23542551901135848 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1935210650208172} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23607670054074398 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1492373306534858} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23788660648294734 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1933961509669242} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23918968401317338 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397925415378568} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23926730859994018 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169945014693734} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!23 &23932206563308208 +MeshRenderer: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1133220579174930} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &33006682189655708 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1492373306534858} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33124124492606336 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1425336255125958} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33190183600326264 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1133220579174930} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33191503764523900 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1682041934598956} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33255626650554854 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1562841005236674} + m_Mesh: {fileID: 4300000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} +--- !u!33 &33352886422670994 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1684443135579090} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33513738100278634 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1935210650208172} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33529012950762950 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1027895699995956} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33639959762678408 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397925415378568} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33643230953398594 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1464423558229544} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33647861142404992 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1933961509669242} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33815294207273740 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169945014693734} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33891754732412896 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1680109176636150} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33898532341291464 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1977860023230076} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &33975841518649014 +MeshFilter: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207173479789308} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!65 &65108474645266212 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1933961509669242} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65225092174814678 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1935210650208172} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65240561125305972 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1169945014693734} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65255819364519140 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1027895699995956} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65338543262470926 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1492373306534858} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65379019322882134 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1684443135579090} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65397031301662894 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1397925415378568} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65539510440911926 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1682041934598956} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65546847688922262 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1680109176636150} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65586751101424906 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1464423558229544} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65627860566008100 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1207173479789308} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65719951778067444 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1425336255125958} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65860402039743926 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1977860023230076} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!65 &65881971093601544 +BoxCollider: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1133220579174930} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!95 &95328859741658296 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1562841005236674} + m_Enabled: 1 + m_Avatar: {fileID: 9000000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} + m_Controller: {fileID: 0} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 diff --git a/Assets/Resources/Prefabs/City_Block_1.prefab.meta b/Assets/Resources/Prefabs/City_Block_1.prefab.meta new file mode 100644 index 0000000..101620a --- /dev/null +++ b/Assets/Resources/Prefabs/City_Block_1.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7902ead0e7d5467f888fee59359d7eb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/CityScene.unity b/Assets/Scenes/CityScene.unity index 97b42f4..e2152ad 100644 --- a/Assets/Scenes/CityScene.unity +++ b/Assets/Scenes/CityScene.unity @@ -113,52 +113,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1001 &578436824 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalPosition.x - value: -50 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalPosition.z - value: 150 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalRotation.x - value: -0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_RootOrder - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_Name - value: City_Road (1) - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &653669955 GameObject: m_ObjectHideFlags: 0 @@ -225,48 +179,47 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1001 &1415128236 -Prefab: +--- !u!1 &1388479030 +GameObject: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - propertyPath: m_LocalPosition.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - propertyPath: m_LocalRotation.x - value: -0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: cbab7eb80f5474b2296096bc2587ab61, type: 3} - m_IsPrefabAsset: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1388479032} + - component: {fileID: 1388479031} + m_Layer: 0 + m_Name: GameManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1388479031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1388479030} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 02ac74be2279844638bd92459b4241f6, type: 3} + m_Name: + m_EditorClassIdentifier: + scale: 2 +--- !u!4 &1388479032 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 1388479030} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1493192389 GameObject: m_ObjectHideFlags: 0 @@ -312,7 +265,7 @@ Camera: width: 1 height: 1 near clip plane: 0.3 - far clip plane: 1000 + far clip plane: 5000 field of view: 60 orthographic: 0 orthographic size: 5 @@ -337,52 +290,10 @@ Transform: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1493192389} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079} + m_LocalPosition: {x: 0, y: 1000, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &1772548818 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalPosition.x - value: 50 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalPosition.z - value: 150 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalRotation.x - value: -0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: c42c1e757cc9e46e080b91a1d882203e, type: 3} - m_IsPrefabAsset: 0 + m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0} diff --git a/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs b/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs index 10a9fe2..7beb1bd 100644 --- a/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs +++ b/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs @@ -12,10 +12,9 @@ public class Pincer : AISequence public Pincer(float offset=0f, Speed speed=Speed.SNIPE) : base ( () => { - //Debug.Log("Pincer sees player at: " + GameManager.Player.transform.position); - Debug.Log("Pincer called"); - List sequences = new List(); - ¸ + //Debug.Log("Pincer sees player at: " + GameManager.Player.transform.position); + List sequences = new List(); + float curveAmount = -4f * // base (float)speed * // turning radius is tighter when we go faster @@ -33,7 +32,6 @@ public Pincer(float offset=0f, Speed speed=Speed.SNIPE) : base ) { - Debug.Log("Pincer created"); Description = "Shoots two projectiles with an offset of +/-" + offset + " degrees with speed " + speed; } } diff --git a/Assets/Scripts/CityGen.meta b/Assets/Scripts/CityGen.meta new file mode 100644 index 0000000..33ee86c --- /dev/null +++ b/Assets/Scripts/CityGen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53b7b675881d144ba821d59b6d2d7289 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/CityGen/CityGen.cs b/Assets/Scripts/CityGen/CityGen.cs new file mode 100644 index 0000000..04dabfa --- /dev/null +++ b/Assets/Scripts/CityGen/CityGen.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class CityGen : MonoBehaviour { + + private GameObject arenaObjPrefab; + private GameObject blockPrefab; + + public float scale = 1f; + + // Use this for initialization + void Start () { + arenaObjPrefab = Resources.Load("Models/City_Roundabout_Arena"); + blockPrefab = Resources.Load("Prefabs/City_Block_1"); + + + //GameObject.Instantiate(arenaObjPrefab); + //GameObject.Instantiate(blockPrefab, Vector3.zero, Quaternion.identity); + for (int depth = 0; depth < 28; depth++) + { + float maxWidth = Mathf.Max(8, scale * depth); + for (int width = (int)(-maxWidth); width <= maxWidth; width++) + { + GameObject newObj = GameObject.Instantiate(blockPrefab, new Vector3(100f * width, 0f, 100f * depth), Quaternion.AngleAxis(Random.Range(0, 3) * 90f, Vector3.up)); + newObj.isStatic = true; + } + } + } + + // Update is called once per frame + void Update () { + + } +} diff --git a/Assets/Scripts/CityGen/CityGen.cs.meta b/Assets/Scripts/CityGen/CityGen.cs.meta new file mode 100644 index 0000000..f54d186 --- /dev/null +++ b/Assets/Scripts/CityGen/CityGen.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02ac74be2279844638bd92459b4241f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From c9287ef9c4b79e3dab3beed1fbf4c525711aa2f2 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Fri, 2 Nov 2018 09:35:33 -0500 Subject: [PATCH 10/33] Added flying up scene --- Assets/Resources/Art/Materials/Arena.mat | 10 +- Assets/Scenes/CityScene.unity | 554 ++++++++++++++++++++--- Assets/Scripts/CityGen/CityGen.cs | 61 ++- ProjectSettings/ProjectVersion.txt | 2 +- 4 files changed, 543 insertions(+), 84 deletions(-) diff --git a/Assets/Resources/Art/Materials/Arena.mat b/Assets/Resources/Art/Materials/Arena.mat index 23b8385..5598b28 100644 --- a/Assets/Resources/Art/Materials/Arena.mat +++ b/Assets/Resources/Art/Materials/Arena.mat @@ -8,8 +8,8 @@ Material: m_PrefabInternal: {fileID: 0} m_Name: Arena m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 4 + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 @@ -59,8 +59,8 @@ Material: - _Cutoff: 0.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 + - _GlossMapScale: 0 + - _Glossiness: 0.55 - _GlossyReflections: 1 - _Metallic: 0 - _Mode: 0 @@ -73,4 +73,4 @@ Material: - _ZWrite: 1 m_Colors: - _Color: {r: 0, g: 0, b: 0, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0.14150941, g: 0.14150941, b: 0.14150941, a: 1} diff --git a/Assets/Scenes/CityScene.unity b/Assets/Scenes/CityScene.unity index e2152ad..062a489 100644 --- a/Assets/Scenes/CityScene.unity +++ b/Assets/Scenes/CityScene.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657898, g: 0.496413, b: 0.5748175, a: 1} + m_IndirectSpecularColor: {r: 0.43856063, g: 0.48666787, b: 0.56694144, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -113,6 +113,72 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &208518361 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 208518363} + - component: {fileID: 208518362} + m_Layer: 0 + m_Name: Spot Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!108 &208518362 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 208518361} + m_Enabled: 1 + serializedVersion: 8 + m_Type: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 50 + m_Range: 150 + m_SpotAngle: 60 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &208518363 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 208518361} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 103.1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!1 &653669955 GameObject: m_ObjectHideFlags: 0 @@ -123,7 +189,7 @@ GameObject: - component: {fileID: 653669957} - component: {fileID: 653669956} m_Layer: 0 - m_Name: Directional Light + m_Name: Sun m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -172,13 +238,118 @@ Transform: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 653669955} - m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} - m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalRotation: {x: 0, y: 0.60598844, z: -0.7954735, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 1000} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} + m_LocalEulerAnglesHint: {x: 105.4, y: 180, z: 0} +--- !u!1 &758241540 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1740473415712136, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 2} + m_PrefabInternal: {fileID: 913642160} +--- !u!1001 &822479260 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + propertyPath: m_LocalPosition.y + value: 1.31 + objectReference: {fileID: 0} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + propertyPath: Chill + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + m_IsPrefabAsset: 0 +--- !u!1 &897575110 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1531581295551972, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 2} + m_PrefabInternal: {fileID: 913642160} +--- !u!114 &897575112 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114941571434193320, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 2} + m_PrefabInternal: {fileID: 913642160} + m_Script: {fileID: 11500000, guid: 70dae659e9d6bae4db41c2b2fc0b7d77, type: 3} +--- !u!1001 &913642160 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + propertyPath: m_LocalPosition.z + value: -20 + objectReference: {fileID: 0} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + m_IsPrefabAsset: 0 --- !u!1 &1388479030 GameObject: m_ObjectHideFlags: 0 @@ -188,6 +359,8 @@ GameObject: m_Component: - component: {fileID: 1388479032} - component: {fileID: 1388479031} + - component: {fileID: 1388479033} + - component: {fileID: 1388479034} m_Layer: 0 m_Name: GameManager m_TagString: Untagged @@ -218,82 +391,323 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1493192389 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1493192392} - - component: {fileID: 1493192391} - - component: {fileID: 1493192390} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1493192390 -AudioListener: +--- !u!114 &1388479033 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1493192389} + m_GameObject: {fileID: 1388479030} m_Enabled: 1 ---- !u!20 &1493192391 -Camera: + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 08b92900ec1a042998d89bf0cfe4e533, type: 3} + m_Name: + m_EditorClassIdentifier: + boss: {fileID: 2132776441} + player: {fileID: 1982390735} + arena: {fileID: 2111842448} + heldShield: {fileID: 758241540} + placedShield: {fileID: 897575110} + thrownShield: {fileID: 0} + hud: {fileID: 2123072600} +--- !u!114 &1388479034 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1493192389} + m_GameObject: {fileID: 1388479030} m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aa51ae998d63f48eba266589ae521d17, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1507567307 +Prefab: + m_ObjectHideFlags: 0 serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 5000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1493192392 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4742906667431576, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalPosition.z + value: -14 + objectReference: {fileID: 0} + - target: {fileID: 114677581309639984, guid: 1cac6195606574b31be30813600757cc, + type: 2} + propertyPath: followTargets.Array.data[0] + value: + objectReference: {fileID: 2132776445} + - target: {fileID: 114677581309639984, guid: 1cac6195606574b31be30813600757cc, + type: 2} + propertyPath: followTargets.Array.data[1] + value: + objectReference: {fileID: 1982390736} + - target: {fileID: 20451642182706338, guid: 1cac6195606574b31be30813600757cc, + type: 2} + propertyPath: far clip plane + value: 5000 + objectReference: {fileID: 0} + - target: {fileID: 4742906667431576, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalRotation.x + value: 0.42261827 + objectReference: {fileID: 0} + - target: {fileID: 4742906667431576, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalRotation.w + value: 0.9063079 + objectReference: {fileID: 0} + - target: {fileID: 4742906667431576, guid: 1cac6195606574b31be30813600757cc, type: 2} + propertyPath: m_LocalEulerAnglesHint.x + value: 50 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1cac6195606574b31be30813600757cc, type: 2} + m_IsPrefabAsset: 0 +--- !u!1001 &1551843443 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 400002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.y + value: -0.25 + objectReference: {fileID: 0} + - target: {fileID: 2300000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 55245a9ea47244c1d9a82d8150017996, type: 2} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: Arena + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + m_IsPrefabAsset: 0 +--- !u!114 &1982390734 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114841838092227364, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 2} + m_PrefabInternal: {fileID: 913642160} + m_Script: {fileID: 11500000, guid: 70dae659e9d6bae4db41c2b2fc0b7d77, type: 3} +--- !u!114 &1982390735 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114744886842337002, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 2} + m_PrefabInternal: {fileID: 913642160} + m_Script: {fileID: 11500000, guid: 43b55afaa3edcd847a705ca151d1cf5a, type: 3} +--- !u!4 &1982390736 stripped Transform: + m_CorrespondingSourceObject: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 2} + m_PrefabInternal: {fileID: 913642160} +--- !u!1 &2111842447 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, + type: 3} + m_PrefabInternal: {fileID: 1551843443} +--- !u!114 &2111842448 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 1493192389} - m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079} - m_LocalPosition: {x: 0, y: 1000, z: -10} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0} + m_GameObject: {fileID: 2111842447} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31cfe0330bccb934f90ee57aa48a4a4c, type: 3} + m_Name: + m_EditorClassIdentifier: + adjustSpeed: 3 + threshold: 0.01 +--- !u!1001 &2123072599 +Prefab: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_LocalPosition.z + value: -20 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_AnchoredPosition.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_SizeDelta.x + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_SizeDelta.y + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 114315413463394226, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: player + value: + objectReference: {fileID: 1982390734} + - target: {fileID: 114315413463394226, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + propertyPath: shield + value: + objectReference: {fileID: 897575112} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: bb41b54f16c577b4394b91efd8f95232, type: 2} + m_IsPrefabAsset: 0 +--- !u!114 &2123072600 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114315413463394226, guid: bb41b54f16c577b4394b91efd8f95232, + type: 2} + m_PrefabInternal: {fileID: 2123072599} + m_Script: {fileID: 11500000, guid: fae87115b5d35c04790c9e97a3f4e548, type: 3} +--- !u!114 &2132776441 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + m_PrefabInternal: {fileID: 822479260} + m_Script: {fileID: 11500000, guid: 281669b33e37543babdb0261c006392e, type: 3} +--- !u!4 &2132776445 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + m_PrefabInternal: {fileID: 822479260} diff --git a/Assets/Scripts/CityGen/CityGen.cs b/Assets/Scripts/CityGen/CityGen.cs index 04dabfa..74d0288 100644 --- a/Assets/Scripts/CityGen/CityGen.cs +++ b/Assets/Scripts/CityGen/CityGen.cs @@ -7,29 +7,74 @@ public class CityGen : MonoBehaviour { private GameObject arenaObjPrefab; private GameObject blockPrefab; + private List initialTransforms; + private List initialPositions; + private List finalPositions; + public float scale = 1f; + private Vector3 offset = new Vector3(50, 0, 50); // Use this for initialization void Start () { arenaObjPrefab = Resources.Load("Models/City_Roundabout_Arena"); blockPrefab = Resources.Load("Prefabs/City_Block_1"); + + initialTransforms = new List(); + initialPositions = new List(); + finalPositions = new List(); - - //GameObject.Instantiate(arenaObjPrefab); + GameObject arenaBlock = GameObject.Instantiate(arenaObjPrefab); + initialTransforms.Add(arenaBlock.transform); //GameObject.Instantiate(blockPrefab, Vector3.zero, Quaternion.identity); - for (int depth = 0; depth < 28; depth++) + + for (int depth = -1; depth < 28; depth++) { float maxWidth = Mathf.Max(8, scale * depth); for (int width = (int)(-maxWidth); width <= maxWidth; width++) { - GameObject newObj = GameObject.Instantiate(blockPrefab, new Vector3(100f * width, 0f, 100f * depth), Quaternion.AngleAxis(Random.Range(0, 3) * 90f, Vector3.up)); - newObj.isStatic = true; + if ((width == -1 || width == 0) && (depth == -1 || depth == 0)) + { + continue; + } + GameObject newObj = GameObject.Instantiate(blockPrefab, offset + new Vector3(100f * width, 0f, 100f * depth), Quaternion.AngleAxis(Random.Range(0, 3) * 90f, Vector3.up)); + initialTransforms.Add(newObj.transform); } } - } - + + MoveDown(); + } + + private Vector3 finalOffset = new Vector3(0, -250, 0); + bool shouldMove = true; + private float currTime = 0f; + private float maxTime = 5f; + + public void MoveDown() + { + shouldMove = true; + //GameManager.Boss.Add(new Moves.Basic.MoveCamera()); + } + // Update is called once per frame void Update () { - + if (Time.time > 10f) + { + if (shouldMove) + { + foreach (Transform t in initialTransforms) + { + initialPositions.Add(t.position); + finalPositions.Add(t.position + finalOffset); + } + shouldMove = false; + } + currTime += Time.deltaTime; + for (int i = 0; i < initialTransforms.Count; i++) + { + Transform t = initialTransforms[i]; + t.position = Vector3.Lerp(initialPositions[i], finalPositions[i], currTime / maxTime); + } + GameObject.Find("PlayerCamera").GetComponent().MinZoom = Mathf.Lerp(20, 120, currTime * 2 / maxTime); + } } } diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 6169583..9069a39 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1 +1 @@ -m_EditorVersion: 2018.2.7f1 +m_EditorVersion: 2018.2.10f1 From 29a33060a757cd5f0aab949256e07811c6ba9490 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Fri, 2 Nov 2018 21:52:42 -0500 Subject: [PATCH 11/33] gitignore --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6595497..248f7ed 100644 --- a/.gitignore +++ b/.gitignore @@ -65,6 +65,8 @@ sysinfo.txt # Crashlytics generated file crashlytics-build.properties - # End of https://www.gitignore.io/api/unity +# Remove DS_Store +**/.DS_Store + From 415609e56c9bfbe6a952cc99e08954070e6a5f08 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Fri, 2 Nov 2018 10:06:33 -0500 Subject: [PATCH 12/33] Added project version file to gitignore so Streus stops complaining --- .gitignore | 1 + ProjectSettings/ProjectVersion.txt | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 ProjectSettings/ProjectVersion.txt diff --git a/.gitignore b/.gitignore index 248f7ed..a648217 100644 --- a/.gitignore +++ b/.gitignore @@ -69,4 +69,5 @@ crashlytics-build.properties # Remove DS_Store **/.DS_Store +ProjectSettings/ProjectVersion.txt diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt deleted file mode 100644 index 9069a39..0000000 --- a/ProjectSettings/ProjectVersion.txt +++ /dev/null @@ -1 +0,0 @@ -m_EditorVersion: 2018.2.10f1 From 312256b75cff97cdf92a9861e2c30b65cfc4122b Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Fri, 2 Nov 2018 10:12:24 -0500 Subject: [PATCH 13/33] Also added .DS_Store to gitignore (hopefully). --- Assets/Art/Sprites/resource_bar.png~ | Bin 1793 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Assets/Art/Sprites/resource_bar.png~ diff --git a/Assets/Art/Sprites/resource_bar.png~ b/Assets/Art/Sprites/resource_bar.png~ deleted file mode 100644 index 144746a183e00cd35d4f61687f02a536a0318002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1793 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zD%7#N%DpX30kyi8~3fXw7%1_q6Zr4y~a znH@!1_p5X*66Dqm(b*Q@Dd;G2BuFVkST~6!-nZlvpj%+ZmU7H!TDcCk1}m@~I5FD|=cS!b1k zTl%qrwv==4-*fU**pw<_+(YO_C1k2^G`EX zA2L7Oq0BC_FJzb8hslp(4&-;uEy?0Jv}*aZ)k%B1diNxA9&f2$<8<oQV2yWE8X{=fLWe(!}1yz$Zd{#U;E9q%qs+3-2(=zb;3-aXy>LN8W* zTUaXVr>`|@A9K3&g~I&wIcNGsCQ6$5R#-Mpv&`7twyafQ_5ISm_X>N}{7YDOS6@*7 z9WB0}@oZfBXT?J%GlB8IS>O>_%)r2(2*Qjj?3ZUUFtA#Bx;TbZ#J#<bkqWsA?AE7>rYeFopQ&kUCjmdPbpK_p@1 z57B@8NRl_sG5fH?N5CcmyX<)Zpbb>;O7P`J2^c#@(C_a~O`` zCGeU=rsSJXd#;zTyeV16oS@IjkjTYwNQ9w9lYt|cL0}n!f)As^45kJH3<)wV8vtz& ztml27)z>ihTnWRQrMNwW)2BpB41nK;x0UxlfKn#Io1$gR3<>hg3=B;?3=AAb3=9e< l7#JE9=qfNgL%Ko!6Z@JFnR6v?@3(+_=;`X`vd$@?2>_IQLX-di From 3e66ca0ac82f9f4137ed95f96dce1916fb85355f Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Fri, 2 Nov 2018 16:57:27 -0500 Subject: [PATCH 14/33] Tweaked BossController to follow Unity and OOP conventions; added AIRoutine generation code; removed check for free-floating AISequences; WIP new move --- Assets/Resources/Prefabs/Projectile.prefab | 2 + Assets/Scenes/BossScene.unity | 11 +- Assets/Scenes/CityScene.unity | 18 ++- Assets/Scripts/Boss Core/AI/AIRoutine.cs | 3 +- Assets/Scripts/Boss Core/AI/AISequence.cs | 18 ++- .../Scripts/Boss Core/AI/PhaseDictionary.cs | 2 +- Assets/Scripts/Boss Core/AOE/AOE.cs | 13 +- Assets/Scripts/Boss Core/AOE/AOEComponent.cs | 7 +- Assets/Scripts/Boss Core/BossController.cs | 127 +++++++++++------- .../Moves/Basic_Generators/PlayerLock.cs | 19 ++- .../Moves/Basic_Generators/Strafe.cs | 8 +- .../Moves/Basic_Generators/Teleport.cs | 9 +- .../Boss Core/Moves/Test/Horseshoe_AOE.cs | 37 +++++ .../Moves/Test/Horseshoe_AOE.cs.meta | 11 ++ Assets/Scripts/Boss Core/Phases/Phase_Test.cs | 19 +-- .../Boss Core/Projectile/Projectile.cs | 15 +-- .../ProjectileCallbackDictionary.cs | 16 +-- .../Projectile/ProjectileComponent.cs | 18 +-- .../Boss Core/Projectile/ProjectileCurving.cs | 7 +- .../Projectile/ProjectileDeathHex.cs | 5 +- .../Boss Core/Projectile/ProjectileHoming.cs | 8 +- .../Projectile/ProjectileLightning.cs | 8 +- Assets/Scripts/Boss Core/Routines.meta | 8 ++ Assets/Scripts/Boss Core/Routines/Main.cs | 18 +++ .../Scripts/Boss Core/Routines/Main.cs.meta | 11 ++ Assets/Scripts/Boss Core/Routines/Test.cs | 18 +++ .../Scripts/Boss Core/Routines/Test.cs.meta | 11 ++ Assets/Scripts/Boss Core/Routines/Tutorial.cs | 20 +++ .../Boss Core/Routines/Tutorial.cs.meta | 11 ++ Assets/Scripts/Boss Core/Routines/UnitTest.cs | 18 +++ .../Boss Core/Routines/UnitTest.cs.meta | 11 ++ .../StatusComponents/Reflecting.cs | 2 + 32 files changed, 362 insertions(+), 147 deletions(-) create mode 100644 Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs create mode 100644 Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs.meta create mode 100644 Assets/Scripts/Boss Core/Routines.meta create mode 100644 Assets/Scripts/Boss Core/Routines/Main.cs create mode 100644 Assets/Scripts/Boss Core/Routines/Main.cs.meta create mode 100644 Assets/Scripts/Boss Core/Routines/Test.cs create mode 100644 Assets/Scripts/Boss Core/Routines/Test.cs.meta create mode 100644 Assets/Scripts/Boss Core/Routines/Tutorial.cs create mode 100644 Assets/Scripts/Boss Core/Routines/Tutorial.cs.meta create mode 100644 Assets/Scripts/Boss Core/Routines/UnitTest.cs create mode 100644 Assets/Scripts/Boss Core/Routines/UnitTest.cs.meta diff --git a/Assets/Resources/Prefabs/Projectile.prefab b/Assets/Resources/Prefabs/Projectile.prefab index 75f1411..2ceba74 100644 --- a/Assets/Resources/Prefabs/Projectile.prefab +++ b/Assets/Resources/Prefabs/Projectile.prefab @@ -108,6 +108,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 53649a2517c5d4c128e97a0a97c82839, type: 3} m_Name: m_EditorClassIdentifier: + shouldUpdate: 1 + currentTime: 0 --- !u!135 &135941191046163174 SphereCollider: m_ObjectHideFlags: 1 diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index 2388767..fbf22a9 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -572,7 +572,7 @@ Prefab: - target: {fileID: 2300000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Materials.Array.data[0] value: - objectReference: {fileID: 2100000, guid: bdcf1fbccc71742df9e5db52282bfd1c, type: 2} + objectReference: {fileID: 2100000, guid: 595fb6ee6d2874170b611f5de99c9e04, type: 2} - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Layer value: 11 @@ -7729,6 +7729,11 @@ Prefab: propertyPath: Chill value: 0 objectReference: {fileID: 0} + - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + propertyPath: Routine + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} m_IsPrefabAsset: 0 @@ -8279,7 +8284,7 @@ MonoBehaviour: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1369181890} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} m_Name: @@ -8295,7 +8300,7 @@ MonoBehaviour: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInternal: {fileID: 0} m_GameObject: {fileID: 1369181890} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} m_Name: diff --git a/Assets/Scenes/CityScene.unity b/Assets/Scenes/CityScene.unity index 062a489..dcb6423 100644 --- a/Assets/Scenes/CityScene.unity +++ b/Assets/Scenes/CityScene.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.43856063, g: 0.48666787, b: 0.56694144, a: 1} + m_IndirectSpecularColor: {r: 0.438561, g: 0.4866684, b: 0.5669422, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -294,6 +294,16 @@ Prefab: propertyPath: Chill value: 0 objectReference: {fileID: 0} + - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + propertyPath: self + value: + objectReference: {fileID: 1409814815} + - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + propertyPath: insaneMode + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} m_IsPrefabAsset: 0 @@ -422,6 +432,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: aa51ae998d63f48eba266589ae521d17, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &1409814815 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 2} + m_PrefabInternal: {fileID: 822479260} + m_Script: {fileID: 11500000, guid: 70dae659e9d6bae4db41c2b2fc0b7d77, type: 3} --- !u!1001 &1507567307 Prefab: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Boss Core/AI/AIRoutine.cs b/Assets/Scripts/Boss Core/AI/AIRoutine.cs index 6b0eaa4..dd66584 100644 --- a/Assets/Scripts/Boss Core/AI/AIRoutine.cs +++ b/Assets/Scripts/Boss Core/AI/AIRoutine.cs @@ -6,7 +6,7 @@ namespace AI { public class AIRoutine { - public List Phases { get; private set; } + public List Phases { get; protected set; } public AIPhase CurrentPhase { get @@ -18,6 +18,7 @@ public AIPhase CurrentPhase public AIRoutine() { Phases = new List(); + //AISequence.ShouldAllowInstantiation = true; } public AIPhase NextPhase() { diff --git a/Assets/Scripts/Boss Core/AI/AISequence.cs b/Assets/Scripts/Boss Core/AI/AISequence.cs index 69c2916..c582ff9 100644 --- a/Assets/Scripts/Boss Core/AI/AISequence.cs +++ b/Assets/Scripts/Boss Core/AI/AISequence.cs @@ -24,8 +24,12 @@ public partial class AISequence /// Should we allow new AISequences to be generated? This is false by default; when /// we are ready to load in the sequence dictionaries, we set this to true. This will /// catch floating AISequence declarations at runtime. + /// + /// TODO: Make a better way to toggle this value. Currently this is true when loading in routines/phases, + /// and when generating projectile/AOE callbacks. This means the logic for setting it to false is somewhat complex. + /// Is it really so bad to let people put AISequences wherever they want? /// - public static bool ShouldAllowInstantiation = false; + public static bool ShouldAllowInstantiation = true; private static void CheckAllowInstantiation() { @@ -37,10 +41,14 @@ private static void CheckAllowInstantiation() // TODO put these in a publically accessable location. Possibly in world or game manager. public static ProxyVector3 PLAYER_POSITION = new ProxyVector3(() => { return GameManager.Player.transform.position + World.Arena.CENTER; }); - public static ProxyVector3 DELAYED_PLAYER_POSITION = new ProxyVector3(() => - { - return GameManager.Boss.isPlayerLocked ? GameManager.Boss.playerLockPosition : GameManager.Player.transform.position + World.Arena.CENTER; - }); + + ///

+ /// Grabs the delayed player position. If the "PlayerLock" move is locked on, then + /// this will return the player position at the time the move was run. Otherwise, this + /// returns the same value as PLAYER_POSITION. + /// + /// + public static ProxyVector3 DELAYED_PLAYER_POSITION = Moves.Basic.PlayerLock._delayed_player_position; public static ProxyVector3 BOSS_POSITION = new ProxyVector3(() => { return GameManager.Boss.transform.position; }); public static ProxyVector3 RANDOM_IN_ARENA = new ProxyVector3(() => { diff --git a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs b/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs index c567ed5..04cf8f8 100644 --- a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs +++ b/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs @@ -39,7 +39,7 @@ public partial class AIPhase * TODO: Add some form of progress indicator to this. */ public static void Load() { - AISequence.ShouldAllowInstantiation = true; + //AISequence.ShouldAllowInstantiation = true; /* PHASE1 = new AIPhase() diff --git a/Assets/Scripts/Boss Core/AOE/AOE.cs b/Assets/Scripts/Boss Core/AOE/AOE.cs index 4b58d56..d35adca 100644 --- a/Assets/Scripts/Boss Core/AOE/AOE.cs +++ b/Assets/Scripts/Boss Core/AOE/AOE.cs @@ -39,10 +39,7 @@ public class AOE public const float HEIGHT = 0.5f; // Every AOE has the same material, for now. We cache it here. - public static Material AOE_MATERIAL; - - // Mostly so we know what side we're on. - public Entity Entity { get; set; } + public static Material AOE_MATERIAL; // internal. Tracks what triangles are on or off in the mesh public bool[] Regions { get; protected set; } = new bool[NUM_SECTIONS]; @@ -134,13 +131,9 @@ public void ShouldDestroyOnOutOfBounds(bool to) { public AOECallbackDelegate OnDestroyTimeout { get; set; } = AOECallbackDictionary.NOTHING; #endregion - - public AOE() : this(GameManager.Boss.self) { } - public AOE(Entity self) + public AOE() { - this.Entity = self; - for (int i = 0; i < Regions.Length; i++) { Regions[i] = false; @@ -219,7 +212,7 @@ public AOEComponent Create() { // Set up the gameobject GameObject obj = new GameObject(); - obj.transform.position = Entity.transform.position; + obj.transform.position = Start.GetValue(); // TODO move this into initialization of AOEComponent obj.layer = LayerMask.NameToLayer("AOE"); obj.name = "AOE"; obj.SetActive(false); // hack so we can assign variables on init diff --git a/Assets/Scripts/Boss Core/AOE/AOEComponent.cs b/Assets/Scripts/Boss Core/AOE/AOEComponent.cs index d42e5ca..2825c9b 100644 --- a/Assets/Scripts/Boss Core/AOE/AOEComponent.cs +++ b/Assets/Scripts/Boss Core/AOE/AOEComponent.cs @@ -116,7 +116,7 @@ public virtual void OnTriggerStay(Collider other) { GameObject otherObject = other.gameObject; Entity otherEntity = otherObject.GetComponent(); - if (otherEntity != null && !otherEntity.IsInvincible() && otherEntity.GetFaction() != data.Entity.GetFaction()) + if (otherEntity != null && !otherEntity.IsInvincible() && otherEntity.GetFaction() != Entity.Faction.enemy) { // Position relative to us; not absolute Vector3 playerPositionFlat = new Vector3(other.transform.position.x - transform.position.x, 0f, other.transform.position.z - transform.position.z); @@ -148,8 +148,9 @@ public virtual void OnTriggerStay(Collider other) //Debug.Log("In section " + section); if (data.Regions[section]) - { - Entity.DamageEntity(otherEntity, data.Entity, data.Damage); + { + // Note: we pass in a null entity; callbacks might break + Entity.DamageEntity(otherEntity, null, data.Damage); } } } diff --git a/Assets/Scripts/Boss Core/BossController.cs b/Assets/Scripts/Boss Core/BossController.cs index 44d2a98..6eb332e 100644 --- a/Assets/Scripts/Boss Core/BossController.cs +++ b/Assets/Scripts/Boss Core/BossController.cs @@ -1,53 +1,54 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using Projectiles; -using AI; using UnityEngine.Profiling; -/* - * TODO: refactor the shootXXX methods to have similar parameters. - * "target" should be a nullable; if null and locked, then use old position; - * if null and unlocked, use current player position; if not null, use specified target. - * - * Next, add Speed/Size/Type parameters to all; angle offsets. - * - * Find some way to add the code currently in Start via sequences; i.e., parameters - * that increase in step by a certain amount, for a specified number of times. - */ +using AI; + public class BossController : MonoBehaviour { - // Toggles insane mode. This just makes everything a living hell. - // Specifically, every waiting period is reduced and movement speed is buffed. + [Tooltip("If enabled, reduces delays between attacks and increases base movement speed.")] [SerializeField] - private bool insaneMode; + private bool insaneMode = false; + [Tooltip("If enabled, will print logging messages related to current attacks. Has a mild performance impact.")] [SerializeField] private bool DebugMode = true; + [Tooltip("If enabled, the boss won't attack you or move at the start.")] [SerializeField] private bool Chill = false; // The Entity representing this faction. Assigned to projectiles we create. - public CombatCore.Entity self; - - // Used for the "PlayerLock" move. Keeps track of the current player position - // for events and sequences that need a slightly out of date version. - public Vector3 playerLockPosition; // Should only be accessed via DelayedPlayerPosition. - public bool isPlayerLocked; // Should only be set via PlayerLock() AISequence. + private CombatCore.Entity self; // Phase iteration logic private AIRoutine routine; - // Event queue variables. How we schedule our attacks. + // Event queue variables. This is how we schedule our attacks. private Queue queuedSequences; private bool paused; - private bool running = true; + private bool running = true; + + #region Debugging code that should be refactored soon™ + // Debug code. Used to set the routine from the inspector rather than changing code. + private enum _Routine { + Tutorial, + //Main, + Test, + //UnitTest + } + [SerializeField] + private _Routine Routine = _Routine.Tutorial; + #endregion void Awake() { - self = GetComponent(); + if (self == null) + { + self = GetComponent(); + } queuedSequences = new Queue(); } @@ -55,27 +56,19 @@ void Awake() void Start() { Profiler.BeginSample("Initialize phases"); - AIPhase.Load(); + //AIPhase.Load(); Profiler.EndSample(); - AIRoutine mainRoutine = new AIRoutine - { - Phases = { - new Phases.Phase_Tutorial_1(), - new Phases.Phase_Tutorial_2(), - new Phases.Phase_Tutorial_3() - } - }; - - AIRoutine testRoutine = new AIRoutine - { - Phases = { - new Phases.Phase_Test() - } - }; - - //routine = mainRoutine; - routine = testRoutine; + //AISequence.ShouldAllowInstantiation = true; + switch (Routine) { + case _Routine.Tutorial: + routine = new Routines.Tutorial(); + break; + case _Routine.Test: + routine = new Routines.Test(); + break; + } + //AISequence.ShouldAllowInstantiation = false; // Kick off the execution engine StartCoroutine(ExecuteQueue()); @@ -96,27 +89,40 @@ public void NextPhase() { // Heal up to the new max health. CombatCore.Entity.HealEntity(self, float.PositiveInfinity); - self.SetInvincible(true); - Add(new Moves.Basic.Teleport(World.Arena.CENTER).Wait(3f)); - Add(new AISequence(() => { self.SetInvincible(false); })); + // Add i-frames for 3 seconds while we move to center & regain health. + if (!Chill) + { + self.SetInvincible(true); + Add(new Moves.Basic.Teleport(World.Arena.CENTER).Wait(3f)); + Add(new AISequence(() => { self.SetInvincible(false); })); + } } public void ResetBoss() { // Flush the execution engine + // TODO: this might need more work to flush current attack. + running = false; StopCoroutine("Dash"); StopCoroutine("Glare"); StopCoroutine("Execute"); + StopCoroutine("ExecuteQueue"); StopCoroutine("ExecuteAsync"); queuedSequences.Clear(); // Reset the routine and restart it routine.Reset(); + + // Restart the execution engine + running = true; + StartCoroutine("ExecuteQueue"); + NextPhase(); } - public void Add(AISequence sequence) + private void Add(AISequence sequence) { + // Debug mode provides additional information when executing an event. if (GameManager.Boss.DebugMode) { if (sequence == null) @@ -150,7 +156,6 @@ public void Add(AISequence sequence) queuedSequences.Enqueue(sequence); } - // Update is called once per frame void Update() { if (Chill) { @@ -165,7 +170,14 @@ void Update() } - // event queue + /// + /// The main "thread" that executes the next event on the event queue. + /// If there aren't any sequences, then we spin until there are some. + /// + /// TODO: either here or in "Execute", have some way to interrupt the current + /// executing AISequence so the next phase can be started immediately. Also so + /// that if the player interrupts, we can do something about it. + /// private IEnumerator ExecuteQueue() { while (running) @@ -176,19 +188,27 @@ private IEnumerator ExecuteQueue() yield return new WaitForSeconds(0.05f); } - AISequence nextSequence = queuedSequences.Dequeue(); + AISequence nextSequence = queuedSequences.Peek(); yield return Execute(nextSequence); + queuedSequences.Dequeue(); //Profiler.EndSample(); } } - // event queue + /// + /// Executes a given AISequence. This will wait for the duration specified + /// in any events that make up this sequence. This will also respect the + /// "paused" variable, and wait until it is true before continuing to the + /// next event. + /// + /// The sequence to be executed. private IEnumerator Execute(AISequence sequence) { if (sequence.events != null) { for (int i = 0; i < sequence.events.Length; i++) { + // If the event queue is paused, then wait until it's unpaused. while (paused) { yield return new WaitForSecondsRealtime(0.05f); @@ -209,6 +229,11 @@ private IEnumerator Execute(AISequence sequence) } } + /// + /// Runs an AISequence immediately. Used primarily for callbacks that can't + /// be properly scheduled on the event queue. + /// + /// The sequence to be executed immediately. public void ExecuteAsync(AISequence sequence) { GameManager.Boss.StartCoroutine(Execute(sequence)); diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs index 8af7c57..0b7e236 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs @@ -1,20 +1,27 @@ using AI; -using Projectiles; -using static BossController; +using UnityEngine; namespace Moves.Basic { public class PlayerLock : AISequence { + // Used for the "PlayerLock" move. Keeps track of the current player position + // for events and sequences that need a slightly out of date version. + private static Vector3 playerLockPosition; + private static bool isPlayerLocked; + + public static BossCore.ProxyVector3 _delayed_player_position = new BossCore.ProxyVector3(() => { + return isPlayerLocked ? playerLockPosition : PLAYER_POSITION.GetValue(); + }); + public PlayerLock(bool enableLock = true) : base ( () => { - if (enableLock) - { - GameManager.Boss.playerLockPosition = GameManager.Player.transform.position; + if (enableLock) { + playerLockPosition = GameManager.Player.transform.position; } - GameManager.Boss.isPlayerLocked = enableLock; + isPlayerLocked = enableLock; } ) { diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs index 068c203..80c5847 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs @@ -8,11 +8,17 @@ namespace Moves.Basic { public class Strafe : AISequence { + // A reference to the BossController's entity. Assigned when teleport is called. + private static CombatCore.Entity self = null; + public Strafe(bool clockwise = true, float degrees = 10f, int speed = 25, Vector3 center = default(Vector3)) : base ( () => { - GameManager.Boss.self.movespeed.LockTo(speed); + if (self == null) { + self = GameManager.Boss.GetComponent(); + } + self.movespeed.LockTo(speed); Vector3 oldPosVector = GameManager.Boss.transform.position - center; Quaternion rot = Quaternion.AngleAxis(degrees, clockwise ? Vector3.up : Vector3.down); diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs index 7566dd9..2943997 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs @@ -5,11 +5,18 @@ namespace Moves.Basic { public class Teleport : AISequence { + // A reference to the BossController's entity. Assigned when teleport is called. + private static CombatCore.Entity self = null; + public Teleport(Vector3? target = null, int speed = 25) : base ( () => { - GameManager.Boss.self.movespeed.LockTo(speed); + if (self == null) { + self = GameManager.Boss.GetComponent(); + } + self.movespeed.LockTo(speed); + if (target.HasValue) { GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(target.Value)); diff --git a/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs b/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs new file mode 100644 index 0000000..1bc847f --- /dev/null +++ b/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Test +{ + public class Horseshoe_AOE : AISequence + { + public Horseshoe_AOE() : base + ( + //Pause(1f), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) + ) + ), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) + ) + ), + new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + ) + { + Description = "Your description here"; + Difficulty = 1f; + } + } +} diff --git a/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs.meta b/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs.meta new file mode 100644 index 0000000..a1b8540 --- /dev/null +++ b/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d720c634880034176b34bbc0d87457b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Test.cs b/Assets/Scripts/Boss Core/Phases/Phase_Test.cs index 6a6f3ed..7aa4715 100644 --- a/Assets/Scripts/Boss Core/Phases/Phase_Test.cs +++ b/Assets/Scripts/Boss Core/Phases/Phase_Test.cs @@ -10,15 +10,16 @@ public class Phase_Test : AIPhase { public Phase_Test() { - AddSequence(10, new Moves.Test.Lightning_Arena().Times(2)); - AddSequence(10, new Moves.Test.Quick_Waves()); - AddSequence(10, new Moves.Test.Double_Laser_Sweep_AOE()); - AddSequence(10, new Moves.Test.Double_Laser_Sweep()); - AddSequence(10, new Moves.Test.Pincer_Sweep()); - AddSequence(10, new Moves.Test.SpinReverse().Wait(2f)); - AddSequence(10, new Moves.Test.Random_Leading()); - AddSequence(10, new Moves.Test.Sniper_Final()); - AddSequence(10, new Moves.Basic.Shoot_Death_Hex()); + //AddSequence(10, new Moves.Test.Lightning_Arena().Times(2)); + //AddSequence(10, new Moves.Test.Quick_Waves()); + //AddSequence(10, new Moves.Test.Double_Laser_Sweep_AOE()); + //AddSequence(10, new Moves.Test.Double_Laser_Sweep()); + //AddSequence(10, new Moves.Test.Pincer_Sweep()); + //AddSequence(10, new Moves.Test.SpinReverse().Wait(2f)); + //AddSequence(10, new Moves.Test.Random_Leading()); + //AddSequence(10, new Moves.Test.Sniper_Final()); + //AddSequence(10, new Moves.Basic.Shoot_Death_Hex()); + AddSequence(10, new Moves.Test.Horseshoe_AOE()); } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Projectile/Projectile.cs b/Assets/Scripts/Boss Core/Projectile/Projectile.cs index 8c44862..de6b8aa 100644 --- a/Assets/Scripts/Boss Core/Projectile/Projectile.cs +++ b/Assets/Scripts/Boss Core/Projectile/Projectile.cs @@ -15,8 +15,6 @@ namespace Projectiles public class Projectile { - public Entity Entity { get; set; } - public virtual ProxyVector3 Start { get; set; } = AI.AISequence.BOSS_POSITION; public virtual ProxyVector3 Target { get; set; } = AI.AISequence.DELAYED_PLAYER_POSITION; public virtual float AngleOffset { get; set; } = 0f; @@ -42,18 +40,7 @@ public class Projectile /* * Called when the object hits the player */ - public ProjectileCallback OnDestroyCollision { get; set; } = CallbackDictionary.NOTHING; - - #region Constructors - - public Projectile() : this(GameManager.Boss.self) { } - - public Projectile(Entity entity) - { - Entity = entity; - } - - #endregion + public ProjectileCallback OnDestroyCollision { get; set; } = CallbackDictionary.NOTHING; /// public static ProxyVector3 DELAYED_PLAYER_POSITION = Moves.Basic.PlayerLock._delayed_player_position; + + // Experimental. Leads ahead of the player based on their current velocity and distance from boss. + // This is quite realtime, but can be jittery as a result. + public static ProxyVector3 LEADING_PLAYER_POSITION = new ProxyVector3(() => { + float distance = (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude; + //Vector3 offset = (distance / 2f * GameManager.Player.GetComponent().velocity.normalized); + Vector3 offset = 1f * GameManager.Player.GetComponent().velocity.normalized; + + return PLAYER_POSITION.GetValue() + offset; + }); + + // Smooths the value of LEADING_PLAYER_POSITION using two samples over time. + // This is less "realtime", but provides a smoother tracking. + private static Vector3 last_lead = Vector3.zero; + private static Vector3 curr_lead = Vector3.zero; + public static ProxyVector3 SMOOTHED_LEADING_PLAYER_POSITION = new ProxyVector3(() => + { + Vector3 raw_value = LEADING_PLAYER_POSITION.GetValue(); + + last_lead = curr_lead; + curr_lead = raw_value; + + return (last_lead + curr_lead) / 2.0f; + + }); + public static ProxyVector3 BOSS_POSITION = new ProxyVector3(() => { return GameManager.Boss.transform.position; }); public static ProxyVector3 RANDOM_IN_ARENA = new ProxyVector3(() => { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs index 915c778..745379d 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -15,20 +15,8 @@ public class Test : AISequence { public Test() : base ( - //Pause(1f), - For(10, i => - Merge( - new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) - ) - ), - For(10, i => - Merge( - new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) - ) - ), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + //new Shoot1(new Projectile { Target = LEADING_PLAYER_POSITION, Speed = Speed.VERY_FAST }).Wait(0.5f) + new Shoot1(new ProjectileHoming(difficulty: 1) { Speed = Speed.VERY_FAST }).Wait(0.1f) ) { } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs new file mode 100644 index 0000000..e4d519b --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Four_Way_Sweep_With_Homing : AISequence + { + public Four_Way_Sweep_With_Homing() : base + ( + () => { + List sequences = new List(); + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 7; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE})); + for (int j = 7; j < 15; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new AOE_360()); + } + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 5; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); + for (int j = 5; j < 10; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); + for (int j = 10; j < 15; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new AOE_360()); + } + return sequences.ToArray(); + } + ) + { + Description = "Shoots a 4-directional sweep with homing projectiles in between."; + Difficulty = 6f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs.meta new file mode 100644 index 0000000..0eb1030 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e2ec7802836743c1b34b7951c09ee3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs index caacf4e..cdf15e1 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs @@ -17,7 +17,7 @@ public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) : base ForConcurrent(6, i => new Shoot1( new ProjectileCurving((float)Speed.MEDIUM * (clockwise ? 1 : -1) * 2f, true) { - MaxTime = 5f, AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) + MaxTime = 3f, AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) } ) ) diff --git a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs index 5939e39..85d25db 100644 --- a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs +++ b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs @@ -51,43 +51,6 @@ public partial class AISequence // LINE_CIRCLE_STRAFE_60.Times(6) //); - //public static AISequence FOUR_WAY_SWEEP_WITH_HOMING = new AISequence(6, () => - //{ - // List sequences = new List(); - // for (int i = 0; i < 4; i++) - // { - // for (int j = 0; j < 7; j++) - // { - // sequences.Add(ShootArc(4, skeleton: New(self).Target(Vector3.forward).AngleOffset(j * 6f).Size(Size.MEDIUM)).Wait(0.1f)); - // } - // sequences.Add(Shoot1(New(self).Size(Size.LARGE).Homing())); - // for (int j = 7; j < 15; j++) - // { - // sequences.Add(ShootArc(4, skeleton: New(self).Target(Vector3.forward).AngleOffset(j * 6f).Size(Size.MEDIUM)).Wait(0.1f)); - // } - // sequences.Add(AOE_360); - // } - // for (int i = 0; i < 4; i++) - // { - // for (int j = 0; j < 5; j++) - // { - // sequences.Add(ShootArc(4, skeleton: New(self).Target(Vector3.forward).AngleOffset(j * -6f).Size(Size.MEDIUM)).Wait(0.1f)); - // } - // sequences.Add(Shoot1(New(self).Size(Size.LARGE).Homing())); - // for (int j = 5; j < 10; j++) - // { - // sequences.Add(ShootArc(4, skeleton: New(self).Target(Vector3.forward).AngleOffset(j * -6f).Size(Size.MEDIUM)).Wait(0.1f)); - // } - // sequences.Add(Shoot1(New(self).Size(Size.LARGE).Homing())); - // for (int j = 10; j < 15; j++) - // { - // sequences.Add(ShootArc(4, skeleton: New(self).Target(Vector3.forward).AngleOffset(j * -6f).Size(Size.MEDIUM)).Wait(0.1f)); - // } - // sequences.Add(AOE_360); - // } - // return sequences.ToArray(); - //}); - //public static AISequence SWEEP_BACK_AND_FORTH_MEDIUM = new AISequence( // 5.5f, // Teleport().Wait(0.25f), diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs index ef215a5..08f4fd9 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs @@ -12,8 +12,8 @@ public class ProjectileComponent : MonoBehaviour // The data representing this component's specific appearance and behavior. public Projectile data; - private Vector3 Start; - private Vector3 Target; + public Vector3 Start; + public Vector3 Target; // Some cached GameObject values for increased performance. private Transform trans; diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs index abb6d6c..5989f68 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs @@ -20,6 +20,15 @@ public class ProjectileHoming : Projectile // Was this projectile once close to the player? private bool wasClose; + private int difficulty; + + public ProjectileHoming(int difficulty=0) { + this.difficulty = difficulty; + if (difficulty == 1) { + Target = AI.AISequence.SMOOTHED_LEADING_PLAYER_POSITION; + } + } + public override void CustomCreate(ProjectileComponent component) { targetObject = GameManager.Player.gameObject; // TODO maybe make me a customizable parameter? @@ -33,10 +42,17 @@ public override Material CustomMaterial() { } public override void CustomUpdate(ProjectileComponent component) { - Vector3 idealVelocity = ((float)Speed) * (targetObject.transform.position - component.transform.position).normalized; + switch (difficulty) { + case 0: HomingLevel0(component); break; + case 1: HomingLevel0(component); break; + } + } + + private void HomingLevel0(ProjectileComponent component) { + Vector3 idealVelocity = ((float)Speed) * (Target.GetValue() - component.transform.position).normalized; float idealRotation = Vector3.SignedAngle(idealVelocity, Velocity, Vector3.up); - float distance = Vector3.Distance(targetObject.transform.position, component.transform.position); + float distance = Vector3.Distance(Target.GetValue(), component.transform.position); if (!wasClose && distance < 10f) { diff --git a/Assets/Scripts/User Input/Controller.cs b/Assets/Scripts/User Input/Controller.cs index 30da17b..dd4612a 100644 --- a/Assets/Scripts/User Input/Controller.cs +++ b/Assets/Scripts/User Input/Controller.cs @@ -167,6 +167,8 @@ public void OnDrawGizmos() UnityEditor.Handles.color = Color.red; UnityEditor.Handles.DrawWireArc(new Vector3(transform.position.x, 0f, transform.position.z), Vector3.up, Vector3.forward, 360f, dashRange); + UnityEditor.Handles.DrawWireArc(AI.AISequence.SMOOTHED_LEADING_PLAYER_POSITION.GetValue(), Vector3.up, Vector3.forward, 360f, 1f); + if (!UnityEditor.EditorApplication.isPlaying) { return; From 9d9f679eb1268862a5242e45a34f4916c6d741f6 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Mon, 5 Nov 2018 17:02:19 -0600 Subject: [PATCH 18/33] Re-added a couple more moves. --- .../Scripts/Boss Core/AI/Moves/Test/Pincer.cs | 2 + .../Unsorted/Four_Way_Sweep_With_Homing.cs | 1 + .../Unsorted/Sweep_Back_And_Forth_Advanced.cs | 58 +++++++++++++++ .../Sweep_Back_And_Forth_Advanced.cs.meta | 11 +++ .../Unsorted/Sweep_Back_And_Forth_Medium.cs | 56 ++++++++++++++ .../Sweep_Back_And_Forth_Medium.cs.meta | 11 +++ .../Boss Core/AI/SequenceDictionary.cs | 74 ------------------- 7 files changed, 139 insertions(+), 74 deletions(-) create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs index 7beb1bd..ecde531 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs @@ -11,6 +11,8 @@ public class Pincer : AISequence { public Pincer(float offset=0f, Speed speed=Speed.SNIPE) : base ( + // TODO add variable storage or something to simplify this down. + // Maybe an instance variable? () => { //Debug.Log("Pincer sees player at: " + GameManager.Player.transform.position); List sequences = new List(); diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs index e4d519b..0c46461 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs @@ -14,6 +14,7 @@ public class Four_Way_Sweep_With_Homing : AISequence { public Four_Way_Sweep_With_Homing() : base ( + // TODO refactor me to use standard notation () => { List sequences = new List(); for (int i = 0; i < 4; i++) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs new file mode 100644 index 0000000..1271ced --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Sweep_Back_And_Forth_Advanced : AISequence + { + public Sweep_Back_And_Forth_Advanced() : base + ( + // TODO refactor me to use standard notation + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => { + List sequences = new List(); + for (int i = -30; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + for (int i = -80; i < 80; i += 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.TINY, Speed = Speed.FAST }) + ).Wait(0.02f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -30; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + return sequences.ToArray(); + }).Wait(0.75f), + new PlayerLock(false) + ) + { + Description = "Sweeps back and forth with additional medium and tiny projectiles."; + Difficulty = 6.5f; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta new file mode 100644 index 0000000..24c65ef --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9714e821119b040eea1f7f93e1faca4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs new file mode 100644 index 0000000..788f355 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs @@ -0,0 +1,56 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Sweep_Back_And_Forth_Medium : AISequence + { + public Sweep_Back_And_Forth_Medium() : base + ( + // TODO refactor me to use standard notation + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => { + List sequences = new List(); + for (int i = -30; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = -80; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + return sequences.ToArray(); + }).Wait(0.75f), + new PlayerLock(false) + ) + { + Description = "Sweeps back and forth with additional medium projectiles."; + Difficulty = 5.5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta new file mode 100644 index 0000000..157f6b0 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 494510ae5a4af4916af78bef48dd860f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs index 85d25db..0b8e74c 100644 --- a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs +++ b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs @@ -51,80 +51,6 @@ public partial class AISequence // LINE_CIRCLE_STRAFE_60.Times(6) //); - //public static AISequence SWEEP_BACK_AND_FORTH_MEDIUM = new AISequence( - // 5.5f, - // Teleport().Wait(0.25f), - // PlayerLock(true), - // new AISequence(() => { - // List sequences = new List(); - // for (int i = -30; i < 80; i += 5) - // { - // sequences.Add(Shoot1(New(self).AngleOffset(i)).Wait(0.01f)); - // } - // //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - // for (int i = 80; i > -80; i -= 5) - // { - // sequences.Add(Merge( - // Shoot1(New(self).AngleOffset(i)), - // Shoot1(New(self).AngleOffset(i).Size(Size.MEDIUM).Speed(Speed.SLOW)) - // ).Wait(0.02f)); - // } - // //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - // for (int i = -80; i < 80; i += 5) - // { - // sequences.Add(Shoot1(New(self).AngleOffset(i)).Wait(0.01f)); - // } - // //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - // for (int i = 80; i > -80; i -= 5) - // { - // sequences.Add(Merge( - // Shoot1(New(self).AngleOffset(i)), - // Shoot1(New(self).AngleOffset(i).Size(Size.MEDIUM).Speed(Speed.SLOW)) - // ).Wait(0.02f)); - // } - // return sequences.ToArray(); - // }).Wait(0.75f), - // PlayerLock(false) - //); - - //public static AISequence SWEEP_BACK_AND_FORTH_ADVANCED = new AISequence( - // 6.5f, - // Teleport().Wait(0.25f), - // PlayerLock(true), - // new AISequence(() => { - // List sequences = new List(); - // for (int i = -30; i < 80; i += 5) - // { - // sequences.Add(Shoot1(New(self).AngleOffset(i)).Wait(0.01f)); - // } - // //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - // for (int i = 80; i > -80; i -= 5) - // { - // sequences.Add(Merge( - // Shoot1(New(self).AngleOffset(i)), - // Shoot1(New(self).AngleOffset(i).Size(Size.MEDIUM).Speed(Speed.SLOW)) - // ).Wait(0.02f)); - // } - // for (int i = -80; i < 80; i += 5) - // { - // sequences.Add(Merge( - // Shoot1(New(self).AngleOffset(i)), - // Shoot1(New(self).AngleOffset(i).Size(Size.TINY).Speed(Speed.FAST)) - // ).Wait(0.02f)); - // } - // //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - // for (int i = 80; i > -30; i -= 5) - // { - // sequences.Add(Merge( - // Shoot1(New(self).AngleOffset(i)), - // Shoot1(New(self).AngleOffset(i).Size(Size.MEDIUM).Speed(Speed.SLOW)) - // ).Wait(0.02f)); - // } - // return sequences.ToArray(); - // }).Wait(0.75f), - // PlayerLock(false) - // ); - //public static AISequence RANDOM_200_WAVE = new AISequence(7, () => { // List sequences = new List(); // for (int j = 0; j < 200; j++) { From 4c70623bfb93f68cc23c33e33e7b178189ad2cba Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Tue, 6 Nov 2018 09:31:05 -0600 Subject: [PATCH 19/33] Added couple more moves and messed around (might rebase this commit) --- .../Scripts/Boss Core/AI/Garbage/Basic.meta | 8 ++ .../Boss Core/AI/Garbage/Basic/AOE_120.cs | 22 ++++++ .../AI/Garbage/Basic/AOE_120.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Basic/AOE_131.cs | 30 +++++++ .../AI/Garbage/Basic/AOE_131.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Basic/AOE_360.cs | 22 ++++++ .../AI/Garbage/Basic/AOE_360.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Basic/AOE_90.cs | 22 ++++++ .../Boss Core/AI/Garbage/Basic/AOE_90.cs.meta | 11 +++ .../AI/Garbage/Basic/Shoot_2_Waves.cs | 23 ++++++ .../AI/Garbage/Basic/Shoot_2_Waves.cs.meta | 11 +++ .../AI/Garbage/Basic/Shoot_Death_Hex.cs | 25 ++++++ .../AI/Garbage/Basic/Shoot_Death_Hex.cs.meta | 11 +++ .../AI/Garbage/Basic/Shoot_Split_6.cs | 34 ++++++++ .../AI/Garbage/Basic/Shoot_Split_6.cs.meta | 11 +++ .../AI/Garbage/Basic/Shoot_Split_6_Curve.cs | 33 ++++++++ .../Garbage/Basic/Shoot_Split_6_Curve.cs.meta | 11 +++ .../AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs | 26 +++++++ .../Basic/Shoot_Wave_Middle_Gap.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Basic/Sweep.cs | 47 +++++++++++ .../Boss Core/AI/Garbage/Basic/Sweep.cs.meta | 11 +++ .../AI/Garbage/Basic/Sweep_Back_And_Forth.cs | 40 ++++++++++ .../Basic/Sweep_Back_And_Forth.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Basic/Sweep_Both.cs | 38 +++++++++ .../AI/Garbage/Basic/Sweep_Both.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators.meta | 8 ++ .../AI/Garbage/Basic_Generators/MoveCamera.cs | 26 +++++++ .../Basic_Generators/MoveCamera.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/Pause.cs | 15 ++++ .../AI/Garbage/Basic_Generators/Pause.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/PlayerLock.cs | 31 ++++++++ .../Basic_Generators/PlayerLock.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/Shoot1.cs | 23 ++++++ .../Garbage/Basic_Generators/Shoot1.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/Shoot3.cs | 28 +++++++ .../Garbage/Basic_Generators/Shoot3.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/ShootAOE.cs | 24 ++++++ .../Garbage/Basic_Generators/ShootAOE.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/ShootArc.cs | 39 ++++++++++ .../Garbage/Basic_Generators/ShootArc.cs.meta | 11 +++ .../Basic_Generators/ShootHomingStrafe.cs | 18 +++++ .../ShootHomingStrafe.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/ShootLine.cs | 36 +++++++++ .../Basic_Generators/ShootLine.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/ShootWall.cs | 22 ++++++ .../Basic_Generators/ShootWall.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/Strafe.cs | 31 ++++++++ .../Garbage/Basic_Generators/Strafe.cs.meta | 11 +++ .../AI/Garbage/Basic_Generators/Teleport.cs | 71 +++++++++++++++++ .../Garbage/Basic_Generators/Teleport.cs.meta | 11 +++ Assets/Scripts/Boss Core/AI/Garbage/Test.meta | 8 ++ .../AI/Garbage/Test/Double_Laser_Sweep.cs | 38 +++++++++ .../Garbage/Test/Double_Laser_Sweep.cs.meta | 11 +++ .../AI/Garbage/Test/Double_Laser_Sweep_AOE.cs | 40 ++++++++++ .../Test/Double_Laser_Sweep_AOE.cs.meta | 11 +++ .../AI/Garbage/Test/Horseshoe_AOE.cs | 38 +++++++++ .../AI/Garbage/Test/Horseshoe_AOE.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Test/Laser.cs | 37 +++++++++ .../Boss Core/AI/Garbage/Test/Laser.cs.meta | 11 +++ .../AI/Garbage/Test/Laser_Sweep_With_AOE.cs | 38 +++++++++ .../Garbage/Test/Laser_Sweep_With_AOE.cs.meta | 11 +++ .../AI/Garbage/Test/Lightning_Arena.cs | 36 +++++++++ .../AI/Garbage/Test/Lightning_Arena.cs.meta | 11 +++ .../AI/Garbage/Test/Lightning_With_AOE.cs | 50 ++++++++++++ .../Garbage/Test/Lightning_With_AOE.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Test/Pincer.cs | 35 +++++++++ .../Boss Core/AI/Garbage/Test/Pincer.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Test/Pincer_Sweep.cs | 33 ++++++++ .../AI/Garbage/Test/Pincer_Sweep.cs.meta | 11 +++ .../AI/Garbage/Test/Player_Strafe_Waves.cs | 39 ++++++++++ .../Garbage/Test/Player_Strafe_Waves.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Test/Quick_Waves.cs | 33 ++++++++ .../AI/Garbage/Test/Quick_Waves.cs.meta | 11 +++ .../AI/Garbage/Test/Random_Leading.cs | 78 +++++++++++++++++++ .../AI/Garbage/Test/Random_Leading.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Test/ReverseTest.cs | 59 ++++++++++++++ .../AI/Garbage/Test/ReverseTest.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Test/Sniper_Final.cs | 62 +++++++++++++++ .../AI/Garbage/Test/Sniper_Final.cs.meta | 11 +++ .../Scripts/Boss Core/AI/Garbage/Test/Test.cs | 24 ++++++ .../Boss Core/AI/Garbage/Test/Test.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Tutorial1.meta | 8 ++ .../AI/Garbage/Tutorial1/Shoot_1_Several.cs | 26 +++++++ .../Garbage/Tutorial1/Shoot_1_Several.cs.meta | 11 +++ .../AI/Garbage/Tutorial1/Shoot_3_Several.cs | 26 +++++++ .../Garbage/Tutorial1/Shoot_3_Several.cs.meta | 11 +++ .../AI/Garbage/Tutorial1/Shoot_Arc.cs | 23 ++++++ .../AI/Garbage/Tutorial1/Shoot_Arc.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Tutorial2.meta | 8 ++ .../AI/Garbage/Tutorial2/Force_Block.cs | 28 +++++++ .../AI/Garbage/Tutorial2/Force_Block.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Tutorial3.meta | 8 ++ .../AI/Garbage/Tutorial3/Shoot_AOE.cs | 26 +++++++ .../AI/Garbage/Tutorial3/Shoot_AOE.cs.meta | 11 +++ .../Boss Core/AI/Garbage/Unsorted.meta | 8 ++ .../AI/Garbage/Unsorted/Big_Homing_Strafe.cs | 30 +++++++ .../Unsorted/Big_Homing_Strafe.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Dash_Test.cs | 25 ++++++ .../AI/Garbage/Unsorted/Dash_Test.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Death_Hex.cs | 37 +++++++++ .../AI/Garbage/Unsorted/Death_Hex.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Double_Hex_Curve.cs | 32 ++++++++ .../Garbage/Unsorted/Double_Hex_Curve.cs.meta | 11 +++ .../Garbage/Unsorted/Double_Hex_Curve_Hard.cs | 36 +++++++++ .../Unsorted/Double_Hex_Curve_Hard.cs.meta | 11 +++ .../Unsorted/Four_Way_Sweep_With_Homing.cs | 59 ++++++++++++++ .../Four_Way_Sweep_With_Homing.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Hex_Curve_Intro.cs | 33 ++++++++ .../Garbage/Unsorted/Hex_Curve_Intro.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Jump_Rope_Fast.cs | 35 +++++++++ .../Garbage/Unsorted/Jump_Rope_Fast.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Random_200.cs | 65 ++++++++++++++++ .../AI/Garbage/Unsorted/Random_200.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Shoot3_Wave3.cs | 30 +++++++ .../AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta | 11 +++ .../Garbage/Unsorted/Shoot_4_Waves_Behind.cs | 29 +++++++ .../Unsorted/Shoot_4_Waves_Behind.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Shoot_Hex_Curve.cs | 30 +++++++ .../Garbage/Unsorted/Shoot_Hex_Curve.cs.meta | 11 +++ .../Unsorted/Sweep_Back_And_Forth_Advanced.cs | 58 ++++++++++++++ .../Sweep_Back_And_Forth_Advanced.cs.meta | 11 +++ .../Unsorted/Sweep_Back_And_Forth_Medium.cs | 56 +++++++++++++ .../Sweep_Back_And_Forth_Medium.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Sweep_Wall.cs | 38 +++++++++ .../AI/Garbage/Unsorted/Sweep_Wall.cs.meta | 11 +++ .../Unsorted/Sweep_Wall_Back_And_Forth.cs | 28 +++++++ .../Sweep_Wall_Back_And_Forth.cs.meta | 11 +++ .../AI/Garbage/Unsorted/Wave_Circle.cs | 47 +++++++++++ .../AI/Garbage/Unsorted/Wave_Circle.cs.meta | 11 +++ .../Scripts/Boss Core/AI/Moves/Test/Pincer.cs | 43 +++++----- .../Boss Core/AI/Moves/Test/Quick_Waves.cs | 36 --------- .../Boss Core/AI/Moves/Unsorted/Random_200.cs | 65 ++++++++++++++++ .../AI/Moves/Unsorted/Random_200.cs.meta | 11 +++ .../AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs | 29 +++++++ .../Unsorted/Shoot_4_Waves_Behind.cs.meta | 11 +++ .../Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs | 38 +++++++++ .../AI/Moves/Unsorted/Sweep_Wall.cs.meta | 11 +++ .../Unsorted/Sweep_Wall_Back_And_Forth.cs | 28 +++++++ .../Sweep_Wall_Back_And_Forth.cs.meta | 11 +++ .../Boss Core/AI/SequenceDictionary.cs | 78 ------------------- .../Boss Core/AI/\360\237\230\202/Basic.meta" | 8 ++ .../AI/\360\237\230\202/Basic/AOE_120.cs" | 22 ++++++ .../\360\237\230\202/Basic/AOE_120.cs.meta" | 11 +++ .../AI/\360\237\230\202/Basic/AOE_131.cs" | 30 +++++++ .../\360\237\230\202/Basic/AOE_131.cs.meta" | 11 +++ .../AI/\360\237\230\202/Basic/AOE_360.cs" | 22 ++++++ .../\360\237\230\202/Basic/AOE_360.cs.meta" | 11 +++ .../AI/\360\237\230\202/Basic/AOE_90.cs" | 22 ++++++ .../AI/\360\237\230\202/Basic/AOE_90.cs.meta" | 11 +++ .../\360\237\230\202/Basic/Shoot_2_Waves.cs" | 23 ++++++ .../Basic/Shoot_2_Waves.cs.meta" | 11 +++ .../Basic/Shoot_Death_Hex.cs" | 25 ++++++ .../Basic/Shoot_Death_Hex.cs.meta" | 11 +++ .../\360\237\230\202/Basic/Shoot_Split_6.cs" | 34 ++++++++ .../Basic/Shoot_Split_6.cs.meta" | 11 +++ .../Basic/Shoot_Split_6_Curve.cs" | 33 ++++++++ .../Basic/Shoot_Split_6_Curve.cs.meta" | 11 +++ .../Basic/Shoot_Wave_Middle_Gap.cs" | 26 +++++++ .../Basic/Shoot_Wave_Middle_Gap.cs.meta" | 11 +++ .../AI/\360\237\230\202/Basic/Sweep.cs" | 47 +++++++++++ .../AI/\360\237\230\202/Basic/Sweep.cs.meta" | 11 +++ .../Basic/Sweep_Back_And_Forth.cs" | 40 ++++++++++ .../Basic/Sweep_Back_And_Forth.cs.meta" | 11 +++ .../AI/\360\237\230\202/Basic/Sweep_Both.cs" | 38 +++++++++ .../Basic/Sweep_Both.cs.meta" | 11 +++ .../\360\237\230\202/Basic_Generators.meta" | 8 ++ .../Basic_Generators/MoveCamera.cs" | 26 +++++++ .../Basic_Generators/MoveCamera.cs.meta" | 11 +++ .../Basic_Generators/Pause.cs" | 15 ++++ .../Basic_Generators/Pause.cs.meta" | 11 +++ .../Basic_Generators/PlayerLock.cs" | 31 ++++++++ .../Basic_Generators/PlayerLock.cs.meta" | 11 +++ .../Basic_Generators/Shoot1.cs" | 23 ++++++ .../Basic_Generators/Shoot1.cs.meta" | 11 +++ .../Basic_Generators/Shoot3.cs" | 28 +++++++ .../Basic_Generators/Shoot3.cs.meta" | 11 +++ .../Basic_Generators/ShootAOE.cs" | 24 ++++++ .../Basic_Generators/ShootAOE.cs.meta" | 11 +++ .../Basic_Generators/ShootArc.cs" | 39 ++++++++++ .../Basic_Generators/ShootArc.cs.meta" | 11 +++ .../Basic_Generators/ShootHomingStrafe.cs" | 18 +++++ .../ShootHomingStrafe.cs.meta" | 11 +++ .../Basic_Generators/ShootLine.cs" | 36 +++++++++ .../Basic_Generators/ShootLine.cs.meta" | 11 +++ .../Basic_Generators/ShootWall.cs" | 22 ++++++ .../Basic_Generators/ShootWall.cs.meta" | 11 +++ .../Basic_Generators/Strafe.cs" | 31 ++++++++ .../Basic_Generators/Strafe.cs.meta" | 11 +++ .../Basic_Generators/Teleport.cs" | 71 +++++++++++++++++ .../Basic_Generators/Teleport.cs.meta" | 11 +++ .../Boss Core/AI/\360\237\230\202/Test.meta" | 8 ++ .../Test/Double_Laser_Sweep.cs" | 38 +++++++++ .../Test/Double_Laser_Sweep.cs.meta" | 11 +++ .../Test/Double_Laser_Sweep_AOE.cs" | 40 ++++++++++ .../Test/Double_Laser_Sweep_AOE.cs.meta" | 11 +++ .../\360\237\230\202/Test/Horseshoe_AOE.cs" | 38 +++++++++ .../Test/Horseshoe_AOE.cs.meta" | 11 +++ .../AI/\360\237\230\202/Test/Laser.cs" | 37 +++++++++ .../AI/\360\237\230\202/Test/Laser.cs.meta" | 11 +++ .../Test/Laser_Sweep_With_AOE.cs" | 38 +++++++++ .../Test/Laser_Sweep_With_AOE.cs.meta" | 11 +++ .../\360\237\230\202/Test/Lightning_Arena.cs" | 36 +++++++++ .../Test/Lightning_Arena.cs.meta" | 11 +++ .../Test/Lightning_With_AOE.cs" | 50 ++++++++++++ .../Test/Lightning_With_AOE.cs.meta" | 11 +++ .../AI/\360\237\230\202/Test/Pincer.cs" | 35 +++++++++ .../AI/\360\237\230\202/Test/Pincer.cs.meta" | 11 +++ .../AI/\360\237\230\202/Test/Pincer_Sweep.cs" | 33 ++++++++ .../Test/Pincer_Sweep.cs.meta" | 11 +++ .../Test/Player_Strafe_Waves.cs" | 39 ++++++++++ .../Test/Player_Strafe_Waves.cs.meta" | 11 +++ .../AI/\360\237\230\202/Test/Quick_Waves.cs" | 33 ++++++++ .../Test/Quick_Waves.cs.meta" | 11 +++ .../\360\237\230\202/Test/Random_Leading.cs" | 78 +++++++++++++++++++ .../Test/Random_Leading.cs.meta" | 11 +++ .../AI/\360\237\230\202/Test/ReverseTest.cs" | 59 ++++++++++++++ .../Test/ReverseTest.cs.meta" | 11 +++ .../AI/\360\237\230\202/Test/Sniper_Final.cs" | 62 +++++++++++++++ .../Test/Sniper_Final.cs.meta" | 11 +++ .../AI/\360\237\230\202/Test/Test.cs" | 24 ++++++ .../AI/\360\237\230\202/Test/Test.cs.meta" | 11 +++ .../AI/\360\237\230\202/Tutorial1.meta" | 8 ++ .../Tutorial1/Shoot_1_Several.cs" | 26 +++++++ .../Tutorial1/Shoot_1_Several.cs.meta" | 11 +++ .../Tutorial1/Shoot_3_Several.cs" | 26 +++++++ .../Tutorial1/Shoot_3_Several.cs.meta" | 11 +++ .../\360\237\230\202/Tutorial1/Shoot_Arc.cs" | 23 ++++++ .../Tutorial1/Shoot_Arc.cs.meta" | 11 +++ .../AI/\360\237\230\202/Tutorial2.meta" | 8 ++ .../Tutorial2/Force_Block.cs" | 28 +++++++ .../Tutorial2/Force_Block.cs.meta" | 11 +++ .../AI/\360\237\230\202/Tutorial3.meta" | 8 ++ .../\360\237\230\202/Tutorial3/Shoot_AOE.cs" | 26 +++++++ .../Tutorial3/Shoot_AOE.cs.meta" | 11 +++ .../AI/\360\237\230\202/Unsorted.meta" | 8 ++ .../Unsorted/Big_Homing_Strafe.cs" | 30 +++++++ .../Unsorted/Big_Homing_Strafe.cs.meta" | 11 +++ .../\360\237\230\202/Unsorted/Dash_Test.cs" | 25 ++++++ .../Unsorted/Dash_Test.cs.meta" | 11 +++ .../\360\237\230\202/Unsorted/Death_Hex.cs" | 37 +++++++++ .../Unsorted/Death_Hex.cs.meta" | 11 +++ .../Unsorted/Double_Hex_Curve.cs" | 32 ++++++++ .../Unsorted/Double_Hex_Curve.cs.meta" | 11 +++ .../Unsorted/Double_Hex_Curve_Hard.cs" | 36 +++++++++ .../Unsorted/Double_Hex_Curve_Hard.cs.meta" | 11 +++ .../Unsorted/Four_Way_Sweep_With_Homing.cs" | 59 ++++++++++++++ .../Four_Way_Sweep_With_Homing.cs.meta" | 11 +++ .../Unsorted/Hex_Curve_Intro.cs" | 33 ++++++++ .../Unsorted/Hex_Curve_Intro.cs.meta" | 11 +++ .../Unsorted/Jump_Rope_Fast.cs" | 35 +++++++++ .../Unsorted/Jump_Rope_Fast.cs.meta" | 11 +++ .../\360\237\230\202/Unsorted/Random_200.cs" | 65 ++++++++++++++++ .../Unsorted/Random_200.cs.meta" | 11 +++ .../Unsorted/Shoot3_Wave3.cs" | 30 +++++++ .../Unsorted/Shoot3_Wave3.cs.meta" | 11 +++ .../Unsorted/Shoot_4_Waves_Behind.cs" | 29 +++++++ .../Unsorted/Shoot_4_Waves_Behind.cs.meta" | 11 +++ .../Unsorted/Shoot_Hex_Curve.cs" | 30 +++++++ .../Unsorted/Shoot_Hex_Curve.cs.meta" | 11 +++ .../Sweep_Back_And_Forth_Advanced.cs" | 58 ++++++++++++++ .../Sweep_Back_And_Forth_Advanced.cs.meta" | 11 +++ .../Unsorted/Sweep_Back_And_Forth_Medium.cs" | 56 +++++++++++++ .../Sweep_Back_And_Forth_Medium.cs.meta" | 11 +++ .../\360\237\230\202/Unsorted/Sweep_Wall.cs" | 38 +++++++++ .../Unsorted/Sweep_Wall.cs.meta" | 11 +++ .../Unsorted/Sweep_Wall_Back_And_Forth.cs" | 28 +++++++ .../Sweep_Wall_Back_And_Forth.cs.meta" | 11 +++ .../\360\237\230\202/Unsorted/Wave_Circle.cs" | 47 +++++++++++ .../Unsorted/Wave_Circle.cs.meta" | 11 +++ 269 files changed, 6003 insertions(+), 138 deletions(-) create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial2.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial3.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs create mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs" create mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs.meta" diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic.meta new file mode 100644 index 0000000..600d76b --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c3f185ac84b84816acbf911798e3311 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs new file mode 100644 index 0000000..51f1701 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using AOEs; +using static BossController; + +namespace Moves.Basic +{ + public class AOE_120 : AISequence + { + public AOE_120() : base + ( + new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + ) + { + Description = "Shoots a 120 degree wide AOE at the player."; + Difficulty = 1f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs.meta new file mode 100644 index 0000000..d2ef59f --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 087000a7707c6407c8932c06b6e34fbf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs new file mode 100644 index 0000000..3897529 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class AOE_131 : AISequence + { + public AOE_131() : base + ( + new Teleport().Wait(0.5f), + new PlayerLock(true), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.19f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20 }.On(-60, -40).On(-10, 10).On(40, 60)).Wait(0.76f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.2f), + new PlayerLock(false).Wait(1f) + ) + { + Description = "Shoots an AOE attack in a 1-3-1 pattern."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs.meta new file mode 100644 index 0000000..854df6b --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 778573b2a466740f6a82e1aea963796a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs new file mode 100644 index 0000000..1d7d225 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using AOEs; +using static BossController; + +namespace Moves.Basic +{ + public class AOE_360 : AISequence + { + public AOE_360() : base + ( + new ShootAOE(new AOE { FixedWidth = 3f }.On(0, 360)) + ) + { + Description = "Shoots a 360 degree wide AOE."; + Difficulty = 1f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs.meta new file mode 100644 index 0000000..279c74b --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c656e30deb594c7d8a502a526a5f05d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs new file mode 100644 index 0000000..eb45036 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using AOEs; +using static BossController; + +namespace Moves.Basic +{ + public class AOE_90 : AISequence + { + public AOE_90() : base + ( + new ShootAOE(new AOE { FixedWidth = 3f }.On(-45, 45)) + ) + { + Description = "Shoots a 90 degree wide AOE at the player."; + Difficulty = 1f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs.meta new file mode 100644 index 0000000..3408211 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdf9421d8baca4596a10ade6bbc77c5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs new file mode 100644 index 0000000..3d65d8a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs @@ -0,0 +1,23 @@ +using AI; +using Projectiles; +using BossCore; + +using static BossController; + +namespace Moves.Basic +{ + public class Shoot_2_Waves : AISequence + { + public Shoot_2_Waves() : base + ( + new Teleport().Wait(0.5f), + new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = -2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = 2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new Pause(1f) + ) + { + Description = "Shoots 2 90 waves as one block, encouraging dodging through them."; + Difficulty = 4f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs.meta new file mode 100644 index 0000000..26b0908 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3c8b90e37f5543cb85e7edaefac1ef7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs new file mode 100644 index 0000000..12cdaf9 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class Shoot_Death_Hex : AISequence + { + public Shoot_Death_Hex(float maxTime = 1f) : base + ( + new Shoot1(new ProjectileDeathHex() { MaxTime = maxTime }).Wait(1f) + ) + { + Description = "Shoots a high-damage projectile that splits into 6 curving projectiles with trails."; + Difficulty = 4f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs.meta new file mode 100644 index 0000000..08780c6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8706927eef48a43adb9a376a69f7ff67 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs new file mode 100644 index 0000000..7b4e163 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Shoot_Split_6 : AISequence + { + public Shoot_Split_6() : base + ( + new Teleport().Wait(0.5f), + new Shoot1( + new ProjectileCurving(0f, false) + { + MaxTime = 0.25f, + Speed = Speed.VERY_FAST, + OnDestroyTimeout = CallbackDictionary.SPAWN_6 + } + ), + new Pause(0.5f) + ) + { + Description = "Shoots a projectile that splits into 6 more projectiles."; + Difficulty = 4f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs.meta new file mode 100644 index 0000000..d5c3345 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98295e0949b104b08ae2990a6e42666d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs new file mode 100644 index 0000000..0a132bf --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Shoot_Split_6_Curve : AISequence + { + public Shoot_Split_6_Curve() : base + ( + new Teleport().Wait(0.5f), + new Shoot1( + new ProjectileDeathHex + { + MaxTime = 0.25f, + Speed = Speed.VERY_FAST + } + ), + new Pause(0.5f) + ) + { + Description = "Shoots a projectile that splits into 6 curving projectiles."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs.meta new file mode 100644 index 0000000..c743256 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f0faa05d2a7642599372126585726a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs new file mode 100644 index 0000000..7e15f4c --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs @@ -0,0 +1,26 @@ +using AI; +using Projectiles; +using BossCore; + +using static BossController; +using static AI.AISequence; + +namespace Moves.Basic +{ + public class Shoot_Wave_Middle_Gap : AISequence + { + public Shoot_Wave_Middle_Gap() : base + ( + new Teleport().Wait(0.5f), + Merge( + new ShootArc(150, 22.5f, 22.5f + 60f), + new ShootArc(150, -22.5f, -22.5f - 60f) + ), + new Pause(1f) + ) + { + Description = "Shoots two 60 degree waves with a 45 degree gap in the middle."; + Difficulty = 3f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs.meta new file mode 100644 index 0000000..6611c1f --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 917bd5b3f26df4e548e3e92196acae99 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs new file mode 100644 index 0000000..d7a1893 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using Projectiles; +using static BossController; +using static AI.AISequence; + +namespace Moves.Basic +{ + public class Sweep : AISequence + { + public Sweep(bool reverse = false) : base + ( + new Teleport().Wait(0.25f), + new PlayerLock(true), + For(reverse ? 90 : -30, + reverse ? -30 : 90, + reverse ? -5 : 5, + i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f) + ), + /* + new AISequence(() => + { + int start = reverse ? 90 : -30; + int end = reverse ? -30 : 90; + int step = reverse ? -5 : 5; + + List sequences = new List(); + for (int i = start; i != end; i += step) + { + sequences.Add(new Shoot1(new Projectile().AngleOffset(i)).Wait(0.05f)); + } + return sequences.ToArray(); + }), + */ + new PlayerLock(false), + Pause(0.25f) + ) + { + Description = "Shoots a sweep from " + (reverse ? -30 : 90) + + " degrees to " + (reverse ? 90 : -30) + " degrees offset from the player's current position."; + Difficulty = 2f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs.meta new file mode 100644 index 0000000..f289ba6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c1f47c2007ef42649045864c1303136 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs new file mode 100644 index 0000000..5208f95 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs @@ -0,0 +1,40 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using Projectiles; +using static BossController; +using static AI.AISequence; + +namespace Moves.Basic +{ + public class Sweep_Back_And_Forth : AISequence + { + public Sweep_Back_And_Forth() : base + ( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => + { + List sequences = new List(); + for (int i = -30; i < 90; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); + } + sequences.Add(Pause(0.25f)); + for (int i = 30; i > -90; i -= 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); + } + return sequences.ToArray(); + }), + new PlayerLock(false), + new Pause(0.5f) + ) + { + Description = "Shoots a sweep from -30 degrees to +90 degrees offset from the player's current position, then another from -90 to +30 degrees."; + Difficulty = 3f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs.meta new file mode 100644 index 0000000..137502c --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e58399f0c41124741852e6d923a8a1b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs new file mode 100644 index 0000000..3cc4ee2 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using Projectiles; +using static BossController; +using static AI.AISequence; + +namespace Moves.Basic +{ + public class Sweep_Both : AISequence + { + public Sweep_Both() : base + ( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => + { + + List sequences = new List(); + for (int i = 0; i < 120; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i - 60 })); + sequences.Add(new Shoot1(new Projectile { AngleOffset = 60 - i })); + sequences.Add(new Pause(0.05f)); + } + return sequences.ToArray(); + }), + new PlayerLock(false), + new Pause(0.5f) + ) + { + Description = "Sweeps both left and right at the same time."; + Difficulty = 4f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs.meta new file mode 100644 index 0000000..213bcae --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcce318f6583f4badbb7fec798d6d6c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators.meta new file mode 100644 index 0000000..13e1b5d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e89d07b6cef054a26ab6e29a9e3f2591 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs new file mode 100644 index 0000000..d720fa2 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs @@ -0,0 +1,26 @@ +using AI; +using Projectiles; +using UnityEngine; +using static BossController; + +namespace Moves.Basic +{ + public class MoveCamera : AISequence + { + public MoveCamera(bool isFollow = false, Vector3? targetPosition = null) : base + ( + () => + { + CameraController.GetInstance().IsFollowing = isFollow; + + if (targetPosition.HasValue) + { + CameraController.GetInstance().Goto(targetPosition.Value, 1); + } + } + ) + { + Description = "Moved the camera to " + targetPosition + ". Camera is now " + (isFollow ? "" : "not") + " following."; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs.meta new file mode 100644 index 0000000..144fb49 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 612275463c8fd495999e3dea3288593a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs new file mode 100644 index 0000000..5885717 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs @@ -0,0 +1,15 @@ +using AI; + +namespace Moves.Basic +{ + public class Pause : AISequence + { + public Pause(float duration) : base + ( + new AIEvent[] { new AIEvent(duration, () => { }) } + ) + { + Description = "Waiting for " + duration + " seconds."; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs.meta new file mode 100644 index 0000000..cd88c33 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f25f7bf305aa4ea98d1d53f16f6386a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs new file mode 100644 index 0000000..0b7e236 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs @@ -0,0 +1,31 @@ +using AI; +using UnityEngine; + +namespace Moves.Basic +{ + public class PlayerLock : AISequence + { + // Used for the "PlayerLock" move. Keeps track of the current player position + // for events and sequences that need a slightly out of date version. + private static Vector3 playerLockPosition; + private static bool isPlayerLocked; + + public static BossCore.ProxyVector3 _delayed_player_position = new BossCore.ProxyVector3(() => { + return isPlayerLocked ? playerLockPosition : PLAYER_POSITION.GetValue(); + }); + + public PlayerLock(bool enableLock = true) : base + ( + () => + { + if (enableLock) { + playerLockPosition = GameManager.Player.transform.position; + } + isPlayerLocked = enableLock; + } + ) + { + Description = (enableLock ? "Locked onto" : "Unlocked from") + " the player."; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs.meta new file mode 100644 index 0000000..28ceed1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65a3d43b5e0724d208bf1bbb4446877f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs new file mode 100644 index 0000000..f639240 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs @@ -0,0 +1,23 @@ +using AI; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class Shoot1 : AISequence + { + public Shoot1(Projectile skeleton = null) : base + ( + () => + { + GameManager.Boss.Glare(); + + Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); + newStruc.Create(); + } + ) + { + Description = "Shot one " + (skeleton == null ? "default projectile at the player." : skeleton + "."); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs.meta new file mode 100644 index 0000000..bdef2e8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ee019564e53d4d5295c3d0c2a472ec8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs new file mode 100644 index 0000000..7c8cf3a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs @@ -0,0 +1,28 @@ +using AI; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class Shoot3 : AISequence + { + + public Shoot3(Projectile skeleton = null) : base + ( + () => + { + GameManager.Boss.Glare(); + + for (int i = 0; i < 3; i++) + { + Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); + newStruc.AngleOffset = -30 + (30 * i) + newStruc.AngleOffset; + newStruc.Create(); + } + } + ) + { + Description = "Shot three " + (skeleton == null ? "default projectiles at the player." : skeleton + "."); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs.meta new file mode 100644 index 0000000..d9886bb --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 501cc1ce79a5c41969bf82aa89dd1a42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs new file mode 100644 index 0000000..1cadef0 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs @@ -0,0 +1,24 @@ +using AI; +using AOEs; +using BossCore; + +using static BossController; + +namespace Moves.Basic +{ + public class ShootAOE : AISequence + { + public ShootAOE(AOE skeleton = null) : base + ( + () => + { + GameManager.Boss.Glare(); + skeleton = skeleton != null ? skeleton.Clone() : new AOE(); + skeleton.Create(); + } + ) + { + Description = "Shot " + skeleton; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs.meta new file mode 100644 index 0000000..4eab926 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d154ba470c53d40eebc3ea3ae78e6648 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs new file mode 100644 index 0000000..a1d7811 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs @@ -0,0 +1,39 @@ +using AI; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class ShootArc : AISequence + { + + public ShootArc(int density = 50, float from = 0, float to = 360, Projectile skeleton = null) : base + ( + () => + { + GameManager.Boss.Glare(); + + // Ensure that "from" is always less than "to". + if (to < from) + { + float temp = from; + from = to; + to = temp; + } + + float step = 360f / density; + Projectile clone = skeleton ?? new Projectile { Size = Size.MEDIUM }; + for (float i = from; i <= to; i += step) + { + Projectile newStruc = clone.Clone(); + newStruc.AngleOffset = newStruc.AngleOffset + i; + newStruc.Create(); + } + } + ) + { + Description = "Shot an arc (density=" + density + ", from=" + from + ", to=" + to + ") of " + + (skeleton == null ? "default projectiles at the player." : skeleton + "."); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs.meta new file mode 100644 index 0000000..7a8e270 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29f9bfaded55544f584af88b12219b50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs new file mode 100644 index 0000000..d3d9201 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs @@ -0,0 +1,18 @@ +using AI; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class ShootHomingStrafe : AISequence + { + public ShootHomingStrafe(bool clockwise = true, int strafeAmount = 5, int speed = 25) : base + ( + new Strafe(clockwise, strafeAmount, speed), + new Shoot1(new ProjectileHoming { Size = Size.MEDIUM }) + ) + { + Description = "Strafed " + strafeAmount + " degrees " + (clockwise ? "clockwise" : "counterclockwise") + " and shot a homing projectile."; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs.meta new file mode 100644 index 0000000..658ac22 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e471443a6fd741e7b1bcbe817c10ee4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs new file mode 100644 index 0000000..32472ac --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs @@ -0,0 +1,36 @@ +using AI; +using Projectiles; +using static BossController; +using UnityEngine; +using BossCore; + +namespace Moves.Basic +{ + public class ShootLine : AISequence + { + public ShootLine(int amount = 50, float width = 75f, Vector3? target = null, Speed speed = Speed.MEDIUM, Size size = Size.MEDIUM) : base + ( + () => + { + + Vector3 targetPos = target.HasValue ? target.Value - GameManager.Boss.transform.position : GameManager.Player.transform.position - GameManager.Boss.transform.position; + Vector3 leftDirection = (Quaternion.AngleAxis(90, Vector3.up) * targetPos).normalized; + + for (int i = 0; i < amount; i++) + { + Vector3 spawn = GameManager.Boss.transform.position + ((i - (amount / 2f)) * (width / amount) * leftDirection); + new Projectile() + { + Start = spawn, + Target = spawn + targetPos, + Size = size + }.Create(); + } + } + ) + { + Description = "Shot a line (amount=" + amount + ", width=" + width + ") at " + (target == null ? " the player" : target.ToString()) + + " with speed " + speed + " and size " + size + "."; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs.meta new file mode 100644 index 0000000..fdc3a4b --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 820741158b8a9444da7d65ad525dff64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs new file mode 100644 index 0000000..5f7020a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs @@ -0,0 +1,22 @@ +using AI; +using Projectiles; +using static BossController; + +using BossCore; + +namespace Moves.Basic +{ + public class ShootWall : AISequence + { + public ShootWall(float angleOffset) : base + ( + Merge( + new ShootArc(100, angleOffset + -60, angleOffset + -60 + 28, new Projectile { Speed = Speed.SLOW }), + new ShootArc(100, angleOffset + 20, angleOffset + 60, new Projectile { Speed = Speed.SLOW }) + ) + ) + { + Description = "Shot a wall with offset " + angleOffset + " at the player."; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs.meta new file mode 100644 index 0000000..d82b4a3 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8021f7650ced742a9a74f9d2f8a2a840 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs new file mode 100644 index 0000000..80c5847 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs @@ -0,0 +1,31 @@ +using AI; +using Projectiles; +using static BossController; + +using UnityEngine; + +namespace Moves.Basic +{ + public class Strafe : AISequence + { + // A reference to the BossController's entity. Assigned when teleport is called. + private static CombatCore.Entity self = null; + + public Strafe(bool clockwise = true, float degrees = 10f, int speed = 25, Vector3 center = default(Vector3)) : base + ( + () => + { + if (self == null) { + self = GameManager.Boss.GetComponent(); + } + self.movespeed.LockTo(speed); + + Vector3 oldPosVector = GameManager.Boss.transform.position - center; + Quaternion rot = Quaternion.AngleAxis(degrees, clockwise ? Vector3.up : Vector3.down); + + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash((rot * oldPosVector) + center)); + } + ) + {} + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs.meta new file mode 100644 index 0000000..95b843a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ebc39281429546e8ba2816c16c53f30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs new file mode 100644 index 0000000..2943997 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs @@ -0,0 +1,71 @@ +using AI; +using UnityEngine; + +namespace Moves.Basic +{ + public class Teleport : AISequence + { + // A reference to the BossController's entity. Assigned when teleport is called. + private static CombatCore.Entity self = null; + + public Teleport(Vector3? target = null, int speed = 25) : base + ( + () => + { + if (self == null) { + self = GameManager.Boss.GetComponent(); + } + self.movespeed.LockTo(speed); + + if (target.HasValue) + { + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(target.Value)); + GameManager.Boss.Glare(); + return; + } + + float minDistance = 35f; + float minAngle = 50f; + float maxAngle = 100f; + + Vector3 oldPosVector = GameManager.Boss.transform.position - GameManager.Player.transform.position; + + int count = 0; + Vector3 rawPosition; + do + { + count++; + float degreeRotation = Random.Range(minAngle, maxAngle) * (Random.Range(0, 2) == 0 ? -1 : 1); + float distance = Random.Range(minDistance * GameManager.Arena.transform.localScale.x, 50f * GameManager.Arena.transform.localScale.x); + + if (count == 15) + { + degreeRotation = Random.Range(0, 359f); + distance = Random.Range(15, 49f); + } + + Quaternion rot = Quaternion.AngleAxis(degreeRotation, Vector3.up); + + if (count == 15) + { + rawPosition = rot * (distance * Vector3.forward); + } + else + { + rawPosition = (rot * (oldPosVector * (distance / oldPosVector.magnitude))) + GameManager.Player.transform.position; + } + rawPosition.y = 0f; + + } while (rawPosition.magnitude > 50f); + + rawPosition.y = 1.31f; + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(rawPosition)); + + GameManager.Boss.Glare(); + } + ) + { + Description = "Teleports to " + (target == null ? "some random position" : target.Value.ToString()) + "."; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs.meta new file mode 100644 index 0000000..340fad6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3762d4a7b52c4f33a307eefebf9578e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test.meta new file mode 100644 index 0000000..25e3cf5 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 943ba5d252e4f4d01aa9e0993c613fcb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs new file mode 100644 index 0000000..56fbafe --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Double_Laser_Sweep : AISequence + { + public Double_Laser_Sweep() : base + ( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f) + ), + new Pause(1f), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f) + ), + new PlayerLock(false), + new Pause(1f) + ) + { + Description = "Sweeps two lasers back and forth."; + Difficulty = 6.5f; + } + + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs.meta new file mode 100644 index 0000000..7edaf5a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d8c17d5efd674e7e956d0a83470b982 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs new file mode 100644 index 0000000..5b2703a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs @@ -0,0 +1,40 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Double_Laser_Sweep_AOE : AISequence + { + public Double_Laser_Sweep_AOE() : base + ( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f), + new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) + ), + new Pause(1f), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f), + new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) + ), + new PlayerLock(false), + new Pause(1f) + ) + { + Description = "Sweeps two lasers back and forth, with two AOE attacks in between."; + Difficulty = 7f; + } + + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs.meta new file mode 100644 index 0000000..965c858 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 920fe1f6e1a854941b15222900697b61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs new file mode 100644 index 0000000..2c06a80 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +// TODO unfinished +namespace Moves.Test +{ + public class Horseshoe_AOE : AISequence + { + public Horseshoe_AOE() : base + ( + //Pause(1f), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) + ) + ), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) + ) + ), + new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + ) + { + Description = "Your description here"; + Difficulty = 1f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs.meta new file mode 100644 index 0000000..a1b8540 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d720c634880034176b34bbc0d87457b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs new file mode 100644 index 0000000..87cb579 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using static BossController; + +using Moves.Basic; + +namespace Moves.Test +{ + public class Laser : AISequence + { + public Laser(float startOffset = -90, float finalOffset = 90, float width = 5, float angularSpeed = 90) : base + ( + new ShootAOE( + new AOE + { + InnerSpeed = Speed.FROZEN, + OuterSpeed = Speed.FROZEN, + InnerScale = 0f, + Scale = 100f, + AngleOffset = startOffset, + RotationSpeed = angularSpeed, + MaxTime = (finalOffset - startOffset) / angularSpeed, + OnDestroyOutOfBounds = AOECallbackDictionary.DONT_DESTROY_OOB + }.On(0, width) + ) + ) + { + Description = "A laser that sweeps from " + startOffset + " to " + finalOffset + " with a beam width of " + width + " and speed " + angularSpeed; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs.meta new file mode 100644 index 0000000..3bcb992 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13fd1a558d3174cfb9628f3817eb1c62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs new file mode 100644 index 0000000..56b8ffa --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Laser_Sweep_With_AOE : AISequence + { + public Laser_Sweep_With_AOE() : base + ( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) + ), + new Pause(1f), + Merge( + new Laser(90, -90, 5, -90).Wait(1f), + new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) + ), + new PlayerLock(false), + new Pause(1f) + ) + { + Description = "Sweeps a laser back and forth, with two AOE attacks in between."; + Difficulty = 5.5f; + } + + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs.meta new file mode 100644 index 0000000..5d22899 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6723376e1352418590cd17979d08b86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs new file mode 100644 index 0000000..f028f14 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using Projectiles; +using static BossController; +using BossCore; +using Moves.Basic; + +namespace Moves.Test +{ + public class Lightning_Arena : AISequence + { + public Lightning_Arena() : base + ( + new Teleport(World.Arena.CENTER).Wait(0.25f), + new AISequence(() => + { + List sequences = new List(); + + for (int i = 0; i < 1; i++) + { + sequences.Add(new Shoot1( + new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)); + } + return sequences.ToArray(); + }), + Pause(1f) + ) + { + Description = "Spawns lightning on the whole arena"; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs.meta new file mode 100644 index 0000000..c0dcfc3 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bd36f0d869744e7c83335c8325fdc38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs new file mode 100644 index 0000000..ee623e3 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs @@ -0,0 +1,50 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using AOEs; +using BossCore; +using Moves.Test; +using Moves.Basic; +using static BossController; + +namespace Moves.Test +{ + public class Lightning_With_AOE : AISequence + { + public Lightning_With_AOE() : base + ( + new ShootAOE(new AOE + { + AngleOffset = (-25), + RotationSpeed = (15f), + FixedWidth = (10f), + OuterSpeed = (Speed.MEDIUM_SLOW) + } + .On(-22.5f, 22.5f) + .On(90 - 22.5f, 90 + 22.5f) + .On(180 - 22.5f, 180 + 22.5f) + .On(270 - 22.5f, 270 + 22.5f) + ).Wait(1.5f), + new Lightning_Arena().Wait(0.5f), + new ShootAOE(new AOE + { + AngleOffset = (-25), + RotationSpeed = (15f), + FixedWidth = (10f), + OuterSpeed = (Speed.MEDIUM_SLOW) + } + .On(-22.5f, 22.5f) + .On(90 - 22.5f, 90 + 22.5f) + .On(180 - 22.5f, 180 + 22.5f) + .On(270 - 22.5f, 270 + 22.5f) + ).Wait(1.5f), + new Lightning_Arena().Wait(2.5f) + ) + { + Description = "Lightning with aoe"; + Difficulty = 6f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs.meta new file mode 100644 index 0000000..de00076 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4e053c5803f94c709701b26ea28bfb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs new file mode 100644 index 0000000..2e78563 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using AI; +using BossCore; +using Moves.Basic; +using Projectiles; +using UnityEngine; + +namespace Moves.Test +{ + public class Pincer : AISequence + { + + public Pincer(float offset=0f, Speed speed=Speed.SNIPE) + { + Description = "Shoots two projectiles with an offset of +/-" + offset + " degrees with speed " + speed; + + float curveAmount = + -4f * // base + (float)speed * // turning radius is tighter when we go faster + (20f / (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude) * // contribution due to distance from player + Mathf.Sqrt(2) * Mathf.Sin(Mathf.Deg2Rad * offset); // contribution due to initial firing offset + + float maxTime = Mathf.Deg2Rad * offset / Mathf.Sin(Mathf.Deg2Rad * offset) * ((GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude / 50f); + maxTime += 0.1f; + + GetChildren = () => + new AISequence[] { + Merge( + new Shoot1(new ProjectileCurving(curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = offset, MaxTime = maxTime }), + new Shoot1(new ProjectileCurving(-curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = -offset, MaxTime = maxTime }) + ) + }; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs.meta new file mode 100644 index 0000000..b8d617e --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a813033603df4f0db3b315c4b0d1b0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs new file mode 100644 index 0000000..217bf3a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Pincer_Sweep : AISequence + { + public Pincer_Sweep() : base + ( + /* + () => { + List sequences = new List(); + for (int i = 150; i >= 0; i -= 5) { + sequences.Add(new Pincer(i).Wait(0.05f)); + } + return sequences.ToArray(); + } + */ + For(150, 0, -5, i => new Pincer(i).Wait(0.05f)) + ) + { + Description = "Sweeps pincer projectiles from +150 to +0 degrees"; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs.meta new file mode 100644 index 0000000..00f9565 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54de245874eed4d6a8e9b675a280782d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs new file mode 100644 index 0000000..dc0e07e --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using AOEs; +using static BossController; + +namespace Moves.Test +{ + public class Player_Strafe_Waves : AISequence + { + + public Player_Strafe_Waves() : base + ( + /* + () => { + List sequences = new List(); + sequences.Add(new Teleport()); + sequences.Add(new PlayerLock(true)); + for (int i = 0; i < 6; i++) + { + sequences.Add(new Strafe(true, 60, 25, GameManager.Player.transform.position)); + sequences.Add(new ShootAOE(AOE.New(self).On(-60, 60))); + sequences.Add(new Pause(0.75f)); + } + sequences.Add(new PlayerLock(false)); + sequences.Add(new Pause(1f)); + return sequences.ToArray(); + } + */ + For(6, i => new Strafe(true, 60, 25, GameManager.Player.transform.position)).Then(new ShootAOE(new AOE().On(-60, 60))).Wait(0.75f) + ) + { + + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs.meta new file mode 100644 index 0000000..5a417e6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb5f8baf3a0a342fe9400e130cfb1cd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs new file mode 100644 index 0000000..d837b01 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; + +namespace Moves.Test +{ + public class Quick_Waves : AISequence + { + public Quick_Waves() : base + ( + Either( + new ShootArc(100, -60, 60, new Projectile { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), + new ShootAOE(new AOE { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), + new Shoot1(new ProjectileLightning()), + Merge( + new ShootArc(150, 22.5f, 22.5f + 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(150, -22.5f, -22.5f - 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }) + ), + new ShootArc(100, -60, 60, new Projectile { Speed = Speed.VERY_FAST, Size = Size.SMALL }).Wait(0.1f).Times(5) + ).Wait(0.6f).Times(7) + ) + { + Description = "Fires a quick barrage of random wave-based attacks."; + Difficulty = 6f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs.meta new file mode 100644 index 0000000..50095ec --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 478d98494e8c642139818c0c35d5be22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs new file mode 100644 index 0000000..347e18a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs @@ -0,0 +1,78 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Projectiles; +using AOEs; +using Moves.Basic; + +namespace Moves.Test +{ + /// + /// I really like the lasers. + /// + public class Random_Leading : AISequence + { + public Random_Leading(int count = 20) : base + ( + /* + new PlayerLock(true), + new AISequence(() => + { + List sequences = new List(); + for (int i = 0; i < 50; i++) + { + sequences.Add( + new Shoot1( + new ProjectileReverse() + .Speed(BossCore.Speed.VERY_FAST) + .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) + * (5 * Vector3.forward))) + ); + } + return Merge(sequences.ToArray()); + }), + new PlayerLock(false) + */ + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), + new Laser(-60, 480, 5, 60), + new Laser(60, 480, 5, 45), + new Laser(120, 480, 5, 30), + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f) + ) + { + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs.meta new file mode 100644 index 0000000..8942571 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93dac8893eccb4c34bd76772e85d6dbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs new file mode 100644 index 0000000..fc02566 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs @@ -0,0 +1,59 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Projectiles; +using Moves.Basic; + +namespace Moves.Test +{ + public class SpinReverse : AISequence + { + public SpinReverse(int count = 50) : base + ( + /* + new PlayerLock(true), + new AISequence(() => + { + List sequences = new List(); + for (int i = 0; i < 50; i++) + { + sequences.Add( + new Shoot1( + new ProjectileReverse() + .Speed(BossCore.Speed.VERY_FAST) + .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) + * (5 * Vector3.forward))) + ); + } + return Merge(sequences.ToArray()); + }), + new PlayerLock(false) + */ + ForConcurrent(count, i => + new Shoot1( + new ProjectileCurving(187, false) + { + Start = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward)), + Target = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward) + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.right)), + Speed = (BossCore.Speed.FAST), + MaxTime = (0.75f), + OnDestroyTimeout = self => + new Shoot1( + new ProjectileReverse() + { + Start = (self.transform.position), + Target = (PLAYER_POSITION), + Speed = (BossCore.Speed.SNIPE), + MaxTime = (0.75f) + } + ) + } + ) + ) + ) + { + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs.meta new file mode 100644 index 0000000..2f16f11 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca9c6f4a743904703bf90a7dc319120d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs new file mode 100644 index 0000000..f2ad7b9 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs @@ -0,0 +1,62 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using static BossController; +using static World.Arena; +using BossCore; + +namespace Moves.Test +{ + public class Sniper_Final : AISequence + { + public Sniper_Final() : base + ( + new Teleport(NORTH_FAR).Wait(0.5f), + new ShootAOE(new AOE { + OuterSpeed = Speed.SLOW, + InnerSpeed = Speed.FROZEN, + InnerScale = 0f, + Target = SOUTH_FAR, + MaxTime = 2f, + OnDestroyTimeout = + self => + { + AOE clone = self.data.Clone(); + clone.MaxTime = 10f; + clone.Freeze(); + clone.Create(); + } + }.On(-80, 80) + ) + .Wait(1f), + new AISequence( + new AISequence( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) + ).Times(2), + new AISequence( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), + new ShootAOE(new AOE { Start = WEST_FAR, Target = EAST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), + new ShootAOE(new AOE { Start = EAST_FAR, Target = WEST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) + ).Times(2), + new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f), + new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f) + ) + ) + { } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs.meta new file mode 100644 index 0000000..498a836 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f9b0f17946b2494fa8c1868167b392d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs new file mode 100644 index 0000000..745379d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Test : AISequence + { + public Test() : base + ( + //new Shoot1(new Projectile { Target = LEADING_PLAYER_POSITION, Speed = Speed.VERY_FAST }).Wait(0.5f) + new Shoot1(new ProjectileHoming(difficulty: 1) { Speed = Speed.VERY_FAST }).Wait(0.1f) + ) + { + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs.meta new file mode 100644 index 0000000..bfbc01a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89d4ea6d739ef4a9da774cc00dfaf281 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1.meta new file mode 100644 index 0000000..7971234 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54096d36918404c72b0331f8ba569a3b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs new file mode 100644 index 0000000..c095006 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using AI; + +using Moves.Basic; + +namespace Moves.Tutorial1 +{ + public class Shoot_1_Several : AISequence + { + public Shoot_1_Several() : base + ( + new Teleport().Wait(0.5f), + new AISequence(() => + { + return new Shoot1().Wait(0.1f).Times(Random.Range(5, 10)); + }), + new Pause(1.5f) + ) + { + Description = "Shoots between 5 and 10 default projectiles at the player."; + Difficulty = 2f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs.meta new file mode 100644 index 0000000..59be327 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1af38270d97744392b830ad85a8581b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs new file mode 100644 index 0000000..5cc2cc8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using AI; + +using Moves.Basic; + +namespace Moves.Tutorial1 +{ + public class Shoot_3_Several : AISequence + { + public Shoot_3_Several() : base + ( + new Teleport().Wait(0.5f), + new AISequence(() => + { + return new Shoot3().Wait(0.1f).Times(Random.Range(7, 12)); + }), + new Pause(1.5f) + ) + { + Description = "Shoots between 7 and 12 three-way projectiles at the player."; + Difficulty = 3f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs.meta new file mode 100644 index 0000000..28accc1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fbb3939478c24dfeb4a470c4e3ce476 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs new file mode 100644 index 0000000..c3e45b8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using AI; + +using Moves.Basic; + +namespace Moves.Tutorial1 +{ + public class Shoot_Arc : AISequence + { + public Shoot_Arc(int width=70, bool dense=false) : base + ( + new Teleport().Wait(0.25f), + new ShootArc(dense ? 100 : 50, -width / 2, width / 2), + new Pause(1.5f) + ) + { + Description = "Shoots a" + (dense ? " dense" : "n") + " arc, " + width + " degrees wide, at the player."; + Difficulty = 2f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs.meta new file mode 100644 index 0000000..0a8f258 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c077f4830e5424f0f89cda345dec2403 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2.meta new file mode 100644 index 0000000..ed7df2c --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3098ce154c471453aa1348424b3a2648 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs new file mode 100644 index 0000000..88981b8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Projectiles; +using static BossController; + +using Moves.Basic; + +namespace Moves.Tutorial2 +{ + public class Force_Block : AISequence + { + public Force_Block() : base + ( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), + new PlayerLock(false), + new Pause(4f) + ) + { + Description = "Fires 10 sets of tiny projectiles in a 180 degree arc, too dense to dash through."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs.meta new file mode 100644 index 0000000..9031871 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c88bb7523eea494da001486db601a39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3.meta new file mode 100644 index 0000000..514ff29 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c26fd6fb38627405aae615fb2c020069 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs new file mode 100644 index 0000000..fcb33ba --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using static BossController; +using Moves.Basic; + +namespace Moves.Tutorial3 +{ + public class Shoot_AOE : AISequence + { + + public Shoot_AOE(int width) : base + ( + new Teleport().Wait(0.25f), + new ShootAOE(new AOE { FixedWidth = 3f }.On(-width / 2, width / 2)), + new Pause(0.5f) + ) + { + Description = "Shoots an AOE " + width + " degrees wide at the player."; + Difficulty = 1.5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs.meta new file mode 100644 index 0000000..6b27dd1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e0cd36625ac944cbb96b81ff8673ac9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted.meta new file mode 100644 index 0000000..53d20ea --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 19f0eee5fa4144939b234a29e52ef22f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs new file mode 100644 index 0000000..29912a8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using static World.Arena; +using Projectiles; + +namespace Moves.User +{ + public class Big_Homing_Strafe : AISequence + { + public Big_Homing_Strafe() : base + ( + new MoveCamera(false, new Vector3(0, 17.5f, -35f)).Wait(1f), + new Teleport(NORTH_FAR).Wait(1f), + new ShootHomingStrafe(strafeAmount: 65).Times(10), + new Teleport(NORTH_FAR).Wait(1f), + new ShootHomingStrafe(strafeAmount: 15).Times(15), + new MoveCamera(true).Wait(2f) + ) + { + Description = "Does a circle along the outside of the arena, shooting homing projectiles at the player."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs.meta new file mode 100644 index 0000000..26d7550 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38f04ae34b2a24e4583f6af97baef312 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs new file mode 100644 index 0000000..1515fb6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Dash_Test : AISequence + { + public Dash_Test() : base + ( + new ShootAOE(new AOE { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f) ), + new Pause(0.75f) + ) + { + Description = "Aggressively tests dashing."; + Difficulty = 8f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs.meta new file mode 100644 index 0000000..01368d6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a230885efa9f04c25aa2deebc7f6009f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs new file mode 100644 index 0000000..25141dd --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + /* + * A really intricate pattern. 6 projectiles that explode into 6 more projectiles, + * repeated twice to forme a lattice. Safe spot is a midpoint between any two of + * the first projectiles, near the far edge of the arena. + * + * ** This might have changed due to the way ShootDeathHex was implemented. + */ + public class Death_Hex : AISequence + { + public Death_Hex() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot_Death_Hex(2f).Wait(1f), + new Shoot_Death_Hex(1f).Wait(2f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(0.75f) + ) + { + Description = "Fires 6 projectiles that explode into 6 more projectiles, repeated twice to form a lattice."; + Difficulty = 9f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs.meta new file mode 100644 index 0000000..4fd3096 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af6de9d59d1e340dca3eb7a5794efb47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs new file mode 100644 index 0000000..58d7c07 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Double_Hex_Curve : AISequence + { + public Double_Hex_Curve() : base + ( + new Teleport(CENTER).Wait(1.5f), + new PlayerLock(true), + new Shoot_Hex_Curve(true), + new AOE_360().Wait(0.5f), + new Shoot_Hex_Curve(true, 30f).Wait(0.5f), + new AOE_360().Wait(1f), + new AOE_360().Wait(1f), + new PlayerLock(false) + ) + { + Description = "Fires two hex curves, the second offset 30 degrees from the first."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs.meta new file mode 100644 index 0000000..036459d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd7f511867c014f278d55f64ce328dae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs new file mode 100644 index 0000000..0cff6b1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Double_Hex_Curve_Hard : AISequence + { + public Double_Hex_Curve_Hard() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot_Hex_Curve(false, 0f), + new Shoot_Hex_Curve(false, 30f), + // This homing might be too hard; especially with this amount of 360s. + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(10), + new AOE_360(), + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), + new AOE_360(), + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), + new AOE_360().Wait(0.5f), + new AOE_360().Wait(0.5f) + ) + { + Description = "A harder variant of the double hex curve."; + Difficulty = 10f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs.meta new file mode 100644 index 0000000..82d5370 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f8f7a93b4c2a445bbc3108fadbf883f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs new file mode 100644 index 0000000..0c46461 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs @@ -0,0 +1,59 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Four_Way_Sweep_With_Homing : AISequence + { + public Four_Way_Sweep_With_Homing() : base + ( + // TODO refactor me to use standard notation + () => { + List sequences = new List(); + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 7; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE})); + for (int j = 7; j < 15; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new AOE_360()); + } + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 5; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); + for (int j = 5; j < 10; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); + for (int j = 10; j < 15; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new AOE_360()); + } + return sequences.ToArray(); + } + ) + { + Description = "Shoots a 4-directional sweep with homing projectiles in between."; + Difficulty = 6f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs.meta new file mode 100644 index 0000000..0eb1030 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e2ec7802836743c1b34b7951c09ee3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs new file mode 100644 index 0000000..ba2dd7d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Hex_Curve_Intro : AISequence + { + public Hex_Curve_Intro() : base + ( + new Shoot_Hex_Curve(true), + new AOE_360().Wait(2.5f), + new Shoot_Hex_Curve(false), + new AOE_360().Wait(2.5f), + new Shoot_Hex_Curve(true), + new AOE_360(), + new Shoot_Hex_Curve(false).Wait(1f), + new AOE_360().Wait(1f), + new AOE_360().Wait(1.5f), + new Teleport().Wait(0.5f) + ) + { + Description = "Introduces the player to the hex curve attack"; + Difficulty = 4f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs.meta new file mode 100644 index 0000000..01a8073 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34ab945d52f724b6495892198c8eef6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs new file mode 100644 index 0000000..ba2ec91 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Jump_Rope_Fast : AISequence + { + public Jump_Rope_Fast() : base + ( + new MoveCamera(false, new Vector3(0, 17.5f, -35)).Wait(1f), + new Teleport(WEST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(EAST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(WEST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(EAST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new MoveCamera(true) + ) + { + Description = "Fires lines at the player from the left and right."; + Difficulty = 4f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs.meta new file mode 100644 index 0000000..6821eb8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b0799783c67046f4a5f1f04a27b1ee2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs new file mode 100644 index 0000000..2c59c3d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Random_200 : AISequence + { + public Random_200() : base + ( + () => + { + List sequences = new List(); + for (int j = 0; j < 200; j++) { + switch (Random.Range(0, 3)) + { + case 0: sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) + )); break; + case 1: sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) + )); break; + case 2: + sequences.Add( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }) + ); + break; + } + if (j % 20 == 0) { + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.MEDIUM })); + } + if (j % 40 == 0) { + sequences.Add(new AISequence(() => + { + new Projectile + { + Size = Size.MEDIUM, + Speed = Speed.MEDIUM, + AngleOffset = Random.Range(0, 360f), + MaxTime = 0.5f, + OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE + }.Create(); + })); + } + sequences.Add(Pause(0.05f)); + } + return sequences.ToArray(); + } + ) + { + Description = "Spawns 200 random projectiles."; + Difficulty = 8f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs.meta new file mode 100644 index 0000000..39adc08 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb9518e7faa8b495f968824c29ed0f56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs new file mode 100644 index 0000000..a6b1e90 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Shoot3_Wave3 : AISequence + { + public Shoot3_Wave3() : base + ( + new Teleport().Wait(0.5f), + new AOE_360(), + new Shoot3().Wait(0.1f).Times(20), + new AOE_360(), + new Shoot3().Wait(0.1f).Times(20), + new AOE_360().Wait(0.5f) + ) + { + Description = "40 basic bullets, with a 360 wave at the start, middle, and end."; + Difficulty = 3f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta new file mode 100644 index 0000000..bfe53d6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcb3841cf08f64f0b98ce3c11109f231 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs new file mode 100644 index 0000000..a58c0ff --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Shoot_4_Waves_Behind : AISequence + { + public Shoot_4_Waves_Behind() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(220f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(200f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(160f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(140f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(5f) + ) + { + Description = "Your description here"; + Difficulty = 1f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs.meta new file mode 100644 index 0000000..35281ee --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bee754d65407e4ef78a96c99355f8d7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs new file mode 100644 index 0000000..cdf15e1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Shoot_Hex_Curve : AISequence + { + public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) : base + ( + ForConcurrent(6, i => + new Shoot1( + new ProjectileCurving((float)Speed.MEDIUM * (clockwise ? 1 : -1) * 2f, true) { + MaxTime = 3f, AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) + } + ) + ) + ) + { + Description = "Shoots 6 curving projectiles " + (clockwise ? "clockwise" : "counterclockwise") + " from the boss's location."; + Difficulty = 3f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs.meta new file mode 100644 index 0000000..e8de7a1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f927d8c238bc442ebbd7a3e08dadfca3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs new file mode 100644 index 0000000..1271ced --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Sweep_Back_And_Forth_Advanced : AISequence + { + public Sweep_Back_And_Forth_Advanced() : base + ( + // TODO refactor me to use standard notation + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => { + List sequences = new List(); + for (int i = -30; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + for (int i = -80; i < 80; i += 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.TINY, Speed = Speed.FAST }) + ).Wait(0.02f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -30; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + return sequences.ToArray(); + }).Wait(0.75f), + new PlayerLock(false) + ) + { + Description = "Sweeps back and forth with additional medium and tiny projectiles."; + Difficulty = 6.5f; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta new file mode 100644 index 0000000..24c65ef --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9714e821119b040eea1f7f93e1faca4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs new file mode 100644 index 0000000..788f355 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs @@ -0,0 +1,56 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Sweep_Back_And_Forth_Medium : AISequence + { + public Sweep_Back_And_Forth_Medium() : base + ( + // TODO refactor me to use standard notation + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => { + List sequences = new List(); + for (int i = -30; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = -80; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + return sequences.ToArray(); + }).Wait(0.75f), + new PlayerLock(false) + ) + { + Description = "Sweeps back and forth with additional medium projectiles."; + Difficulty = 5.5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta new file mode 100644 index 0000000..157f6b0 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 494510ae5a4af4916af78bef48dd860f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs new file mode 100644 index 0000000..6f076ba --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Sweep_Wall : AISequence + { + public Sweep_Wall(bool clockwise=true) : base + (() => + { + List sequences = new List(); + + for (int angle = 0; angle != (clockwise ? 72 : -72); angle += clockwise ? 6 : -6) + { + sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); + } + + for (int angle = clockwise ? 72 : -72; angle != 0; angle -= clockwise ? 6 : -6) + { + sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); + } + return sequences.ToArray(); + } + ) + { + Description = "Shoots a sweeping wall " + (clockwise ? "clockwise" : "counterclockwise") + "."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs.meta new file mode 100644 index 0000000..9aaab9f --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3054d21e08b294da395e8137d646df38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs new file mode 100644 index 0000000..afce042 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Sweep_Wall_Back_And_Forth : AISequence + { + public Sweep_Wall_Back_And_Forth() : base + ( + new PlayerLock(true), + new Sweep_Wall(true), + new Sweep_Wall(false), + new PlayerLock(false) + ) + { + Description = "Sweeps a wall clockwise, then counterclockwise."; + Difficulty = 6f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta new file mode 100644 index 0000000..7477eb8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f9d04b0d5cd848e9a0269e19988fb8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs new file mode 100644 index 0000000..ca68ad1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Wave_Circle : AISequence + { + + private class Slow_Wave_Circle : AISequence { + public Slow_Wave_Circle() : base + ( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), + new Strafe(true, 60f, 50).Wait(0.5f) + ) + { + Description = "Fires a medium-slow AOE, and then strafes 60 degrees clockwise."; + Difficulty = 2f; + } + } + + public Wave_Circle() : base + ( + new Teleport(WEST_MED), + new Slow_Wave_Circle().Times(6), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW) + ) + { + Description = "Fires six slow circles around the arena in a circular pattern. Then repeats twice, with lines appearing on the left and right sides."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs.meta new file mode 100644 index 0000000..e47b7bc --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04c02d677a15844a2957185ce382513d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs index ecde531..2e78563 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs @@ -8,33 +8,28 @@ namespace Moves.Test { public class Pincer : AISequence - { - public Pincer(float offset=0f, Speed speed=Speed.SNIPE) : base - ( - // TODO add variable storage or something to simplify this down. - // Maybe an instance variable? - () => { - //Debug.Log("Pincer sees player at: " + GameManager.Player.transform.position); - List sequences = new List(); + { - float curveAmount = - -4f * // base - (float)speed * // turning radius is tighter when we go faster - (20f / (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude) * // contribution due to distance from player - Mathf.Sqrt(2) * Mathf.Sin(Mathf.Deg2Rad * offset); // contribution due to initial firing offset - - float maxTime = Mathf.Deg2Rad * offset / Mathf.Sin(Mathf.Deg2Rad * offset) * ((GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude / 50f); - maxTime += 0.1f; - - sequences.Add(new Shoot1(new ProjectileCurving(curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = offset, MaxTime = maxTime })); - sequences.Add(new Shoot1(new ProjectileCurving(-curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = -offset, MaxTime = maxTime })); - - return sequences.ToArray(); - } - - ) + public Pincer(float offset=0f, Speed speed=Speed.SNIPE) { Description = "Shoots two projectiles with an offset of +/-" + offset + " degrees with speed " + speed; + + float curveAmount = + -4f * // base + (float)speed * // turning radius is tighter when we go faster + (20f / (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude) * // contribution due to distance from player + Mathf.Sqrt(2) * Mathf.Sin(Mathf.Deg2Rad * offset); // contribution due to initial firing offset + + float maxTime = Mathf.Deg2Rad * offset / Mathf.Sin(Mathf.Deg2Rad * offset) * ((GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude / 50f); + maxTime += 0.1f; + + GetChildren = () => + new AISequence[] { + Merge( + new Shoot1(new ProjectileCurving(curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = offset, MaxTime = maxTime }), + new Shoot1(new ProjectileCurving(-curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = -offset, MaxTime = maxTime }) + ) + }; } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs index 9cbed23..d837b01 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs @@ -14,42 +14,6 @@ public class Quick_Waves : AISequence { public Quick_Waves() : base ( - /* - () => { - List sequences = new List(); - - for (int i = 0; i < 7; i++) - { - int nextAttack = Random.Range(0, 5); - switch (nextAttack) - { - case 0: - sequences.Add( - new ShootArc(100, -60, 60, new Projectile().Size(Size.HUGE).Speed(Speed.VERY_FAST)).Wait(0.05f).Times(3)); break; - case 1: - sequences.Add( - new ShootAOE(AOE.New(self).On(-60, 60).FixedWidth(3f).Speed(Speed.VERY_FAST))); break; - case 2: - sequences.Add( - new Shoot1(new ProjectileLightning())); break; - case 3: - sequences.Add( - Merge( - new ShootArc(150, 22.5f, 22.5f + 60f, new Projectile().Size(Size.MEDIUM).Speed(Speed.VERY_FAST)), - new ShootArc(150, -22.5f, -22.5f - 60f, new Projectile().Size(Size.MEDIUM).Speed(Speed.VERY_FAST)) - )); break; - case 4: - sequences.Add( - new ShootArc(100, -60, 60, new Projectile().Speed(Speed.VERY_FAST).Size(Size.SMALL)).Wait(0.1f).Times(5) - ); break; - } - sequences.Add(Pause(0.6f)); - } - - return sequences.ToArray(); - } - */ - Either( new ShootArc(100, -60, 60, new Projectile { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), new ShootAOE(new AOE { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs new file mode 100644 index 0000000..2c59c3d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Random_200 : AISequence + { + public Random_200() : base + ( + () => + { + List sequences = new List(); + for (int j = 0; j < 200; j++) { + switch (Random.Range(0, 3)) + { + case 0: sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) + )); break; + case 1: sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) + )); break; + case 2: + sequences.Add( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }) + ); + break; + } + if (j % 20 == 0) { + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.MEDIUM })); + } + if (j % 40 == 0) { + sequences.Add(new AISequence(() => + { + new Projectile + { + Size = Size.MEDIUM, + Speed = Speed.MEDIUM, + AngleOffset = Random.Range(0, 360f), + MaxTime = 0.5f, + OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE + }.Create(); + })); + } + sequences.Add(Pause(0.05f)); + } + return sequences.ToArray(); + } + ) + { + Description = "Spawns 200 random projectiles."; + Difficulty = 8f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs.meta new file mode 100644 index 0000000..39adc08 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb9518e7faa8b495f968824c29ed0f56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs new file mode 100644 index 0000000..a58c0ff --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Shoot_4_Waves_Behind : AISequence + { + public Shoot_4_Waves_Behind() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(220f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(200f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(160f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(140f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(5f) + ) + { + Description = "Your description here"; + Difficulty = 1f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs.meta new file mode 100644 index 0000000..35281ee --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bee754d65407e4ef78a96c99355f8d7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs new file mode 100644 index 0000000..6f076ba --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Sweep_Wall : AISequence + { + public Sweep_Wall(bool clockwise=true) : base + (() => + { + List sequences = new List(); + + for (int angle = 0; angle != (clockwise ? 72 : -72); angle += clockwise ? 6 : -6) + { + sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); + } + + for (int angle = clockwise ? 72 : -72; angle != 0; angle -= clockwise ? 6 : -6) + { + sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); + } + return sequences.ToArray(); + } + ) + { + Description = "Shoots a sweeping wall " + (clockwise ? "clockwise" : "counterclockwise") + "."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs.meta new file mode 100644 index 0000000..9aaab9f --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3054d21e08b294da395e8137d646df38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs new file mode 100644 index 0000000..afce042 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Sweep_Wall_Back_And_Forth : AISequence + { + public Sweep_Wall_Back_And_Forth() : base + ( + new PlayerLock(true), + new Sweep_Wall(true), + new Sweep_Wall(false), + new PlayerLock(false) + ) + { + Description = "Sweeps a wall clockwise, then counterclockwise."; + Difficulty = 6f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta new file mode 100644 index 0000000..7477eb8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f9d04b0d5cd848e9a0269e19988fb8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs index 0b8e74c..3618810 100644 --- a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs +++ b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs @@ -51,84 +51,6 @@ public partial class AISequence // LINE_CIRCLE_STRAFE_60.Times(6) //); - //public static AISequence RANDOM_200_WAVE = new AISequence(7, () => { - // List sequences = new List(); - // for (int j = 0; j < 200; j++) { - // switch (Random.Range(0, 3)) - // { - // case 0: sequences.Add(Merge( - // Shoot1(New(self).AngleOffset(Random.Range(0, 360f)).Size(Size.SMALL).Speed(Speed.FAST)), - // Shoot1(New(self).AngleOffset(Random.Range(0, 360f)).Size(Size.SMALL).Speed(Speed.FAST)), - // Shoot1(New(self).AngleOffset(Random.Range(0, 360f)).Size(Size.TINY).Speed(Speed.FAST)) - // )); break; - // case 1: sequences.Add(Merge( - // Shoot1(New(self).AngleOffset(Random.Range(0, 360f)).Size(Size.MEDIUM).Speed(Speed.MEDIUM)), - // Shoot1(New(self).AngleOffset(Random.Range(0, 360f)).Size(Size.MEDIUM).Speed(Speed.MEDIUM) - // ))); break; - // case 2: sequences.Add(Shoot1(New(self).AngleOffset(Random.Range(0, 360f)).Size(Size.LARGE).Speed(Speed.SLOW))); break; - // } - // if (j % 20 == 0) { - // sequences.Add(Shoot1(New(self).Size(Size.MEDIUM).Homing())); - // } - // if (j % 40 == 0) { - // sequences.Add(new AISequence(() => - // { - // Projectile - // .New(self) - // .Size(Size.MEDIUM) - // .Speed(Speed.MEDIUM) - // .AngleOffset(Random.Range(0, 360f)) - // .MaxTime(0.5f) - // .OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE) - // .Create(); - // })); - // } - // sequences.Add(Pause(0.05f)); - // } - // return sequences.ToArray(); - //}); - - //public static AISequence SWEEP_WALL_CLOCKWISE = new AISequence(5, () => - //{ - // List sequences = new List(); - - // for (int angle = 0; angle < 72; angle += 6) - // { - // sequences.Add(ShootWall(angleOffset: angle).Wait(0.1f)); - // } - - // for (int angle = 72; angle >= 0; angle -= 6) - // { - // sequences.Add(ShootWall(angleOffset: angle).Wait(0.1f)); - // } - // return sequences.ToArray(); - //}); - - //public static AISequence SWEEP_WALL_COUNTERCLOCKWISE = new AISequence(5, () => - //{ - // List sequences = new List(); - - // for (int angle = 0; angle >= -72; angle -= 6) - // { - // sequences.Add(ShootWall(angleOffset: angle).Wait(0.1f)); - // } - - // for (int angle = -72; angle <= 0; angle += 6) - // { - // sequences.Add(ShootWall(angleOffset: angle).Wait(0.1f)); - // } - // return sequences.ToArray(); - - //}); - - //public static AISequence SWEEP_WALL_BACK_AND_FORTH = new AISequence( - // 6, - // PlayerLock(true), - // SWEEP_WALL_CLOCKWISE, - // SWEEP_WALL_COUNTERCLOCKWISE, - // PlayerLock(false) - //); - //public static AISequence WAVE_REVERSE_TARGET = new AISequence( // 5, // new AISequence(() => diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic.meta" new file mode 100644 index 0000000..600d76b --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c3f185ac84b84816acbf911798e3311 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs" new file mode 100644 index 0000000..51f1701 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs" @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using AOEs; +using static BossController; + +namespace Moves.Basic +{ + public class AOE_120 : AISequence + { + public AOE_120() : base + ( + new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + ) + { + Description = "Shoots a 120 degree wide AOE at the player."; + Difficulty = 1f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs.meta" new file mode 100644 index 0000000..d2ef59f --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 087000a7707c6407c8932c06b6e34fbf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs" new file mode 100644 index 0000000..3897529 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs" @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class AOE_131 : AISequence + { + public AOE_131() : base + ( + new Teleport().Wait(0.5f), + new PlayerLock(true), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.19f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20 }.On(-60, -40).On(-10, 10).On(40, 60)).Wait(0.76f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.2f), + new PlayerLock(false).Wait(1f) + ) + { + Description = "Shoots an AOE attack in a 1-3-1 pattern."; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs.meta" new file mode 100644 index 0000000..854df6b --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 778573b2a466740f6a82e1aea963796a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs" new file mode 100644 index 0000000..1d7d225 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs" @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using AOEs; +using static BossController; + +namespace Moves.Basic +{ + public class AOE_360 : AISequence + { + public AOE_360() : base + ( + new ShootAOE(new AOE { FixedWidth = 3f }.On(0, 360)) + ) + { + Description = "Shoots a 360 degree wide AOE."; + Difficulty = 1f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs.meta" new file mode 100644 index 0000000..279c74b --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c656e30deb594c7d8a502a526a5f05d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs" new file mode 100644 index 0000000..eb45036 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs" @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using AOEs; +using static BossController; + +namespace Moves.Basic +{ + public class AOE_90 : AISequence + { + public AOE_90() : base + ( + new ShootAOE(new AOE { FixedWidth = 3f }.On(-45, 45)) + ) + { + Description = "Shoots a 90 degree wide AOE at the player."; + Difficulty = 1f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs.meta" new file mode 100644 index 0000000..3408211 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdf9421d8baca4596a10ade6bbc77c5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs" new file mode 100644 index 0000000..3d65d8a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs" @@ -0,0 +1,23 @@ +using AI; +using Projectiles; +using BossCore; + +using static BossController; + +namespace Moves.Basic +{ + public class Shoot_2_Waves : AISequence + { + public Shoot_2_Waves() : base + ( + new Teleport().Wait(0.5f), + new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = -2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = 2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new Pause(1f) + ) + { + Description = "Shoots 2 90 waves as one block, encouraging dodging through them."; + Difficulty = 4f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs.meta" new file mode 100644 index 0000000..26b0908 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3c8b90e37f5543cb85e7edaefac1ef7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs" new file mode 100644 index 0000000..12cdaf9 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs" @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class Shoot_Death_Hex : AISequence + { + public Shoot_Death_Hex(float maxTime = 1f) : base + ( + new Shoot1(new ProjectileDeathHex() { MaxTime = maxTime }).Wait(1f) + ) + { + Description = "Shoots a high-damage projectile that splits into 6 curving projectiles with trails."; + Difficulty = 4f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs.meta" new file mode 100644 index 0000000..08780c6 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8706927eef48a43adb9a376a69f7ff67 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs" new file mode 100644 index 0000000..7b4e163 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs" @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Shoot_Split_6 : AISequence + { + public Shoot_Split_6() : base + ( + new Teleport().Wait(0.5f), + new Shoot1( + new ProjectileCurving(0f, false) + { + MaxTime = 0.25f, + Speed = Speed.VERY_FAST, + OnDestroyTimeout = CallbackDictionary.SPAWN_6 + } + ), + new Pause(0.5f) + ) + { + Description = "Shoots a projectile that splits into 6 more projectiles."; + Difficulty = 4f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs.meta" new file mode 100644 index 0000000..d5c3345 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98295e0949b104b08ae2990a6e42666d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs" new file mode 100644 index 0000000..0a132bf --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs" @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Shoot_Split_6_Curve : AISequence + { + public Shoot_Split_6_Curve() : base + ( + new Teleport().Wait(0.5f), + new Shoot1( + new ProjectileDeathHex + { + MaxTime = 0.25f, + Speed = Speed.VERY_FAST + } + ), + new Pause(0.5f) + ) + { + Description = "Shoots a projectile that splits into 6 curving projectiles."; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs.meta" new file mode 100644 index 0000000..c743256 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f0faa05d2a7642599372126585726a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs" new file mode 100644 index 0000000..7e15f4c --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs" @@ -0,0 +1,26 @@ +using AI; +using Projectiles; +using BossCore; + +using static BossController; +using static AI.AISequence; + +namespace Moves.Basic +{ + public class Shoot_Wave_Middle_Gap : AISequence + { + public Shoot_Wave_Middle_Gap() : base + ( + new Teleport().Wait(0.5f), + Merge( + new ShootArc(150, 22.5f, 22.5f + 60f), + new ShootArc(150, -22.5f, -22.5f - 60f) + ), + new Pause(1f) + ) + { + Description = "Shoots two 60 degree waves with a 45 degree gap in the middle."; + Difficulty = 3f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs.meta" new file mode 100644 index 0000000..6611c1f --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 917bd5b3f26df4e548e3e92196acae99 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs" new file mode 100644 index 0000000..d7a1893 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs" @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using Projectiles; +using static BossController; +using static AI.AISequence; + +namespace Moves.Basic +{ + public class Sweep : AISequence + { + public Sweep(bool reverse = false) : base + ( + new Teleport().Wait(0.25f), + new PlayerLock(true), + For(reverse ? 90 : -30, + reverse ? -30 : 90, + reverse ? -5 : 5, + i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f) + ), + /* + new AISequence(() => + { + int start = reverse ? 90 : -30; + int end = reverse ? -30 : 90; + int step = reverse ? -5 : 5; + + List sequences = new List(); + for (int i = start; i != end; i += step) + { + sequences.Add(new Shoot1(new Projectile().AngleOffset(i)).Wait(0.05f)); + } + return sequences.ToArray(); + }), + */ + new PlayerLock(false), + Pause(0.25f) + ) + { + Description = "Shoots a sweep from " + (reverse ? -30 : 90) + + " degrees to " + (reverse ? 90 : -30) + " degrees offset from the player's current position."; + Difficulty = 2f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs.meta" new file mode 100644 index 0000000..f289ba6 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c1f47c2007ef42649045864c1303136 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs" new file mode 100644 index 0000000..5208f95 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs" @@ -0,0 +1,40 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using Projectiles; +using static BossController; +using static AI.AISequence; + +namespace Moves.Basic +{ + public class Sweep_Back_And_Forth : AISequence + { + public Sweep_Back_And_Forth() : base + ( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => + { + List sequences = new List(); + for (int i = -30; i < 90; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); + } + sequences.Add(Pause(0.25f)); + for (int i = 30; i > -90; i -= 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); + } + return sequences.ToArray(); + }), + new PlayerLock(false), + new Pause(0.5f) + ) + { + Description = "Shoots a sweep from -30 degrees to +90 degrees offset from the player's current position, then another from -90 to +30 degrees."; + Difficulty = 3f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs.meta" new file mode 100644 index 0000000..137502c --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e58399f0c41124741852e6d923a8a1b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs" new file mode 100644 index 0000000..3cc4ee2 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs" @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using Projectiles; +using static BossController; +using static AI.AISequence; + +namespace Moves.Basic +{ + public class Sweep_Both : AISequence + { + public Sweep_Both() : base + ( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => + { + + List sequences = new List(); + for (int i = 0; i < 120; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i - 60 })); + sequences.Add(new Shoot1(new Projectile { AngleOffset = 60 - i })); + sequences.Add(new Pause(0.05f)); + } + return sequences.ToArray(); + }), + new PlayerLock(false), + new Pause(0.5f) + ) + { + Description = "Sweeps both left and right at the same time."; + Difficulty = 4f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs.meta" new file mode 100644 index 0000000..213bcae --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcce318f6583f4badbb7fec798d6d6c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators.meta" new file mode 100644 index 0000000..13e1b5d --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e89d07b6cef054a26ab6e29a9e3f2591 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs" new file mode 100644 index 0000000..d720fa2 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs" @@ -0,0 +1,26 @@ +using AI; +using Projectiles; +using UnityEngine; +using static BossController; + +namespace Moves.Basic +{ + public class MoveCamera : AISequence + { + public MoveCamera(bool isFollow = false, Vector3? targetPosition = null) : base + ( + () => + { + CameraController.GetInstance().IsFollowing = isFollow; + + if (targetPosition.HasValue) + { + CameraController.GetInstance().Goto(targetPosition.Value, 1); + } + } + ) + { + Description = "Moved the camera to " + targetPosition + ". Camera is now " + (isFollow ? "" : "not") + " following."; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs.meta" new file mode 100644 index 0000000..144fb49 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 612275463c8fd495999e3dea3288593a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs" new file mode 100644 index 0000000..5885717 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs" @@ -0,0 +1,15 @@ +using AI; + +namespace Moves.Basic +{ + public class Pause : AISequence + { + public Pause(float duration) : base + ( + new AIEvent[] { new AIEvent(duration, () => { }) } + ) + { + Description = "Waiting for " + duration + " seconds."; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs.meta" new file mode 100644 index 0000000..cd88c33 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f25f7bf305aa4ea98d1d53f16f6386a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs" new file mode 100644 index 0000000..0b7e236 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs" @@ -0,0 +1,31 @@ +using AI; +using UnityEngine; + +namespace Moves.Basic +{ + public class PlayerLock : AISequence + { + // Used for the "PlayerLock" move. Keeps track of the current player position + // for events and sequences that need a slightly out of date version. + private static Vector3 playerLockPosition; + private static bool isPlayerLocked; + + public static BossCore.ProxyVector3 _delayed_player_position = new BossCore.ProxyVector3(() => { + return isPlayerLocked ? playerLockPosition : PLAYER_POSITION.GetValue(); + }); + + public PlayerLock(bool enableLock = true) : base + ( + () => + { + if (enableLock) { + playerLockPosition = GameManager.Player.transform.position; + } + isPlayerLocked = enableLock; + } + ) + { + Description = (enableLock ? "Locked onto" : "Unlocked from") + " the player."; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs.meta" new file mode 100644 index 0000000..28ceed1 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65a3d43b5e0724d208bf1bbb4446877f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs" new file mode 100644 index 0000000..f639240 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs" @@ -0,0 +1,23 @@ +using AI; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class Shoot1 : AISequence + { + public Shoot1(Projectile skeleton = null) : base + ( + () => + { + GameManager.Boss.Glare(); + + Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); + newStruc.Create(); + } + ) + { + Description = "Shot one " + (skeleton == null ? "default projectile at the player." : skeleton + "."); + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs.meta" new file mode 100644 index 0000000..bdef2e8 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ee019564e53d4d5295c3d0c2a472ec8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs" new file mode 100644 index 0000000..7c8cf3a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs" @@ -0,0 +1,28 @@ +using AI; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class Shoot3 : AISequence + { + + public Shoot3(Projectile skeleton = null) : base + ( + () => + { + GameManager.Boss.Glare(); + + for (int i = 0; i < 3; i++) + { + Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); + newStruc.AngleOffset = -30 + (30 * i) + newStruc.AngleOffset; + newStruc.Create(); + } + } + ) + { + Description = "Shot three " + (skeleton == null ? "default projectiles at the player." : skeleton + "."); + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs.meta" new file mode 100644 index 0000000..d9886bb --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 501cc1ce79a5c41969bf82aa89dd1a42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs" new file mode 100644 index 0000000..1cadef0 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs" @@ -0,0 +1,24 @@ +using AI; +using AOEs; +using BossCore; + +using static BossController; + +namespace Moves.Basic +{ + public class ShootAOE : AISequence + { + public ShootAOE(AOE skeleton = null) : base + ( + () => + { + GameManager.Boss.Glare(); + skeleton = skeleton != null ? skeleton.Clone() : new AOE(); + skeleton.Create(); + } + ) + { + Description = "Shot " + skeleton; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs.meta" new file mode 100644 index 0000000..4eab926 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d154ba470c53d40eebc3ea3ae78e6648 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs" new file mode 100644 index 0000000..a1d7811 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs" @@ -0,0 +1,39 @@ +using AI; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class ShootArc : AISequence + { + + public ShootArc(int density = 50, float from = 0, float to = 360, Projectile skeleton = null) : base + ( + () => + { + GameManager.Boss.Glare(); + + // Ensure that "from" is always less than "to". + if (to < from) + { + float temp = from; + from = to; + to = temp; + } + + float step = 360f / density; + Projectile clone = skeleton ?? new Projectile { Size = Size.MEDIUM }; + for (float i = from; i <= to; i += step) + { + Projectile newStruc = clone.Clone(); + newStruc.AngleOffset = newStruc.AngleOffset + i; + newStruc.Create(); + } + } + ) + { + Description = "Shot an arc (density=" + density + ", from=" + from + ", to=" + to + ") of " + + (skeleton == null ? "default projectiles at the player." : skeleton + "."); + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs.meta" new file mode 100644 index 0000000..7a8e270 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29f9bfaded55544f584af88b12219b50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs" new file mode 100644 index 0000000..d3d9201 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs" @@ -0,0 +1,18 @@ +using AI; +using Projectiles; +using static BossController; + +namespace Moves.Basic +{ + public class ShootHomingStrafe : AISequence + { + public ShootHomingStrafe(bool clockwise = true, int strafeAmount = 5, int speed = 25) : base + ( + new Strafe(clockwise, strafeAmount, speed), + new Shoot1(new ProjectileHoming { Size = Size.MEDIUM }) + ) + { + Description = "Strafed " + strafeAmount + " degrees " + (clockwise ? "clockwise" : "counterclockwise") + " and shot a homing projectile."; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs.meta" new file mode 100644 index 0000000..658ac22 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e471443a6fd741e7b1bcbe817c10ee4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs" new file mode 100644 index 0000000..32472ac --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs" @@ -0,0 +1,36 @@ +using AI; +using Projectiles; +using static BossController; +using UnityEngine; +using BossCore; + +namespace Moves.Basic +{ + public class ShootLine : AISequence + { + public ShootLine(int amount = 50, float width = 75f, Vector3? target = null, Speed speed = Speed.MEDIUM, Size size = Size.MEDIUM) : base + ( + () => + { + + Vector3 targetPos = target.HasValue ? target.Value - GameManager.Boss.transform.position : GameManager.Player.transform.position - GameManager.Boss.transform.position; + Vector3 leftDirection = (Quaternion.AngleAxis(90, Vector3.up) * targetPos).normalized; + + for (int i = 0; i < amount; i++) + { + Vector3 spawn = GameManager.Boss.transform.position + ((i - (amount / 2f)) * (width / amount) * leftDirection); + new Projectile() + { + Start = spawn, + Target = spawn + targetPos, + Size = size + }.Create(); + } + } + ) + { + Description = "Shot a line (amount=" + amount + ", width=" + width + ") at " + (target == null ? " the player" : target.ToString()) + + " with speed " + speed + " and size " + size + "."; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs.meta" new file mode 100644 index 0000000..fdc3a4b --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 820741158b8a9444da7d65ad525dff64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs" new file mode 100644 index 0000000..5f7020a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs" @@ -0,0 +1,22 @@ +using AI; +using Projectiles; +using static BossController; + +using BossCore; + +namespace Moves.Basic +{ + public class ShootWall : AISequence + { + public ShootWall(float angleOffset) : base + ( + Merge( + new ShootArc(100, angleOffset + -60, angleOffset + -60 + 28, new Projectile { Speed = Speed.SLOW }), + new ShootArc(100, angleOffset + 20, angleOffset + 60, new Projectile { Speed = Speed.SLOW }) + ) + ) + { + Description = "Shot a wall with offset " + angleOffset + " at the player."; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs.meta" new file mode 100644 index 0000000..d82b4a3 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8021f7650ced742a9a74f9d2f8a2a840 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs" new file mode 100644 index 0000000..80c5847 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs" @@ -0,0 +1,31 @@ +using AI; +using Projectiles; +using static BossController; + +using UnityEngine; + +namespace Moves.Basic +{ + public class Strafe : AISequence + { + // A reference to the BossController's entity. Assigned when teleport is called. + private static CombatCore.Entity self = null; + + public Strafe(bool clockwise = true, float degrees = 10f, int speed = 25, Vector3 center = default(Vector3)) : base + ( + () => + { + if (self == null) { + self = GameManager.Boss.GetComponent(); + } + self.movespeed.LockTo(speed); + + Vector3 oldPosVector = GameManager.Boss.transform.position - center; + Quaternion rot = Quaternion.AngleAxis(degrees, clockwise ? Vector3.up : Vector3.down); + + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash((rot * oldPosVector) + center)); + } + ) + {} + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs.meta" new file mode 100644 index 0000000..95b843a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ebc39281429546e8ba2816c16c53f30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs" new file mode 100644 index 0000000..2943997 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs" @@ -0,0 +1,71 @@ +using AI; +using UnityEngine; + +namespace Moves.Basic +{ + public class Teleport : AISequence + { + // A reference to the BossController's entity. Assigned when teleport is called. + private static CombatCore.Entity self = null; + + public Teleport(Vector3? target = null, int speed = 25) : base + ( + () => + { + if (self == null) { + self = GameManager.Boss.GetComponent(); + } + self.movespeed.LockTo(speed); + + if (target.HasValue) + { + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(target.Value)); + GameManager.Boss.Glare(); + return; + } + + float minDistance = 35f; + float minAngle = 50f; + float maxAngle = 100f; + + Vector3 oldPosVector = GameManager.Boss.transform.position - GameManager.Player.transform.position; + + int count = 0; + Vector3 rawPosition; + do + { + count++; + float degreeRotation = Random.Range(minAngle, maxAngle) * (Random.Range(0, 2) == 0 ? -1 : 1); + float distance = Random.Range(minDistance * GameManager.Arena.transform.localScale.x, 50f * GameManager.Arena.transform.localScale.x); + + if (count == 15) + { + degreeRotation = Random.Range(0, 359f); + distance = Random.Range(15, 49f); + } + + Quaternion rot = Quaternion.AngleAxis(degreeRotation, Vector3.up); + + if (count == 15) + { + rawPosition = rot * (distance * Vector3.forward); + } + else + { + rawPosition = (rot * (oldPosVector * (distance / oldPosVector.magnitude))) + GameManager.Player.transform.position; + } + rawPosition.y = 0f; + + } while (rawPosition.magnitude > 50f); + + rawPosition.y = 1.31f; + GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(rawPosition)); + + GameManager.Boss.Glare(); + } + ) + { + Description = "Teleports to " + (target == null ? "some random position" : target.Value.ToString()) + "."; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs.meta" new file mode 100644 index 0000000..340fad6 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3762d4a7b52c4f33a307eefebf9578e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test.meta" new file mode 100644 index 0000000..25e3cf5 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 943ba5d252e4f4d01aa9e0993c613fcb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs" new file mode 100644 index 0000000..56fbafe --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs" @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Double_Laser_Sweep : AISequence + { + public Double_Laser_Sweep() : base + ( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f) + ), + new Pause(1f), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f) + ), + new PlayerLock(false), + new Pause(1f) + ) + { + Description = "Sweeps two lasers back and forth."; + Difficulty = 6.5f; + } + + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs.meta" new file mode 100644 index 0000000..7edaf5a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d8c17d5efd674e7e956d0a83470b982 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs" new file mode 100644 index 0000000..5b2703a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs" @@ -0,0 +1,40 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Double_Laser_Sweep_AOE : AISequence + { + public Double_Laser_Sweep_AOE() : base + ( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f), + new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) + ), + new Pause(1f), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f), + new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) + ), + new PlayerLock(false), + new Pause(1f) + ) + { + Description = "Sweeps two lasers back and forth, with two AOE attacks in between."; + Difficulty = 7f; + } + + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs.meta" new file mode 100644 index 0000000..965c858 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 920fe1f6e1a854941b15222900697b61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs" new file mode 100644 index 0000000..2c06a80 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs" @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +// TODO unfinished +namespace Moves.Test +{ + public class Horseshoe_AOE : AISequence + { + public Horseshoe_AOE() : base + ( + //Pause(1f), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) + ) + ), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) + ) + ), + new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + ) + { + Description = "Your description here"; + Difficulty = 1f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs.meta" new file mode 100644 index 0000000..a1b8540 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d720c634880034176b34bbc0d87457b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs" new file mode 100644 index 0000000..87cb579 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs" @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using static BossController; + +using Moves.Basic; + +namespace Moves.Test +{ + public class Laser : AISequence + { + public Laser(float startOffset = -90, float finalOffset = 90, float width = 5, float angularSpeed = 90) : base + ( + new ShootAOE( + new AOE + { + InnerSpeed = Speed.FROZEN, + OuterSpeed = Speed.FROZEN, + InnerScale = 0f, + Scale = 100f, + AngleOffset = startOffset, + RotationSpeed = angularSpeed, + MaxTime = (finalOffset - startOffset) / angularSpeed, + OnDestroyOutOfBounds = AOECallbackDictionary.DONT_DESTROY_OOB + }.On(0, width) + ) + ) + { + Description = "A laser that sweeps from " + startOffset + " to " + finalOffset + " with a beam width of " + width + " and speed " + angularSpeed; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs.meta" new file mode 100644 index 0000000..3bcb992 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13fd1a558d3174cfb9628f3817eb1c62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs" new file mode 100644 index 0000000..56b8ffa --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs" @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Laser_Sweep_With_AOE : AISequence + { + public Laser_Sweep_With_AOE() : base + ( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) + ), + new Pause(1f), + Merge( + new Laser(90, -90, 5, -90).Wait(1f), + new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) + ), + new PlayerLock(false), + new Pause(1f) + ) + { + Description = "Sweeps a laser back and forth, with two AOE attacks in between."; + Difficulty = 5.5f; + } + + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs.meta" new file mode 100644 index 0000000..5d22899 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6723376e1352418590cd17979d08b86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs" new file mode 100644 index 0000000..f028f14 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs" @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using Projectiles; +using static BossController; +using BossCore; +using Moves.Basic; + +namespace Moves.Test +{ + public class Lightning_Arena : AISequence + { + public Lightning_Arena() : base + ( + new Teleport(World.Arena.CENTER).Wait(0.25f), + new AISequence(() => + { + List sequences = new List(); + + for (int i = 0; i < 1; i++) + { + sequences.Add(new Shoot1( + new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)); + } + return sequences.ToArray(); + }), + Pause(1f) + ) + { + Description = "Spawns lightning on the whole arena"; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs.meta" new file mode 100644 index 0000000..c0dcfc3 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bd36f0d869744e7c83335c8325fdc38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs" new file mode 100644 index 0000000..ee623e3 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs" @@ -0,0 +1,50 @@ +using System.Collections; +using System.Collections.Generic; +using AI; +using UnityEngine; + +using AOEs; +using BossCore; +using Moves.Test; +using Moves.Basic; +using static BossController; + +namespace Moves.Test +{ + public class Lightning_With_AOE : AISequence + { + public Lightning_With_AOE() : base + ( + new ShootAOE(new AOE + { + AngleOffset = (-25), + RotationSpeed = (15f), + FixedWidth = (10f), + OuterSpeed = (Speed.MEDIUM_SLOW) + } + .On(-22.5f, 22.5f) + .On(90 - 22.5f, 90 + 22.5f) + .On(180 - 22.5f, 180 + 22.5f) + .On(270 - 22.5f, 270 + 22.5f) + ).Wait(1.5f), + new Lightning_Arena().Wait(0.5f), + new ShootAOE(new AOE + { + AngleOffset = (-25), + RotationSpeed = (15f), + FixedWidth = (10f), + OuterSpeed = (Speed.MEDIUM_SLOW) + } + .On(-22.5f, 22.5f) + .On(90 - 22.5f, 90 + 22.5f) + .On(180 - 22.5f, 180 + 22.5f) + .On(270 - 22.5f, 270 + 22.5f) + ).Wait(1.5f), + new Lightning_Arena().Wait(2.5f) + ) + { + Description = "Lightning with aoe"; + Difficulty = 6f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs.meta" new file mode 100644 index 0000000..de00076 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4e053c5803f94c709701b26ea28bfb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs" new file mode 100644 index 0000000..2e78563 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs" @@ -0,0 +1,35 @@ +using System.Collections.Generic; +using AI; +using BossCore; +using Moves.Basic; +using Projectiles; +using UnityEngine; + +namespace Moves.Test +{ + public class Pincer : AISequence + { + + public Pincer(float offset=0f, Speed speed=Speed.SNIPE) + { + Description = "Shoots two projectiles with an offset of +/-" + offset + " degrees with speed " + speed; + + float curveAmount = + -4f * // base + (float)speed * // turning radius is tighter when we go faster + (20f / (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude) * // contribution due to distance from player + Mathf.Sqrt(2) * Mathf.Sin(Mathf.Deg2Rad * offset); // contribution due to initial firing offset + + float maxTime = Mathf.Deg2Rad * offset / Mathf.Sin(Mathf.Deg2Rad * offset) * ((GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude / 50f); + maxTime += 0.1f; + + GetChildren = () => + new AISequence[] { + Merge( + new Shoot1(new ProjectileCurving(curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = offset, MaxTime = maxTime }), + new Shoot1(new ProjectileCurving(-curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = -offset, MaxTime = maxTime }) + ) + }; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs.meta" new file mode 100644 index 0000000..b8d617e --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a813033603df4f0db3b315c4b0d1b0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs" new file mode 100644 index 0000000..217bf3a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs" @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Pincer_Sweep : AISequence + { + public Pincer_Sweep() : base + ( + /* + () => { + List sequences = new List(); + for (int i = 150; i >= 0; i -= 5) { + sequences.Add(new Pincer(i).Wait(0.05f)); + } + return sequences.ToArray(); + } + */ + For(150, 0, -5, i => new Pincer(i).Wait(0.05f)) + ) + { + Description = "Sweeps pincer projectiles from +150 to +0 degrees"; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs.meta" new file mode 100644 index 0000000..00f9565 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54de245874eed4d6a8e9b675a280782d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs" new file mode 100644 index 0000000..dc0e07e --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs" @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using AOEs; +using static BossController; + +namespace Moves.Test +{ + public class Player_Strafe_Waves : AISequence + { + + public Player_Strafe_Waves() : base + ( + /* + () => { + List sequences = new List(); + sequences.Add(new Teleport()); + sequences.Add(new PlayerLock(true)); + for (int i = 0; i < 6; i++) + { + sequences.Add(new Strafe(true, 60, 25, GameManager.Player.transform.position)); + sequences.Add(new ShootAOE(AOE.New(self).On(-60, 60))); + sequences.Add(new Pause(0.75f)); + } + sequences.Add(new PlayerLock(false)); + sequences.Add(new Pause(1f)); + return sequences.ToArray(); + } + */ + For(6, i => new Strafe(true, 60, 25, GameManager.Player.transform.position)).Then(new ShootAOE(new AOE().On(-60, 60))).Wait(0.75f) + ) + { + + } + } +} \ No newline at end of file diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs.meta" new file mode 100644 index 0000000..5a417e6 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb5f8baf3a0a342fe9400e130cfb1cd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs" new file mode 100644 index 0000000..d837b01 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs" @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; + +namespace Moves.Test +{ + public class Quick_Waves : AISequence + { + public Quick_Waves() : base + ( + Either( + new ShootArc(100, -60, 60, new Projectile { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), + new ShootAOE(new AOE { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), + new Shoot1(new ProjectileLightning()), + Merge( + new ShootArc(150, 22.5f, 22.5f + 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(150, -22.5f, -22.5f - 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }) + ), + new ShootArc(100, -60, 60, new Projectile { Speed = Speed.VERY_FAST, Size = Size.SMALL }).Wait(0.1f).Times(5) + ).Wait(0.6f).Times(7) + ) + { + Description = "Fires a quick barrage of random wave-based attacks."; + Difficulty = 6f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs.meta" new file mode 100644 index 0000000..50095ec --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 478d98494e8c642139818c0c35d5be22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs" new file mode 100644 index 0000000..347e18a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs" @@ -0,0 +1,78 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Projectiles; +using AOEs; +using Moves.Basic; + +namespace Moves.Test +{ + /// + /// I really like the lasers. + /// + public class Random_Leading : AISequence + { + public Random_Leading(int count = 20) : base + ( + /* + new PlayerLock(true), + new AISequence(() => + { + List sequences = new List(); + for (int i = 0; i < 50; i++) + { + sequences.Add( + new Shoot1( + new ProjectileReverse() + .Speed(BossCore.Speed.VERY_FAST) + .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) + * (5 * Vector3.forward))) + ); + } + return Merge(sequences.ToArray()); + }), + new PlayerLock(false) + */ + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), + new Laser(-60, 480, 5, 60), + new Laser(60, 480, 5, 45), + new Laser(120, 480, 5, 30), + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f) + ) + { + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs.meta" new file mode 100644 index 0000000..8942571 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93dac8893eccb4c34bd76772e85d6dbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs" new file mode 100644 index 0000000..fc02566 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs" @@ -0,0 +1,59 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Projectiles; +using Moves.Basic; + +namespace Moves.Test +{ + public class SpinReverse : AISequence + { + public SpinReverse(int count = 50) : base + ( + /* + new PlayerLock(true), + new AISequence(() => + { + List sequences = new List(); + for (int i = 0; i < 50; i++) + { + sequences.Add( + new Shoot1( + new ProjectileReverse() + .Speed(BossCore.Speed.VERY_FAST) + .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) + * (5 * Vector3.forward))) + ); + } + return Merge(sequences.ToArray()); + }), + new PlayerLock(false) + */ + ForConcurrent(count, i => + new Shoot1( + new ProjectileCurving(187, false) + { + Start = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward)), + Target = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward) + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.right)), + Speed = (BossCore.Speed.FAST), + MaxTime = (0.75f), + OnDestroyTimeout = self => + new Shoot1( + new ProjectileReverse() + { + Start = (self.transform.position), + Target = (PLAYER_POSITION), + Speed = (BossCore.Speed.SNIPE), + MaxTime = (0.75f) + } + ) + } + ) + ) + ) + { + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs.meta" new file mode 100644 index 0000000..2f16f11 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca9c6f4a743904703bf90a7dc319120d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs" new file mode 100644 index 0000000..f2ad7b9 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs" @@ -0,0 +1,62 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using static BossController; +using static World.Arena; +using BossCore; + +namespace Moves.Test +{ + public class Sniper_Final : AISequence + { + public Sniper_Final() : base + ( + new Teleport(NORTH_FAR).Wait(0.5f), + new ShootAOE(new AOE { + OuterSpeed = Speed.SLOW, + InnerSpeed = Speed.FROZEN, + InnerScale = 0f, + Target = SOUTH_FAR, + MaxTime = 2f, + OnDestroyTimeout = + self => + { + AOE clone = self.data.Clone(); + clone.MaxTime = 10f; + clone.Freeze(); + clone.Create(); + } + }.On(-80, 80) + ) + .Wait(1f), + new AISequence( + new AISequence( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) + ).Times(2), + new AISequence( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), + new ShootAOE(new AOE { Start = WEST_FAR, Target = EAST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), + new ShootAOE(new AOE { Start = EAST_FAR, Target = WEST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) + ).Times(2), + new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f), + new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f) + ) + ) + { } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs.meta" new file mode 100644 index 0000000..498a836 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f9b0f17946b2494fa8c1868167b392d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs" new file mode 100644 index 0000000..745379d --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs" @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Test : AISequence + { + public Test() : base + ( + //new Shoot1(new Projectile { Target = LEADING_PLAYER_POSITION, Speed = Speed.VERY_FAST }).Wait(0.5f) + new Shoot1(new ProjectileHoming(difficulty: 1) { Speed = Speed.VERY_FAST }).Wait(0.1f) + ) + { + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs.meta" new file mode 100644 index 0000000..bfbc01a --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89d4ea6d739ef4a9da774cc00dfaf281 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1.meta" new file mode 100644 index 0000000..7971234 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54096d36918404c72b0331f8ba569a3b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs" new file mode 100644 index 0000000..c095006 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs" @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using AI; + +using Moves.Basic; + +namespace Moves.Tutorial1 +{ + public class Shoot_1_Several : AISequence + { + public Shoot_1_Several() : base + ( + new Teleport().Wait(0.5f), + new AISequence(() => + { + return new Shoot1().Wait(0.1f).Times(Random.Range(5, 10)); + }), + new Pause(1.5f) + ) + { + Description = "Shoots between 5 and 10 default projectiles at the player."; + Difficulty = 2f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs.meta" new file mode 100644 index 0000000..59be327 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1af38270d97744392b830ad85a8581b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs" new file mode 100644 index 0000000..5cc2cc8 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs" @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using AI; + +using Moves.Basic; + +namespace Moves.Tutorial1 +{ + public class Shoot_3_Several : AISequence + { + public Shoot_3_Several() : base + ( + new Teleport().Wait(0.5f), + new AISequence(() => + { + return new Shoot3().Wait(0.1f).Times(Random.Range(7, 12)); + }), + new Pause(1.5f) + ) + { + Description = "Shoots between 7 and 12 three-way projectiles at the player."; + Difficulty = 3f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs.meta" new file mode 100644 index 0000000..28accc1 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fbb3939478c24dfeb4a470c4e3ce476 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs" new file mode 100644 index 0000000..c3e45b8 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs" @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using AI; + +using Moves.Basic; + +namespace Moves.Tutorial1 +{ + public class Shoot_Arc : AISequence + { + public Shoot_Arc(int width=70, bool dense=false) : base + ( + new Teleport().Wait(0.25f), + new ShootArc(dense ? 100 : 50, -width / 2, width / 2), + new Pause(1.5f) + ) + { + Description = "Shoots a" + (dense ? " dense" : "n") + " arc, " + width + " degrees wide, at the player."; + Difficulty = 2f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs.meta" new file mode 100644 index 0000000..0a8f258 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c077f4830e5424f0f89cda345dec2403 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2.meta" new file mode 100644 index 0000000..ed7df2c --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3098ce154c471453aa1348424b3a2648 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs" new file mode 100644 index 0000000..88981b8 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs" @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Projectiles; +using static BossController; + +using Moves.Basic; + +namespace Moves.Tutorial2 +{ + public class Force_Block : AISequence + { + public Force_Block() : base + ( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), + new PlayerLock(false), + new Pause(4f) + ) + { + Description = "Fires 10 sets of tiny projectiles in a 180 degree arc, too dense to dash through."; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs.meta" new file mode 100644 index 0000000..9031871 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c88bb7523eea494da001486db601a39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3.meta" new file mode 100644 index 0000000..514ff29 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c26fd6fb38627405aae615fb2c020069 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs" new file mode 100644 index 0000000..fcb33ba --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs" @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using static BossController; +using Moves.Basic; + +namespace Moves.Tutorial3 +{ + public class Shoot_AOE : AISequence + { + + public Shoot_AOE(int width) : base + ( + new Teleport().Wait(0.25f), + new ShootAOE(new AOE { FixedWidth = 3f }.On(-width / 2, width / 2)), + new Pause(0.5f) + ) + { + Description = "Shoots an AOE " + width + " degrees wide at the player."; + Difficulty = 1.5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs.meta" new file mode 100644 index 0000000..6b27dd1 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e0cd36625ac944cbb96b81ff8673ac9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted.meta" new file mode 100644 index 0000000..53d20ea --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 19f0eee5fa4144939b234a29e52ef22f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs" new file mode 100644 index 0000000..29912a8 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs" @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using static World.Arena; +using Projectiles; + +namespace Moves.User +{ + public class Big_Homing_Strafe : AISequence + { + public Big_Homing_Strafe() : base + ( + new MoveCamera(false, new Vector3(0, 17.5f, -35f)).Wait(1f), + new Teleport(NORTH_FAR).Wait(1f), + new ShootHomingStrafe(strafeAmount: 65).Times(10), + new Teleport(NORTH_FAR).Wait(1f), + new ShootHomingStrafe(strafeAmount: 15).Times(15), + new MoveCamera(true).Wait(2f) + ) + { + Description = "Does a circle along the outside of the arena, shooting homing projectiles at the player."; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs.meta" new file mode 100644 index 0000000..26d7550 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38f04ae34b2a24e4583f6af97baef312 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs" new file mode 100644 index 0000000..1515fb6 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs" @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Dash_Test : AISequence + { + public Dash_Test() : base + ( + new ShootAOE(new AOE { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f) ), + new Pause(0.75f) + ) + { + Description = "Aggressively tests dashing."; + Difficulty = 8f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs.meta" new file mode 100644 index 0000000..01368d6 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a230885efa9f04c25aa2deebc7f6009f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs" new file mode 100644 index 0000000..25141dd --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs" @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + /* + * A really intricate pattern. 6 projectiles that explode into 6 more projectiles, + * repeated twice to forme a lattice. Safe spot is a midpoint between any two of + * the first projectiles, near the far edge of the arena. + * + * ** This might have changed due to the way ShootDeathHex was implemented. + */ + public class Death_Hex : AISequence + { + public Death_Hex() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot_Death_Hex(2f).Wait(1f), + new Shoot_Death_Hex(1f).Wait(2f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(0.75f) + ) + { + Description = "Fires 6 projectiles that explode into 6 more projectiles, repeated twice to form a lattice."; + Difficulty = 9f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs.meta" new file mode 100644 index 0000000..4fd3096 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af6de9d59d1e340dca3eb7a5794efb47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs" new file mode 100644 index 0000000..58d7c07 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs" @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Double_Hex_Curve : AISequence + { + public Double_Hex_Curve() : base + ( + new Teleport(CENTER).Wait(1.5f), + new PlayerLock(true), + new Shoot_Hex_Curve(true), + new AOE_360().Wait(0.5f), + new Shoot_Hex_Curve(true, 30f).Wait(0.5f), + new AOE_360().Wait(1f), + new AOE_360().Wait(1f), + new PlayerLock(false) + ) + { + Description = "Fires two hex curves, the second offset 30 degrees from the first."; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs.meta" new file mode 100644 index 0000000..036459d --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd7f511867c014f278d55f64ce328dae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs" new file mode 100644 index 0000000..0cff6b1 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs" @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Double_Hex_Curve_Hard : AISequence + { + public Double_Hex_Curve_Hard() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot_Hex_Curve(false, 0f), + new Shoot_Hex_Curve(false, 30f), + // This homing might be too hard; especially with this amount of 360s. + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(10), + new AOE_360(), + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), + new AOE_360(), + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), + new AOE_360().Wait(0.5f), + new AOE_360().Wait(0.5f) + ) + { + Description = "A harder variant of the double hex curve."; + Difficulty = 10f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs.meta" new file mode 100644 index 0000000..82d5370 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f8f7a93b4c2a445bbc3108fadbf883f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs" new file mode 100644 index 0000000..0c46461 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs" @@ -0,0 +1,59 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Four_Way_Sweep_With_Homing : AISequence + { + public Four_Way_Sweep_With_Homing() : base + ( + // TODO refactor me to use standard notation + () => { + List sequences = new List(); + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 7; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE})); + for (int j = 7; j < 15; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new AOE_360()); + } + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 5; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); + for (int j = 5; j < 10; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); + for (int j = 10; j < 15; j++) + { + sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); + } + sequences.Add(new AOE_360()); + } + return sequences.ToArray(); + } + ) + { + Description = "Shoots a 4-directional sweep with homing projectiles in between."; + Difficulty = 6f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs.meta" new file mode 100644 index 0000000..0eb1030 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e2ec7802836743c1b34b7951c09ee3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs" new file mode 100644 index 0000000..ba2dd7d --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs" @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Hex_Curve_Intro : AISequence + { + public Hex_Curve_Intro() : base + ( + new Shoot_Hex_Curve(true), + new AOE_360().Wait(2.5f), + new Shoot_Hex_Curve(false), + new AOE_360().Wait(2.5f), + new Shoot_Hex_Curve(true), + new AOE_360(), + new Shoot_Hex_Curve(false).Wait(1f), + new AOE_360().Wait(1f), + new AOE_360().Wait(1.5f), + new Teleport().Wait(0.5f) + ) + { + Description = "Introduces the player to the hex curve attack"; + Difficulty = 4f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs.meta" new file mode 100644 index 0000000..01a8073 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34ab945d52f724b6495892198c8eef6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs" new file mode 100644 index 0000000..ba2ec91 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs" @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Jump_Rope_Fast : AISequence + { + public Jump_Rope_Fast() : base + ( + new MoveCamera(false, new Vector3(0, 17.5f, -35)).Wait(1f), + new Teleport(WEST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(EAST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(WEST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(EAST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new MoveCamera(true) + ) + { + Description = "Fires lines at the player from the left and right."; + Difficulty = 4f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs.meta" new file mode 100644 index 0000000..6821eb8 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b0799783c67046f4a5f1f04a27b1ee2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs" new file mode 100644 index 0000000..2c59c3d --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs" @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Random_200 : AISequence + { + public Random_200() : base + ( + () => + { + List sequences = new List(); + for (int j = 0; j < 200; j++) { + switch (Random.Range(0, 3)) + { + case 0: sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) + )); break; + case 1: sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) + )); break; + case 2: + sequences.Add( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }) + ); + break; + } + if (j % 20 == 0) { + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.MEDIUM })); + } + if (j % 40 == 0) { + sequences.Add(new AISequence(() => + { + new Projectile + { + Size = Size.MEDIUM, + Speed = Speed.MEDIUM, + AngleOffset = Random.Range(0, 360f), + MaxTime = 0.5f, + OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE + }.Create(); + })); + } + sequences.Add(Pause(0.05f)); + } + return sequences.ToArray(); + } + ) + { + Description = "Spawns 200 random projectiles."; + Difficulty = 8f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs.meta" new file mode 100644 index 0000000..39adc08 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb9518e7faa8b495f968824c29ed0f56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs" new file mode 100644 index 0000000..a6b1e90 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs" @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Shoot3_Wave3 : AISequence + { + public Shoot3_Wave3() : base + ( + new Teleport().Wait(0.5f), + new AOE_360(), + new Shoot3().Wait(0.1f).Times(20), + new AOE_360(), + new Shoot3().Wait(0.1f).Times(20), + new AOE_360().Wait(0.5f) + ) + { + Description = "40 basic bullets, with a 360 wave at the start, middle, and end."; + Difficulty = 3f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs.meta" new file mode 100644 index 0000000..bfe53d6 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcb3841cf08f64f0b98ce3c11109f231 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs" new file mode 100644 index 0000000..a58c0ff --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs" @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.User +{ + public class Shoot_4_Waves_Behind : AISequence + { + public Shoot_4_Waves_Behind() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(220f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(200f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(160f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), + new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(140f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(5f) + ) + { + Description = "Your description here"; + Difficulty = 1f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs.meta" new file mode 100644 index 0000000..35281ee --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bee754d65407e4ef78a96c99355f8d7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs" new file mode 100644 index 0000000..cdf15e1 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs" @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Shoot_Hex_Curve : AISequence + { + public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) : base + ( + ForConcurrent(6, i => + new Shoot1( + new ProjectileCurving((float)Speed.MEDIUM * (clockwise ? 1 : -1) * 2f, true) { + MaxTime = 3f, AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) + } + ) + ) + ) + { + Description = "Shoots 6 curving projectiles " + (clockwise ? "clockwise" : "counterclockwise") + " from the boss's location."; + Difficulty = 3f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs.meta" new file mode 100644 index 0000000..e8de7a1 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f927d8c238bc442ebbd7a3e08dadfca3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs" new file mode 100644 index 0000000..1271ced --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs" @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Sweep_Back_And_Forth_Advanced : AISequence + { + public Sweep_Back_And_Forth_Advanced() : base + ( + // TODO refactor me to use standard notation + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => { + List sequences = new List(); + for (int i = -30; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + for (int i = -80; i < 80; i += 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.TINY, Speed = Speed.FAST }) + ).Wait(0.02f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -30; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + return sequences.ToArray(); + }).Wait(0.75f), + new PlayerLock(false) + ) + { + Description = "Sweeps back and forth with additional medium and tiny projectiles."; + Difficulty = 6.5f; + } + } +} \ No newline at end of file diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta" new file mode 100644 index 0000000..24c65ef --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9714e821119b040eea1f7f93e1faca4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs" new file mode 100644 index 0000000..788f355 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs" @@ -0,0 +1,56 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Sweep_Back_And_Forth_Medium : AISequence + { + public Sweep_Back_And_Forth_Medium() : base + ( + // TODO refactor me to use standard notation + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => { + List sequences = new List(); + for (int i = -30; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = -80; i < 80; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); + } + //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); + for (int i = 80; i > -80; i -= 5) + { + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f)); + } + return sequences.ToArray(); + }).Wait(0.75f), + new PlayerLock(false) + ) + { + Description = "Sweeps back and forth with additional medium projectiles."; + Difficulty = 5.5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta" new file mode 100644 index 0000000..157f6b0 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 494510ae5a4af4916af78bef48dd860f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs" new file mode 100644 index 0000000..6f076ba --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs" @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Sweep_Wall : AISequence + { + public Sweep_Wall(bool clockwise=true) : base + (() => + { + List sequences = new List(); + + for (int angle = 0; angle != (clockwise ? 72 : -72); angle += clockwise ? 6 : -6) + { + sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); + } + + for (int angle = clockwise ? 72 : -72; angle != 0; angle -= clockwise ? 6 : -6) + { + sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); + } + return sequences.ToArray(); + } + ) + { + Description = "Shoots a sweeping wall " + (clockwise ? "clockwise" : "counterclockwise") + "."; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs.meta" new file mode 100644 index 0000000..9aaab9f --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3054d21e08b294da395e8137d646df38 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs" new file mode 100644 index 0000000..afce042 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs" @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Sweep_Wall_Back_And_Forth : AISequence + { + public Sweep_Wall_Back_And_Forth() : base + ( + new PlayerLock(true), + new Sweep_Wall(true), + new Sweep_Wall(false), + new PlayerLock(false) + ) + { + Description = "Sweeps a wall clockwise, then counterclockwise."; + Difficulty = 6f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta" new file mode 100644 index 0000000..7477eb8 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f9d04b0d5cd848e9a0269e19988fb8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs" new file mode 100644 index 0000000..ca68ad1 --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs" @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Wave_Circle : AISequence + { + + private class Slow_Wave_Circle : AISequence { + public Slow_Wave_Circle() : base + ( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), + new Strafe(true, 60f, 50).Wait(0.5f) + ) + { + Description = "Fires a medium-slow AOE, and then strafes 60 degrees clockwise."; + Difficulty = 2f; + } + } + + public Wave_Circle() : base + ( + new Teleport(WEST_MED), + new Slow_Wave_Circle().Times(6), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW) + ) + { + Description = "Fires six slow circles around the arena in a circular pattern. Then repeats twice, with lines appearing on the left and right sides."; + Difficulty = 5f; + } + } +} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs.meta" new file mode 100644 index 0000000..e47b7bc --- /dev/null +++ "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs.meta" @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04c02d677a15844a2957185ce382513d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 6ff7437a554e7d54237789cce2ad3bde97201a1e Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Tue, 6 Nov 2018 10:03:43 -0600 Subject: [PATCH 20/33] Hopefully deleted junk files --- .../Scripts/Boss Core/AI/Garbage/Basic.meta | 8 -- .../Boss Core/AI/Garbage/Basic/AOE_120.cs | 22 ------ .../AI/Garbage/Basic/AOE_120.cs.meta | 11 --- .../Boss Core/AI/Garbage/Basic/AOE_131.cs | 30 ------- .../AI/Garbage/Basic/AOE_131.cs.meta | 11 --- .../Boss Core/AI/Garbage/Basic/AOE_360.cs | 22 ------ .../AI/Garbage/Basic/AOE_360.cs.meta | 11 --- .../Boss Core/AI/Garbage/Basic/AOE_90.cs | 22 ------ .../Boss Core/AI/Garbage/Basic/AOE_90.cs.meta | 11 --- .../AI/Garbage/Basic/Shoot_2_Waves.cs | 23 ------ .../AI/Garbage/Basic/Shoot_2_Waves.cs.meta | 11 --- .../AI/Garbage/Basic/Shoot_Death_Hex.cs | 25 ------ .../AI/Garbage/Basic/Shoot_Death_Hex.cs.meta | 11 --- .../AI/Garbage/Basic/Shoot_Split_6.cs | 34 -------- .../AI/Garbage/Basic/Shoot_Split_6.cs.meta | 11 --- .../AI/Garbage/Basic/Shoot_Split_6_Curve.cs | 33 -------- .../Garbage/Basic/Shoot_Split_6_Curve.cs.meta | 11 --- .../AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs | 26 ------- .../Basic/Shoot_Wave_Middle_Gap.cs.meta | 11 --- .../Boss Core/AI/Garbage/Basic/Sweep.cs | 47 ----------- .../Boss Core/AI/Garbage/Basic/Sweep.cs.meta | 11 --- .../AI/Garbage/Basic/Sweep_Back_And_Forth.cs | 40 ---------- .../Basic/Sweep_Back_And_Forth.cs.meta | 11 --- .../Boss Core/AI/Garbage/Basic/Sweep_Both.cs | 38 --------- .../AI/Garbage/Basic/Sweep_Both.cs.meta | 11 --- .../AI/Garbage/Basic_Generators.meta | 8 -- .../AI/Garbage/Basic_Generators/MoveCamera.cs | 26 ------- .../Basic_Generators/MoveCamera.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/Pause.cs | 15 ---- .../AI/Garbage/Basic_Generators/Pause.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/PlayerLock.cs | 31 -------- .../Basic_Generators/PlayerLock.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/Shoot1.cs | 23 ------ .../Garbage/Basic_Generators/Shoot1.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/Shoot3.cs | 28 ------- .../Garbage/Basic_Generators/Shoot3.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/ShootAOE.cs | 24 ------ .../Garbage/Basic_Generators/ShootAOE.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/ShootArc.cs | 39 ---------- .../Garbage/Basic_Generators/ShootArc.cs.meta | 11 --- .../Basic_Generators/ShootHomingStrafe.cs | 18 ----- .../ShootHomingStrafe.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/ShootLine.cs | 36 --------- .../Basic_Generators/ShootLine.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/ShootWall.cs | 22 ------ .../Basic_Generators/ShootWall.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/Strafe.cs | 31 -------- .../Garbage/Basic_Generators/Strafe.cs.meta | 11 --- .../AI/Garbage/Basic_Generators/Teleport.cs | 71 ----------------- .../Garbage/Basic_Generators/Teleport.cs.meta | 11 --- Assets/Scripts/Boss Core/AI/Garbage/Test.meta | 8 -- .../AI/Garbage/Test/Double_Laser_Sweep.cs | 38 --------- .../Garbage/Test/Double_Laser_Sweep.cs.meta | 11 --- .../AI/Garbage/Test/Double_Laser_Sweep_AOE.cs | 40 ---------- .../Test/Double_Laser_Sweep_AOE.cs.meta | 11 --- .../AI/Garbage/Test/Horseshoe_AOE.cs | 38 --------- .../AI/Garbage/Test/Horseshoe_AOE.cs.meta | 11 --- .../Boss Core/AI/Garbage/Test/Laser.cs | 37 --------- .../Boss Core/AI/Garbage/Test/Laser.cs.meta | 11 --- .../AI/Garbage/Test/Laser_Sweep_With_AOE.cs | 38 --------- .../Garbage/Test/Laser_Sweep_With_AOE.cs.meta | 11 --- .../AI/Garbage/Test/Lightning_Arena.cs | 36 --------- .../AI/Garbage/Test/Lightning_Arena.cs.meta | 11 --- .../AI/Garbage/Test/Lightning_With_AOE.cs | 50 ------------ .../Garbage/Test/Lightning_With_AOE.cs.meta | 11 --- .../Boss Core/AI/Garbage/Test/Pincer.cs | 35 --------- .../Boss Core/AI/Garbage/Test/Pincer.cs.meta | 11 --- .../Boss Core/AI/Garbage/Test/Pincer_Sweep.cs | 33 -------- .../AI/Garbage/Test/Pincer_Sweep.cs.meta | 11 --- .../AI/Garbage/Test/Player_Strafe_Waves.cs | 39 ---------- .../Garbage/Test/Player_Strafe_Waves.cs.meta | 11 --- .../Boss Core/AI/Garbage/Test/Quick_Waves.cs | 33 -------- .../AI/Garbage/Test/Quick_Waves.cs.meta | 11 --- .../AI/Garbage/Test/Random_Leading.cs | 78 ------------------- .../AI/Garbage/Test/Random_Leading.cs.meta | 11 --- .../Boss Core/AI/Garbage/Test/ReverseTest.cs | 59 -------------- .../AI/Garbage/Test/ReverseTest.cs.meta | 11 --- .../Boss Core/AI/Garbage/Test/Sniper_Final.cs | 62 --------------- .../AI/Garbage/Test/Sniper_Final.cs.meta | 11 --- .../Scripts/Boss Core/AI/Garbage/Test/Test.cs | 24 ------ .../Boss Core/AI/Garbage/Test/Test.cs.meta | 11 --- .../Boss Core/AI/Garbage/Tutorial1.meta | 8 -- .../AI/Garbage/Tutorial1/Shoot_1_Several.cs | 26 ------- .../Garbage/Tutorial1/Shoot_1_Several.cs.meta | 11 --- .../AI/Garbage/Tutorial1/Shoot_3_Several.cs | 26 ------- .../Garbage/Tutorial1/Shoot_3_Several.cs.meta | 11 --- .../AI/Garbage/Tutorial1/Shoot_Arc.cs | 23 ------ .../AI/Garbage/Tutorial1/Shoot_Arc.cs.meta | 11 --- .../Boss Core/AI/Garbage/Tutorial2.meta | 8 -- .../AI/Garbage/Tutorial2/Force_Block.cs | 28 ------- .../AI/Garbage/Tutorial2/Force_Block.cs.meta | 11 --- .../Boss Core/AI/Garbage/Tutorial3.meta | 8 -- .../AI/Garbage/Tutorial3/Shoot_AOE.cs | 26 ------- .../AI/Garbage/Tutorial3/Shoot_AOE.cs.meta | 11 --- .../Boss Core/AI/Garbage/Unsorted.meta | 8 -- .../AI/Garbage/Unsorted/Big_Homing_Strafe.cs | 30 ------- .../Unsorted/Big_Homing_Strafe.cs.meta | 11 --- .../AI/Garbage/Unsorted/Dash_Test.cs | 25 ------ .../AI/Garbage/Unsorted/Dash_Test.cs.meta | 11 --- .../AI/Garbage/Unsorted/Death_Hex.cs | 37 --------- .../AI/Garbage/Unsorted/Death_Hex.cs.meta | 11 --- .../AI/Garbage/Unsorted/Double_Hex_Curve.cs | 32 -------- .../Garbage/Unsorted/Double_Hex_Curve.cs.meta | 11 --- .../Garbage/Unsorted/Double_Hex_Curve_Hard.cs | 36 --------- .../Unsorted/Double_Hex_Curve_Hard.cs.meta | 11 --- .../Unsorted/Four_Way_Sweep_With_Homing.cs | 59 -------------- .../Four_Way_Sweep_With_Homing.cs.meta | 11 --- .../AI/Garbage/Unsorted/Hex_Curve_Intro.cs | 33 -------- .../Garbage/Unsorted/Hex_Curve_Intro.cs.meta | 11 --- .../AI/Garbage/Unsorted/Jump_Rope_Fast.cs | 35 --------- .../Garbage/Unsorted/Jump_Rope_Fast.cs.meta | 11 --- .../AI/Garbage/Unsorted/Random_200.cs | 65 ---------------- .../AI/Garbage/Unsorted/Random_200.cs.meta | 11 --- .../AI/Garbage/Unsorted/Shoot3_Wave3.cs | 30 ------- .../AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta | 11 --- .../Garbage/Unsorted/Shoot_4_Waves_Behind.cs | 29 ------- .../Unsorted/Shoot_4_Waves_Behind.cs.meta | 11 --- .../AI/Garbage/Unsorted/Shoot_Hex_Curve.cs | 30 ------- .../Garbage/Unsorted/Shoot_Hex_Curve.cs.meta | 11 --- .../Unsorted/Sweep_Back_And_Forth_Advanced.cs | 58 -------------- .../Sweep_Back_And_Forth_Advanced.cs.meta | 11 --- .../Unsorted/Sweep_Back_And_Forth_Medium.cs | 56 ------------- .../Sweep_Back_And_Forth_Medium.cs.meta | 11 --- .../AI/Garbage/Unsorted/Sweep_Wall.cs | 38 --------- .../AI/Garbage/Unsorted/Sweep_Wall.cs.meta | 11 --- .../Unsorted/Sweep_Wall_Back_And_Forth.cs | 28 ------- .../Sweep_Wall_Back_And_Forth.cs.meta | 11 --- .../AI/Garbage/Unsorted/Wave_Circle.cs | 47 ----------- .../AI/Garbage/Unsorted/Wave_Circle.cs.meta | 11 --- .../AI/Moves/Unsorted/Random_200.cs.meta | 2 +- .../Unsorted/Shoot_4_Waves_Behind.cs.meta | 2 +- .../AI/Moves/Unsorted/Sweep_Wall.cs.meta | 2 +- .../Sweep_Wall_Back_And_Forth.cs.meta | 2 +- .../Boss Core/AI/\360\237\230\202/Basic.meta" | 8 -- .../AI/\360\237\230\202/Basic/AOE_120.cs" | 22 ------ .../\360\237\230\202/Basic/AOE_120.cs.meta" | 11 --- .../AI/\360\237\230\202/Basic/AOE_131.cs" | 30 ------- .../\360\237\230\202/Basic/AOE_131.cs.meta" | 11 --- .../AI/\360\237\230\202/Basic/AOE_360.cs" | 22 ------ .../\360\237\230\202/Basic/AOE_360.cs.meta" | 11 --- .../AI/\360\237\230\202/Basic/AOE_90.cs" | 22 ------ .../AI/\360\237\230\202/Basic/AOE_90.cs.meta" | 11 --- .../\360\237\230\202/Basic/Shoot_2_Waves.cs" | 23 ------ .../Basic/Shoot_2_Waves.cs.meta" | 11 --- .../Basic/Shoot_Death_Hex.cs" | 25 ------ .../Basic/Shoot_Death_Hex.cs.meta" | 11 --- .../\360\237\230\202/Basic/Shoot_Split_6.cs" | 34 -------- .../Basic/Shoot_Split_6.cs.meta" | 11 --- .../Basic/Shoot_Split_6_Curve.cs" | 33 -------- .../Basic/Shoot_Split_6_Curve.cs.meta" | 11 --- .../Basic/Shoot_Wave_Middle_Gap.cs" | 26 ------- .../Basic/Shoot_Wave_Middle_Gap.cs.meta" | 11 --- .../AI/\360\237\230\202/Basic/Sweep.cs" | 47 ----------- .../AI/\360\237\230\202/Basic/Sweep.cs.meta" | 11 --- .../Basic/Sweep_Back_And_Forth.cs" | 40 ---------- .../Basic/Sweep_Back_And_Forth.cs.meta" | 11 --- .../AI/\360\237\230\202/Basic/Sweep_Both.cs" | 38 --------- .../Basic/Sweep_Both.cs.meta" | 11 --- .../\360\237\230\202/Basic_Generators.meta" | 8 -- .../Basic_Generators/MoveCamera.cs" | 26 ------- .../Basic_Generators/MoveCamera.cs.meta" | 11 --- .../Basic_Generators/Pause.cs" | 15 ---- .../Basic_Generators/Pause.cs.meta" | 11 --- .../Basic_Generators/PlayerLock.cs" | 31 -------- .../Basic_Generators/PlayerLock.cs.meta" | 11 --- .../Basic_Generators/Shoot1.cs" | 23 ------ .../Basic_Generators/Shoot1.cs.meta" | 11 --- .../Basic_Generators/Shoot3.cs" | 28 ------- .../Basic_Generators/Shoot3.cs.meta" | 11 --- .../Basic_Generators/ShootAOE.cs" | 24 ------ .../Basic_Generators/ShootAOE.cs.meta" | 11 --- .../Basic_Generators/ShootArc.cs" | 39 ---------- .../Basic_Generators/ShootArc.cs.meta" | 11 --- .../Basic_Generators/ShootHomingStrafe.cs" | 18 ----- .../ShootHomingStrafe.cs.meta" | 11 --- .../Basic_Generators/ShootLine.cs" | 36 --------- .../Basic_Generators/ShootLine.cs.meta" | 11 --- .../Basic_Generators/ShootWall.cs" | 22 ------ .../Basic_Generators/ShootWall.cs.meta" | 11 --- .../Basic_Generators/Strafe.cs" | 31 -------- .../Basic_Generators/Strafe.cs.meta" | 11 --- .../Basic_Generators/Teleport.cs" | 71 ----------------- .../Basic_Generators/Teleport.cs.meta" | 11 --- .../Boss Core/AI/\360\237\230\202/Test.meta" | 8 -- .../Test/Double_Laser_Sweep.cs" | 38 --------- .../Test/Double_Laser_Sweep.cs.meta" | 11 --- .../Test/Double_Laser_Sweep_AOE.cs" | 40 ---------- .../Test/Double_Laser_Sweep_AOE.cs.meta" | 11 --- .../\360\237\230\202/Test/Horseshoe_AOE.cs" | 38 --------- .../Test/Horseshoe_AOE.cs.meta" | 11 --- .../AI/\360\237\230\202/Test/Laser.cs" | 37 --------- .../AI/\360\237\230\202/Test/Laser.cs.meta" | 11 --- .../Test/Laser_Sweep_With_AOE.cs" | 38 --------- .../Test/Laser_Sweep_With_AOE.cs.meta" | 11 --- .../\360\237\230\202/Test/Lightning_Arena.cs" | 36 --------- .../Test/Lightning_Arena.cs.meta" | 11 --- .../Test/Lightning_With_AOE.cs" | 50 ------------ .../Test/Lightning_With_AOE.cs.meta" | 11 --- .../AI/\360\237\230\202/Test/Pincer.cs" | 35 --------- .../AI/\360\237\230\202/Test/Pincer.cs.meta" | 11 --- .../AI/\360\237\230\202/Test/Pincer_Sweep.cs" | 33 -------- .../Test/Pincer_Sweep.cs.meta" | 11 --- .../Test/Player_Strafe_Waves.cs" | 39 ---------- .../Test/Player_Strafe_Waves.cs.meta" | 11 --- .../AI/\360\237\230\202/Test/Quick_Waves.cs" | 33 -------- .../Test/Quick_Waves.cs.meta" | 11 --- .../\360\237\230\202/Test/Random_Leading.cs" | 78 ------------------- .../Test/Random_Leading.cs.meta" | 11 --- .../AI/\360\237\230\202/Test/ReverseTest.cs" | 59 -------------- .../Test/ReverseTest.cs.meta" | 11 --- .../AI/\360\237\230\202/Test/Sniper_Final.cs" | 62 --------------- .../Test/Sniper_Final.cs.meta" | 11 --- .../AI/\360\237\230\202/Test/Test.cs" | 24 ------ .../AI/\360\237\230\202/Test/Test.cs.meta" | 11 --- .../AI/\360\237\230\202/Tutorial1.meta" | 8 -- .../Tutorial1/Shoot_1_Several.cs" | 26 ------- .../Tutorial1/Shoot_1_Several.cs.meta" | 11 --- .../Tutorial1/Shoot_3_Several.cs" | 26 ------- .../Tutorial1/Shoot_3_Several.cs.meta" | 11 --- .../\360\237\230\202/Tutorial1/Shoot_Arc.cs" | 23 ------ .../Tutorial1/Shoot_Arc.cs.meta" | 11 --- .../AI/\360\237\230\202/Tutorial2.meta" | 8 -- .../Tutorial2/Force_Block.cs" | 28 ------- .../Tutorial2/Force_Block.cs.meta" | 11 --- .../AI/\360\237\230\202/Tutorial3.meta" | 8 -- .../\360\237\230\202/Tutorial3/Shoot_AOE.cs" | 26 ------- .../Tutorial3/Shoot_AOE.cs.meta" | 11 --- .../AI/\360\237\230\202/Unsorted.meta" | 8 -- .../Unsorted/Big_Homing_Strafe.cs" | 30 ------- .../Unsorted/Big_Homing_Strafe.cs.meta" | 11 --- .../\360\237\230\202/Unsorted/Dash_Test.cs" | 25 ------ .../Unsorted/Dash_Test.cs.meta" | 11 --- .../\360\237\230\202/Unsorted/Death_Hex.cs" | 37 --------- .../Unsorted/Death_Hex.cs.meta" | 11 --- .../Unsorted/Double_Hex_Curve.cs" | 32 -------- .../Unsorted/Double_Hex_Curve.cs.meta" | 11 --- .../Unsorted/Double_Hex_Curve_Hard.cs" | 36 --------- .../Unsorted/Double_Hex_Curve_Hard.cs.meta" | 11 --- .../Unsorted/Four_Way_Sweep_With_Homing.cs" | 59 -------------- .../Four_Way_Sweep_With_Homing.cs.meta" | 11 --- .../Unsorted/Hex_Curve_Intro.cs" | 33 -------- .../Unsorted/Hex_Curve_Intro.cs.meta" | 11 --- .../Unsorted/Jump_Rope_Fast.cs" | 35 --------- .../Unsorted/Jump_Rope_Fast.cs.meta" | 11 --- .../\360\237\230\202/Unsorted/Random_200.cs" | 65 ---------------- .../Unsorted/Random_200.cs.meta" | 11 --- .../Unsorted/Shoot3_Wave3.cs" | 30 ------- .../Unsorted/Shoot3_Wave3.cs.meta" | 11 --- .../Unsorted/Shoot_4_Waves_Behind.cs" | 29 ------- .../Unsorted/Shoot_4_Waves_Behind.cs.meta" | 11 --- .../Unsorted/Shoot_Hex_Curve.cs" | 30 ------- .../Unsorted/Shoot_Hex_Curve.cs.meta" | 11 --- .../Sweep_Back_And_Forth_Advanced.cs" | 58 -------------- .../Sweep_Back_And_Forth_Advanced.cs.meta" | 11 --- .../Unsorted/Sweep_Back_And_Forth_Medium.cs" | 56 ------------- .../Sweep_Back_And_Forth_Medium.cs.meta" | 11 --- .../\360\237\230\202/Unsorted/Sweep_Wall.cs" | 38 --------- .../Unsorted/Sweep_Wall.cs.meta" | 11 --- .../Unsorted/Sweep_Wall_Back_And_Forth.cs" | 28 ------- .../Sweep_Wall_Back_And_Forth.cs.meta" | 11 --- .../\360\237\230\202/Unsorted/Wave_Circle.cs" | 47 ----------- .../Unsorted/Wave_Circle.cs.meta" | 11 --- 262 files changed, 4 insertions(+), 5784 deletions(-) delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial2.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial3.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs delete mode 100644 Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs.meta delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs" delete mode 100644 "Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs.meta" diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic.meta deleted file mode 100644 index 600d76b..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2c3f185ac84b84816acbf911798e3311 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs deleted file mode 100644 index 51f1701..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using AOEs; -using static BossController; - -namespace Moves.Basic -{ - public class AOE_120 : AISequence - { - public AOE_120() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) - ) - { - Description = "Shoots a 120 degree wide AOE at the player."; - Difficulty = 1f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs.meta deleted file mode 100644 index d2ef59f..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_120.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 087000a7707c6407c8932c06b6e34fbf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs deleted file mode 100644 index 3897529..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class AOE_131 : AISequence - { - public AOE_131() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.19f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20 }.On(-60, -40).On(-10, 10).On(40, 60)).Wait(0.76f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.2f), - new PlayerLock(false).Wait(1f) - ) - { - Description = "Shoots an AOE attack in a 1-3-1 pattern."; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs.meta deleted file mode 100644 index 854df6b..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_131.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 778573b2a466740f6a82e1aea963796a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs deleted file mode 100644 index 1d7d225..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using AOEs; -using static BossController; - -namespace Moves.Basic -{ - public class AOE_360 : AISequence - { - public AOE_360() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(0, 360)) - ) - { - Description = "Shoots a 360 degree wide AOE."; - Difficulty = 1f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs.meta deleted file mode 100644 index 279c74b..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_360.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3c656e30deb594c7d8a502a526a5f05d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs deleted file mode 100644 index eb45036..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using AOEs; -using static BossController; - -namespace Moves.Basic -{ - public class AOE_90 : AISequence - { - public AOE_90() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(-45, 45)) - ) - { - Description = "Shoots a 90 degree wide AOE at the player."; - Difficulty = 1f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs.meta deleted file mode 100644 index 3408211..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/AOE_90.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fdf9421d8baca4596a10ade6bbc77c5f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs deleted file mode 100644 index 3d65d8a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs +++ /dev/null @@ -1,23 +0,0 @@ -using AI; -using Projectiles; -using BossCore; - -using static BossController; - -namespace Moves.Basic -{ - public class Shoot_2_Waves : AISequence - { - public Shoot_2_Waves() : base - ( - new Teleport().Wait(0.5f), - new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = -2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = 2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new Pause(1f) - ) - { - Description = "Shoots 2 90 waves as one block, encouraging dodging through them."; - Difficulty = 4f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs.meta deleted file mode 100644 index 26b0908..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_2_Waves.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a3c8b90e37f5543cb85e7edaefac1ef7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs deleted file mode 100644 index 12cdaf9..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class Shoot_Death_Hex : AISequence - { - public Shoot_Death_Hex(float maxTime = 1f) : base - ( - new Shoot1(new ProjectileDeathHex() { MaxTime = maxTime }).Wait(1f) - ) - { - Description = "Shoots a high-damage projectile that splits into 6 curving projectiles with trails."; - Difficulty = 4f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs.meta deleted file mode 100644 index 08780c6..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Death_Hex.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8706927eef48a43adb9a376a69f7ff67 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs deleted file mode 100644 index 7b4e163..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.User -{ - public class Shoot_Split_6 : AISequence - { - public Shoot_Split_6() : base - ( - new Teleport().Wait(0.5f), - new Shoot1( - new ProjectileCurving(0f, false) - { - MaxTime = 0.25f, - Speed = Speed.VERY_FAST, - OnDestroyTimeout = CallbackDictionary.SPAWN_6 - } - ), - new Pause(0.5f) - ) - { - Description = "Shoots a projectile that splits into 6 more projectiles."; - Difficulty = 4f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs.meta deleted file mode 100644 index d5c3345..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 98295e0949b104b08ae2990a6e42666d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs deleted file mode 100644 index 0a132bf..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.User -{ - public class Shoot_Split_6_Curve : AISequence - { - public Shoot_Split_6_Curve() : base - ( - new Teleport().Wait(0.5f), - new Shoot1( - new ProjectileDeathHex - { - MaxTime = 0.25f, - Speed = Speed.VERY_FAST - } - ), - new Pause(0.5f) - ) - { - Description = "Shoots a projectile that splits into 6 curving projectiles."; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs.meta deleted file mode 100644 index c743256..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Split_6_Curve.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4f0faa05d2a7642599372126585726a2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs deleted file mode 100644 index 7e15f4c..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs +++ /dev/null @@ -1,26 +0,0 @@ -using AI; -using Projectiles; -using BossCore; - -using static BossController; -using static AI.AISequence; - -namespace Moves.Basic -{ - public class Shoot_Wave_Middle_Gap : AISequence - { - public Shoot_Wave_Middle_Gap() : base - ( - new Teleport().Wait(0.5f), - Merge( - new ShootArc(150, 22.5f, 22.5f + 60f), - new ShootArc(150, -22.5f, -22.5f - 60f) - ), - new Pause(1f) - ) - { - Description = "Shoots two 60 degree waves with a 45 degree gap in the middle."; - Difficulty = 3f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs.meta deleted file mode 100644 index 6611c1f..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Shoot_Wave_Middle_Gap.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 917bd5b3f26df4e548e3e92196acae99 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs deleted file mode 100644 index d7a1893..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using Projectiles; -using static BossController; -using static AI.AISequence; - -namespace Moves.Basic -{ - public class Sweep : AISequence - { - public Sweep(bool reverse = false) : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - For(reverse ? 90 : -30, - reverse ? -30 : 90, - reverse ? -5 : 5, - i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f) - ), - /* - new AISequence(() => - { - int start = reverse ? 90 : -30; - int end = reverse ? -30 : 90; - int step = reverse ? -5 : 5; - - List sequences = new List(); - for (int i = start; i != end; i += step) - { - sequences.Add(new Shoot1(new Projectile().AngleOffset(i)).Wait(0.05f)); - } - return sequences.ToArray(); - }), - */ - new PlayerLock(false), - Pause(0.25f) - ) - { - Description = "Shoots a sweep from " + (reverse ? -30 : 90) + - " degrees to " + (reverse ? 90 : -30) + " degrees offset from the player's current position."; - Difficulty = 2f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs.meta deleted file mode 100644 index f289ba6..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c1f47c2007ef42649045864c1303136 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs deleted file mode 100644 index 5208f95..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using Projectiles; -using static BossController; -using static AI.AISequence; - -namespace Moves.Basic -{ - public class Sweep_Back_And_Forth : AISequence - { - public Sweep_Back_And_Forth() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = -30; i < 90; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); - } - sequences.Add(Pause(0.25f)); - for (int i = 30; i > -90; i -= 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); - } - return sequences.ToArray(); - }), - new PlayerLock(false), - new Pause(0.5f) - ) - { - Description = "Shoots a sweep from -30 degrees to +90 degrees offset from the player's current position, then another from -90 to +30 degrees."; - Difficulty = 3f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs.meta deleted file mode 100644 index 137502c..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Back_And_Forth.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e58399f0c41124741852e6d923a8a1b2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs deleted file mode 100644 index 3cc4ee2..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using Projectiles; -using static BossController; -using static AI.AISequence; - -namespace Moves.Basic -{ - public class Sweep_Both : AISequence - { - public Sweep_Both() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => - { - - List sequences = new List(); - for (int i = 0; i < 120; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i - 60 })); - sequences.Add(new Shoot1(new Projectile { AngleOffset = 60 - i })); - sequences.Add(new Pause(0.05f)); - } - return sequences.ToArray(); - }), - new PlayerLock(false), - new Pause(0.5f) - ) - { - Description = "Sweeps both left and right at the same time."; - Difficulty = 4f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs.meta deleted file mode 100644 index 213bcae..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic/Sweep_Both.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bcce318f6583f4badbb7fec798d6d6c9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators.meta deleted file mode 100644 index 13e1b5d..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e89d07b6cef054a26ab6e29a9e3f2591 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs deleted file mode 100644 index d720fa2..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs +++ /dev/null @@ -1,26 +0,0 @@ -using AI; -using Projectiles; -using UnityEngine; -using static BossController; - -namespace Moves.Basic -{ - public class MoveCamera : AISequence - { - public MoveCamera(bool isFollow = false, Vector3? targetPosition = null) : base - ( - () => - { - CameraController.GetInstance().IsFollowing = isFollow; - - if (targetPosition.HasValue) - { - CameraController.GetInstance().Goto(targetPosition.Value, 1); - } - } - ) - { - Description = "Moved the camera to " + targetPosition + ". Camera is now " + (isFollow ? "" : "not") + " following."; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs.meta deleted file mode 100644 index 144fb49..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/MoveCamera.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 612275463c8fd495999e3dea3288593a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs deleted file mode 100644 index 5885717..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs +++ /dev/null @@ -1,15 +0,0 @@ -using AI; - -namespace Moves.Basic -{ - public class Pause : AISequence - { - public Pause(float duration) : base - ( - new AIEvent[] { new AIEvent(duration, () => { }) } - ) - { - Description = "Waiting for " + duration + " seconds."; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs.meta deleted file mode 100644 index cd88c33..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Pause.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7f25f7bf305aa4ea98d1d53f16f6386a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs deleted file mode 100644 index 0b7e236..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs +++ /dev/null @@ -1,31 +0,0 @@ -using AI; -using UnityEngine; - -namespace Moves.Basic -{ - public class PlayerLock : AISequence - { - // Used for the "PlayerLock" move. Keeps track of the current player position - // for events and sequences that need a slightly out of date version. - private static Vector3 playerLockPosition; - private static bool isPlayerLocked; - - public static BossCore.ProxyVector3 _delayed_player_position = new BossCore.ProxyVector3(() => { - return isPlayerLocked ? playerLockPosition : PLAYER_POSITION.GetValue(); - }); - - public PlayerLock(bool enableLock = true) : base - ( - () => - { - if (enableLock) { - playerLockPosition = GameManager.Player.transform.position; - } - isPlayerLocked = enableLock; - } - ) - { - Description = (enableLock ? "Locked onto" : "Unlocked from") + " the player."; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs.meta deleted file mode 100644 index 28ceed1..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/PlayerLock.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 65a3d43b5e0724d208bf1bbb4446877f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs deleted file mode 100644 index f639240..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs +++ /dev/null @@ -1,23 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class Shoot1 : AISequence - { - public Shoot1(Projectile skeleton = null) : base - ( - () => - { - GameManager.Boss.Glare(); - - Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); - newStruc.Create(); - } - ) - { - Description = "Shot one " + (skeleton == null ? "default projectile at the player." : skeleton + "."); - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs.meta deleted file mode 100644 index bdef2e8..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot1.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7ee019564e53d4d5295c3d0c2a472ec8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs deleted file mode 100644 index 7c8cf3a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs +++ /dev/null @@ -1,28 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class Shoot3 : AISequence - { - - public Shoot3(Projectile skeleton = null) : base - ( - () => - { - GameManager.Boss.Glare(); - - for (int i = 0; i < 3; i++) - { - Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); - newStruc.AngleOffset = -30 + (30 * i) + newStruc.AngleOffset; - newStruc.Create(); - } - } - ) - { - Description = "Shot three " + (skeleton == null ? "default projectiles at the player." : skeleton + "."); - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs.meta deleted file mode 100644 index d9886bb..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Shoot3.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 501cc1ce79a5c41969bf82aa89dd1a42 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs deleted file mode 100644 index 1cadef0..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs +++ /dev/null @@ -1,24 +0,0 @@ -using AI; -using AOEs; -using BossCore; - -using static BossController; - -namespace Moves.Basic -{ - public class ShootAOE : AISequence - { - public ShootAOE(AOE skeleton = null) : base - ( - () => - { - GameManager.Boss.Glare(); - skeleton = skeleton != null ? skeleton.Clone() : new AOE(); - skeleton.Create(); - } - ) - { - Description = "Shot " + skeleton; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs.meta deleted file mode 100644 index 4eab926..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootAOE.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d154ba470c53d40eebc3ea3ae78e6648 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs deleted file mode 100644 index a1d7811..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs +++ /dev/null @@ -1,39 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class ShootArc : AISequence - { - - public ShootArc(int density = 50, float from = 0, float to = 360, Projectile skeleton = null) : base - ( - () => - { - GameManager.Boss.Glare(); - - // Ensure that "from" is always less than "to". - if (to < from) - { - float temp = from; - from = to; - to = temp; - } - - float step = 360f / density; - Projectile clone = skeleton ?? new Projectile { Size = Size.MEDIUM }; - for (float i = from; i <= to; i += step) - { - Projectile newStruc = clone.Clone(); - newStruc.AngleOffset = newStruc.AngleOffset + i; - newStruc.Create(); - } - } - ) - { - Description = "Shot an arc (density=" + density + ", from=" + from + ", to=" + to + ") of " + - (skeleton == null ? "default projectiles at the player." : skeleton + "."); - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs.meta deleted file mode 100644 index 7a8e270..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootArc.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 29f9bfaded55544f584af88b12219b50 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs deleted file mode 100644 index d3d9201..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs +++ /dev/null @@ -1,18 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class ShootHomingStrafe : AISequence - { - public ShootHomingStrafe(bool clockwise = true, int strafeAmount = 5, int speed = 25) : base - ( - new Strafe(clockwise, strafeAmount, speed), - new Shoot1(new ProjectileHoming { Size = Size.MEDIUM }) - ) - { - Description = "Strafed " + strafeAmount + " degrees " + (clockwise ? "clockwise" : "counterclockwise") + " and shot a homing projectile."; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs.meta deleted file mode 100644 index 658ac22..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootHomingStrafe.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1e471443a6fd741e7b1bcbe817c10ee4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs deleted file mode 100644 index 32472ac..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs +++ /dev/null @@ -1,36 +0,0 @@ -using AI; -using Projectiles; -using static BossController; -using UnityEngine; -using BossCore; - -namespace Moves.Basic -{ - public class ShootLine : AISequence - { - public ShootLine(int amount = 50, float width = 75f, Vector3? target = null, Speed speed = Speed.MEDIUM, Size size = Size.MEDIUM) : base - ( - () => - { - - Vector3 targetPos = target.HasValue ? target.Value - GameManager.Boss.transform.position : GameManager.Player.transform.position - GameManager.Boss.transform.position; - Vector3 leftDirection = (Quaternion.AngleAxis(90, Vector3.up) * targetPos).normalized; - - for (int i = 0; i < amount; i++) - { - Vector3 spawn = GameManager.Boss.transform.position + ((i - (amount / 2f)) * (width / amount) * leftDirection); - new Projectile() - { - Start = spawn, - Target = spawn + targetPos, - Size = size - }.Create(); - } - } - ) - { - Description = "Shot a line (amount=" + amount + ", width=" + width + ") at " + (target == null ? " the player" : target.ToString()) + - " with speed " + speed + " and size " + size + "."; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs.meta deleted file mode 100644 index fdc3a4b..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootLine.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 820741158b8a9444da7d65ad525dff64 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs deleted file mode 100644 index 5f7020a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs +++ /dev/null @@ -1,22 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -using BossCore; - -namespace Moves.Basic -{ - public class ShootWall : AISequence - { - public ShootWall(float angleOffset) : base - ( - Merge( - new ShootArc(100, angleOffset + -60, angleOffset + -60 + 28, new Projectile { Speed = Speed.SLOW }), - new ShootArc(100, angleOffset + 20, angleOffset + 60, new Projectile { Speed = Speed.SLOW }) - ) - ) - { - Description = "Shot a wall with offset " + angleOffset + " at the player."; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs.meta deleted file mode 100644 index d82b4a3..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/ShootWall.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8021f7650ced742a9a74f9d2f8a2a840 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs deleted file mode 100644 index 80c5847..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs +++ /dev/null @@ -1,31 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -using UnityEngine; - -namespace Moves.Basic -{ - public class Strafe : AISequence - { - // A reference to the BossController's entity. Assigned when teleport is called. - private static CombatCore.Entity self = null; - - public Strafe(bool clockwise = true, float degrees = 10f, int speed = 25, Vector3 center = default(Vector3)) : base - ( - () => - { - if (self == null) { - self = GameManager.Boss.GetComponent(); - } - self.movespeed.LockTo(speed); - - Vector3 oldPosVector = GameManager.Boss.transform.position - center; - Quaternion rot = Quaternion.AngleAxis(degrees, clockwise ? Vector3.up : Vector3.down); - - GameManager.Boss.StartCoroutine(GameManager.Boss.Dash((rot * oldPosVector) + center)); - } - ) - {} - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs.meta deleted file mode 100644 index 95b843a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Strafe.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5ebc39281429546e8ba2816c16c53f30 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs deleted file mode 100644 index 2943997..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs +++ /dev/null @@ -1,71 +0,0 @@ -using AI; -using UnityEngine; - -namespace Moves.Basic -{ - public class Teleport : AISequence - { - // A reference to the BossController's entity. Assigned when teleport is called. - private static CombatCore.Entity self = null; - - public Teleport(Vector3? target = null, int speed = 25) : base - ( - () => - { - if (self == null) { - self = GameManager.Boss.GetComponent(); - } - self.movespeed.LockTo(speed); - - if (target.HasValue) - { - GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(target.Value)); - GameManager.Boss.Glare(); - return; - } - - float minDistance = 35f; - float minAngle = 50f; - float maxAngle = 100f; - - Vector3 oldPosVector = GameManager.Boss.transform.position - GameManager.Player.transform.position; - - int count = 0; - Vector3 rawPosition; - do - { - count++; - float degreeRotation = Random.Range(minAngle, maxAngle) * (Random.Range(0, 2) == 0 ? -1 : 1); - float distance = Random.Range(minDistance * GameManager.Arena.transform.localScale.x, 50f * GameManager.Arena.transform.localScale.x); - - if (count == 15) - { - degreeRotation = Random.Range(0, 359f); - distance = Random.Range(15, 49f); - } - - Quaternion rot = Quaternion.AngleAxis(degreeRotation, Vector3.up); - - if (count == 15) - { - rawPosition = rot * (distance * Vector3.forward); - } - else - { - rawPosition = (rot * (oldPosVector * (distance / oldPosVector.magnitude))) + GameManager.Player.transform.position; - } - rawPosition.y = 0f; - - } while (rawPosition.magnitude > 50f); - - rawPosition.y = 1.31f; - GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(rawPosition)); - - GameManager.Boss.Glare(); - } - ) - { - Description = "Teleports to " + (target == null ? "some random position" : target.Value.ToString()) + "."; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs.meta deleted file mode 100644 index 340fad6..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Basic_Generators/Teleport.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f3762d4a7b52c4f33a307eefebf9578e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test.meta deleted file mode 100644 index 25e3cf5..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 943ba5d252e4f4d01aa9e0993c613fcb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs deleted file mode 100644 index 56fbafe..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Double_Laser_Sweep : AISequence - { - public Double_Laser_Sweep() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f) - ), - new Pause(1f), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f) - ), - new PlayerLock(false), - new Pause(1f) - ) - { - Description = "Sweeps two lasers back and forth."; - Difficulty = 6.5f; - } - - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs.meta deleted file mode 100644 index 7edaf5a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8d8c17d5efd674e7e956d0a83470b982 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs deleted file mode 100644 index 5b2703a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Double_Laser_Sweep_AOE : AISequence - { - public Double_Laser_Sweep_AOE() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f), - new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) - ), - new Pause(1f), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f), - new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) - ), - new PlayerLock(false), - new Pause(1f) - ) - { - Description = "Sweeps two lasers back and forth, with two AOE attacks in between."; - Difficulty = 7f; - } - - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs.meta deleted file mode 100644 index 965c858..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Double_Laser_Sweep_AOE.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 920fe1f6e1a854941b15222900697b61 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs deleted file mode 100644 index 2c06a80..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -// TODO unfinished -namespace Moves.Test -{ - public class Horseshoe_AOE : AISequence - { - public Horseshoe_AOE() : base - ( - //Pause(1f), - For(10, i => - Merge( - new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) - ) - ), - For(10, i => - Merge( - new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) - ) - ), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) - ) - { - Description = "Your description here"; - Difficulty = 1f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs.meta deleted file mode 100644 index a1b8540..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Horseshoe_AOE.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d720c634880034176b34bbc0d87457b9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs deleted file mode 100644 index 87cb579..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using static BossController; - -using Moves.Basic; - -namespace Moves.Test -{ - public class Laser : AISequence - { - public Laser(float startOffset = -90, float finalOffset = 90, float width = 5, float angularSpeed = 90) : base - ( - new ShootAOE( - new AOE - { - InnerSpeed = Speed.FROZEN, - OuterSpeed = Speed.FROZEN, - InnerScale = 0f, - Scale = 100f, - AngleOffset = startOffset, - RotationSpeed = angularSpeed, - MaxTime = (finalOffset - startOffset) / angularSpeed, - OnDestroyOutOfBounds = AOECallbackDictionary.DONT_DESTROY_OOB - }.On(0, width) - ) - ) - { - Description = "A laser that sweeps from " + startOffset + " to " + finalOffset + " with a beam width of " + width + " and speed " + angularSpeed; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs.meta deleted file mode 100644 index 3bcb992..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 13fd1a558d3174cfb9628f3817eb1c62 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs deleted file mode 100644 index 56b8ffa..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Laser_Sweep_With_AOE : AISequence - { - public Laser_Sweep_With_AOE() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) - ), - new Pause(1f), - Merge( - new Laser(90, -90, 5, -90).Wait(1f), - new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) - ), - new PlayerLock(false), - new Pause(1f) - ) - { - Description = "Sweeps a laser back and forth, with two AOE attacks in between."; - Difficulty = 5.5f; - } - - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs.meta deleted file mode 100644 index 5d22899..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Laser_Sweep_With_AOE.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f6723376e1352418590cd17979d08b86 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs deleted file mode 100644 index f028f14..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using Projectiles; -using static BossController; -using BossCore; -using Moves.Basic; - -namespace Moves.Test -{ - public class Lightning_Arena : AISequence - { - public Lightning_Arena() : base - ( - new Teleport(World.Arena.CENTER).Wait(0.25f), - new AISequence(() => - { - List sequences = new List(); - - for (int i = 0; i < 1; i++) - { - sequences.Add(new Shoot1( - new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)); - } - return sequences.ToArray(); - }), - Pause(1f) - ) - { - Description = "Spawns lightning on the whole arena"; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs.meta deleted file mode 100644 index c0dcfc3..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_Arena.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4bd36f0d869744e7c83335c8325fdc38 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs deleted file mode 100644 index ee623e3..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using AOEs; -using BossCore; -using Moves.Test; -using Moves.Basic; -using static BossController; - -namespace Moves.Test -{ - public class Lightning_With_AOE : AISequence - { - public Lightning_With_AOE() : base - ( - new ShootAOE(new AOE - { - AngleOffset = (-25), - RotationSpeed = (15f), - FixedWidth = (10f), - OuterSpeed = (Speed.MEDIUM_SLOW) - } - .On(-22.5f, 22.5f) - .On(90 - 22.5f, 90 + 22.5f) - .On(180 - 22.5f, 180 + 22.5f) - .On(270 - 22.5f, 270 + 22.5f) - ).Wait(1.5f), - new Lightning_Arena().Wait(0.5f), - new ShootAOE(new AOE - { - AngleOffset = (-25), - RotationSpeed = (15f), - FixedWidth = (10f), - OuterSpeed = (Speed.MEDIUM_SLOW) - } - .On(-22.5f, 22.5f) - .On(90 - 22.5f, 90 + 22.5f) - .On(180 - 22.5f, 180 + 22.5f) - .On(270 - 22.5f, 270 + 22.5f) - ).Wait(1.5f), - new Lightning_Arena().Wait(2.5f) - ) - { - Description = "Lightning with aoe"; - Difficulty = 6f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs.meta deleted file mode 100644 index de00076..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Lightning_With_AOE.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f4e053c5803f94c709701b26ea28bfb1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs deleted file mode 100644 index 2e78563..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using AI; -using BossCore; -using Moves.Basic; -using Projectiles; -using UnityEngine; - -namespace Moves.Test -{ - public class Pincer : AISequence - { - - public Pincer(float offset=0f, Speed speed=Speed.SNIPE) - { - Description = "Shoots two projectiles with an offset of +/-" + offset + " degrees with speed " + speed; - - float curveAmount = - -4f * // base - (float)speed * // turning radius is tighter when we go faster - (20f / (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude) * // contribution due to distance from player - Mathf.Sqrt(2) * Mathf.Sin(Mathf.Deg2Rad * offset); // contribution due to initial firing offset - - float maxTime = Mathf.Deg2Rad * offset / Mathf.Sin(Mathf.Deg2Rad * offset) * ((GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude / 50f); - maxTime += 0.1f; - - GetChildren = () => - new AISequence[] { - Merge( - new Shoot1(new ProjectileCurving(curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = offset, MaxTime = maxTime }), - new Shoot1(new ProjectileCurving(-curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = -offset, MaxTime = maxTime }) - ) - }; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs.meta deleted file mode 100644 index b8d617e..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4a813033603df4f0db3b315c4b0d1b0f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs deleted file mode 100644 index 217bf3a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Pincer_Sweep : AISequence - { - public Pincer_Sweep() : base - ( - /* - () => { - List sequences = new List(); - for (int i = 150; i >= 0; i -= 5) { - sequences.Add(new Pincer(i).Wait(0.05f)); - } - return sequences.ToArray(); - } - */ - For(150, 0, -5, i => new Pincer(i).Wait(0.05f)) - ) - { - Description = "Sweeps pincer projectiles from +150 to +0 degrees"; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs.meta deleted file mode 100644 index 00f9565..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Pincer_Sweep.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 54de245874eed4d6a8e9b675a280782d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs deleted file mode 100644 index dc0e07e..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using AOEs; -using static BossController; - -namespace Moves.Test -{ - public class Player_Strafe_Waves : AISequence - { - - public Player_Strafe_Waves() : base - ( - /* - () => { - List sequences = new List(); - sequences.Add(new Teleport()); - sequences.Add(new PlayerLock(true)); - for (int i = 0; i < 6; i++) - { - sequences.Add(new Strafe(true, 60, 25, GameManager.Player.transform.position)); - sequences.Add(new ShootAOE(AOE.New(self).On(-60, 60))); - sequences.Add(new Pause(0.75f)); - } - sequences.Add(new PlayerLock(false)); - sequences.Add(new Pause(1f)); - return sequences.ToArray(); - } - */ - For(6, i => new Strafe(true, 60, 25, GameManager.Player.transform.position)).Then(new ShootAOE(new AOE().On(-60, 60))).Wait(0.75f) - ) - { - - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs.meta deleted file mode 100644 index 5a417e6..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Player_Strafe_Waves.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bb5f8baf3a0a342fe9400e130cfb1cd9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs deleted file mode 100644 index d837b01..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; - -namespace Moves.Test -{ - public class Quick_Waves : AISequence - { - public Quick_Waves() : base - ( - Either( - new ShootArc(100, -60, 60, new Projectile { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), - new ShootAOE(new AOE { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), - new Shoot1(new ProjectileLightning()), - Merge( - new ShootArc(150, 22.5f, 22.5f + 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new ShootArc(150, -22.5f, -22.5f - 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }) - ), - new ShootArc(100, -60, 60, new Projectile { Speed = Speed.VERY_FAST, Size = Size.SMALL }).Wait(0.1f).Times(5) - ).Wait(0.6f).Times(7) - ) - { - Description = "Fires a quick barrage of random wave-based attacks."; - Difficulty = 6f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs.meta deleted file mode 100644 index 50095ec..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Quick_Waves.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 478d98494e8c642139818c0c35d5be22 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs deleted file mode 100644 index 347e18a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Projectiles; -using AOEs; -using Moves.Basic; - -namespace Moves.Test -{ - /// - /// I really like the lasers. - /// - public class Random_Leading : AISequence - { - public Random_Leading(int count = 20) : base - ( - /* - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = 0; i < 50; i++) - { - sequences.Add( - new Shoot1( - new ProjectileReverse() - .Speed(BossCore.Speed.VERY_FAST) - .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) - * (5 * Vector3.forward))) - ); - } - return Merge(sequences.ToArray()); - }), - new PlayerLock(false) - */ - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), - new Laser(-60, 480, 5, 60), - new Laser(60, 480, 5, 45), - new Laser(120, 480, 5, 30), - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f) - ) - { - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs.meta deleted file mode 100644 index 8942571..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Random_Leading.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 93dac8893eccb4c34bd76772e85d6dbc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs deleted file mode 100644 index fc02566..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Projectiles; -using Moves.Basic; - -namespace Moves.Test -{ - public class SpinReverse : AISequence - { - public SpinReverse(int count = 50) : base - ( - /* - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = 0; i < 50; i++) - { - sequences.Add( - new Shoot1( - new ProjectileReverse() - .Speed(BossCore.Speed.VERY_FAST) - .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) - * (5 * Vector3.forward))) - ); - } - return Merge(sequences.ToArray()); - }), - new PlayerLock(false) - */ - ForConcurrent(count, i => - new Shoot1( - new ProjectileCurving(187, false) - { - Start = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward)), - Target = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward) + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.right)), - Speed = (BossCore.Speed.FAST), - MaxTime = (0.75f), - OnDestroyTimeout = self => - new Shoot1( - new ProjectileReverse() - { - Start = (self.transform.position), - Target = (PLAYER_POSITION), - Speed = (BossCore.Speed.SNIPE), - MaxTime = (0.75f) - } - ) - } - ) - ) - ) - { - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs.meta deleted file mode 100644 index 2f16f11..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/ReverseTest.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ca9c6f4a743904703bf90a7dc319120d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs deleted file mode 100644 index f2ad7b9..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using static BossController; -using static World.Arena; -using BossCore; - -namespace Moves.Test -{ - public class Sniper_Final : AISequence - { - public Sniper_Final() : base - ( - new Teleport(NORTH_FAR).Wait(0.5f), - new ShootAOE(new AOE { - OuterSpeed = Speed.SLOW, - InnerSpeed = Speed.FROZEN, - InnerScale = 0f, - Target = SOUTH_FAR, - MaxTime = 2f, - OnDestroyTimeout = - self => - { - AOE clone = self.data.Clone(); - clone.MaxTime = 10f; - clone.Freeze(); - clone.Create(); - } - }.On(-80, 80) - ) - .Wait(1f), - new AISequence( - new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) - ).Times(2), - new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), - new ShootAOE(new AOE { Start = WEST_FAR, Target = EAST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), - new ShootAOE(new AOE { Start = EAST_FAR, Target = WEST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) - ).Times(2), - new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f), - new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f) - ) - ) - { } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs.meta deleted file mode 100644 index 498a836..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Sniper_Final.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0f9b0f17946b2494fa8c1868167b392d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs deleted file mode 100644 index 745379d..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Test : AISequence - { - public Test() : base - ( - //new Shoot1(new Projectile { Target = LEADING_PLAYER_POSITION, Speed = Speed.VERY_FAST }).Wait(0.5f) - new Shoot1(new ProjectileHoming(difficulty: 1) { Speed = Speed.VERY_FAST }).Wait(0.1f) - ) - { - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs.meta deleted file mode 100644 index bfbc01a..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Test/Test.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 89d4ea6d739ef4a9da774cc00dfaf281 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1.meta deleted file mode 100644 index 7971234..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 54096d36918404c72b0331f8ba569a3b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs deleted file mode 100644 index c095006..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AI; - -using Moves.Basic; - -namespace Moves.Tutorial1 -{ - public class Shoot_1_Several : AISequence - { - public Shoot_1_Several() : base - ( - new Teleport().Wait(0.5f), - new AISequence(() => - { - return new Shoot1().Wait(0.1f).Times(Random.Range(5, 10)); - }), - new Pause(1.5f) - ) - { - Description = "Shoots between 5 and 10 default projectiles at the player."; - Difficulty = 2f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs.meta deleted file mode 100644 index 59be327..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_1_Several.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1af38270d97744392b830ad85a8581b6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs deleted file mode 100644 index 5cc2cc8..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AI; - -using Moves.Basic; - -namespace Moves.Tutorial1 -{ - public class Shoot_3_Several : AISequence - { - public Shoot_3_Several() : base - ( - new Teleport().Wait(0.5f), - new AISequence(() => - { - return new Shoot3().Wait(0.1f).Times(Random.Range(7, 12)); - }), - new Pause(1.5f) - ) - { - Description = "Shoots between 7 and 12 three-way projectiles at the player."; - Difficulty = 3f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs.meta deleted file mode 100644 index 28accc1..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_3_Several.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5fbb3939478c24dfeb4a470c4e3ce476 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs deleted file mode 100644 index c3e45b8..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AI; - -using Moves.Basic; - -namespace Moves.Tutorial1 -{ - public class Shoot_Arc : AISequence - { - public Shoot_Arc(int width=70, bool dense=false) : base - ( - new Teleport().Wait(0.25f), - new ShootArc(dense ? 100 : 50, -width / 2, width / 2), - new Pause(1.5f) - ) - { - Description = "Shoots a" + (dense ? " dense" : "n") + " arc, " + width + " degrees wide, at the player."; - Difficulty = 2f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs.meta deleted file mode 100644 index 0a8f258..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial1/Shoot_Arc.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c077f4830e5424f0f89cda345dec2403 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2.meta deleted file mode 100644 index ed7df2c..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3098ce154c471453aa1348424b3a2648 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs deleted file mode 100644 index 88981b8..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Projectiles; -using static BossController; - -using Moves.Basic; - -namespace Moves.Tutorial2 -{ - public class Force_Block : AISequence - { - public Force_Block() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), - new PlayerLock(false), - new Pause(4f) - ) - { - Description = "Fires 10 sets of tiny projectiles in a 180 degree arc, too dense to dash through."; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs.meta deleted file mode 100644 index 9031871..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial2/Force_Block.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c88bb7523eea494da001486db601a39 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3.meta deleted file mode 100644 index 514ff29..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c26fd6fb38627405aae615fb2c020069 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs deleted file mode 100644 index fcb33ba..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using static BossController; -using Moves.Basic; - -namespace Moves.Tutorial3 -{ - public class Shoot_AOE : AISequence - { - - public Shoot_AOE(int width) : base - ( - new Teleport().Wait(0.25f), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-width / 2, width / 2)), - new Pause(0.5f) - ) - { - Description = "Shoots an AOE " + width + " degrees wide at the player."; - Difficulty = 1.5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs.meta deleted file mode 100644 index 6b27dd1..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Tutorial3/Shoot_AOE.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4e0cd36625ac944cbb96b81ff8673ac9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted.meta deleted file mode 100644 index 53d20ea..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 19f0eee5fa4144939b234a29e52ef22f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs deleted file mode 100644 index 29912a8..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using static World.Arena; -using Projectiles; - -namespace Moves.User -{ - public class Big_Homing_Strafe : AISequence - { - public Big_Homing_Strafe() : base - ( - new MoveCamera(false, new Vector3(0, 17.5f, -35f)).Wait(1f), - new Teleport(NORTH_FAR).Wait(1f), - new ShootHomingStrafe(strafeAmount: 65).Times(10), - new Teleport(NORTH_FAR).Wait(1f), - new ShootHomingStrafe(strafeAmount: 15).Times(15), - new MoveCamera(true).Wait(2f) - ) - { - Description = "Does a circle along the outside of the arena, shooting homing projectiles at the player."; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs.meta deleted file mode 100644 index 26d7550..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Big_Homing_Strafe.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 38f04ae34b2a24e4583f6af97baef312 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs deleted file mode 100644 index 1515fb6..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Dash_Test : AISequence - { - public Dash_Test() : base - ( - new ShootAOE(new AOE { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f) ), - new Pause(0.75f) - ) - { - Description = "Aggressively tests dashing."; - Difficulty = 8f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs.meta deleted file mode 100644 index 01368d6..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Dash_Test.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a230885efa9f04c25aa2deebc7f6009f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs deleted file mode 100644 index 25141dd..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static World.Arena; - -namespace Moves.Unsorted -{ - /* - * A really intricate pattern. 6 projectiles that explode into 6 more projectiles, - * repeated twice to forme a lattice. Safe spot is a midpoint between any two of - * the first projectiles, near the far edge of the arena. - * - * ** This might have changed due to the way ShootDeathHex was implemented. - */ - public class Death_Hex : AISequence - { - public Death_Hex() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot_Death_Hex(2f).Wait(1f), - new Shoot_Death_Hex(1f).Wait(2f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(0.75f) - ) - { - Description = "Fires 6 projectiles that explode into 6 more projectiles, repeated twice to form a lattice."; - Difficulty = 9f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs.meta deleted file mode 100644 index 4fd3096..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Death_Hex.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: af6de9d59d1e340dca3eb7a5794efb47 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs deleted file mode 100644 index 58d7c07..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static World.Arena; - -namespace Moves.Unsorted -{ - public class Double_Hex_Curve : AISequence - { - public Double_Hex_Curve() : base - ( - new Teleport(CENTER).Wait(1.5f), - new PlayerLock(true), - new Shoot_Hex_Curve(true), - new AOE_360().Wait(0.5f), - new Shoot_Hex_Curve(true, 30f).Wait(0.5f), - new AOE_360().Wait(1f), - new AOE_360().Wait(1f), - new PlayerLock(false) - ) - { - Description = "Fires two hex curves, the second offset 30 degrees from the first."; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs.meta deleted file mode 100644 index 036459d..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dd7f511867c014f278d55f64ce328dae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs deleted file mode 100644 index 0cff6b1..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -using static World.Arena; - -namespace Moves.Unsorted -{ - public class Double_Hex_Curve_Hard : AISequence - { - public Double_Hex_Curve_Hard() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot_Hex_Curve(false, 0f), - new Shoot_Hex_Curve(false, 30f), - // This homing might be too hard; especially with this amount of 360s. - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(10), - new AOE_360(), - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), - new AOE_360(), - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), - new AOE_360().Wait(0.5f), - new AOE_360().Wait(0.5f) - ) - { - Description = "A harder variant of the double hex curve."; - Difficulty = 10f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs.meta deleted file mode 100644 index 82d5370..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Double_Hex_Curve_Hard.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f8f7a93b4c2a445bbc3108fadbf883f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs deleted file mode 100644 index 0c46461..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Four_Way_Sweep_With_Homing : AISequence - { - public Four_Way_Sweep_With_Homing() : base - ( - // TODO refactor me to use standard notation - () => { - List sequences = new List(); - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 7; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE})); - for (int j = 7; j < 15; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new AOE_360()); - } - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 5; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); - for (int j = 5; j < 10; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); - for (int j = 10; j < 15; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new AOE_360()); - } - return sequences.ToArray(); - } - ) - { - Description = "Shoots a 4-directional sweep with homing projectiles in between."; - Difficulty = 6f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs.meta deleted file mode 100644 index 0eb1030..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Four_Way_Sweep_With_Homing.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6e2ec7802836743c1b34b7951c09ee3e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs deleted file mode 100644 index ba2dd7d..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Hex_Curve_Intro : AISequence - { - public Hex_Curve_Intro() : base - ( - new Shoot_Hex_Curve(true), - new AOE_360().Wait(2.5f), - new Shoot_Hex_Curve(false), - new AOE_360().Wait(2.5f), - new Shoot_Hex_Curve(true), - new AOE_360(), - new Shoot_Hex_Curve(false).Wait(1f), - new AOE_360().Wait(1f), - new AOE_360().Wait(1.5f), - new Teleport().Wait(0.5f) - ) - { - Description = "Introduces the player to the hex curve attack"; - Difficulty = 4f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs.meta deleted file mode 100644 index 01a8073..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Hex_Curve_Intro.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 34ab945d52f724b6495892198c8eef6f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs deleted file mode 100644 index ba2ec91..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -using static World.Arena; - -namespace Moves.Unsorted -{ - public class Jump_Rope_Fast : AISequence - { - public Jump_Rope_Fast() : base - ( - new MoveCamera(false, new Vector3(0, 17.5f, -35)).Wait(1f), - new Teleport(WEST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(EAST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(WEST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(EAST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new MoveCamera(true) - ) - { - Description = "Fires lines at the player from the left and right."; - Difficulty = 4f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs.meta deleted file mode 100644 index 6821eb8..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Jump_Rope_Fast.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4b0799783c67046f4a5f1f04a27b1ee2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs deleted file mode 100644 index 2c59c3d..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.User -{ - public class Random_200 : AISequence - { - public Random_200() : base - ( - () => - { - List sequences = new List(); - for (int j = 0; j < 200; j++) { - switch (Random.Range(0, 3)) - { - case 0: sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) - )); break; - case 1: sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) - )); break; - case 2: - sequences.Add( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }) - ); - break; - } - if (j % 20 == 0) { - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.MEDIUM })); - } - if (j % 40 == 0) { - sequences.Add(new AISequence(() => - { - new Projectile - { - Size = Size.MEDIUM, - Speed = Speed.MEDIUM, - AngleOffset = Random.Range(0, 360f), - MaxTime = 0.5f, - OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE - }.Create(); - })); - } - sequences.Add(Pause(0.05f)); - } - return sequences.ToArray(); - } - ) - { - Description = "Spawns 200 random projectiles."; - Difficulty = 8f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs.meta deleted file mode 100644 index 39adc08..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Random_200.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eb9518e7faa8b495f968824c29ed0f56 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs deleted file mode 100644 index a6b1e90..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Unsorted -{ - public class Shoot3_Wave3 : AISequence - { - public Shoot3_Wave3() : base - ( - new Teleport().Wait(0.5f), - new AOE_360(), - new Shoot3().Wait(0.1f).Times(20), - new AOE_360(), - new Shoot3().Wait(0.1f).Times(20), - new AOE_360().Wait(0.5f) - ) - { - Description = "40 basic bullets, with a 360 wave at the start, middle, and end."; - Difficulty = 3f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta deleted file mode 100644 index bfe53d6..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot3_Wave3.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bcb3841cf08f64f0b98ce3c11109f231 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs deleted file mode 100644 index a58c0ff..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.User -{ - public class Shoot_4_Waves_Behind : AISequence - { - public Shoot_4_Waves_Behind() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(220f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(200f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(160f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(140f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(5f) - ) - { - Description = "Your description here"; - Difficulty = 1f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs.meta deleted file mode 100644 index 35281ee..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_4_Waves_Behind.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bee754d65407e4ef78a96c99355f8d7a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs deleted file mode 100644 index cdf15e1..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Shoot_Hex_Curve : AISequence - { - public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) : base - ( - ForConcurrent(6, i => - new Shoot1( - new ProjectileCurving((float)Speed.MEDIUM * (clockwise ? 1 : -1) * 2f, true) { - MaxTime = 3f, AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) - } - ) - ) - ) - { - Description = "Shoots 6 curving projectiles " + (clockwise ? "clockwise" : "counterclockwise") + " from the boss's location."; - Difficulty = 3f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs.meta deleted file mode 100644 index e8de7a1..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Shoot_Hex_Curve.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f927d8c238bc442ebbd7a3e08dadfca3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs deleted file mode 100644 index 1271ced..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Sweep_Back_And_Forth_Advanced : AISequence - { - public Sweep_Back_And_Forth_Advanced() : base - ( - // TODO refactor me to use standard notation - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => { - List sequences = new List(); - for (int i = -30; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - for (int i = -80; i < 80; i += 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.TINY, Speed = Speed.FAST }) - ).Wait(0.02f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -30; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - return sequences.ToArray(); - }).Wait(0.75f), - new PlayerLock(false) - ) - { - Description = "Sweeps back and forth with additional medium and tiny projectiles."; - Difficulty = 6.5f; - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta deleted file mode 100644 index 24c65ef..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9714e821119b040eea1f7f93e1faca4e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs deleted file mode 100644 index 788f355..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Sweep_Back_And_Forth_Medium : AISequence - { - public Sweep_Back_And_Forth_Medium() : base - ( - // TODO refactor me to use standard notation - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => { - List sequences = new List(); - for (int i = -30; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = -80; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - return sequences.ToArray(); - }).Wait(0.75f), - new PlayerLock(false) - ) - { - Description = "Sweeps back and forth with additional medium projectiles."; - Difficulty = 5.5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta deleted file mode 100644 index 157f6b0..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 494510ae5a4af4916af78bef48dd860f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs deleted file mode 100644 index 6f076ba..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Unsorted -{ - public class Sweep_Wall : AISequence - { - public Sweep_Wall(bool clockwise=true) : base - (() => - { - List sequences = new List(); - - for (int angle = 0; angle != (clockwise ? 72 : -72); angle += clockwise ? 6 : -6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - - for (int angle = clockwise ? 72 : -72; angle != 0; angle -= clockwise ? 6 : -6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - return sequences.ToArray(); - } - ) - { - Description = "Shoots a sweeping wall " + (clockwise ? "clockwise" : "counterclockwise") + "."; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs.meta deleted file mode 100644 index 9aaab9f..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3054d21e08b294da395e8137d646df38 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs deleted file mode 100644 index afce042..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Unsorted -{ - public class Sweep_Wall_Back_And_Forth : AISequence - { - public Sweep_Wall_Back_And_Forth() : base - ( - new PlayerLock(true), - new Sweep_Wall(true), - new Sweep_Wall(false), - new PlayerLock(false) - ) - { - Description = "Sweeps a wall clockwise, then counterclockwise."; - Difficulty = 6f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta deleted file mode 100644 index 7477eb8..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4f9d04b0d5cd848e9a0269e19988fb8e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs deleted file mode 100644 index ca68ad1..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static World.Arena; - -namespace Moves.Unsorted -{ - public class Wave_Circle : AISequence - { - - private class Slow_Wave_Circle : AISequence { - public Slow_Wave_Circle() : base - ( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), - new Strafe(true, 60f, 50).Wait(0.5f) - ) - { - Description = "Fires a medium-slow AOE, and then strafes 60 degrees clockwise."; - Difficulty = 2f; - } - } - - public Wave_Circle() : base - ( - new Teleport(WEST_MED), - new Slow_Wave_Circle().Times(6), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW) - ) - { - Description = "Fires six slow circles around the arena in a circular pattern. Then repeats twice, with lines appearing on the left and right sides."; - Difficulty = 5f; - } - } -} diff --git a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs.meta b/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs.meta deleted file mode 100644 index e47b7bc..0000000 --- a/Assets/Scripts/Boss Core/AI/Garbage/Unsorted/Wave_Circle.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 04c02d677a15844a2957185ce382513d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs.meta index 39adc08..7d1229d 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs.meta +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: eb9518e7faa8b495f968824c29ed0f56 +guid: 5602cbf95d5784514b9f07591ecb4fc7 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs.meta index 35281ee..47023c4 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs.meta +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bee754d65407e4ef78a96c99355f8d7a +guid: b5fb2408e3a0248bea4d8b9b6f60c446 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs.meta index 9aaab9f..2a88d12 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs.meta +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3054d21e08b294da395e8137d646df38 +guid: aa154766d216b4c10b82f4d93c2e7aa7 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta index 7477eb8..da13690 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4f9d04b0d5cd848e9a0269e19988fb8e +guid: 441155b002b4842519fbc6b31e01b7cf MonoImporter: externalObjects: {} serializedVersion: 2 diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic.meta" deleted file mode 100644 index 600d76b..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic.meta" +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 2c3f185ac84b84816acbf911798e3311 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs" deleted file mode 100644 index 51f1701..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs" +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using AOEs; -using static BossController; - -namespace Moves.Basic -{ - public class AOE_120 : AISequence - { - public AOE_120() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) - ) - { - Description = "Shoots a 120 degree wide AOE at the player."; - Difficulty = 1f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs.meta" deleted file mode 100644 index d2ef59f..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_120.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 087000a7707c6407c8932c06b6e34fbf -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs" deleted file mode 100644 index 3897529..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs" +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class AOE_131 : AISequence - { - public AOE_131() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.19f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20 }.On(-60, -40).On(-10, 10).On(40, 60)).Wait(0.76f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.2f), - new PlayerLock(false).Wait(1f) - ) - { - Description = "Shoots an AOE attack in a 1-3-1 pattern."; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs.meta" deleted file mode 100644 index 854df6b..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_131.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 778573b2a466740f6a82e1aea963796a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs" deleted file mode 100644 index 1d7d225..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs" +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using AOEs; -using static BossController; - -namespace Moves.Basic -{ - public class AOE_360 : AISequence - { - public AOE_360() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(0, 360)) - ) - { - Description = "Shoots a 360 degree wide AOE."; - Difficulty = 1f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs.meta" deleted file mode 100644 index 279c74b..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_360.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3c656e30deb594c7d8a502a526a5f05d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs" deleted file mode 100644 index eb45036..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs" +++ /dev/null @@ -1,22 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using AOEs; -using static BossController; - -namespace Moves.Basic -{ - public class AOE_90 : AISequence - { - public AOE_90() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(-45, 45)) - ) - { - Description = "Shoots a 90 degree wide AOE at the player."; - Difficulty = 1f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs.meta" deleted file mode 100644 index 3408211..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/AOE_90.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fdf9421d8baca4596a10ade6bbc77c5f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs" deleted file mode 100644 index 3d65d8a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs" +++ /dev/null @@ -1,23 +0,0 @@ -using AI; -using Projectiles; -using BossCore; - -using static BossController; - -namespace Moves.Basic -{ - public class Shoot_2_Waves : AISequence - { - public Shoot_2_Waves() : base - ( - new Teleport().Wait(0.5f), - new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = -2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = 2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new Pause(1f) - ) - { - Description = "Shoots 2 90 waves as one block, encouraging dodging through them."; - Difficulty = 4f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs.meta" deleted file mode 100644 index 26b0908..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_2_Waves.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a3c8b90e37f5543cb85e7edaefac1ef7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs" deleted file mode 100644 index 12cdaf9..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs" +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class Shoot_Death_Hex : AISequence - { - public Shoot_Death_Hex(float maxTime = 1f) : base - ( - new Shoot1(new ProjectileDeathHex() { MaxTime = maxTime }).Wait(1f) - ) - { - Description = "Shoots a high-damage projectile that splits into 6 curving projectiles with trails."; - Difficulty = 4f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs.meta" deleted file mode 100644 index 08780c6..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Death_Hex.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8706927eef48a43adb9a376a69f7ff67 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs" deleted file mode 100644 index 7b4e163..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs" +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.User -{ - public class Shoot_Split_6 : AISequence - { - public Shoot_Split_6() : base - ( - new Teleport().Wait(0.5f), - new Shoot1( - new ProjectileCurving(0f, false) - { - MaxTime = 0.25f, - Speed = Speed.VERY_FAST, - OnDestroyTimeout = CallbackDictionary.SPAWN_6 - } - ), - new Pause(0.5f) - ) - { - Description = "Shoots a projectile that splits into 6 more projectiles."; - Difficulty = 4f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs.meta" deleted file mode 100644 index d5c3345..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 98295e0949b104b08ae2990a6e42666d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs" deleted file mode 100644 index 0a132bf..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs" +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.User -{ - public class Shoot_Split_6_Curve : AISequence - { - public Shoot_Split_6_Curve() : base - ( - new Teleport().Wait(0.5f), - new Shoot1( - new ProjectileDeathHex - { - MaxTime = 0.25f, - Speed = Speed.VERY_FAST - } - ), - new Pause(0.5f) - ) - { - Description = "Shoots a projectile that splits into 6 curving projectiles."; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs.meta" deleted file mode 100644 index c743256..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Split_6_Curve.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4f0faa05d2a7642599372126585726a2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs" deleted file mode 100644 index 7e15f4c..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs" +++ /dev/null @@ -1,26 +0,0 @@ -using AI; -using Projectiles; -using BossCore; - -using static BossController; -using static AI.AISequence; - -namespace Moves.Basic -{ - public class Shoot_Wave_Middle_Gap : AISequence - { - public Shoot_Wave_Middle_Gap() : base - ( - new Teleport().Wait(0.5f), - Merge( - new ShootArc(150, 22.5f, 22.5f + 60f), - new ShootArc(150, -22.5f, -22.5f - 60f) - ), - new Pause(1f) - ) - { - Description = "Shoots two 60 degree waves with a 45 degree gap in the middle."; - Difficulty = 3f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs.meta" deleted file mode 100644 index 6611c1f..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Shoot_Wave_Middle_Gap.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 917bd5b3f26df4e548e3e92196acae99 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs" deleted file mode 100644 index d7a1893..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs" +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using Projectiles; -using static BossController; -using static AI.AISequence; - -namespace Moves.Basic -{ - public class Sweep : AISequence - { - public Sweep(bool reverse = false) : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - For(reverse ? 90 : -30, - reverse ? -30 : 90, - reverse ? -5 : 5, - i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f) - ), - /* - new AISequence(() => - { - int start = reverse ? 90 : -30; - int end = reverse ? -30 : 90; - int step = reverse ? -5 : 5; - - List sequences = new List(); - for (int i = start; i != end; i += step) - { - sequences.Add(new Shoot1(new Projectile().AngleOffset(i)).Wait(0.05f)); - } - return sequences.ToArray(); - }), - */ - new PlayerLock(false), - Pause(0.25f) - ) - { - Description = "Shoots a sweep from " + (reverse ? -30 : 90) + - " degrees to " + (reverse ? 90 : -30) + " degrees offset from the player's current position."; - Difficulty = 2f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs.meta" deleted file mode 100644 index f289ba6..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c1f47c2007ef42649045864c1303136 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs" deleted file mode 100644 index 5208f95..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs" +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using Projectiles; -using static BossController; -using static AI.AISequence; - -namespace Moves.Basic -{ - public class Sweep_Back_And_Forth : AISequence - { - public Sweep_Back_And_Forth() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = -30; i < 90; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); - } - sequences.Add(Pause(0.25f)); - for (int i = 30; i > -90; i -= 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); - } - return sequences.ToArray(); - }), - new PlayerLock(false), - new Pause(0.5f) - ) - { - Description = "Shoots a sweep from -30 degrees to +90 degrees offset from the player's current position, then another from -90 to +30 degrees."; - Difficulty = 3f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs.meta" deleted file mode 100644 index 137502c..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Back_And_Forth.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e58399f0c41124741852e6d923a8a1b2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs" deleted file mode 100644 index 3cc4ee2..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs" +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using Projectiles; -using static BossController; -using static AI.AISequence; - -namespace Moves.Basic -{ - public class Sweep_Both : AISequence - { - public Sweep_Both() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => - { - - List sequences = new List(); - for (int i = 0; i < 120; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i - 60 })); - sequences.Add(new Shoot1(new Projectile { AngleOffset = 60 - i })); - sequences.Add(new Pause(0.05f)); - } - return sequences.ToArray(); - }), - new PlayerLock(false), - new Pause(0.5f) - ) - { - Description = "Sweeps both left and right at the same time."; - Difficulty = 4f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs.meta" deleted file mode 100644 index 213bcae..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic/Sweep_Both.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bcce318f6583f4badbb7fec798d6d6c9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators.meta" deleted file mode 100644 index 13e1b5d..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators.meta" +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e89d07b6cef054a26ab6e29a9e3f2591 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs" deleted file mode 100644 index d720fa2..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs" +++ /dev/null @@ -1,26 +0,0 @@ -using AI; -using Projectiles; -using UnityEngine; -using static BossController; - -namespace Moves.Basic -{ - public class MoveCamera : AISequence - { - public MoveCamera(bool isFollow = false, Vector3? targetPosition = null) : base - ( - () => - { - CameraController.GetInstance().IsFollowing = isFollow; - - if (targetPosition.HasValue) - { - CameraController.GetInstance().Goto(targetPosition.Value, 1); - } - } - ) - { - Description = "Moved the camera to " + targetPosition + ". Camera is now " + (isFollow ? "" : "not") + " following."; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs.meta" deleted file mode 100644 index 144fb49..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/MoveCamera.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 612275463c8fd495999e3dea3288593a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs" deleted file mode 100644 index 5885717..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs" +++ /dev/null @@ -1,15 +0,0 @@ -using AI; - -namespace Moves.Basic -{ - public class Pause : AISequence - { - public Pause(float duration) : base - ( - new AIEvent[] { new AIEvent(duration, () => { }) } - ) - { - Description = "Waiting for " + duration + " seconds."; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs.meta" deleted file mode 100644 index cd88c33..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Pause.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7f25f7bf305aa4ea98d1d53f16f6386a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs" deleted file mode 100644 index 0b7e236..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs" +++ /dev/null @@ -1,31 +0,0 @@ -using AI; -using UnityEngine; - -namespace Moves.Basic -{ - public class PlayerLock : AISequence - { - // Used for the "PlayerLock" move. Keeps track of the current player position - // for events and sequences that need a slightly out of date version. - private static Vector3 playerLockPosition; - private static bool isPlayerLocked; - - public static BossCore.ProxyVector3 _delayed_player_position = new BossCore.ProxyVector3(() => { - return isPlayerLocked ? playerLockPosition : PLAYER_POSITION.GetValue(); - }); - - public PlayerLock(bool enableLock = true) : base - ( - () => - { - if (enableLock) { - playerLockPosition = GameManager.Player.transform.position; - } - isPlayerLocked = enableLock; - } - ) - { - Description = (enableLock ? "Locked onto" : "Unlocked from") + " the player."; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs.meta" deleted file mode 100644 index 28ceed1..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/PlayerLock.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 65a3d43b5e0724d208bf1bbb4446877f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs" deleted file mode 100644 index f639240..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs" +++ /dev/null @@ -1,23 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class Shoot1 : AISequence - { - public Shoot1(Projectile skeleton = null) : base - ( - () => - { - GameManager.Boss.Glare(); - - Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); - newStruc.Create(); - } - ) - { - Description = "Shot one " + (skeleton == null ? "default projectile at the player." : skeleton + "."); - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs.meta" deleted file mode 100644 index bdef2e8..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot1.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7ee019564e53d4d5295c3d0c2a472ec8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs" deleted file mode 100644 index 7c8cf3a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs" +++ /dev/null @@ -1,28 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class Shoot3 : AISequence - { - - public Shoot3(Projectile skeleton = null) : base - ( - () => - { - GameManager.Boss.Glare(); - - for (int i = 0; i < 3; i++) - { - Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); - newStruc.AngleOffset = -30 + (30 * i) + newStruc.AngleOffset; - newStruc.Create(); - } - } - ) - { - Description = "Shot three " + (skeleton == null ? "default projectiles at the player." : skeleton + "."); - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs.meta" deleted file mode 100644 index d9886bb..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Shoot3.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 501cc1ce79a5c41969bf82aa89dd1a42 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs" deleted file mode 100644 index 1cadef0..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs" +++ /dev/null @@ -1,24 +0,0 @@ -using AI; -using AOEs; -using BossCore; - -using static BossController; - -namespace Moves.Basic -{ - public class ShootAOE : AISequence - { - public ShootAOE(AOE skeleton = null) : base - ( - () => - { - GameManager.Boss.Glare(); - skeleton = skeleton != null ? skeleton.Clone() : new AOE(); - skeleton.Create(); - } - ) - { - Description = "Shot " + skeleton; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs.meta" deleted file mode 100644 index 4eab926..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootAOE.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d154ba470c53d40eebc3ea3ae78e6648 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs" deleted file mode 100644 index a1d7811..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs" +++ /dev/null @@ -1,39 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class ShootArc : AISequence - { - - public ShootArc(int density = 50, float from = 0, float to = 360, Projectile skeleton = null) : base - ( - () => - { - GameManager.Boss.Glare(); - - // Ensure that "from" is always less than "to". - if (to < from) - { - float temp = from; - from = to; - to = temp; - } - - float step = 360f / density; - Projectile clone = skeleton ?? new Projectile { Size = Size.MEDIUM }; - for (float i = from; i <= to; i += step) - { - Projectile newStruc = clone.Clone(); - newStruc.AngleOffset = newStruc.AngleOffset + i; - newStruc.Create(); - } - } - ) - { - Description = "Shot an arc (density=" + density + ", from=" + from + ", to=" + to + ") of " + - (skeleton == null ? "default projectiles at the player." : skeleton + "."); - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs.meta" deleted file mode 100644 index 7a8e270..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootArc.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 29f9bfaded55544f584af88b12219b50 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs" deleted file mode 100644 index d3d9201..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs" +++ /dev/null @@ -1,18 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -namespace Moves.Basic -{ - public class ShootHomingStrafe : AISequence - { - public ShootHomingStrafe(bool clockwise = true, int strafeAmount = 5, int speed = 25) : base - ( - new Strafe(clockwise, strafeAmount, speed), - new Shoot1(new ProjectileHoming { Size = Size.MEDIUM }) - ) - { - Description = "Strafed " + strafeAmount + " degrees " + (clockwise ? "clockwise" : "counterclockwise") + " and shot a homing projectile."; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs.meta" deleted file mode 100644 index 658ac22..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootHomingStrafe.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1e471443a6fd741e7b1bcbe817c10ee4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs" deleted file mode 100644 index 32472ac..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs" +++ /dev/null @@ -1,36 +0,0 @@ -using AI; -using Projectiles; -using static BossController; -using UnityEngine; -using BossCore; - -namespace Moves.Basic -{ - public class ShootLine : AISequence - { - public ShootLine(int amount = 50, float width = 75f, Vector3? target = null, Speed speed = Speed.MEDIUM, Size size = Size.MEDIUM) : base - ( - () => - { - - Vector3 targetPos = target.HasValue ? target.Value - GameManager.Boss.transform.position : GameManager.Player.transform.position - GameManager.Boss.transform.position; - Vector3 leftDirection = (Quaternion.AngleAxis(90, Vector3.up) * targetPos).normalized; - - for (int i = 0; i < amount; i++) - { - Vector3 spawn = GameManager.Boss.transform.position + ((i - (amount / 2f)) * (width / amount) * leftDirection); - new Projectile() - { - Start = spawn, - Target = spawn + targetPos, - Size = size - }.Create(); - } - } - ) - { - Description = "Shot a line (amount=" + amount + ", width=" + width + ") at " + (target == null ? " the player" : target.ToString()) + - " with speed " + speed + " and size " + size + "."; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs.meta" deleted file mode 100644 index fdc3a4b..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootLine.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 820741158b8a9444da7d65ad525dff64 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs" deleted file mode 100644 index 5f7020a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs" +++ /dev/null @@ -1,22 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -using BossCore; - -namespace Moves.Basic -{ - public class ShootWall : AISequence - { - public ShootWall(float angleOffset) : base - ( - Merge( - new ShootArc(100, angleOffset + -60, angleOffset + -60 + 28, new Projectile { Speed = Speed.SLOW }), - new ShootArc(100, angleOffset + 20, angleOffset + 60, new Projectile { Speed = Speed.SLOW }) - ) - ) - { - Description = "Shot a wall with offset " + angleOffset + " at the player."; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs.meta" deleted file mode 100644 index d82b4a3..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/ShootWall.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8021f7650ced742a9a74f9d2f8a2a840 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs" deleted file mode 100644 index 80c5847..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs" +++ /dev/null @@ -1,31 +0,0 @@ -using AI; -using Projectiles; -using static BossController; - -using UnityEngine; - -namespace Moves.Basic -{ - public class Strafe : AISequence - { - // A reference to the BossController's entity. Assigned when teleport is called. - private static CombatCore.Entity self = null; - - public Strafe(bool clockwise = true, float degrees = 10f, int speed = 25, Vector3 center = default(Vector3)) : base - ( - () => - { - if (self == null) { - self = GameManager.Boss.GetComponent(); - } - self.movespeed.LockTo(speed); - - Vector3 oldPosVector = GameManager.Boss.transform.position - center; - Quaternion rot = Quaternion.AngleAxis(degrees, clockwise ? Vector3.up : Vector3.down); - - GameManager.Boss.StartCoroutine(GameManager.Boss.Dash((rot * oldPosVector) + center)); - } - ) - {} - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs.meta" deleted file mode 100644 index 95b843a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Strafe.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5ebc39281429546e8ba2816c16c53f30 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs" deleted file mode 100644 index 2943997..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs" +++ /dev/null @@ -1,71 +0,0 @@ -using AI; -using UnityEngine; - -namespace Moves.Basic -{ - public class Teleport : AISequence - { - // A reference to the BossController's entity. Assigned when teleport is called. - private static CombatCore.Entity self = null; - - public Teleport(Vector3? target = null, int speed = 25) : base - ( - () => - { - if (self == null) { - self = GameManager.Boss.GetComponent(); - } - self.movespeed.LockTo(speed); - - if (target.HasValue) - { - GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(target.Value)); - GameManager.Boss.Glare(); - return; - } - - float minDistance = 35f; - float minAngle = 50f; - float maxAngle = 100f; - - Vector3 oldPosVector = GameManager.Boss.transform.position - GameManager.Player.transform.position; - - int count = 0; - Vector3 rawPosition; - do - { - count++; - float degreeRotation = Random.Range(minAngle, maxAngle) * (Random.Range(0, 2) == 0 ? -1 : 1); - float distance = Random.Range(minDistance * GameManager.Arena.transform.localScale.x, 50f * GameManager.Arena.transform.localScale.x); - - if (count == 15) - { - degreeRotation = Random.Range(0, 359f); - distance = Random.Range(15, 49f); - } - - Quaternion rot = Quaternion.AngleAxis(degreeRotation, Vector3.up); - - if (count == 15) - { - rawPosition = rot * (distance * Vector3.forward); - } - else - { - rawPosition = (rot * (oldPosVector * (distance / oldPosVector.magnitude))) + GameManager.Player.transform.position; - } - rawPosition.y = 0f; - - } while (rawPosition.magnitude > 50f); - - rawPosition.y = 1.31f; - GameManager.Boss.StartCoroutine(GameManager.Boss.Dash(rawPosition)); - - GameManager.Boss.Glare(); - } - ) - { - Description = "Teleports to " + (target == null ? "some random position" : target.Value.ToString()) + "."; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs.meta" deleted file mode 100644 index 340fad6..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Basic_Generators/Teleport.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f3762d4a7b52c4f33a307eefebf9578e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test.meta" deleted file mode 100644 index 25e3cf5..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test.meta" +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 943ba5d252e4f4d01aa9e0993c613fcb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs" deleted file mode 100644 index 56fbafe..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs" +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Double_Laser_Sweep : AISequence - { - public Double_Laser_Sweep() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f) - ), - new Pause(1f), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f) - ), - new PlayerLock(false), - new Pause(1f) - ) - { - Description = "Sweeps two lasers back and forth."; - Difficulty = 6.5f; - } - - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs.meta" deleted file mode 100644 index 7edaf5a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8d8c17d5efd674e7e956d0a83470b982 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs" deleted file mode 100644 index 5b2703a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs" +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Double_Laser_Sweep_AOE : AISequence - { - public Double_Laser_Sweep_AOE() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f), - new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) - ), - new Pause(1f), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f), - new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) - ), - new PlayerLock(false), - new Pause(1f) - ) - { - Description = "Sweeps two lasers back and forth, with two AOE attacks in between."; - Difficulty = 7f; - } - - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs.meta" deleted file mode 100644 index 965c858..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Double_Laser_Sweep_AOE.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 920fe1f6e1a854941b15222900697b61 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs" deleted file mode 100644 index 2c06a80..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs" +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -// TODO unfinished -namespace Moves.Test -{ - public class Horseshoe_AOE : AISequence - { - public Horseshoe_AOE() : base - ( - //Pause(1f), - For(10, i => - Merge( - new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) - ) - ), - For(10, i => - Merge( - new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) - ) - ), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) - ) - { - Description = "Your description here"; - Difficulty = 1f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs.meta" deleted file mode 100644 index a1b8540..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Horseshoe_AOE.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d720c634880034176b34bbc0d87457b9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs" deleted file mode 100644 index 87cb579..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs" +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using static BossController; - -using Moves.Basic; - -namespace Moves.Test -{ - public class Laser : AISequence - { - public Laser(float startOffset = -90, float finalOffset = 90, float width = 5, float angularSpeed = 90) : base - ( - new ShootAOE( - new AOE - { - InnerSpeed = Speed.FROZEN, - OuterSpeed = Speed.FROZEN, - InnerScale = 0f, - Scale = 100f, - AngleOffset = startOffset, - RotationSpeed = angularSpeed, - MaxTime = (finalOffset - startOffset) / angularSpeed, - OnDestroyOutOfBounds = AOECallbackDictionary.DONT_DESTROY_OOB - }.On(0, width) - ) - ) - { - Description = "A laser that sweeps from " + startOffset + " to " + finalOffset + " with a beam width of " + width + " and speed " + angularSpeed; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs.meta" deleted file mode 100644 index 3bcb992..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 13fd1a558d3174cfb9628f3817eb1c62 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs" deleted file mode 100644 index 56b8ffa..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs" +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Laser_Sweep_With_AOE : AISequence - { - public Laser_Sweep_With_AOE() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) - ), - new Pause(1f), - Merge( - new Laser(90, -90, 5, -90).Wait(1f), - new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) - ), - new PlayerLock(false), - new Pause(1f) - ) - { - Description = "Sweeps a laser back and forth, with two AOE attacks in between."; - Difficulty = 5.5f; - } - - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs.meta" deleted file mode 100644 index 5d22899..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Laser_Sweep_With_AOE.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f6723376e1352418590cd17979d08b86 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs" deleted file mode 100644 index f028f14..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs" +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using Projectiles; -using static BossController; -using BossCore; -using Moves.Basic; - -namespace Moves.Test -{ - public class Lightning_Arena : AISequence - { - public Lightning_Arena() : base - ( - new Teleport(World.Arena.CENTER).Wait(0.25f), - new AISequence(() => - { - List sequences = new List(); - - for (int i = 0; i < 1; i++) - { - sequences.Add(new Shoot1( - new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)); - } - return sequences.ToArray(); - }), - Pause(1f) - ) - { - Description = "Spawns lightning on the whole arena"; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs.meta" deleted file mode 100644 index c0dcfc3..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_Arena.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4bd36f0d869744e7c83335c8325fdc38 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs" deleted file mode 100644 index ee623e3..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs" +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using AI; -using UnityEngine; - -using AOEs; -using BossCore; -using Moves.Test; -using Moves.Basic; -using static BossController; - -namespace Moves.Test -{ - public class Lightning_With_AOE : AISequence - { - public Lightning_With_AOE() : base - ( - new ShootAOE(new AOE - { - AngleOffset = (-25), - RotationSpeed = (15f), - FixedWidth = (10f), - OuterSpeed = (Speed.MEDIUM_SLOW) - } - .On(-22.5f, 22.5f) - .On(90 - 22.5f, 90 + 22.5f) - .On(180 - 22.5f, 180 + 22.5f) - .On(270 - 22.5f, 270 + 22.5f) - ).Wait(1.5f), - new Lightning_Arena().Wait(0.5f), - new ShootAOE(new AOE - { - AngleOffset = (-25), - RotationSpeed = (15f), - FixedWidth = (10f), - OuterSpeed = (Speed.MEDIUM_SLOW) - } - .On(-22.5f, 22.5f) - .On(90 - 22.5f, 90 + 22.5f) - .On(180 - 22.5f, 180 + 22.5f) - .On(270 - 22.5f, 270 + 22.5f) - ).Wait(1.5f), - new Lightning_Arena().Wait(2.5f) - ) - { - Description = "Lightning with aoe"; - Difficulty = 6f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs.meta" deleted file mode 100644 index de00076..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Lightning_With_AOE.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f4e053c5803f94c709701b26ea28bfb1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs" deleted file mode 100644 index 2e78563..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs" +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using AI; -using BossCore; -using Moves.Basic; -using Projectiles; -using UnityEngine; - -namespace Moves.Test -{ - public class Pincer : AISequence - { - - public Pincer(float offset=0f, Speed speed=Speed.SNIPE) - { - Description = "Shoots two projectiles with an offset of +/-" + offset + " degrees with speed " + speed; - - float curveAmount = - -4f * // base - (float)speed * // turning radius is tighter when we go faster - (20f / (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude) * // contribution due to distance from player - Mathf.Sqrt(2) * Mathf.Sin(Mathf.Deg2Rad * offset); // contribution due to initial firing offset - - float maxTime = Mathf.Deg2Rad * offset / Mathf.Sin(Mathf.Deg2Rad * offset) * ((GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude / 50f); - maxTime += 0.1f; - - GetChildren = () => - new AISequence[] { - Merge( - new Shoot1(new ProjectileCurving(curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = offset, MaxTime = maxTime }), - new Shoot1(new ProjectileCurving(-curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = -offset, MaxTime = maxTime }) - ) - }; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs.meta" deleted file mode 100644 index b8d617e..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4a813033603df4f0db3b315c4b0d1b0f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs" deleted file mode 100644 index 217bf3a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs" +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Pincer_Sweep : AISequence - { - public Pincer_Sweep() : base - ( - /* - () => { - List sequences = new List(); - for (int i = 150; i >= 0; i -= 5) { - sequences.Add(new Pincer(i).Wait(0.05f)); - } - return sequences.ToArray(); - } - */ - For(150, 0, -5, i => new Pincer(i).Wait(0.05f)) - ) - { - Description = "Sweeps pincer projectiles from +150 to +0 degrees"; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs.meta" deleted file mode 100644 index 00f9565..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Pincer_Sweep.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 54de245874eed4d6a8e9b675a280782d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs" deleted file mode 100644 index dc0e07e..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs" +++ /dev/null @@ -1,39 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using AOEs; -using static BossController; - -namespace Moves.Test -{ - public class Player_Strafe_Waves : AISequence - { - - public Player_Strafe_Waves() : base - ( - /* - () => { - List sequences = new List(); - sequences.Add(new Teleport()); - sequences.Add(new PlayerLock(true)); - for (int i = 0; i < 6; i++) - { - sequences.Add(new Strafe(true, 60, 25, GameManager.Player.transform.position)); - sequences.Add(new ShootAOE(AOE.New(self).On(-60, 60))); - sequences.Add(new Pause(0.75f)); - } - sequences.Add(new PlayerLock(false)); - sequences.Add(new Pause(1f)); - return sequences.ToArray(); - } - */ - For(6, i => new Strafe(true, 60, 25, GameManager.Player.transform.position)).Then(new ShootAOE(new AOE().On(-60, 60))).Wait(0.75f) - ) - { - - } - } -} \ No newline at end of file diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs.meta" deleted file mode 100644 index 5a417e6..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Player_Strafe_Waves.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bb5f8baf3a0a342fe9400e130cfb1cd9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs" deleted file mode 100644 index d837b01..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs" +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; - -namespace Moves.Test -{ - public class Quick_Waves : AISequence - { - public Quick_Waves() : base - ( - Either( - new ShootArc(100, -60, 60, new Projectile { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), - new ShootAOE(new AOE { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), - new Shoot1(new ProjectileLightning()), - Merge( - new ShootArc(150, 22.5f, 22.5f + 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new ShootArc(150, -22.5f, -22.5f - 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }) - ), - new ShootArc(100, -60, 60, new Projectile { Speed = Speed.VERY_FAST, Size = Size.SMALL }).Wait(0.1f).Times(5) - ).Wait(0.6f).Times(7) - ) - { - Description = "Fires a quick barrage of random wave-based attacks."; - Difficulty = 6f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs.meta" deleted file mode 100644 index 50095ec..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Quick_Waves.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 478d98494e8c642139818c0c35d5be22 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs" deleted file mode 100644 index 347e18a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs" +++ /dev/null @@ -1,78 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Projectiles; -using AOEs; -using Moves.Basic; - -namespace Moves.Test -{ - /// - /// I really like the lasers. - /// - public class Random_Leading : AISequence - { - public Random_Leading(int count = 20) : base - ( - /* - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = 0; i < 50; i++) - { - sequences.Add( - new Shoot1( - new ProjectileReverse() - .Speed(BossCore.Speed.VERY_FAST) - .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) - * (5 * Vector3.forward))) - ); - } - return Merge(sequences.ToArray()); - }), - new PlayerLock(false) - */ - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), - new Laser(-60, 480, 5, 60), - new Laser(60, 480, 5, 45), - new Laser(120, 480, 5, 30), - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f) - ) - { - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs.meta" deleted file mode 100644 index 8942571..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Random_Leading.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 93dac8893eccb4c34bd76772e85d6dbc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs" deleted file mode 100644 index fc02566..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs" +++ /dev/null @@ -1,59 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Projectiles; -using Moves.Basic; - -namespace Moves.Test -{ - public class SpinReverse : AISequence - { - public SpinReverse(int count = 50) : base - ( - /* - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = 0; i < 50; i++) - { - sequences.Add( - new Shoot1( - new ProjectileReverse() - .Speed(BossCore.Speed.VERY_FAST) - .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) - * (5 * Vector3.forward))) - ); - } - return Merge(sequences.ToArray()); - }), - new PlayerLock(false) - */ - ForConcurrent(count, i => - new Shoot1( - new ProjectileCurving(187, false) - { - Start = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward)), - Target = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward) + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.right)), - Speed = (BossCore.Speed.FAST), - MaxTime = (0.75f), - OnDestroyTimeout = self => - new Shoot1( - new ProjectileReverse() - { - Start = (self.transform.position), - Target = (PLAYER_POSITION), - Speed = (BossCore.Speed.SNIPE), - MaxTime = (0.75f) - } - ) - } - ) - ) - ) - { - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs.meta" deleted file mode 100644 index 2f16f11..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/ReverseTest.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ca9c6f4a743904703bf90a7dc319120d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs" deleted file mode 100644 index f2ad7b9..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs" +++ /dev/null @@ -1,62 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using static BossController; -using static World.Arena; -using BossCore; - -namespace Moves.Test -{ - public class Sniper_Final : AISequence - { - public Sniper_Final() : base - ( - new Teleport(NORTH_FAR).Wait(0.5f), - new ShootAOE(new AOE { - OuterSpeed = Speed.SLOW, - InnerSpeed = Speed.FROZEN, - InnerScale = 0f, - Target = SOUTH_FAR, - MaxTime = 2f, - OnDestroyTimeout = - self => - { - AOE clone = self.data.Clone(); - clone.MaxTime = 10f; - clone.Freeze(); - clone.Create(); - } - }.On(-80, 80) - ) - .Wait(1f), - new AISequence( - new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) - ).Times(2), - new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), - new ShootAOE(new AOE { Start = WEST_FAR, Target = EAST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), - new ShootAOE(new AOE { Start = EAST_FAR, Target = WEST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) - ).Times(2), - new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f), - new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f) - ) - ) - { } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs.meta" deleted file mode 100644 index 498a836..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Sniper_Final.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0f9b0f17946b2494fa8c1868167b392d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs" deleted file mode 100644 index 745379d..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs" +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Test : AISequence - { - public Test() : base - ( - //new Shoot1(new Projectile { Target = LEADING_PLAYER_POSITION, Speed = Speed.VERY_FAST }).Wait(0.5f) - new Shoot1(new ProjectileHoming(difficulty: 1) { Speed = Speed.VERY_FAST }).Wait(0.1f) - ) - { - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs.meta" deleted file mode 100644 index bfbc01a..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Test/Test.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 89d4ea6d739ef4a9da774cc00dfaf281 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1.meta" deleted file mode 100644 index 7971234..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1.meta" +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 54096d36918404c72b0331f8ba569a3b -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs" deleted file mode 100644 index c095006..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs" +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AI; - -using Moves.Basic; - -namespace Moves.Tutorial1 -{ - public class Shoot_1_Several : AISequence - { - public Shoot_1_Several() : base - ( - new Teleport().Wait(0.5f), - new AISequence(() => - { - return new Shoot1().Wait(0.1f).Times(Random.Range(5, 10)); - }), - new Pause(1.5f) - ) - { - Description = "Shoots between 5 and 10 default projectiles at the player."; - Difficulty = 2f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs.meta" deleted file mode 100644 index 59be327..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_1_Several.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 1af38270d97744392b830ad85a8581b6 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs" deleted file mode 100644 index 5cc2cc8..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs" +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AI; - -using Moves.Basic; - -namespace Moves.Tutorial1 -{ - public class Shoot_3_Several : AISequence - { - public Shoot_3_Several() : base - ( - new Teleport().Wait(0.5f), - new AISequence(() => - { - return new Shoot3().Wait(0.1f).Times(Random.Range(7, 12)); - }), - new Pause(1.5f) - ) - { - Description = "Shoots between 7 and 12 three-way projectiles at the player."; - Difficulty = 3f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs.meta" deleted file mode 100644 index 28accc1..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_3_Several.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5fbb3939478c24dfeb4a470c4e3ce476 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs" deleted file mode 100644 index c3e45b8..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs" +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using AI; - -using Moves.Basic; - -namespace Moves.Tutorial1 -{ - public class Shoot_Arc : AISequence - { - public Shoot_Arc(int width=70, bool dense=false) : base - ( - new Teleport().Wait(0.25f), - new ShootArc(dense ? 100 : 50, -width / 2, width / 2), - new Pause(1.5f) - ) - { - Description = "Shoots a" + (dense ? " dense" : "n") + " arc, " + width + " degrees wide, at the player."; - Difficulty = 2f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs.meta" deleted file mode 100644 index 0a8f258..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial1/Shoot_Arc.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c077f4830e5424f0f89cda345dec2403 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2.meta" deleted file mode 100644 index ed7df2c..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2.meta" +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 3098ce154c471453aa1348424b3a2648 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs" deleted file mode 100644 index 88981b8..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs" +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Projectiles; -using static BossController; - -using Moves.Basic; - -namespace Moves.Tutorial2 -{ - public class Force_Block : AISequence - { - public Force_Block() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), - new PlayerLock(false), - new Pause(4f) - ) - { - Description = "Fires 10 sets of tiny projectiles in a 180 degree arc, too dense to dash through."; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs.meta" deleted file mode 100644 index 9031871..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial2/Force_Block.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0c88bb7523eea494da001486db601a39 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3.meta" deleted file mode 100644 index 514ff29..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3.meta" +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c26fd6fb38627405aae615fb2c020069 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs" deleted file mode 100644 index fcb33ba..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs" +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using static BossController; -using Moves.Basic; - -namespace Moves.Tutorial3 -{ - public class Shoot_AOE : AISequence - { - - public Shoot_AOE(int width) : base - ( - new Teleport().Wait(0.25f), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-width / 2, width / 2)), - new Pause(0.5f) - ) - { - Description = "Shoots an AOE " + width + " degrees wide at the player."; - Difficulty = 1.5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs.meta" deleted file mode 100644 index 6b27dd1..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Tutorial3/Shoot_AOE.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4e0cd36625ac944cbb96b81ff8673ac9 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted.meta" deleted file mode 100644 index 53d20ea..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted.meta" +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 19f0eee5fa4144939b234a29e52ef22f -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs" deleted file mode 100644 index 29912a8..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs" +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using static World.Arena; -using Projectiles; - -namespace Moves.User -{ - public class Big_Homing_Strafe : AISequence - { - public Big_Homing_Strafe() : base - ( - new MoveCamera(false, new Vector3(0, 17.5f, -35f)).Wait(1f), - new Teleport(NORTH_FAR).Wait(1f), - new ShootHomingStrafe(strafeAmount: 65).Times(10), - new Teleport(NORTH_FAR).Wait(1f), - new ShootHomingStrafe(strafeAmount: 15).Times(15), - new MoveCamera(true).Wait(2f) - ) - { - Description = "Does a circle along the outside of the arena, shooting homing projectiles at the player."; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs.meta" deleted file mode 100644 index 26d7550..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Big_Homing_Strafe.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 38f04ae34b2a24e4583f6af97baef312 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs" deleted file mode 100644 index 1515fb6..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs" +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Dash_Test : AISequence - { - public Dash_Test() : base - ( - new ShootAOE(new AOE { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f) ), - new Pause(0.75f) - ) - { - Description = "Aggressively tests dashing."; - Difficulty = 8f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs.meta" deleted file mode 100644 index 01368d6..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Dash_Test.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a230885efa9f04c25aa2deebc7f6009f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs" deleted file mode 100644 index 25141dd..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs" +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static World.Arena; - -namespace Moves.Unsorted -{ - /* - * A really intricate pattern. 6 projectiles that explode into 6 more projectiles, - * repeated twice to forme a lattice. Safe spot is a midpoint between any two of - * the first projectiles, near the far edge of the arena. - * - * ** This might have changed due to the way ShootDeathHex was implemented. - */ - public class Death_Hex : AISequence - { - public Death_Hex() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot_Death_Hex(2f).Wait(1f), - new Shoot_Death_Hex(1f).Wait(2f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(0.75f) - ) - { - Description = "Fires 6 projectiles that explode into 6 more projectiles, repeated twice to form a lattice."; - Difficulty = 9f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs.meta" deleted file mode 100644 index 4fd3096..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Death_Hex.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: af6de9d59d1e340dca3eb7a5794efb47 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs" deleted file mode 100644 index 58d7c07..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs" +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static World.Arena; - -namespace Moves.Unsorted -{ - public class Double_Hex_Curve : AISequence - { - public Double_Hex_Curve() : base - ( - new Teleport(CENTER).Wait(1.5f), - new PlayerLock(true), - new Shoot_Hex_Curve(true), - new AOE_360().Wait(0.5f), - new Shoot_Hex_Curve(true, 30f).Wait(0.5f), - new AOE_360().Wait(1f), - new AOE_360().Wait(1f), - new PlayerLock(false) - ) - { - Description = "Fires two hex curves, the second offset 30 degrees from the first."; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs.meta" deleted file mode 100644 index 036459d..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: dd7f511867c014f278d55f64ce328dae -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs" deleted file mode 100644 index 0cff6b1..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs" +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -using static World.Arena; - -namespace Moves.Unsorted -{ - public class Double_Hex_Curve_Hard : AISequence - { - public Double_Hex_Curve_Hard() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot_Hex_Curve(false, 0f), - new Shoot_Hex_Curve(false, 30f), - // This homing might be too hard; especially with this amount of 360s. - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(10), - new AOE_360(), - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), - new AOE_360(), - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), - new AOE_360().Wait(0.5f), - new AOE_360().Wait(0.5f) - ) - { - Description = "A harder variant of the double hex curve."; - Difficulty = 10f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs.meta" deleted file mode 100644 index 82d5370..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Double_Hex_Curve_Hard.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8f8f7a93b4c2a445bbc3108fadbf883f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs" deleted file mode 100644 index 0c46461..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs" +++ /dev/null @@ -1,59 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Four_Way_Sweep_With_Homing : AISequence - { - public Four_Way_Sweep_With_Homing() : base - ( - // TODO refactor me to use standard notation - () => { - List sequences = new List(); - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 7; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE})); - for (int j = 7; j < 15; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new AOE_360()); - } - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 5; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); - for (int j = 5; j < 10; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); - for (int j = 10; j < 15; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new AOE_360()); - } - return sequences.ToArray(); - } - ) - { - Description = "Shoots a 4-directional sweep with homing projectiles in between."; - Difficulty = 6f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs.meta" deleted file mode 100644 index 0eb1030..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Four_Way_Sweep_With_Homing.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6e2ec7802836743c1b34b7951c09ee3e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs" deleted file mode 100644 index ba2dd7d..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs" +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Hex_Curve_Intro : AISequence - { - public Hex_Curve_Intro() : base - ( - new Shoot_Hex_Curve(true), - new AOE_360().Wait(2.5f), - new Shoot_Hex_Curve(false), - new AOE_360().Wait(2.5f), - new Shoot_Hex_Curve(true), - new AOE_360(), - new Shoot_Hex_Curve(false).Wait(1f), - new AOE_360().Wait(1f), - new AOE_360().Wait(1.5f), - new Teleport().Wait(0.5f) - ) - { - Description = "Introduces the player to the hex curve attack"; - Difficulty = 4f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs.meta" deleted file mode 100644 index 01a8073..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Hex_Curve_Intro.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 34ab945d52f724b6495892198c8eef6f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs" deleted file mode 100644 index ba2ec91..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs" +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -using static World.Arena; - -namespace Moves.Unsorted -{ - public class Jump_Rope_Fast : AISequence - { - public Jump_Rope_Fast() : base - ( - new MoveCamera(false, new Vector3(0, 17.5f, -35)).Wait(1f), - new Teleport(WEST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(EAST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(WEST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(EAST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new MoveCamera(true) - ) - { - Description = "Fires lines at the player from the left and right."; - Difficulty = 4f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs.meta" deleted file mode 100644 index 6821eb8..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Jump_Rope_Fast.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4b0799783c67046f4a5f1f04a27b1ee2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs" deleted file mode 100644 index 2c59c3d..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs" +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.User -{ - public class Random_200 : AISequence - { - public Random_200() : base - ( - () => - { - List sequences = new List(); - for (int j = 0; j < 200; j++) { - switch (Random.Range(0, 3)) - { - case 0: sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) - )); break; - case 1: sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) - )); break; - case 2: - sequences.Add( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }) - ); - break; - } - if (j % 20 == 0) { - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.MEDIUM })); - } - if (j % 40 == 0) { - sequences.Add(new AISequence(() => - { - new Projectile - { - Size = Size.MEDIUM, - Speed = Speed.MEDIUM, - AngleOffset = Random.Range(0, 360f), - MaxTime = 0.5f, - OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE - }.Create(); - })); - } - sequences.Add(Pause(0.05f)); - } - return sequences.ToArray(); - } - ) - { - Description = "Spawns 200 random projectiles."; - Difficulty = 8f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs.meta" deleted file mode 100644 index 39adc08..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Random_200.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: eb9518e7faa8b495f968824c29ed0f56 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs" deleted file mode 100644 index a6b1e90..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs" +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Unsorted -{ - public class Shoot3_Wave3 : AISequence - { - public Shoot3_Wave3() : base - ( - new Teleport().Wait(0.5f), - new AOE_360(), - new Shoot3().Wait(0.1f).Times(20), - new AOE_360(), - new Shoot3().Wait(0.1f).Times(20), - new AOE_360().Wait(0.5f) - ) - { - Description = "40 basic bullets, with a 360 wave at the start, middle, and end."; - Difficulty = 3f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs.meta" deleted file mode 100644 index bfe53d6..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot3_Wave3.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bcb3841cf08f64f0b98ce3c11109f231 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs" deleted file mode 100644 index a58c0ff..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs" +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.User -{ - public class Shoot_4_Waves_Behind : AISequence - { - public Shoot_4_Waves_Behind() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(220f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(200f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(160f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(140f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(5f) - ) - { - Description = "Your description here"; - Difficulty = 1f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs.meta" deleted file mode 100644 index 35281ee..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_4_Waves_Behind.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bee754d65407e4ef78a96c99355f8d7a -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs" deleted file mode 100644 index cdf15e1..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs" +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Shoot_Hex_Curve : AISequence - { - public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) : base - ( - ForConcurrent(6, i => - new Shoot1( - new ProjectileCurving((float)Speed.MEDIUM * (clockwise ? 1 : -1) * 2f, true) { - MaxTime = 3f, AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) - } - ) - ) - ) - { - Description = "Shoots 6 curving projectiles " + (clockwise ? "clockwise" : "counterclockwise") + " from the boss's location."; - Difficulty = 3f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs.meta" deleted file mode 100644 index e8de7a1..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Shoot_Hex_Curve.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f927d8c238bc442ebbd7a3e08dadfca3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs" deleted file mode 100644 index 1271ced..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs" +++ /dev/null @@ -1,58 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Sweep_Back_And_Forth_Advanced : AISequence - { - public Sweep_Back_And_Forth_Advanced() : base - ( - // TODO refactor me to use standard notation - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => { - List sequences = new List(); - for (int i = -30; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - for (int i = -80; i < 80; i += 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.TINY, Speed = Speed.FAST }) - ).Wait(0.02f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -30; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - return sequences.ToArray(); - }).Wait(0.75f), - new PlayerLock(false) - ) - { - Description = "Sweeps back and forth with additional medium and tiny projectiles."; - Difficulty = 6.5f; - } - } -} \ No newline at end of file diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta" deleted file mode 100644 index 24c65ef..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Advanced.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9714e821119b040eea1f7f93e1faca4e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs" deleted file mode 100644 index 788f355..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs" +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; - -namespace Moves.Unsorted -{ - public class Sweep_Back_And_Forth_Medium : AISequence - { - public Sweep_Back_And_Forth_Medium() : base - ( - // TODO refactor me to use standard notation - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => { - List sequences = new List(); - for (int i = -30; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = -80; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - return sequences.ToArray(); - }).Wait(0.75f), - new PlayerLock(false) - ) - { - Description = "Sweeps back and forth with additional medium projectiles."; - Difficulty = 5.5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta" deleted file mode 100644 index 157f6b0..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Back_And_Forth_Medium.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 494510ae5a4af4916af78bef48dd860f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs" deleted file mode 100644 index 6f076ba..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs" +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Unsorted -{ - public class Sweep_Wall : AISequence - { - public Sweep_Wall(bool clockwise=true) : base - (() => - { - List sequences = new List(); - - for (int angle = 0; angle != (clockwise ? 72 : -72); angle += clockwise ? 6 : -6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - - for (int angle = clockwise ? 72 : -72; angle != 0; angle -= clockwise ? 6 : -6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - return sequences.ToArray(); - } - ) - { - Description = "Shoots a sweeping wall " + (clockwise ? "clockwise" : "counterclockwise") + "."; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs.meta" deleted file mode 100644 index 9aaab9f..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3054d21e08b294da395e8137d646df38 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs" deleted file mode 100644 index afce042..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs" +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static BossController; - -namespace Moves.Unsorted -{ - public class Sweep_Wall_Back_And_Forth : AISequence - { - public Sweep_Wall_Back_And_Forth() : base - ( - new PlayerLock(true), - new Sweep_Wall(true), - new Sweep_Wall(false), - new PlayerLock(false) - ) - { - Description = "Sweeps a wall clockwise, then counterclockwise."; - Difficulty = 6f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta" deleted file mode 100644 index 7477eb8..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Sweep_Wall_Back_And_Forth.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4f9d04b0d5cd848e9a0269e19988fb8e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs" deleted file mode 100644 index ca68ad1..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs" +++ /dev/null @@ -1,47 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using AOEs; -using BossCore; -using Moves.Basic; -using Projectiles; -using static World.Arena; - -namespace Moves.Unsorted -{ - public class Wave_Circle : AISequence - { - - private class Slow_Wave_Circle : AISequence { - public Slow_Wave_Circle() : base - ( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), - new Strafe(true, 60f, 50).Wait(0.5f) - ) - { - Description = "Fires a medium-slow AOE, and then strafes 60 degrees clockwise."; - Difficulty = 2f; - } - } - - public Wave_Circle() : base - ( - new Teleport(WEST_MED), - new Slow_Wave_Circle().Times(6), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW) - ) - { - Description = "Fires six slow circles around the arena in a circular pattern. Then repeats twice, with lines appearing on the left and right sides."; - Difficulty = 5f; - } - } -} diff --git "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs.meta" "b/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs.meta" deleted file mode 100644 index e47b7bc..0000000 --- "a/Assets/Scripts/Boss Core/AI/\360\237\230\202/Unsorted/Wave_Circle.cs.meta" +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 04c02d677a15844a2957185ce382513d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 3ca25c092a6683f96023a8468d0d54af2b956ae9 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Tue, 6 Nov 2018 16:46:06 -0600 Subject: [PATCH 21/33] Refactored AISequences (again) to help remove arbitrary code execution. Added deprecated code to help the process. --- Assets/Scripts/Boss Core/AI/AISequence.cs | 91 +++++++-------- Assets/Scripts/Boss Core/AI/Move.cs | 39 +++++++ Assets/Scripts/Boss Core/AI/Move.cs.meta | 11 ++ .../Boss Core/AI/Moves/Basic/AOE_120.cs | 8 +- .../Boss Core/AI/Moves/Basic/AOE_131.cs | 22 ++-- .../Boss Core/AI/Moves/Basic/AOE_360.cs | 8 +- .../Boss Core/AI/Moves/Basic/AOE_90.cs | 8 +- .../Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs | 16 +-- .../AI/Moves/Basic/Shoot_Death_Hex.cs | 13 +-- .../Boss Core/AI/Moves/Basic/Shoot_Split_6.cs | 28 ++--- .../AI/Moves/Basic/Shoot_Split_6_Curve.cs | 28 ++--- .../AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs | 21 ++-- .../Scripts/Boss Core/AI/Moves/Basic/Sweep.cs | 41 +++---- .../AI/Moves/Basic/Sweep_Back_And_Forth.cs | 44 ++++---- .../Boss Core/AI/Moves/Basic/Sweep_Both.cs | 40 +++---- .../AI/Moves/Test/Double_Laser_Sweep.cs | 34 +++--- .../AI/Moves/Test/Double_Laser_Sweep_AOE.cs | 38 +++---- .../Boss Core/AI/Moves/Test/Horseshoe_AOE.cs | 38 +++---- .../Scripts/Boss Core/AI/Moves/Test/Laser.cs | 24 ++-- .../AI/Moves/Test/Laser_Sweep_With_AOE.cs | 34 +++--- .../AI/Moves/Test/Lightning_Arena.cs | 34 +++--- .../AI/Moves/Test/Lightning_With_AOE.cs | 60 +++++----- .../Scripts/Boss Core/AI/Moves/Test/Pincer.cs | 25 ++--- .../Boss Core/AI/Moves/Test/Pincer_Sweep.cs | 17 +-- .../AI/Moves/Test/Player_Strafe_Waves.cs | 25 +---- .../Boss Core/AI/Moves/Test/Quick_Waves.cs | 28 ++--- .../Boss Core/AI/Moves/Test/Random_Leading.cs | 99 +++++++---------- .../Boss Core/AI/Moves/Test/ReverseTest.cs | 68 ++++-------- .../Boss Core/AI/Moves/Test/Sniper_Final.cs | 90 +++++++-------- .../Scripts/Boss Core/AI/Moves/Test/Test.cs | 9 +- .../AI/Moves/Tutorial1/Shoot_1_Several.cs | 21 ++-- .../AI/Moves/Tutorial1/Shoot_3_Several.cs | 21 ++-- .../Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs | 14 +-- .../AI/Moves/Tutorial2/Force_Block.cs | 18 +-- .../Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs | 14 +-- .../Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs | 105 ++++++++++++++++++ .../AI/Moves/Unsorted/AOE_Test_2.cs.meta | 11 ++ .../AI/Moves/Unsorted/Big_Homing_Strafe.cs | 2 +- .../Boss Core/AI/Moves/Unsorted/Dash_Test.cs | 2 +- .../Boss Core/AI/Moves/Unsorted/Death_Hex.cs | 2 +- .../AI/Moves/Unsorted/Double_Hex_Curve.cs | 4 +- .../Moves/Unsorted/Double_Hex_Curve_Hard.cs | 4 +- .../Unsorted/Four_Way_Sweep_With_Homing.cs | 20 ++-- .../AI/Moves/Unsorted/Hex_Curve_Intro.cs | 4 +- .../Unsorted/Homing_Strafe_Wave_Shoot.cs | 23 ++++ .../Unsorted/Homing_Strafe_Wave_Shoot.cs.meta | 11 ++ .../AI/Moves/Unsorted/Jump_Rope_Fast.cs | 4 +- .../Boss Core/AI/Moves/Unsorted/Random_200.cs | 98 ++++++++-------- .../AI/Moves/Unsorted/Shoot3_Wave3.cs | 4 +- .../AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs | 17 +-- .../AI/Moves/Unsorted/Shoot_Hex_Curve.cs | 2 +- .../Unsorted/Sweep_Back_And_Forth_Advanced.cs | 2 +- .../Unsorted/Sweep_Back_And_Forth_Medium.cs | 2 +- .../Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs | 39 ++++--- .../Unsorted/Sweep_Wall_Back_And_Forth.cs | 4 +- .../AI/Moves/Unsorted/Wave_Circle.cs | 4 +- .../AI/Moves/Unsorted/Wave_Reverse.cs | 37 ++++++ .../AI/Moves/Unsorted/Wave_Reverse.cs.meta | 11 ++ .../AI/Moves/Unsorted/Wave_Reverse_Faster.cs | 37 ++++++ .../Unsorted/Wave_Reverse_Faster.cs.meta | 11 ++ .../AI/Moves/Unsorted/Wave_Reverse_Target.cs | 37 ++++++ .../Unsorted/Wave_Reverse_Target.cs.meta | 11 ++ .../Unsorted/Wave_Reverse_Target_Homing.cs | 37 ++++++ .../Wave_Reverse_Target_Homing.cs.meta | 11 ++ .../Boss Core/AI/Phases/Phase_Test_Latest.cs | 2 +- .../Boss Core/AI/SequenceDictionary.cs | 94 ---------------- 66 files changed, 990 insertions(+), 791 deletions(-) create mode 100644 Assets/Scripts/Boss Core/AI/Move.cs create mode 100644 Assets/Scripts/Boss Core/AI/Move.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Homing_Strafe_Wave_Shoot.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Homing_Strafe_Wave_Shoot.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/AISequence.cs b/Assets/Scripts/Boss Core/AI/AISequence.cs index c8a9324..72dc87d 100644 --- a/Assets/Scripts/Boss Core/AI/AISequence.cs +++ b/Assets/Scripts/Boss Core/AI/AISequence.cs @@ -20,24 +20,8 @@ public partial class AISequence /// public static bool ShouldTryExpandFunctions = false; - /// - /// Should we allow new AISequences to be generated? This is false by default; when - /// we are ready to load in the sequence dictionaries, we set this to true. This will - /// catch floating AISequence declarations at runtime. - /// - /// TODO: Make a better way to toggle this value. Currently this is true when loading in routines/phases, - /// and when generating projectile/AOE callbacks. This means the logic for setting it to false is somewhat complex. - /// Is it really so bad to let people put AISequences wherever they want? - /// - public static bool ShouldAllowInstantiation = true; - - private static void CheckAllowInstantiation() - { - if (!ShouldAllowInstantiation) - { - throw new System.Exception("Free-floating AISequence generated outside of Load()."); - } - } + // TODO remove this later by making all constructors that set it protected. + public bool _isDirty = false; // TODO put these in a publically accessable location. Possibly in world or game manager. public static ProxyVector3 PLAYER_POSITION = new ProxyVector3(() => { return GameManager.Player.transform.position + World.Arena.CENTER; }); @@ -168,66 +152,73 @@ public override string ToString() { #region Constructors - // Used internally as a shortcut. + // Used internally as a shortcut. + // TODO make private; currently Moves.Basic.Pause() uses this + [System.Obsolete] protected AISequence(AIEvent[] events) { - CheckAllowInstantiation(); + _isDirty = true; this.events = events; this.children = null; this.GetChildren = () => { return children; }; - } - + } + /* * Creates a new singleton AISequence from the given Action. * This has no delay after its event. + * TODO make protected */ - public AISequence(AIEvent.Action a) + [System.Obsolete] + public AISequence(AIEvent.Action a) { - CheckAllowInstantiation(); + _isDirty = true; this.events = new AIEvent[] { new AIEvent(0f, a) }; this.children = null; this.GetChildren = () => { return children; }; - } - - /* - * Takes an arbitrary length list of AISequences and combines them into an AISequence. - */ - public AISequence(params AISequence[] sequences) - { - CheckAllowInstantiation(); - this.events = null; - this.children = sequences; - - this.GetChildren = () => { return children; }; } /* * Keeps track of a function that can "explode" into a list of AISequences. * When this is added to the event queue, this function is called. + * TODO make protected */ - public AISequence(GenerateSequences genFunction) + [System.Obsolete] + public AISequence(GenerateSequences genFunction) { - CheckAllowInstantiation(); + _isDirty = true; this.events = null; this.children = null; this.GetChildren = () => genFunction(); - this.Description = ShouldTryExpandFunctions ? null : "Some sequences were generated from a function."; + this.Description = ShouldTryExpandFunctions ? null : "Some sequences were generated from a function."; } /* * Keeps track of a function that can "explode" into a single AISequence. * When this is added to the event queue, this function is called. + * TODO make protected */ - public AISequence(GenerateSequence genFunction) - { - CheckAllowInstantiation(); + [System.Obsolete] + public AISequence(GenerateSequence genFunction) + { + _isDirty = true; this.events = null; this.children = null; this.GetChildren = () => new AISequence[] { genFunction() }; - this.Description = ShouldTryExpandFunctions ? null : "A sequence was generated from a function."; + this.Description = ShouldTryExpandFunctions ? null : "A sequence was generated from a function."; + } + + /* + * Takes an arbitrary length list of AISequences and combines them into an AISequence. + */ + public AISequence(params AISequence[] sequences) + { + this.events = null; + this.children = sequences; + + this.GetChildren = () => { return children; }; } #endregion @@ -405,24 +396,28 @@ public static AISequence Merge(List sequences) /* * Returns this AISequence repeated "times" number of times. + * TODO make a ProxyInt */ public AISequence Times(int times) { - if (times <= 0) + if (times <= 0) { Debug.LogError("Cannot repeat sequence 0 or fewer times"); times = 1; } - if (times == 1) { + if (times == 1) + { return this; } AISequence[] newSequences = new AISequence[times]; - for (int i = 0; i < times; i++) { + for (int i = 0; i < times; i++) + { newSequences[i] = this; } - return new AISequence(newSequences) { - Description = times + " times: " + return new AISequence(newSequences) + { + Description = times + " times: " }; } diff --git a/Assets/Scripts/Boss Core/AI/Move.cs b/Assets/Scripts/Boss Core/AI/Move.cs new file mode 100644 index 0000000..fd9ce94 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Move.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AI +{ + public class Move : AISequence + { + private AISequence _sequence; + public AISequence Sequence + { + get { + if (_sequence == null) { + throw new System.Exception("Move created without a Sequence defined. " + + "Either set \"Sequence\" in the constructor or use the base(...) notation."); + } + return _sequence; + } + + protected set { _sequence = value; } + } + + public Move() { + this.GetChildren = () => new AISequence[] { Sequence }; + } + + // TODO this is provided for backwards compatibility with the base(...) + // style of building moves. Later we should move away from it. + [System.Obsolete] + public Move(params AISequence[] sequences) : base(sequences) { + Debug.LogWarning("Using the base(...) notation is deprecated! Name: " + Name); + } + + // Hide the AISequence constructors so that we get a compilation error for using them + private Move(AIEvent[] events) { } + private Move(GenerateSequence sequence) { } + private Move(GenerateSequences sequence) { } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Move.cs.meta b/Assets/Scripts/Boss Core/AI/Move.cs.meta new file mode 100644 index 0000000..0d94c73 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Move.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84b899b4703c74802b1920cdc598ed4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs index 51f1701..d302084 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs @@ -8,15 +8,13 @@ namespace Moves.Basic { - public class AOE_120 : AISequence + public class AOE_120 : Move { - public AOE_120() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) - ) + public AOE_120() { Description = "Shoots a 120 degree wide AOE at the player."; Difficulty = 1f; + Sequence = new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs index 3897529..eab764a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs @@ -11,20 +11,20 @@ namespace Moves.Basic { - public class AOE_131 : AISequence + public class AOE_131 : Move { - public AOE_131() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.19f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20 }.On(-60, -40).On(-10, 10).On(40, 60)).Wait(0.76f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.2f), - new PlayerLock(false).Wait(1f) - ) + public AOE_131() { Description = "Shoots an AOE attack in a 1-3-1 pattern."; - Difficulty = 5f; + Difficulty = 5f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + new PlayerLock(true), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.19f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20 }.On(-60, -40).On(-10, 10).On(40, 60)).Wait(0.76f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.2f), + new PlayerLock(false).Wait(1f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs index 1d7d225..8cc52a4 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs @@ -8,15 +8,13 @@ namespace Moves.Basic { - public class AOE_360 : AISequence + public class AOE_360 : Move { - public AOE_360() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(0, 360)) - ) + public AOE_360() { Description = "Shoots a 360 degree wide AOE."; Difficulty = 1f; + Sequence = new ShootAOE(new AOE { FixedWidth = 3f }.On(0, 360)); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs index eb45036..db213a2 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs @@ -8,15 +8,13 @@ namespace Moves.Basic { - public class AOE_90 : AISequence + public class AOE_90 : Move { - public AOE_90() : base - ( - new ShootAOE(new AOE { FixedWidth = 3f }.On(-45, 45)) - ) + public AOE_90() { Description = "Shoots a 90 degree wide AOE at the player."; Difficulty = 1f; + Sequence = new ShootAOE(new AOE { FixedWidth = 3f }.On(-45, 45)); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs index 3d65d8a..5eaa926 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs @@ -6,18 +6,18 @@ namespace Moves.Basic { - public class Shoot_2_Waves : AISequence + public class Shoot_2_Waves : Move { - public Shoot_2_Waves() : base - ( - new Teleport().Wait(0.5f), - new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = -2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = 2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new Pause(1f) - ) + public Shoot_2_Waves() { Description = "Shoots 2 90 waves as one block, encouraging dodging through them."; Difficulty = 4f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = -2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = 2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new Pause(1f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs index 12cdaf9..9dfb3ee 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs @@ -11,15 +11,14 @@ namespace Moves.Basic { - public class Shoot_Death_Hex : AISequence + public class Shoot_Death_Hex : Move { - public Shoot_Death_Hex(float maxTime = 1f) : base - ( - new Shoot1(new ProjectileDeathHex() { MaxTime = maxTime }).Wait(1f) - ) + public Shoot_Death_Hex(float maxTime = 1f) { Description = "Shoots a high-damage projectile that splits into 6 curving projectiles with trails."; - Difficulty = 4f; - } + Difficulty = 4f; + Sequence = new Shoot1(new ProjectileDeathHex() { MaxTime = maxTime }).Wait(1f); + + } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs index 7b4e163..55a53f6 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs @@ -11,24 +11,24 @@ namespace Moves.User { - public class Shoot_Split_6 : AISequence + public class Shoot_Split_6 : Move { - public Shoot_Split_6() : base - ( - new Teleport().Wait(0.5f), - new Shoot1( - new ProjectileCurving(0f, false) - { - MaxTime = 0.25f, - Speed = Speed.VERY_FAST, - OnDestroyTimeout = CallbackDictionary.SPAWN_6 - } - ), - new Pause(0.5f) - ) + public Shoot_Split_6() { Description = "Shoots a projectile that splits into 6 more projectiles."; Difficulty = 4f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + new Shoot1( + new ProjectileCurving(0f, false) + { + MaxTime = 0.25f, + Speed = Speed.VERY_FAST, + OnDestroyTimeout = CallbackDictionary.SPAWN_6 + } + ), + new Pause(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs index 0a132bf..544532e 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs @@ -11,23 +11,23 @@ namespace Moves.User { - public class Shoot_Split_6_Curve : AISequence + public class Shoot_Split_6_Curve : Move { - public Shoot_Split_6_Curve() : base - ( - new Teleport().Wait(0.5f), - new Shoot1( - new ProjectileDeathHex - { - MaxTime = 0.25f, - Speed = Speed.VERY_FAST - } - ), - new Pause(0.5f) - ) + public Shoot_Split_6_Curve() { Description = "Shoots a projectile that splits into 6 curving projectiles."; - Difficulty = 5f; + Difficulty = 5f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + new Shoot1( + new ProjectileDeathHex + { + MaxTime = 0.25f, + Speed = Speed.VERY_FAST + } + ), + new Pause(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs index 7e15f4c..e53cc79 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs @@ -7,20 +7,21 @@ namespace Moves.Basic { - public class Shoot_Wave_Middle_Gap : AISequence + public class Shoot_Wave_Middle_Gap : Move { - public Shoot_Wave_Middle_Gap() : base - ( - new Teleport().Wait(0.5f), - Merge( - new ShootArc(150, 22.5f, 22.5f + 60f), - new ShootArc(150, -22.5f, -22.5f - 60f) - ), - new Pause(1f) - ) + public Shoot_Wave_Middle_Gap() { Description = "Shoots two 60 degree waves with a 45 degree gap in the middle."; Difficulty = 3f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + Merge( + new ShootArc(150, 22.5f, 22.5f + 60f), + new ShootArc(150, -22.5f, -22.5f - 60f) + ), + new Pause(1f) + ); } + } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs index d7a1893..a064cf9 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs @@ -9,39 +9,24 @@ namespace Moves.Basic { - public class Sweep : AISequence + public class Sweep : Move { - public Sweep(bool reverse = false) : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - For(reverse ? 90 : -30, - reverse ? -30 : 90, - reverse ? -5 : 5, - i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f) - ), - /* - new AISequence(() => - { - int start = reverse ? 90 : -30; - int end = reverse ? -30 : 90; - int step = reverse ? -5 : 5; - - List sequences = new List(); - for (int i = start; i != end; i += step) - { - sequences.Add(new Shoot1(new Projectile().AngleOffset(i)).Wait(0.05f)); - } - return sequences.ToArray(); - }), - */ - new PlayerLock(false), - Pause(0.25f) - ) + public Sweep(bool reverse = false) { Description = "Shoots a sweep from " + (reverse ? -30 : 90) + " degrees to " + (reverse ? 90 : -30) + " degrees offset from the player's current position."; Difficulty = 2f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new PlayerLock(true), + For(reverse ? 90 : -30, + reverse ? -30 : 90, + reverse ? -5 : 5, + i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f) + ), + new PlayerLock(false), + Pause(0.25f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs index 5208f95..5dda558 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs @@ -9,32 +9,32 @@ namespace Moves.Basic { - public class Sweep_Back_And_Forth : AISequence + public class Sweep_Back_And_Forth : Move { - public Sweep_Back_And_Forth() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = -30; i < 90; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); - } - sequences.Add(Pause(0.25f)); - for (int i = 30; i > -90; i -= 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); - } - return sequences.ToArray(); - }), - new PlayerLock(false), - new Pause(0.5f) - ) + public Sweep_Back_And_Forth() { Description = "Shoots a sweep from -30 degrees to +90 degrees offset from the player's current position, then another from -90 to +30 degrees."; Difficulty = 3f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => + { + List sequences = new List(); + for (int i = -30; i < 90; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); + } + sequences.Add(Pause(0.25f)); + for (int i = 30; i > -90; i -= 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); + } + return sequences.ToArray(); + }), + new PlayerLock(false), + new Pause(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs index 3cc4ee2..b105f3c 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs @@ -9,30 +9,30 @@ namespace Moves.Basic { - public class Sweep_Both : AISequence + public class Sweep_Both : Move { - public Sweep_Both() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => - { - - List sequences = new List(); - for (int i = 0; i < 120; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i - 60 })); - sequences.Add(new Shoot1(new Projectile { AngleOffset = 60 - i })); - sequences.Add(new Pause(0.05f)); - } - return sequences.ToArray(); - }), - new PlayerLock(false), - new Pause(0.5f) - ) + public Sweep_Both() { Description = "Sweeps both left and right at the same time."; Difficulty = 4f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new AISequence(() => + { + + List sequences = new List(); + for (int i = 0; i < 120; i += 5) + { + sequences.Add(new Shoot1(new Projectile { AngleOffset = i - 60 })); + sequences.Add(new Shoot1(new Projectile { AngleOffset = 60 - i })); + sequences.Add(new Pause(0.05f)); + } + return sequences.ToArray(); + }), + new PlayerLock(false), + new Pause(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs index 56fbafe..8e819ec 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs @@ -11,27 +11,27 @@ namespace Moves.Test { - public class Double_Laser_Sweep : AISequence + public class Double_Laser_Sweep : Move { - public Double_Laser_Sweep() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f) - ), - new Pause(1f), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f) - ), - new PlayerLock(false), - new Pause(1f) - ) + public Double_Laser_Sweep() { Description = "Sweeps two lasers back and forth."; Difficulty = 6.5f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f) + ), + new Pause(1f), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f) + ), + new PlayerLock(false), + new Pause(1f) + ); } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs index 5b2703a..6e9db34 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs @@ -11,29 +11,29 @@ namespace Moves.Test { - public class Double_Laser_Sweep_AOE : AISequence + public class Double_Laser_Sweep_AOE : Move { - public Double_Laser_Sweep_AOE() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f), - new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) - ), - new Pause(1f), - Merge( - new Laser().Wait(1f), - new Laser(90, -90, 5, -90).Wait(1f), - new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) - ), - new PlayerLock(false), - new Pause(1f) - ) + public Double_Laser_Sweep_AOE() { Description = "Sweeps two lasers back and forth, with two AOE attacks in between."; Difficulty = 7f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f), + new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) + ), + new Pause(1f), + Merge( + new Laser().Wait(1f), + new Laser(90, -90, 5, -90).Wait(1f), + new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) + ), + new PlayerLock(false), + new Pause(1f) + ); } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs index 2c06a80..3449748 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs @@ -11,28 +11,28 @@ // TODO unfinished namespace Moves.Test { - public class Horseshoe_AOE : AISequence + public class Horseshoe_AOE : Move { - public Horseshoe_AOE() : base - ( - //Pause(1f), - For(10, i => - Merge( - new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) - ) - ), - For(10, i => - Merge( - new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) - ) - ), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) - ) + public Horseshoe_AOE() { Description = "Your description here"; - Difficulty = 1f; + Difficulty = 1f; + Sequence = new AISequence( + //Pause(1f), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) + ) + ), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) + ) + ), + new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs index 87cb579..9a6a592 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs @@ -11,27 +11,25 @@ namespace Moves.Test { - public class Laser : AISequence + public class Laser : Move { - public Laser(float startOffset = -90, float finalOffset = 90, float width = 5, float angularSpeed = 90) : base - ( - new ShootAOE( - new AOE - { - InnerSpeed = Speed.FROZEN, + public Laser(float startOffset = -90, float finalOffset = 90, float width = 5, float angularSpeed = 90) + { + Description = "A laser that sweeps from " + startOffset + " to " + finalOffset + " with a beam width of " + width + " and speed " + angularSpeed; + Difficulty = 5f; + Sequence = new ShootAOE( + new AOE + { + InnerSpeed = Speed.FROZEN, OuterSpeed = Speed.FROZEN, InnerScale = 0f, Scale = 100f, AngleOffset = startOffset, RotationSpeed = angularSpeed, MaxTime = (finalOffset - startOffset) / angularSpeed, - OnDestroyOutOfBounds = AOECallbackDictionary.DONT_DESTROY_OOB + OnDestroyOutOfBounds = AOECallbackDictionary.DONT_DESTROY_OOB }.On(0, width) - ) - ) - { - Description = "A laser that sweeps from " + startOffset + " to " + finalOffset + " with a beam width of " + width + " and speed " + angularSpeed; - Difficulty = 5f; + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs index 56b8ffa..b01e122 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs @@ -11,27 +11,27 @@ namespace Moves.Test { - public class Laser_Sweep_With_AOE : AISequence + public class Laser_Sweep_With_AOE : Move { - public Laser_Sweep_With_AOE() : base - ( - new Teleport().Wait(0.5f), - new PlayerLock(true), - Merge( - new Laser().Wait(1f), - new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) - ), - new Pause(1f), - Merge( - new Laser(90, -90, 5, -90).Wait(1f), - new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) - ), - new PlayerLock(false), - new Pause(1f) - ) + public Laser_Sweep_With_AOE() { Description = "Sweeps a laser back and forth, with two AOE attacks in between."; Difficulty = 5.5f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + new PlayerLock(true), + Merge( + new Laser().Wait(1f), + new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) + ), + new Pause(1f), + Merge( + new Laser(90, -90, 5, -90).Wait(1f), + new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) + ), + new PlayerLock(false), + new Pause(1f) + ); } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs index f028f14..ed4a0a6 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs @@ -10,27 +10,27 @@ namespace Moves.Test { - public class Lightning_Arena : AISequence + public class Lightning_Arena : Move { - public Lightning_Arena() : base - ( - new Teleport(World.Arena.CENTER).Wait(0.25f), - new AISequence(() => - { - List sequences = new List(); - - for (int i = 0; i < 1; i++) - { - sequences.Add(new Shoot1( - new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)); - } - return sequences.ToArray(); - }), - Pause(1f) - ) + public Lightning_Arena() { Description = "Spawns lightning on the whole arena"; Difficulty = 5f; + Sequence = new AISequence( + new Teleport(World.Arena.CENTER).Wait(0.25f), + new AISequence(() => + { + List sequences = new List(); + + for (int i = 0; i < 1; i++) + { + sequences.Add(new Shoot1( + new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)); + } + return sequences.ToArray(); + }), + Pause(1f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs index ee623e3..5c2abfe 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs @@ -11,40 +11,40 @@ namespace Moves.Test { - public class Lightning_With_AOE : AISequence + public class Lightning_With_AOE : Move { - public Lightning_With_AOE() : base - ( - new ShootAOE(new AOE - { - AngleOffset = (-25), - RotationSpeed = (15f), - FixedWidth = (10f), - OuterSpeed = (Speed.MEDIUM_SLOW) - } - .On(-22.5f, 22.5f) - .On(90 - 22.5f, 90 + 22.5f) - .On(180 - 22.5f, 180 + 22.5f) - .On(270 - 22.5f, 270 + 22.5f) - ).Wait(1.5f), - new Lightning_Arena().Wait(0.5f), - new ShootAOE(new AOE - { - AngleOffset = (-25), - RotationSpeed = (15f), - FixedWidth = (10f), - OuterSpeed = (Speed.MEDIUM_SLOW) - } - .On(-22.5f, 22.5f) - .On(90 - 22.5f, 90 + 22.5f) - .On(180 - 22.5f, 180 + 22.5f) - .On(270 - 22.5f, 270 + 22.5f) - ).Wait(1.5f), - new Lightning_Arena().Wait(2.5f) - ) + public Lightning_With_AOE() { Description = "Lightning with aoe"; Difficulty = 6f; + Sequence = new AISequence( + new ShootAOE(new AOE + { + AngleOffset = (-25), + RotationSpeed = (15f), + FixedWidth = (10f), + OuterSpeed = (Speed.MEDIUM_SLOW) + } + .On(-22.5f, 22.5f) + .On(90 - 22.5f, 90 + 22.5f) + .On(180 - 22.5f, 180 + 22.5f) + .On(270 - 22.5f, 270 + 22.5f) + ).Wait(1.5f), + new Lightning_Arena().Wait(0.5f), + new ShootAOE(new AOE + { + AngleOffset = (-25), + RotationSpeed = (15f), + FixedWidth = (10f), + OuterSpeed = (Speed.MEDIUM_SLOW) + } + .On(-22.5f, 22.5f) + .On(90 - 22.5f, 90 + 22.5f) + .On(180 - 22.5f, 180 + 22.5f) + .On(270 - 22.5f, 270 + 22.5f) + ).Wait(1.5f), + new Lightning_Arena().Wait(2.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs index 2e78563..ade3cdc 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs @@ -7,13 +7,9 @@ namespace Moves.Test { - public class Pincer : AISequence - { - - public Pincer(float offset=0f, Speed speed=Speed.SNIPE) - { - Description = "Shoots two projectiles with an offset of +/-" + offset + " degrees with speed " + speed; - + public class Pincer : Move + { + public Pincer(float offset = 0f, Speed speed = Speed.SNIPE) { float curveAmount = -4f * // base (float)speed * // turning radius is tighter when we go faster @@ -23,13 +19,12 @@ public Pincer(float offset=0f, Speed speed=Speed.SNIPE) float maxTime = Mathf.Deg2Rad * offset / Mathf.Sin(Mathf.Deg2Rad * offset) * ((GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude / 50f); maxTime += 0.1f; - GetChildren = () => - new AISequence[] { - Merge( - new Shoot1(new ProjectileCurving(curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = offset, MaxTime = maxTime }), - new Shoot1(new ProjectileCurving(-curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = -offset, MaxTime = maxTime }) - ) - }; - } + Description = "Shoots two projectiles with an offset of +/-" + offset + " degrees with speed " + speed; + Sequence = Merge( + new Shoot1(new ProjectileCurving(curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = offset, MaxTime = maxTime }), + new Shoot1(new ProjectileCurving(-curveAmount, false) { Speed = Speed.SNIPE, AngleOffset = -offset, MaxTime = maxTime }) + ); + } + } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs index 217bf3a..1dda377 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs @@ -11,23 +11,12 @@ namespace Moves.Test { - public class Pincer_Sweep : AISequence + public class Pincer_Sweep : Move { - public Pincer_Sweep() : base - ( - /* - () => { - List sequences = new List(); - for (int i = 150; i >= 0; i -= 5) { - sequences.Add(new Pincer(i).Wait(0.05f)); - } - return sequences.ToArray(); - } - */ - For(150, 0, -5, i => new Pincer(i).Wait(0.05f)) - ) + public Pincer_Sweep() { Description = "Sweeps pincer projectiles from +150 to +0 degrees"; + Sequence = For(150, 0, -5, i => new Pincer(i).Wait(0.05f)); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs index dc0e07e..35eb8c3 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs @@ -9,31 +9,12 @@ namespace Moves.Test { - public class Player_Strafe_Waves : AISequence + public class Player_Strafe_Waves : Move { - public Player_Strafe_Waves() : base - ( - /* - () => { - List sequences = new List(); - sequences.Add(new Teleport()); - sequences.Add(new PlayerLock(true)); - for (int i = 0; i < 6; i++) - { - sequences.Add(new Strafe(true, 60, 25, GameManager.Player.transform.position)); - sequences.Add(new ShootAOE(AOE.New(self).On(-60, 60))); - sequences.Add(new Pause(0.75f)); - } - sequences.Add(new PlayerLock(false)); - sequences.Add(new Pause(1f)); - return sequences.ToArray(); - } - */ - For(6, i => new Strafe(true, 60, 25, GameManager.Player.transform.position)).Then(new ShootAOE(new AOE().On(-60, 60))).Wait(0.75f) - ) + public Player_Strafe_Waves() { - + Sequence = For(6, i => new Strafe(true, 60, 25, GameManager.Player.transform.position)).Then(new ShootAOE(new AOE().On(-60, 60))).Wait(0.75f); } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs index d837b01..7d88f01 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs @@ -10,24 +10,24 @@ namespace Moves.Test { - public class Quick_Waves : AISequence + public class Quick_Waves : Move { - public Quick_Waves() : base - ( - Either( - new ShootArc(100, -60, 60, new Projectile { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), - new ShootAOE(new AOE { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), - new Shoot1(new ProjectileLightning()), - Merge( - new ShootArc(150, 22.5f, 22.5f + 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new ShootArc(150, -22.5f, -22.5f - 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }) - ), - new ShootArc(100, -60, 60, new Projectile { Speed = Speed.VERY_FAST, Size = Size.SMALL }).Wait(0.1f).Times(5) - ).Wait(0.6f).Times(7) - ) + public Quick_Waves() { Description = "Fires a quick barrage of random wave-based attacks."; Difficulty = 6f; + Sequence = new AISequence( + Either( + new ShootArc(100, -60, 60, new Projectile { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), + new ShootAOE(new AOE { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), + new Shoot1(new ProjectileLightning()), + Merge( + new ShootArc(150, 22.5f, 22.5f + 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(150, -22.5f, -22.5f - 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }) + ), + new ShootArc(100, -60, 60, new Projectile { Speed = Speed.VERY_FAST, Size = Size.SMALL }).Wait(0.1f).Times(5) + ).Wait(0.6f).Times(7) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs index 347e18a..83260c9 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs @@ -12,67 +12,48 @@ namespace Moves.Test /// /// I really like the lasers. /// - public class Random_Leading : AISequence + public class Random_Leading : Move { - public Random_Leading(int count = 20) : base - ( - /* - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = 0; i < 50; i++) - { - sequences.Add( - new Shoot1( - new ProjectileReverse() - .Speed(BossCore.Speed.VERY_FAST) - .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) - * (5 * Vector3.forward))) - ); - } - return Merge(sequences.ToArray()); - }), - new PlayerLock(false) - */ - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), - new Laser(-60, 480, 5, 60), - new Laser(60, 480, 5, 45), - new Laser(120, 480, 5, 30), - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), - new Shoot1( - new ProjectileReverse() - { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, - Size = Size.HUGE, - Speed = BossCore.Speed.FAST, - MaxTime = 4f - } - ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f) - ) + public Random_Leading(int count = 20) { + Sequence = new AISequence( + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), + new Laser(-60, 480, 5, 60), + new Laser(60, 480, 5, 45), + new Laser(120, 480, 5, 30), + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), + new Shoot1( + new ProjectileReverse() + { + Start = RANDOM_IN_ARENA, + Target = PLAYER_POSITION, + Size = Size.HUGE, + Speed = BossCore.Speed.FAST, + MaxTime = 4f + } + ).Wait(0.15f).Times(count), + new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs index fc02566..9427337 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs @@ -8,52 +8,32 @@ namespace Moves.Test { - public class SpinReverse : AISequence + public class SpinReverse : Move { - public SpinReverse(int count = 50) : base - ( - /* - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = 0; i < 50; i++) - { - sequences.Add( - new Shoot1( - new ProjectileReverse() - .Speed(BossCore.Speed.VERY_FAST) - .Start(Quaternion.AngleAxis(i * (360f / 50f), Vector3.up) - * (5 * Vector3.forward))) - ); - } - return Merge(sequences.ToArray()); - }), - new PlayerLock(false) - */ - ForConcurrent(count, i => - new Shoot1( - new ProjectileCurving(187, false) - { - Start = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward)), - Target = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward) + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.right)), - Speed = (BossCore.Speed.FAST), - MaxTime = (0.75f), - OnDestroyTimeout = self => - new Shoot1( - new ProjectileReverse() - { - Start = (self.transform.position), - Target = (PLAYER_POSITION), - Speed = (BossCore.Speed.SNIPE), - MaxTime = (0.75f) - } - ) - } - ) - ) - ) + public SpinReverse(int count = 50) { + Sequence = + ForConcurrent(count, i => + new Shoot1( + new ProjectileCurving(187, false) + { + Start = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward)), + Target = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward) + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.right)), + Speed = (BossCore.Speed.FAST), + MaxTime = (0.75f), + OnDestroyTimeout = self => + new Shoot1( + new ProjectileReverse() + { + Start = (self.transform.position), + Target = (PLAYER_POSITION), + Speed = (BossCore.Speed.SNIPE), + MaxTime = (0.75f) + } + ) + } + ) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs index f2ad7b9..bb099e8 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs @@ -12,51 +12,53 @@ namespace Moves.Test { - public class Sniper_Final : AISequence + public class Sniper_Final : Move { - public Sniper_Final() : base - ( - new Teleport(NORTH_FAR).Wait(0.5f), - new ShootAOE(new AOE { - OuterSpeed = Speed.SLOW, - InnerSpeed = Speed.FROZEN, - InnerScale = 0f, - Target = SOUTH_FAR, - MaxTime = 2f, - OnDestroyTimeout = - self => - { - AOE clone = self.data.Clone(); - clone.MaxTime = 10f; - clone.Freeze(); - clone.Create(); - } - }.On(-80, 80) - ) - .Wait(1f), - new AISequence( + public Sniper_Final() + { + Sequence = new AISequence( + new Teleport(NORTH_FAR).Wait(0.5f), + new ShootAOE(new AOE + { + OuterSpeed = Speed.SLOW, + InnerSpeed = Speed.FROZEN, + InnerScale = 0f, + Target = SOUTH_FAR, + MaxTime = 2f, + OnDestroyTimeout = + self => + { + AOE clone = self.data.Clone(); + clone.MaxTime = 10f; + clone.Freeze(); + clone.Create(); + } + }.On(-80, 80) + ) + .Wait(1f), new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) - ).Times(2), - new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), - new ShootAOE(new AOE { Start = WEST_FAR, Target = EAST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), - new ShootAOE(new AOE { Start = EAST_FAR, Target = WEST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) - ).Times(2), - new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f), - new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f) - ) - ) - { } + new AISequence( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) + ).Times(2), + new AISequence( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), + new ShootAOE(new AOE { Start = WEST_FAR, Target = EAST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), + new ShootAOE(new AOE { Start = EAST_FAR, Target = WEST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) + ).Times(2), + new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f), + new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f) + ) + ); + } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs index 745379d..4b5991c 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -11,14 +11,11 @@ namespace Moves.Test { - public class Test : AISequence + public class Test : Move { - public Test() : base - ( - //new Shoot1(new Projectile { Target = LEADING_PLAYER_POSITION, Speed = Speed.VERY_FAST }).Wait(0.5f) - new Shoot1(new ProjectileHoming(difficulty: 1) { Speed = Speed.VERY_FAST }).Wait(0.1f) - ) + public Test() { + Sequence = new Shoot1(new ProjectileHoming(difficulty: 1) { Speed = Speed.VERY_FAST }).Wait(0.1f); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs index c095006..f61e67b 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs @@ -7,20 +7,21 @@ namespace Moves.Tutorial1 { - public class Shoot_1_Several : AISequence + public class Shoot_1_Several : Move { - public Shoot_1_Several() : base - ( - new Teleport().Wait(0.5f), - new AISequence(() => - { - return new Shoot1().Wait(0.1f).Times(Random.Range(5, 10)); - }), - new Pause(1.5f) - ) + public Shoot_1_Several() { Description = "Shoots between 5 and 10 default projectiles at the player."; Difficulty = 2f; + Sequence = new AISequence( + // TODO find a way to allow random values to any parameter. + new Teleport().Wait(0.5f), + new AISequence(() => + { + return new Shoot1().Wait(0.1f).Times(Random.Range(5, 10)); + }), + new Pause(1.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs index 5cc2cc8..ff89c90 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs @@ -7,20 +7,21 @@ namespace Moves.Tutorial1 { - public class Shoot_3_Several : AISequence + public class Shoot_3_Several : Move { - public Shoot_3_Several() : base - ( - new Teleport().Wait(0.5f), - new AISequence(() => - { - return new Shoot3().Wait(0.1f).Times(Random.Range(7, 12)); - }), - new Pause(1.5f) - ) + public Shoot_3_Several() { Description = "Shoots between 7 and 12 three-way projectiles at the player."; Difficulty = 3f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + // TODO add some way to include random values here + new AISequence(() => + { + return new Shoot3().Wait(0.1f).Times(Random.Range(7, 12)); + }), + new Pause(1.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs index c3e45b8..e8d8e9a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs @@ -7,17 +7,17 @@ namespace Moves.Tutorial1 { - public class Shoot_Arc : AISequence + public class Shoot_Arc : Move { - public Shoot_Arc(int width=70, bool dense=false) : base - ( - new Teleport().Wait(0.25f), - new ShootArc(dense ? 100 : 50, -width / 2, width / 2), - new Pause(1.5f) - ) + public Shoot_Arc(int width=70, bool dense=false) { Description = "Shoots a" + (dense ? " dense" : "n") + " arc, " + width + " degrees wide, at the player."; Difficulty = 2f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new ShootArc(dense ? 100 : 50, -width / 2, width / 2), + new Pause(1.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs index 88981b8..7c69b19 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs @@ -10,19 +10,19 @@ namespace Moves.Tutorial2 { - public class Force_Block : AISequence + public class Force_Block : Move { - public Force_Block() : base - ( - new Teleport().Wait(0.25f), - new PlayerLock(true), - new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), - new PlayerLock(false), - new Pause(4f) - ) + public Force_Block() { Description = "Fires 10 sets of tiny projectiles in a 180 degree arc, too dense to dash through."; Difficulty = 5f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new PlayerLock(true), + new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), + new PlayerLock(false), + new Pause(4f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs index fcb33ba..87d1213 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs @@ -9,18 +9,18 @@ namespace Moves.Tutorial3 { - public class Shoot_AOE : AISequence + public class Shoot_AOE : Move { - public Shoot_AOE(int width) : base - ( - new Teleport().Wait(0.25f), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-width / 2, width / 2)), - new Pause(0.5f) - ) + public Shoot_AOE(int width) { Description = "Shoots an AOE " + width + " degrees wide at the player."; Difficulty = 1.5f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new ShootAOE(new AOE { FixedWidth = 3f }.On(-width / 2, width / 2)), + new Pause(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs new file mode 100644 index 0000000..d4b5c51 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs @@ -0,0 +1,105 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using Projectiles; +using Moves.Basic; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class AOE_Test_2 : Move + { + //// Lets the player know the cardinal directions will be dangerous soon. + private static AISequence TELEGRAPH_CARDINAL = new AISequence( + Merge( + new ShootArc(100, -7, 7, new Projectile { Target = SOUTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -7, 7, new Projectile { Target = WEST_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -7, 7, new Projectile { Target = NORTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -7, 7, new Projectile { Target = EAST_FAR }).Wait(0.2f).Times(3) + ), + Merge( + new ShootArc(100, -15, 15, new Projectile { Target = SOUTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -15, 15, new Projectile { Target = WEST_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -15, 15, new Projectile { Target = NORTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -15, 15, new Projectile { Target = EAST_FAR }).Wait(0.2f).Times(3) + ), + Merge( + new ShootArc(100, -25, 25, new Projectile { Target = SOUTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -25, 25, new Projectile { Target = WEST_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -25, 25, new Projectile { Target = NORTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -25, 25, new Projectile { Target = EAST_FAR }).Wait(0.2f).Times(3) + ) + ); + + + public AOE_Test_2() { + Sequence = new AISequence( + TELEGRAPH_CARDINAL, + + new ShootAOE( + new AOE { + OuterSpeed = BossCore.Speed.MEDIUM, + InnerSpeed = BossCore.Speed.SLOW, + Target = Vector3.forward, + MaxTime = 2f, + // TODO add ability to change values in callbacks like before + //OnDestroyTimeout = (self) => self.data.Clone().Freeze().RotationSpeed(20f).MaxTime(12.6f).Create(), + OnDestroyOutOfBounds = AOECallbackDictionary.DONT_DESTROY_OOB + } + ).Wait(3.2f) + + /* + AOE.New(self) + .Speed(Speed.MEDIUM) + .InnerSpeed(Speed.SLOW) + .Target(Vector3.forward) + .MaxTime(2f) + .On(-22.5f, 22.5f) + .On(90 - 22.5f, 90 + 22.5f) + .On(180 - 22.5f, 180 + 22.5f) + .On(270 - 22.5f, 270 + 22.5f) + .OnDestroyTimeout((self) => self.Clone().Freeze().RotationSpeed(20f).MaxTime(12.6f).Create()) + .OnDestroyOutOfBounds(AOECallbackDictionary.DONT_DESTROY_OOB) + .Wait(3.2f), + */ + + /* + new ShootAOE(AOE.New(self) + .Speed(Speed.FAST) + .InnerSpeed(Speed.SNAIL) + .Target(Vector3.forward) + .MaxTime(1f) + .On(-22.5f, 22.5f) + .On(90 - 22.5f, 90 + 22.5f) + .On(180 - 22.5f, 180 + 22.5f) + .On(270 - 22.5f, 270 + 22.5f) + .OnDestroyTimeout((self) => self.Clone().Freeze().RotationSpeed(20f).MaxTime(10.4f).Create()) + ) + .Wait(1.2f), + + new ShootAOE(AOE.New(self) + .Speed(Speed.FAST) + .InnerScale(0f) + .MaxTime(0.6f) + .InnerSpeed(Speed.FROZEN) + .Target(Vector3.forward) + .On(0, 360f) + .OnDestroyTimeout((self) => self.Clone().Freeze().MaxTime(9.6f).Create()) + ) + .Wait(0.6f), + + new ShootArc(100, 0, 360).Wait(1.5f).Times(6).Wait(5f) + */ + + ); + } + + void HandleAOECallbackDelegate(AOEComponent self) + { + } + + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs.meta new file mode 100644 index 0000000..4ec345d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a951974fdee9a40689ba9a9a2be39298 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs index 29912a8..03559e2 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs @@ -11,7 +11,7 @@ namespace Moves.User { - public class Big_Homing_Strafe : AISequence + public class Big_Homing_Strafe : Move { public Big_Homing_Strafe() : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs index 1515fb6..726f832 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs @@ -10,7 +10,7 @@ namespace Moves.Unsorted { - public class Dash_Test : AISequence + public class Dash_Test : Move { public Dash_Test() : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs index 25141dd..661a983 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs @@ -18,7 +18,7 @@ namespace Moves.Unsorted * * ** This might have changed due to the way ShootDeathHex was implemented. */ - public class Death_Hex : AISequence + public class Death_Hex : Move { public Death_Hex() : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs index 58d7c07..3db92af 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs @@ -11,8 +11,8 @@ namespace Moves.Unsorted { - public class Double_Hex_Curve : AISequence - { + public class Double_Hex_Curve : Move + { public Double_Hex_Curve() : base ( new Teleport(CENTER).Wait(1.5f), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs index 0cff6b1..10dadce 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs @@ -12,8 +12,8 @@ namespace Moves.Unsorted { - public class Double_Hex_Curve_Hard : AISequence - { + public class Double_Hex_Curve_Hard : Move + { public Double_Hex_Curve_Hard() : base ( new Teleport(CENTER).Wait(0.5f), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs index 0c46461..e793da0 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs @@ -10,12 +10,16 @@ namespace Moves.Unsorted { - public class Four_Way_Sweep_With_Homing : AISequence + public class Four_Way_Sweep_With_Homing : Move { - public Four_Way_Sweep_With_Homing() : base - ( + public Four_Way_Sweep_With_Homing() + { + Description = "Shoots a 4-directional sweep with homing projectiles in between."; + Difficulty = 6f; + // TODO refactor me to use standard notation - () => { + Sequence = new AISequence(() => + { List sequences = new List(); for (int i = 0; i < 4; i++) { @@ -23,7 +27,7 @@ public Four_Way_Sweep_With_Homing() : base { sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE})); + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); for (int j = 7; j < 15; j++) { sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); @@ -49,11 +53,7 @@ public Four_Way_Sweep_With_Homing() : base sequences.Add(new AOE_360()); } return sequences.ToArray(); - } - ) - { - Description = "Shoots a 4-directional sweep with homing projectiles in between."; - Difficulty = 6f; + }); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs index ba2dd7d..6160aad 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs @@ -10,8 +10,8 @@ namespace Moves.Unsorted { - public class Hex_Curve_Intro : AISequence - { + public class Hex_Curve_Intro : Move + { public Hex_Curve_Intro() : base ( new Shoot_Hex_Curve(true), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Homing_Strafe_Wave_Shoot.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Homing_Strafe_Wave_Shoot.cs new file mode 100644 index 0000000..ab175b0 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Homing_Strafe_Wave_Shoot.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; + +namespace Moves.Unsorted +{ + public class Homing_Strafe_Wave_Shoot : Move + { + + public Homing_Strafe_Wave_Shoot() { + Difficulty = 5.5f; + Description = "Does a homing strafe, followed by two shoot_2_waves."; + Sequence = new AISequence( + new Teleport().Wait(0.2f), + new ShootHomingStrafe(strafeAmount: 15).Wait(0.01f).Times(15).Wait(0.3f), // This is hard; adding wait is reasonable + new Shoot_2_Waves().Times(2) + ); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Homing_Strafe_Wave_Shoot.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Homing_Strafe_Wave_Shoot.cs.meta new file mode 100644 index 0000000..7d0c7ff --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Homing_Strafe_Wave_Shoot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5d31f70ac79d451eae5c137bab64b15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs index ba2ec91..95cd30d 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs @@ -12,8 +12,8 @@ namespace Moves.Unsorted { - public class Jump_Rope_Fast : AISequence - { + public class Jump_Rope_Fast : Move + { public Jump_Rope_Fast() : base ( new MoveCamera(false, new Vector3(0, 17.5f, -35)).Wait(1f), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs index 2c59c3d..1f56d92 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs @@ -9,57 +9,59 @@ using Projectiles; using static BossController; -namespace Moves.User +namespace Moves.Unsorted { - public class Random_200 : AISequence - { - public Random_200() : base - ( - () => - { - List sequences = new List(); - for (int j = 0; j < 200; j++) { - switch (Random.Range(0, 3)) - { - case 0: sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) - )); break; - case 1: sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) - )); break; - case 2: - sequences.Add( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }) - ); - break; - } - if (j % 20 == 0) { - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.MEDIUM })); - } - if (j % 40 == 0) { - sequences.Add(new AISequence(() => - { - new Projectile - { - Size = Size.MEDIUM, - Speed = Speed.MEDIUM, - AngleOffset = Random.Range(0, 360f), - MaxTime = 0.5f, - OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE - }.Create(); - })); - } - sequences.Add(Pause(0.05f)); - } - return sequences.ToArray(); - } - ) + public class Random_200 : Move + { + public Random_200() { Description = "Spawns 200 random projectiles."; - Difficulty = 8f; + Difficulty = 8f; + Sequence = new AISequence(() => + { + List sequences = new List(); + for (int j = 0; j < 200; j++) + { + switch (Random.Range(0, 3)) + { + case 0: + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) + )); break; + case 1: + sequences.Add(Merge( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) + )); break; + case 2: + sequences.Add( + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }) + ); + break; + } + if (j % 20 == 0) + { + sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.MEDIUM })); + } + if (j % 40 == 0) + { + sequences.Add(new Shoot1( + new Projectile + { + Size = Size.MEDIUM, + Speed = Speed.MEDIUM, + AngleOffset = Random.Range(0, 360f), + MaxTime = 0.5f, + OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE + } + )); + } + sequences.Add(Pause(0.05f)); + } + return sequences.ToArray(); + }); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs index a6b1e90..25074e5 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs @@ -11,8 +11,8 @@ namespace Moves.Unsorted { - public class Shoot3_Wave3 : AISequence - { + public class Shoot3_Wave3 : Move + { public Shoot3_Wave3() : base ( new Teleport().Wait(0.5f), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs index a58c0ff..c4cc046 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs @@ -8,22 +8,23 @@ using Moves.Basic; using Projectiles; using static BossController; +using static World.Arena; namespace Moves.User { - public class Shoot_4_Waves_Behind : AISequence - { + public class Shoot_4_Waves_Behind : Move + { public Shoot_4_Waves_Behind() : base ( new Teleport(CENTER).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(220f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(200f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(160f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - new Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(140f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(5f) + new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.MEDIUM_SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 220, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 200, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 160, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 140, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(5f) ) { - Description = "Your description here"; - Difficulty = 1f; + Description = "Shoots 4 projectiles behind the boss which explode into AOE attacks."; + Difficulty = 5.5f; } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs index cdf15e1..e396c31 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs @@ -10,7 +10,7 @@ namespace Moves.Unsorted { - public class Shoot_Hex_Curve : AISequence + public class Shoot_Hex_Curve : Move { public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs index 1271ced..43f4786 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs @@ -10,7 +10,7 @@ namespace Moves.Unsorted { - public class Sweep_Back_And_Forth_Advanced : AISequence + public class Sweep_Back_And_Forth_Advanced : Move { public Sweep_Back_And_Forth_Advanced() : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs index 788f355..279552a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs @@ -10,7 +10,7 @@ namespace Moves.Unsorted { - public class Sweep_Back_And_Forth_Medium : AISequence + public class Sweep_Back_And_Forth_Medium : Move { public Sweep_Back_And_Forth_Medium() : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs index 6f076ba..168ae7b 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs @@ -11,28 +11,27 @@ namespace Moves.Unsorted { - public class Sweep_Wall : AISequence - { - public Sweep_Wall(bool clockwise=true) : base - (() => - { - List sequences = new List(); - - for (int angle = 0; angle != (clockwise ? 72 : -72); angle += clockwise ? 6 : -6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - - for (int angle = clockwise ? 72 : -72; angle != 0; angle -= clockwise ? 6 : -6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - return sequences.ToArray(); - } - ) + public class Sweep_Wall : Move + { + public Sweep_Wall(bool clockwise=true) { Description = "Shoots a sweeping wall " + (clockwise ? "clockwise" : "counterclockwise") + "."; - Difficulty = 5f; + Difficulty = 5f; + Sequence = new AISequence(() => + { + List sequences = new List(); + + for (int angle = 0; angle != (clockwise ? 72 : -72); angle += clockwise ? 6 : -6) + { + sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); + } + + for (int angle = clockwise ? 72 : -72; angle != 0; angle -= clockwise ? 6 : -6) + { + sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); + } + return sequences.ToArray(); + }); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs index afce042..1bdd84e 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs @@ -11,8 +11,8 @@ namespace Moves.Unsorted { - public class Sweep_Wall_Back_And_Forth : AISequence - { + public class Sweep_Wall_Back_And_Forth : Move + { public Sweep_Wall_Back_And_Forth() : base ( new PlayerLock(true), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs index ca68ad1..6fe4f94 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs @@ -11,8 +11,8 @@ namespace Moves.Unsorted { - public class Wave_Circle : AISequence - { + public class Wave_Circle : Move + { private class Slow_Wave_Circle : AISequence { public Slow_Wave_Circle() : base diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs new file mode 100644 index 0000000..2852d63 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Wave_Reverse : Move + { + + public Wave_Reverse() + { + Description = "Fires a wave of projectiles that, on death, reverse direction."; + Difficulty = 4f; + Sequence = For( + 50, + i => new Shoot1 + ( + new ProjectileHoming + { + Speed = Speed.FAST, + Size = Size.MEDIUM, + MaxTime = 1f, + AngleOffset = i * (360f / 50f), + OnDestroyTimeout = CallbackDictionary.REVERSE + } + ) + ).Wait(2f); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs.meta new file mode 100644 index 0000000..50177e4 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cd5ed396f30440b39c292ee7c8dad62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs new file mode 100644 index 0000000..18413ac --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Wave_Reverse_Faster : Move + { + + public Wave_Reverse_Faster() + { + Description = "Fires a wave of projectiles that, on death, reverse direction. These speed up until they hit max speed."; + Difficulty = 5f; + Sequence = For( + 50, + i => new Shoot1 + ( + new ProjectileHoming + { + Speed = Speed.FAST, + Size = Size.MEDIUM, + MaxTime = 1f, + AngleOffset = i * (360f / 50f), + OnDestroyTimeout = CallbackDictionary.REVERSE_FASTER + } + ) + ).Wait(2f); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs.meta new file mode 100644 index 0000000..83d8b1a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd947229d458c4d81a8b614d57707f50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs new file mode 100644 index 0000000..af1b3f8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Wave_Reverse_Target : Move + { + + public Wave_Reverse_Target() + { + Description = "Fires a wave of projectiles that, on death, turn into projectiles aimed at the player."; + Difficulty = 5f; + Sequence = For( + 50, + i => new Shoot1 + ( + new ProjectileHoming + { + Speed = Speed.FAST, + Size = Size.MEDIUM, + MaxTime = 1f, + AngleOffset = i * (360f / 50f), + OnDestroyTimeout = CallbackDictionary.SPAWN_1_TOWARDS_PLAYER + } + ) + ).Wait(2f); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs.meta new file mode 100644 index 0000000..d89796a --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45ebbb73bcf104b6f9c1f301d120a439 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs new file mode 100644 index 0000000..efc71e7 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Wave_Reverse_Target_Homing : Move + { + + public Wave_Reverse_Target_Homing() + { + Description = "Fires a wave of projectiles that, on death, turn into homing projectiles aimed at the player."; + Difficulty = 7f; + Sequence = For( + 50, + i => new Shoot1 + ( + new ProjectileHoming + { + Speed = Speed.FAST, + Size = Size.MEDIUM, + MaxTime = 1f, + AngleOffset = i * (360f / 50f), + OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER + } + ) + ).Wait(2f); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs.meta new file mode 100644 index 0000000..b833e7d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 015f5d7c1e65b4e55802261ca33ed92a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs index f558d42..a8af866 100644 --- a/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs +++ b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs @@ -10,7 +10,7 @@ public class Phase_Test_Latest : AIPhase { public Phase_Test_Latest() { - AddSequence(10, new Moves.Test.Test()); + AddSequence(10, new Moves.Tutorial1.Shoot_1_Several()); } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs index 3618810..f9a0fc6 100644 --- a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs +++ b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs @@ -34,97 +34,12 @@ public partial class AISequence //#region Full Moveset Sequences - //public static AISequence HOMING_STRAFE_WAVE_SHOOT = new Move( - // 5.5f, - // "HOMING_STRAFE_WAVE_SHOOT", - // "Does a homing strafe, followed by two shoot_2_waves.", - // new AISequence( - // Teleport().Wait(0.2f), - // ShootHomingStrafe(strafeAmount: 15).Wait(0.01f).Times(15).Wait(0.3f), // This is hard; adding wait is reasonable - // SHOOT_2_WAVES.Times(2) - // ) - //); - //public static AISequence JUMP_ROPE_SLOW_CIRCLES = new AISequence(5.5f, // Teleport(WEST_FAR), // LINE_STRAFE_60.Times(6), // LINE_CIRCLE_STRAFE_60.Times(6) //); - //public static AISequence WAVE_REVERSE_TARGET = new AISequence( - // 5, - // new AISequence(() => - // { - // for (int i = 0; i < 50; i++) - // { - // Projectile - // .New(self) - // .Speed(Speed.FAST) - // .Size(Size.MEDIUM) - // .MaxTime(1f) - // .AngleOffset(i * (360f / 50f)) - // .OnDestroyTimeout(CallbackDictionary.SPAWN_1_TOWARDS_PLAYER) - // .Create(); - // } - // }).Wait(2f) - //); - - //public static AISequence WAVE_REVERSE_TARGET_HOMING = new AISequence( - // 7, - // new AISequence(() => - // { - // for (int i = 0; i < 50; i++) - // { - // Projectile - // .New(self) - // .Speed(Speed.FAST) - // .Size(Size.MEDIUM) - // .MaxTime(1f) - // .AngleOffset(i * (360f / 50f)) - // .Homing() - // .OnDestroyTimeout(CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER) - // .Create(); - // } - // }).Wait(2f) - //); - - - //public static AISequence WAVE_REVERSE = new AISequence( - // 4, - // new AISequence(() => - // { - // for (int i = 0; i < 50; i++) - // { - // Projectile - // .New(self) - // .Speed(Speed.FAST) - // .Size(Size.MEDIUM) - // .MaxTime(1.5f) - // .AngleOffset(i * (360f / 50f)) - // .OnDestroyTimeout(CallbackDictionary.REVERSE) - // .Create(); - // } - // }) - //); - - //public static AISequence WAVE_REVERSE_FASTER = new AISequence( - // 4, - // new AISequence(() => - // { - // for (int i = 0; i < 50; i++) - // { - // Projectile - // .New(self) - // .Speed(Speed.FAST) - // .Size(Size.MEDIUM) - // .MaxTime(1.5f) - // .AngleOffset(i * (360f / 50f)) - // .OnDestroyTimeout(CallbackDictionary.REVERSE_FASTER) - // .Create(); - // } - // }) - //); - //public static AISequence CIRCLE_IN_OUT = new AISequence( // 6, // Teleport(CENTER).Wait(0.5f), @@ -149,15 +64,6 @@ public partial class AISequence // ShootArc(4, -45f, 45f, New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(1f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(2f) //); - //public static AISequence SHOOT_4_WAVES_BEHIND = new AISequence( - // 5.5f, - // Teleport(CENTER).Wait(0.5f), - // Shoot1(New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(220f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - // Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(200f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - // Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(160f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(0.5f), - // Shoot1(New(self).Size(Size.LARGE).Speed(Speed.SLOW).MaxTime(2f).Target(SOUTH_FAR).AngleOffset(140f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(5f) - //); - //// Testing if we can modify AOE attacks at runtime (the answer is a mind-numbing yes!) //public static AISequence AOE_TEST = new AISequence( // 4f, From 8912505feb3665085e98c0ee094855c1a557ba02 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Tue, 6 Nov 2018 19:26:35 -0600 Subject: [PATCH 22/33] Finally added all moves from SequenceDictionary into proper new style move files. --- Assets/81-Custom__Move-NewMove.cs.txt | 15 +- Assets/81-Custom__Move-NewMove.cs.txt.meta | 2 +- Assets/Art/Materials/Lava Material.mat | 4 +- Assets/Scripts/Boss Core/AI/EventQueue.cs | 11 -- .../Boss Core/AI/Moves/Basic/Shoot_Split_6.cs | 2 +- .../AI/Moves/Basic/Shoot_Split_6_Curve.cs | 2 +- .../Boss Core/AI/Moves/Test/Sniper_Final.cs | 1 + .../AI/Moves/Unsorted/Big_Homing_Strafe.cs | 2 +- .../AI/Moves/Unsorted/Circle_In_Out.cs | 27 +++ .../Unsorted/Circle_In_Out.cs.meta} | 2 +- .../AI/Moves/Unsorted/Circle_Jump_Rope.cs | 33 ++++ .../Unsorted/Circle_Jump_Rope.cs.meta} | 2 +- .../Moves/Unsorted/Jump_Rope_Slow_Circles.cs | 46 +++++ .../Unsorted/Jump_Rope_Slow_Circles.cs.meta} | 2 +- .../AI/Moves/Unsorted/Shoot_2_Waves_45.cs | 31 ++++ .../Moves/Unsorted/Shoot_2_Waves_45.cs.meta | 11 ++ .../AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs | 2 +- .../Scripts/Boss Core/AI/PhaseDictionary.cs | 86 ---------- .../Boss Core/AI/SequenceDictionary.cs | 158 ------------------ 19 files changed, 167 insertions(+), 272 deletions(-) delete mode 100644 Assets/Scripts/Boss Core/AI/EventQueue.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs rename Assets/Scripts/Boss Core/AI/{EventQueue.cs.meta => Moves/Unsorted/Circle_In_Out.cs.meta} (83%) create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs rename Assets/Scripts/Boss Core/AI/{SequenceDictionary.cs.meta => Moves/Unsorted/Circle_Jump_Rope.cs.meta} (83%) create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs rename Assets/Scripts/Boss Core/AI/{PhaseDictionary.cs.meta => Moves/Unsorted/Jump_Rope_Slow_Circles.cs.meta} (83%) create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs.meta delete mode 100644 Assets/Scripts/Boss Core/AI/PhaseDictionary.cs delete mode 100644 Assets/Scripts/Boss Core/AI/SequenceDictionary.cs diff --git a/Assets/81-Custom__Move-NewMove.cs.txt b/Assets/81-Custom__Move-NewMove.cs.txt index f56577c..0b75e58 100644 --- a/Assets/81-Custom__Move-NewMove.cs.txt +++ b/Assets/81-Custom__Move-NewMove.cs.txt @@ -7,19 +7,20 @@ using AOEs; using BossCore; using Moves.Basic; using Projectiles; -using static BossController; + +using static World.Arena; namespace Moves.User { - public class #SCRIPTNAME# : AISequence + public class #SCRIPTNAME# : Move { - public #SCRIPTNAME#() : base - ( - // Your AISequence here - ) + public #SCRIPTNAME#() { Description = "Your description here"; - Difficulty = 1f; + Difficulty = -1f; + Sequence = new AISequence( + // Your sequence here + ); } } } diff --git a/Assets/81-Custom__Move-NewMove.cs.txt.meta b/Assets/81-Custom__Move-NewMove.cs.txt.meta index 4ecdd12..789e8a2 100644 --- a/Assets/81-Custom__Move-NewMove.cs.txt.meta +++ b/Assets/81-Custom__Move-NewMove.cs.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f0e7966fd10f14225ad909d2753d972d +guid: 257487a0794254ec3bd2b4fefbb85aae TextScriptImporter: externalObjects: {} userData: diff --git a/Assets/Art/Materials/Lava Material.mat b/Assets/Art/Materials/Lava Material.mat index f87c4e9..26e1001 100644 --- a/Assets/Art/Materials/Lava Material.mat +++ b/Assets/Art/Materials/Lava Material.mat @@ -63,7 +63,7 @@ Material: - _Cutoff: 0.5 - _DetailNormalMapScale: 1 - _DstBlend: 0 - - _FlowSpeed: 0.123 + - _FlowSpeed: 0.03 - _GlossMapScale: 1 - _Glossiness: 0.5 - _GlossyReflections: 1 @@ -76,7 +76,7 @@ Material: - _SrcBlend: 1 - _UVSec: 0 - _ZWrite: 1 - - _ZoomScale: 0.5 + - _ZoomScale: 0.04 m_Colors: - _Color: {r: 1, g: 1, b: 1, a: 1} - _EmissionColor: {r: 1, g: 0, b: 0, a: 1} diff --git a/Assets/Scripts/Boss Core/AI/EventQueue.cs b/Assets/Scripts/Boss Core/AI/EventQueue.cs deleted file mode 100644 index a4d7df8..0000000 --- a/Assets/Scripts/Boss Core/AI/EventQueue.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using CombatCore; -using Moves; -using UnityEngine; -using UnityEngine.Profiling; - -namespace AI -{ - -} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs index 55a53f6..6eb5eb3 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs @@ -9,7 +9,7 @@ using Projectiles; using static BossController; -namespace Moves.User +namespace Moves.Unsorted { public class Shoot_Split_6 : Move { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs index 544532e..97ed38e 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs @@ -9,7 +9,7 @@ using Projectiles; using static BossController; -namespace Moves.User +namespace Moves.Unsorted { public class Shoot_Split_6_Curve : Move { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs index bb099e8..201c46f 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs @@ -28,6 +28,7 @@ public Sniper_Final() OnDestroyTimeout = self => { + // TODO write a better API for this AOE clone = self.data.Clone(); clone.MaxTime = 10f; clone.Freeze(); diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs index 03559e2..2000dd0 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs @@ -9,7 +9,7 @@ using static World.Arena; using Projectiles; -namespace Moves.User +namespace Moves.Unsorted { public class Big_Homing_Strafe : Move { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs new file mode 100644 index 0000000..c9ed121 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Circle_In_Out : Move + { + public Circle_In_Out() + { + Description = "Shoots a circle in and out five times."; + Difficulty = 6f; + Sequence = new AISequence( + new Teleport(CENTER).Wait(0.5f), + new Wave_Reverse().Wait(1.5f).Times(5).Wait(3f) + ); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/EventQueue.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs.meta similarity index 83% rename from Assets/Scripts/Boss Core/AI/EventQueue.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs.meta index e681110..9ddd451 100644 --- a/Assets/Scripts/Boss Core/AI/EventQueue.cs.meta +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 802ca8a94c1464a528e75717de4bb0a5 +guid: 83848cfc6b233469588d3cc103bde8cb MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs new file mode 100644 index 0000000..cf39763 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Circle_Jump_Rope : Move + { + public Circle_Jump_Rope() + { + Description = "Circles that go in and out at an accelerating rate."; + Difficulty = 8.5f; + Sequence = new AISequence( + new Teleport(CENTER).Wait(0.5f), + new Wave_Reverse_Faster().Wait(1f), + new Wave_Reverse_Faster(), + new Shoot1(new Projectile { Size = Size.TINY, Speed = Speed.FAST }).Wait(0.1f).Times(60) // This pushes it a bit over 8. + // Adding any of the below additional attacks makes it too hard for gameplay purposes. + //Shoot1(size: Size.TINY, speed: Speed.VERY_FAST, angleOffset: -20f).Wait(0.1f).Times(30) + //Shoot3(speed: Speed.FAST, size: Size.SMALL).Wait(0.1f).Times(60) + //Shoot1(size: Size.TINY, speed: Speed.VERY_FAST).Wait(0.25f).Times(6).Then(Shoot1(size: Size.MEDIUM, speed: Speed.FAST, type: Type.HOMING).Wait(0.25f)).Times(4) + ); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs.meta similarity index 83% rename from Assets/Scripts/Boss Core/AI/SequenceDictionary.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs.meta index c01b4a3..f106b57 100644 --- a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs.meta +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7a55681d11dcf491ab090510df006cbf +guid: 82693f7614fe44aa98f4d2f0296bb83d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs new file mode 100644 index 0000000..507cf51 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs @@ -0,0 +1,46 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Jump_Rope_Slow_Circles : Move + { + + private static AISequence Line_Strafe_60 = new AISequence( + new ShootLine(50, 75f, speed: Speed.SNIPE), + new Pause(0.2f), + new Strafe(true, 60f, 50) + ); + + private static AISequence Line_Circle_Strafe_60 = new AISequence( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360f)), + new Pause(0.1f), + new Strafe(true, 30f, 50), + new Pause(0.3f), + new ShootLine(50, 100f, Vector3.zero, Speed.VERY_FAST), + new Pause(0.2f), + new Strafe(true, 30f, 50) + ); + + public Jump_Rope_Slow_Circles() + { + Description = "Dashes 6 times around shooting lines; then dashes 6 times shooting lines and AOE waves."; + Difficulty = 5.5f; + Sequence = new AISequence( + + new Teleport(WEST_FAR), + Line_Strafe_60.Times(6), + Line_Circle_Strafe_60.Times(6) + ); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs.meta similarity index 83% rename from Assets/Scripts/Boss Core/AI/PhaseDictionary.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs.meta index 6f1c716..bd62808 100644 --- a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs.meta +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: decb4450102de468e98fc6d40e9c686d +guid: 02b9930498221480ba502217ea5df56e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs new file mode 100644 index 0000000..08f73dc --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Shoot_2_Waves_45 : Move + { + public Shoot_2_Waves_45() + { + Description = "Shoots two projectiles at a 45 degree angle that turn into AOE waves on death."; + Difficulty = 4f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new ShootArc(4, -45f, 45f, new Projectile { + Size = Size.LARGE, + Speed = Speed.MEDIUM_SLOW, + MaxTime = 1f, + OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE + }).Wait(2f) + ); + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs.meta new file mode 100644 index 0000000..4c0c76c --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2cd83cb102d646119be4baf56de8944 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs index c4cc046..79e9982 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs @@ -10,7 +10,7 @@ using static BossController; using static World.Arena; -namespace Moves.User +namespace Moves.Unsorted { public class Shoot_4_Waves_Behind : Move { diff --git a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs b/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs deleted file mode 100644 index 04cf8f8..0000000 --- a/Assets/Scripts/Boss Core/AI/PhaseDictionary.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using UnityEngine.Profiling; - -namespace AI -{ - public partial class AIPhase - { - - public static AIPhase PHASE1; - - public static AIPhase PHASE_UNIT_TEST; - - //static AIPhase() { - // if (BossController.insaneMode) - // { - // PHASE1 - // .AddSequence(10, DOUBLE_HEX_CURVE_HARD) - // .AddSequence(10, DEATH_HEX) - // .AddSequence(10, FOUR_WAY_SWEEP_WITH_HOMING) - // .AddSequence(10, RANDOM_200_WAVE) - // .AddSequence(10, CIRCLE_JUMP_ROPE) - // ; - // } - //} - - //public static AIPhase HARD_PHASE = new AIPhase() - ////.AddSequence(10, WAVE_CIRCLE) - //.AddSequence(10, DOUBLE_HEX_CURVE_HARD) - //.AddSequence(10, DEATH_HEX) - ////.AddSequence(10, FOUR_WAY_SWEEP_WITH_HOMING) - //.AddSequence(10, RANDOM_200_WAVE) - //.AddSequence(10, CIRCLE_JUMP_ROPE) - //; - - /* - * TODO: Add some form of progress indicator to this. - */ - public static void Load() { - //AISequence.ShouldAllowInstantiation = true; - - /* - PHASE1 = new AIPhase() - //.AddSequence(10, SHOOT3_WAVE3) - .AddSequence(10, new Moves.Basic.Shoot_2_Waves()) - .AddSequence(10, new Moves.Basic.AOE_90()) - .AddSequence(10, new Moves.Basic.AOE_120()) - .AddSequence(10, new Moves.Basic.AOE_360()) - - //.AddSequence(10, HEX_CURVE_INTRO) - //.AddSequence(10, DOUBLE_HEX_CURVE) - //.AddSequence(10, HOMING_STRAFE_WAVE_SHOOT.Times(2)) - //.AddMove(10, Moves.Basic.Definitions.SWEEP) - //.AddSequence(10, Moves.Basic.SWEEP_BACK_AND_FORTH) - //.AddSequence(10, SWEEP_BACK_AND_FORTH_MEDIUM) - //.AddSequence(10, SWEEP_BACK_AND_FORTH_ADVANCED) - //.AddSequence(10, Moves.Basic.SPLIT_6) - //.AddSequence(10, Moves.Basic.SPLIT_6_CURVE) - //.AddSequence(10, CIRCLE_IN_OUT) - //.AddSequence(10, SWEEP_WALL_CLOCKWISE) - //.AddSequence(10, SWEEP_WALL_COUNTERCLOCKWISE) - //.AddSequence(5, SWEEP_WALL_BACK_AND_FORTH) - //.AddSequence(10, WAVE_REVERSE) // maybe add a new color for reversal attacks - //.AddSequence(10, WAVE_REVERSE_TARGET) - //.AddSequence(10, Moves.Basic.AOE_131_MEDIUM_LONG.Times(2)) - //.AddSequence(10, FOUR_WAY_SWEEP_WITH_HOMING) - //.AddSequence(10, RANDOM_200_WAVE) // Kind of hard. Move to a later phase. - //.AddSequence(10, SHOOT_2_WAVES_45) - //.AddSequence(10, SHOOT_4_WAVES_BEHIND) - - ; - - PHASE_UNIT_TEST = new AIPhase() - .AddScriptedSequence(0, new Moves.Basic.Shoot1(new Projectiles.Projectile()).Wait(1f)) - .AddScriptedSequence(1, new Moves.Basic.Shoot1(new Projectiles.ProjectileCurving(30f, true)).Wait(1f)) - .AddScriptedSequence(2, new Moves.Basic.Shoot1(new Projectiles.ProjectileCurving(-30f, false)).Wait(1f)) - .AddScriptedSequence(3, new Moves.Basic.Shoot1(new Projectiles.ProjectileHoming()).Wait(1f)) - .AddScriptedSequence(4, new Moves.Basic.Shoot1(new Projectiles.ProjectileLightning()).Wait(1f)); - ; - */ - } - - } -} diff --git a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs deleted file mode 100644 index f9a0fc6..0000000 --- a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs +++ /dev/null @@ -1,158 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using static BossController; -using static Projectiles.Projectile; -using static World.Arena; -using Projectiles; -using AOEs; -using BossCore; - -using Moves.Basic; - -// TODO: move all boss controller sequences in here -// make a JSON parser to make this job easier? -namespace AI -{ - public partial class AISequence - { - - //#region Building Block Sequences - - //public static AISequence LINE_CIRCLE_STRAFE_60 = new AISequence( - // ShootAOE(AOE.New(self).Speed(Speed.MEDIUM_SLOW).FixedWidth(5f)) - // .Wait(0.1f), - // Strafe(true, 30f, 50) - // .Wait(0.3f), - // ShootLine(50, 100f, Vector3.zero, Speed.VERY_FAST) - // .Wait(0.2f), - // Strafe(true, 30f, 50) - //); - - //#endregion - - //#region Full Moveset Sequences - - //public static AISequence JUMP_ROPE_SLOW_CIRCLES = new AISequence(5.5f, - // Teleport(WEST_FAR), - // LINE_STRAFE_60.Times(6), - // LINE_CIRCLE_STRAFE_60.Times(6) - //); - - //public static AISequence CIRCLE_IN_OUT = new AISequence( - // 6, - // Teleport(CENTER).Wait(0.5f), - // WAVE_REVERSE.Wait(1.5f).Times(5).Wait(3f) - //); - - //public static AISequence CIRCLE_JUMP_ROPE = new AISequence( - // 8.5f, - // Teleport(CENTER).Wait(0.5f), - // WAVE_REVERSE_FASTER.Wait(1f), - // WAVE_REVERSE_FASTER, - // Shoot1(New(self).Size(Size.TINY).Speed(Speed.VERY_FAST)).Wait(0.1f).Times(60) // This pushes it a bit over 8. - // // Adding any of the below additional attacks makes it too hard for gameplay purposes. - // //Shoot1(size: Size.TINY, speed: Speed.VERY_FAST, angleOffset: -20f).Wait(0.1f).Times(30) - // //Shoot3(speed: Speed.FAST, size: Size.SMALL).Wait(0.1f).Times(60) - // //Shoot1(size: Size.TINY, speed: Speed.VERY_FAST).Wait(0.25f).Times(6).Then(Shoot1(size: Size.MEDIUM, speed: Speed.FAST, type: Type.HOMING).Wait(0.25f)).Times(4) - //); - - //public static AISequence SHOOT_2_WAVES_45 = new AISequence( - // 4f, - // Teleport().Wait(0.25f), - // ShootArc(4, -45f, 45f, New(self).Size(Size.LARGE).Speed(Speed.MEDIUM_SLOW).MaxTime(1f).OnDestroyTimeout(CallbackDictionary.SPAWN_WAVE)).Wait(2f) - //); - - //// Testing if we can modify AOE attacks at runtime (the answer is a mind-numbing yes!) - //public static AISequence AOE_TEST = new AISequence( - // 4f, - // () => { - // List sequences = new List(); - // AOE a = AOE.New(self).Speed(Speed.MEDIUM).InnerSpeed(Speed.SNAIL).On(0, 360f); - // AOE.AOEComponent created = null; - // sequences.Add(new AISequence(() => { created = a.Create(); })); - // sequences.Add(Pause(2f)); - // sequences.Add(new AISequence(() => { created.data = created.data.InnerSpeed(Speed.FROZEN).Speed(Speed.FROZEN); })); - // sequences.Add(Pause(10f)); - // return sequences.ToArray(); - // } - //); - - //// Lets the player know the cardinal directions will be dangerous soon. - //public static AISequence TELEGRAPH_CARDINAL = new AISequence( - // 4f, - // Merge( - // ShootArc(100, -7, 7, New(self).Target(SOUTH_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -7, 7, New(self).Target(WEST_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -7, 7, New(self).Target(NORTH_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -7, 7, New(self).Target(EAST_FAR)).Wait(0.2f).Times(3) - // ), - // Merge( - // ShootArc(100, -15, 15, New(self).Target(SOUTH_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -15, 15, New(self).Target(WEST_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -15, 15, New(self).Target(NORTH_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -15, 15, New(self).Target(EAST_FAR)).Wait(0.2f).Times(3) - // ), - // Merge( - // ShootArc(100, -25, 25, New(self).Target(SOUTH_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -25, 25, New(self).Target(WEST_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -25, 25, New(self).Target(NORTH_FAR)).Wait(0.2f).Times(3), - // ShootArc(100, -25, 25, New(self).Target(EAST_FAR)).Wait(0.2f).Times(3) - // ) - //); - - ///* - // * Shoots 4 waves at cardinal directions; when they hit the edge, they spin around - // * slowly enough to outrun without dashing. Projectile waves come in that require shield. - // */ - //public static AISequence AOE_TEST_2 = new AISequence( - // 6f, - // TELEGRAPH_CARDINAL, - - // ShootAOE(AOE.New(self) - // .Speed(Speed.MEDIUM) - // .InnerSpeed(Speed.SLOW) - // .Target(Vector3.forward) - // .MaxTime(2f) - // .On(-22.5f, 22.5f) - // .On(90 - 22.5f, 90 + 22.5f) - // .On(180 - 22.5f, 180 + 22.5f) - // .On(270 - 22.5f, 270 + 22.5f) - // .OnDestroyTimeout((self) => self.Clone().Freeze().RotationSpeed(20f).MaxTime(12.6f).Create()) - // .OnDestroyOutOfBounds(AOECallbackDictionary.DONT_DESTROY_OOB) - // ) - // .Wait(3.2f), - - - // ShootAOE(AOE.New(self) - // .Speed(Speed.FAST) - // .InnerSpeed(Speed.SNAIL) - // .Target(Vector3.forward) - // .MaxTime(1f) - // .On(-22.5f, 22.5f) - // .On(90 - 22.5f, 90 + 22.5f) - // .On(180 - 22.5f, 180 + 22.5f) - // .On(270 - 22.5f, 270 + 22.5f) - // .OnDestroyTimeout((self) => self.Clone().Freeze().RotationSpeed(20f).MaxTime(10.4f).Create()) - // ) - // .Wait(1.2f), - - // ShootAOE(AOE.New(self) - // .Speed(Speed.FAST) - // .InnerScale(0f) - // .MaxTime(0.6f) - // .InnerSpeed(Speed.FROZEN) - // .Target(Vector3.forward) - // .On(0, 360f) - // .OnDestroyTimeout((self) => self.Clone().Freeze().MaxTime(9.6f).Create()) - // ) - // .Wait(0.6f), - - // ShootArc(100, 0, 360).Wait(1.5f).Times(6).Wait(5f) - //); - - //#endregion - - } -} From c60a51eb3cfba8495ca785385577759f7a150349 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Wed, 7 Nov 2018 00:00:55 -0600 Subject: [PATCH 23/33] Tweaks to moves --- .../AI/Moves/Unsorted/Wave_Reverse.cs | 2 +- .../Boss Core/AI/Phases/Phase_Unsorted.cs | 35 +++++++++++++++++++ .../AI/Phases/Phase_Unsorted.cs.meta | 11 ++++++ .../Scripts/Boss Core/AI/Routines/Unsorted.cs | 2 +- 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs create mode 100644 Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs index 2852d63..1ef9ad6 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs @@ -18,7 +18,7 @@ public Wave_Reverse() { Description = "Fires a wave of projectiles that, on death, reverse direction."; Difficulty = 4f; - Sequence = For( + Sequence = ForConcurrent( 50, i => new Shoot1 ( diff --git a/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs new file mode 100644 index 0000000..caadb78 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using System.Reflection; + +using AI; + +namespace Phases +{ + public class Phase_Unsorted : AIPhase + { + public Phase_Unsorted() + { + MaxHealth = 100; + + System.Type[] types = Assembly.GetExecutingAssembly().GetTypes(); + foreach (System.Type type in types) + { + if (type.Namespace != null && type.Namespace.Equals("Moves.Unsorted")) + { + try + { + Debug.Log("Adding type: " + type); + AddSequence(10, System.Activator.CreateInstance(type) as AISequence); + } + catch (System.Exception e) + { + Debug.Log("Failed to add type: " + type); + } + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs.meta b/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs.meta new file mode 100644 index 0000000..73d5370 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de0b6ff5427a846bb836038e57c5a8e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs b/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs index 21c5a20..d1e59af 100644 --- a/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs +++ b/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs @@ -12,7 +12,7 @@ public Unsorted() { Phases = new List { - new AIPhase().AddSequence(10, new Moves.Unsorted.Double_Hex_Curve_Hard()) + new Phases.Phase_Unsorted() }; } } From 07158ac4e414015b42b7f2c7291a785e2d70b7fe Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Wed, 7 Nov 2018 00:34:36 -0600 Subject: [PATCH 24/33] Added experimental static Projectiles to reuse common patterns. They seem to work well. --- Assets/Scenes/BossScene.unity | 2 +- .../AI/Moves/Basic_Generators/ShootHomingStrafe.cs | 2 +- Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs | 2 +- Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs | 3 ++- .../Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs | 6 +++--- Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs | 2 +- Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs | 2 +- Assets/Scripts/Boss Core/Projectile/Projectile.cs | 6 ++++++ Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs | 2 ++ 9 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index 7a4306e..b806a52 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -7661,7 +7661,7 @@ Prefab: - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: Chill - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs index d3d9201..3d52812 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs @@ -9,7 +9,7 @@ public class ShootHomingStrafe : AISequence public ShootHomingStrafe(bool clockwise = true, int strafeAmount = 5, int speed = 25) : base ( new Strafe(clockwise, strafeAmount, speed), - new Shoot1(new ProjectileHoming { Size = Size.MEDIUM }) + new Shoot1(ProjectileHoming.DEFAULT) ) { Description = "Strafed " + strafeAmount + " degrees " + (clockwise ? "clockwise" : "counterclockwise") + " and shot a homing projectile."; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs index 4b5991c..ebe98d8 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -15,7 +15,7 @@ public class Test : Move { public Test() { - Sequence = new Shoot1(new ProjectileHoming(difficulty: 1) { Speed = Speed.VERY_FAST }).Wait(0.1f); + Sequence = new Shoot1(Projectile.DEFAULT_LARGE_SLOW).Wait(0.1f); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs index d4b5c51..f54a219 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs @@ -36,7 +36,8 @@ public class AOE_Test_2 : Move public AOE_Test_2() { - Sequence = new AISequence( + Sequence = new AISequence( + new Teleport(CENTER), TELEGRAPH_CARDINAL, new ShootAOE( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs index 10dadce..65e368c 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs @@ -20,11 +20,11 @@ public Double_Hex_Curve_Hard() : base new Shoot_Hex_Curve(false, 0f), new Shoot_Hex_Curve(false, 30f), // This homing might be too hard; especially with this amount of 360s. - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(10), + new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(10), new AOE_360(), - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), + new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(5), new AOE_360(), - new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), + new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(5), new AOE_360().Wait(0.5f), new AOE_360().Wait(0.5f) ) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs index 1f56d92..ee5ab26 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs @@ -43,7 +43,7 @@ public Random_200() } if (j % 20 == 0) { - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.MEDIUM })); + sequences.Add(new Shoot1(ProjectileHoming.DEFAULT)); } if (j % 40 == 0) { diff --git a/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs index a8af866..f558d42 100644 --- a/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs +++ b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs @@ -10,7 +10,7 @@ public class Phase_Test_Latest : AIPhase { public Phase_Test_Latest() { - AddSequence(10, new Moves.Tutorial1.Shoot_1_Several()); + AddSequence(10, new Moves.Test.Test()); } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Projectile/Projectile.cs b/Assets/Scripts/Boss Core/Projectile/Projectile.cs index de6b8aa..5e7cb73 100644 --- a/Assets/Scripts/Boss Core/Projectile/Projectile.cs +++ b/Assets/Scripts/Boss Core/Projectile/Projectile.cs @@ -15,6 +15,12 @@ namespace Projectiles public class Projectile { + // Experimental. Static Projectiles that are commonly used (note: there don't tend to be duplicate projectiles) + public static Projectile DEFAULT = new Projectile(); + public static Projectile DEFAULT_LARGE_SLOW = new Projectile { Size = Size.LARGE, Speed = Speed.SLOW }; + public static Projectile DEFAULT_MEDIUM_MEDIUM = new Projectile { Size = Size.MEDIUM, Speed = Speed.MEDIUM }; + public static Projectile DEFAULT_SMALL_FAST = new Projectile { Size = Size.SMALL, Speed = Speed.FAST }; + public virtual ProxyVector3 Start { get; set; } = AI.AISequence.BOSS_POSITION; public virtual ProxyVector3 Target { get; set; } = AI.AISequence.DELAYED_PLAYER_POSITION; public virtual float AngleOffset { get; set; } = 0f; diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs index 5989f68..95882c6 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs @@ -8,6 +8,8 @@ namespace Projectiles public class ProjectileHoming : Projectile { + public static new ProjectileHoming DEFAULT = new ProjectileHoming { Size = Size.MEDIUM }; + private GameObject targetObject; private float curDivergence; From 2bbc2c2912750fe050cf7e7102429ee3993b3747 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Wed, 7 Nov 2018 00:36:07 -0600 Subject: [PATCH 25/33] Fixed single warning --- Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs | 3 ++- Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs index f54a219..c994771 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs @@ -37,7 +37,8 @@ public class AOE_Test_2 : Move public AOE_Test_2() { Sequence = new AISequence( - new Teleport(CENTER), + new Teleport(CENTER), + TELEGRAPH_CARDINAL, new ShootAOE( diff --git a/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs index caadb78..d5b524c 100644 --- a/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs +++ b/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs @@ -24,7 +24,7 @@ public Phase_Unsorted() Debug.Log("Adding type: " + type); AddSequence(10, System.Activator.CreateInstance(type) as AISequence); } - catch (System.Exception e) + catch (System.Exception) { Debug.Log("Failed to add type: " + type); } From 74a5810d752b0a78e1cde0c433a0bda963197095 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Wed, 7 Nov 2018 16:40:59 -0600 Subject: [PATCH 26/33] Cleaned up AISequence API. Tightened up loopholes that allowed for malicious code. --- Assets/Scripts/Boss Core/AI/AISequence.cs | 269 +++++++++++------- Assets/Scripts/Boss Core/AI/InternalMove.cs | 110 +++++++ .../Scripts/Boss Core/AI/InternalMove.cs.meta | 11 + Assets/Scripts/Boss Core/AI/Move.cs | 23 +- .../AI/Moves/Basic/Sweep_Back_And_Forth.cs | 17 +- .../Boss Core/AI/Moves/Basic/Sweep_Both.cs | 18 +- .../AI/Moves/Basic_Generators/Invincible.cs | 30 ++ .../Moves/Basic_Generators/Invincible.cs.meta | 11 + .../AI/Moves/Basic_Generators/MoveCamera.cs | 2 +- .../AI/Moves/Basic_Generators/Pause.cs | 10 +- .../AI/Moves/Basic_Generators/PlayerLock.cs | 2 +- .../AI/Moves/Basic_Generators/Shoot1.cs | 2 +- .../AI/Moves/Basic_Generators/Shoot3.cs | 2 +- .../AI/Moves/Basic_Generators/ShootAOE.cs | 2 +- .../AI/Moves/Basic_Generators/ShootArc.cs | 2 +- .../Basic_Generators/ShootHomingStrafe.cs | 2 +- .../AI/Moves/Basic_Generators/ShootLine.cs | 2 +- .../AI/Moves/Basic_Generators/ShootWall.cs | 2 +- .../AI/Moves/Basic_Generators/Strafe.cs | 2 +- .../AI/Moves/Basic_Generators/Teleport.cs | 2 +- .../AI/Moves/Test/Lightning_Arena.cs | 12 +- .../Scripts/Boss Core/AI/Moves/Test/Test.cs | 23 +- .../AI/Moves/Tutorial1/Shoot_1_Several.cs | 6 +- .../AI/Moves/Tutorial1/Shoot_3_Several.cs | 6 +- .../Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs | 2 +- .../AI/Moves/Unsorted/Big_Homing_Strafe.cs | 20 +- .../Boss Core/AI/Moves/Unsorted/Dash_Test.cs | 12 +- .../Boss Core/AI/Moves/Unsorted/Death_Hex.cs | 20 +- .../AI/Moves/Unsorted/Double_Hex_Curve.cs | 24 +- .../Moves/Unsorted/Double_Hex_Curve_Hard.cs | 30 +- .../Unsorted/Four_Way_Sweep_With_Homing.cs | 64 ++--- .../AI/Moves/Unsorted/Hex_Curve_Intro.cs | 28 +- .../AI/Moves/Unsorted/Jump_Rope_Fast.cs | 28 +- .../Boss Core/AI/Moves/Unsorted/Random_200.cs | 54 ++-- .../AI/Moves/Unsorted/Shoot3_Wave3.cs | 20 +- .../AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs | 18 +- .../AI/Moves/Unsorted/Shoot_Hex_Curve.cs | 21 +- .../Unsorted/Sweep_Back_And_Forth_Advanced.cs | 58 ++-- .../Unsorted/Sweep_Back_And_Forth_Medium.cs | 57 ++-- .../Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs | 25 +- .../Unsorted/Sweep_Wall_Back_And_Forth.cs | 16 +- .../AI/Moves/Unsorted/Wave_Circle.cs | 40 +-- 42 files changed, 633 insertions(+), 472 deletions(-) create mode 100644 Assets/Scripts/Boss Core/AI/InternalMove.cs create mode 100644 Assets/Scripts/Boss Core/AI/InternalMove.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Invincible.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Invincible.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/AISequence.cs b/Assets/Scripts/Boss Core/AI/AISequence.cs index 72dc87d..02e15e0 100644 --- a/Assets/Scripts/Boss Core/AI/AISequence.cs +++ b/Assets/Scripts/Boss Core/AI/AISequence.cs @@ -5,14 +5,7 @@ namespace AI { - /* - * Some delegates used to generate a sequence of events that need more dynamic - * information. This allows for for loops over sequences and events. - */ - public delegate AISequence[] GenerateSequences(); - public delegate AISequence GenerateSequence(); - - public partial class AISequence + public class AISequence { /// /// When calling ToString on AISequences, should we try to expand sequence generator @@ -20,9 +13,6 @@ public partial class AISequence /// public static bool ShouldTryExpandFunctions = false; - // TODO remove this later by making all constructors that set it protected. - public bool _isDirty = false; - // TODO put these in a publically accessable location. Possibly in world or game manager. public static ProxyVector3 PLAYER_POSITION = new ProxyVector3(() => { return GameManager.Player.transform.position + World.Arena.CENTER; }); @@ -36,7 +26,8 @@ public partial class AISequence // Experimental. Leads ahead of the player based on their current velocity and distance from boss. // This is quite realtime, but can be jittery as a result. - public static ProxyVector3 LEADING_PLAYER_POSITION = new ProxyVector3(() => { + public static ProxyVector3 LEADING_PLAYER_POSITION = new ProxyVector3(() => + { float distance = (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude; //Vector3 offset = (distance / 2f * GameManager.Player.GetComponent().velocity.normalized); Vector3 offset = 1f * GameManager.Player.GetComponent().velocity.normalized; @@ -67,12 +58,18 @@ public partial class AISequence return distance * (Quaternion.AngleAxis(angle, Vector3.up) * Vector3.forward) + World.Arena.CENTER; }); - // A list of events to execute. - public AIEvent[] events; - private AISequence[] children; + // A list of events to execute. This is the data, or leaf, of the recursive structure. + public AIEvent[] Events + { + get; protected set; + } + // The AISequence children. This represents an intermediate node in the recursion. public delegate AISequence[] AISequenceGenerator(); - public AISequenceGenerator GetChildren; + public AISequenceGenerator Children + { + get; protected set; + } /* * A relative difficulty parameter. @@ -119,16 +116,19 @@ public string Description get; protected set; } - public override string ToString() { - if (Description != null) { + public override string ToString() + { + if (Description != null) + { return Description; } string fullDesc = null; - AISequence[] sequences = GetChildren(); + AISequence[] sequences = Children(); if (sequences != null) { - if (sequences.Length > 0) { + if (sequences.Length > 0) + { fullDesc += sequences[0]; } @@ -142,7 +142,7 @@ public override string ToString() { // collapse into something easier to read. For now, ShouldTryExpandFunctions is false so // we don't have a million sequences printing out. } - else if (events != null) + else if (Events != null) { fullDesc += "Some events executed, and that's all we know."; } @@ -152,78 +152,30 @@ public override string ToString() { #region Constructors - // Used internally as a shortcut. - // TODO make private; currently Moves.Basic.Pause() uses this - [System.Obsolete] - protected AISequence(AIEvent[] events) { - _isDirty = true; - this.events = events; - this.children = null; - - this.GetChildren = () => { return children; }; - } - - /* - * Creates a new singleton AISequence from the given Action. - * This has no delay after its event. - * TODO make protected - */ - [System.Obsolete] - public AISequence(AIEvent.Action a) - { - _isDirty = true; - this.events = new AIEvent[] { new AIEvent(0f, a) }; - this.children = null; - - this.GetChildren = () => { return children; }; - } - - /* - * Keeps track of a function that can "explode" into a list of AISequences. - * When this is added to the event queue, this function is called. - * TODO make protected - */ - [System.Obsolete] - public AISequence(GenerateSequences genFunction) + // Used internally within AISequence. + private AISequence(AIEvent[] events) { - _isDirty = true; - this.events = null; - this.children = null; - - this.GetChildren = () => genFunction(); - this.Description = ShouldTryExpandFunctions ? null : "Some sequences were generated from a function."; - } - - /* - * Keeps track of a function that can "explode" into a single AISequence. - * When this is added to the event queue, this function is called. - * TODO make protected - */ - [System.Obsolete] - public AISequence(GenerateSequence genFunction) - { - _isDirty = true; - this.events = null; - this.children = null; - - this.GetChildren = () => new AISequence[] { genFunction() }; - this.Description = ShouldTryExpandFunctions ? null : "A sequence was generated from a function."; + this.Events = events; + //this.Children = null; + + this.Children = () => { return null; }; } - /* - * Takes an arbitrary length list of AISequences and combines them into an AISequence. - */ + /// + /// Takes an arbitrary length list of AISequences and combines them into an AISequence. + /// + /// A variable length list of sequences. public AISequence(params AISequence[] sequences) { - this.events = null; - this.children = sequences; + this.Events = null; + //this.Children = sequences; - this.GetChildren = () => { return children; }; + this.Children = () => { return sequences; }; } #endregion - #region Somewhat internal tools for AISequences + #region Internal tools for AISequences private static AIEvent BasicMerge(params AIEvent[] events) { @@ -274,31 +226,37 @@ private static AISequence SequentialMerge(AISequence[] sequences) * array of AIEvents. This will execute any generation functions every time * it is called, and so the exact list returned may vary between method calls. */ - public AIEvent[] Flatten() { + private AIEvent[] Flatten() + { return FlattenRecur(this); } - private AIEvent[] FlattenRecur(AISequence sequence) { + private AIEvent[] FlattenRecur(AISequence sequence) + { - AISequence[] seqChildren = sequence.GetChildren(); - if (seqChildren != null) { + AISequence[] seqChildren = sequence.Children(); + if (seqChildren != null) + { List childrenEvents = new List(); - for (int i = 0; i < seqChildren.Length; i++) { + for (int i = 0; i < seqChildren.Length; i++) + { childrenEvents.AddRange(FlattenRecur(seqChildren[i])); } return childrenEvents.ToArray(); } - if (sequence.events == null) { + if (sequence.Events == null) + { Debug.LogError("Failed to flatten AISequence: \"" + sequence + "\". Children and Events are both null."); } - return sequence.events; // If null, will crash AddRange above + return sequence.Events; // If null, will crash AddRange above } #endregion #region Tools to construct AISequences + /* * Merges the given array of AISequences, and executes all of them concurrently. * @@ -306,8 +264,21 @@ private AIEvent[] FlattenRecur(AISequence sequence) { * or stitching various "ShootArc" methods. * * On a more complex scale, two separate sets of tasks can be executed in parallel. - */ + * + * Note: This returns a new AISequence because "MergeCoerce" flattens the sequences passed in. + * This fixes random values, and so breaks a lot of the sequences. Making the MergeCoerce call + * take place in a delegate means it'll resample "sequences" every time. + */ public static AISequence Merge(params AISequence[] sequences) + { + return new AISequence + { + Children = () => new AISequence[] { MergeCoerce(sequences) } + }; + } + + // Merges the given array of AISequences and executes all of them concurrently. + private static AISequence MergeCoerce(params AISequence[] sequences) { int[] indicies = new int[sequences.Length]; float[] startTimes = new float[sequences.Length]; @@ -384,8 +355,9 @@ public static AISequence Merge(params AISequence[] sequences) mergedDesc += sequences[sequences.Length - 1]; mergedDesc += ")."; - return new AISequence(finalEventsList.ToArray()) { - Description = mergedDesc + return new AISequence(finalEventsList.ToArray()) + { + Description = mergedDesc }; } @@ -396,7 +368,6 @@ public static AISequence Merge(List sequences) /* * Returns this AISequence repeated "times" number of times. - * TODO make a ProxyInt */ public AISequence Times(int times) { @@ -436,8 +407,9 @@ public AISequence Wait(float duration) */ public static AISequence Pause(float duration) { - return new AISequence(new AIEvent[] { new AIEvent(duration, () => { }) }) { - Description = "Wait for " + duration + " seconds." + return new AISequence(new AIEvent[] { new AIEvent(duration, () => { }) }) + { + Description = "Wait for " + duration + " seconds." }; } @@ -454,10 +426,12 @@ public AISequence Then(AISequence seq) */ public static AISequence Either(params AISequence[] sequences) { - return new AISequence(() => + return new AISequence { - return sequences[(int)(Random.value * sequences.Length)]; - }); + Events = null, + Children = () => new AISequence[] { sequences[(int)(Random.value * sequences.Length)] }, + Description = "A sequence was chosen randomly from a list." + }; } // A delegate that captures an iterator in a for loop @@ -492,7 +466,6 @@ public static AISequence For(float start, float end, ForBody body) */ public static AISequence For(float start, float end, float step, ForBody body) { - Debug.Log("For called!"); if (Mathf.Approximately(step, 0)) { Debug.LogError("Found for loop with step size 0."); @@ -543,12 +516,104 @@ public static AISequence ForConcurrent(float start, float end, ForBody body) */ public static AISequence ForConcurrent(float start, float end, float step, ForBody body) { - return Merge(For(start, end, step, body).GetChildren()); + return Merge(For(start, end, step, body).Children()); } + public static AISequence If(bool condition, AISequence then) + { + return condition ? then : Pause(0f); + } + public static AISequence If(bool condition, AISequence then, AISequence _else) + { + return condition ? then : _else; + } + // TODO this isn't pretty but it works. + // I tried using ProxyVariables but then everything needs to use them. Is there a better way + // to get randomness in the moves? + public static AISequence GenerateRandom(ForBody body) + { + return new AISequence() + { + Children = () => new AISequence[] { body(Random.value) } + }; + } - #endregion + #endregion + + /// + /// Guards against invalid AISequences. Prints via Debug.Log/Error if there are any + /// problems with the AISequence. If this returns true, it may still have warnings; if + /// this returns false, it will print errors. + /// + public static bool IsValid(AISequence sequence) + { + if (sequence == null) + { + Debug.LogError("Null AISequence added to queue."); + return false; + } + + // Guard against basic attempts to break the game. A user cannot define InternalMoves. + if (!(sequence is Move)) + { + if (sequence is InternalMove) + { + if (!InternalMove.IsValid(sequence as InternalMove)) + { + Debug.LogError("Found InternalMove that was not recognized. Refusing to execute. Name: " + sequence.Name); + return false; + } // else ok + } + } + + // "glue" AISequences are special: AISequences followed by "Then" or "Wait" + // won't have descriptions, but can be identified by being direct instances + // of the "AISequence" class (vs. subclasses for every other move). + // + // These guys don't need to have a valid difficulty or description. + //bool isGlueSequence = sequence.Name.Equals("AISequence"); + bool isGlueSequence = sequence.GetType() == typeof(AISequence) || sequence is InternalMove; + + // Warn about unnamed sequences. By default, this shouldn't be called; the standard name is valid. + if (sequence.Name == null) + { + Debug.LogWarning("Found AISequence without a name. Description: " + sequence.Description ?? "not provided."); + } + + // Warn if there's a named sequence without a description. + // + if (sequence.Description == null && !isGlueSequence) + { + Debug.LogWarning("Found AISequence with a name, but without a description. Name: " + sequence.Name); + } + + // Warn about default descriptions. + if (sequence.Description != null && sequence.Description.Equals("Your description here")) + { + Debug.LogWarning("Found AISequence with default description. Name: " + sequence.Name); + } + + // Warn if there's a sequence with too high a difficulty. + if (sequence.Difficulty >= 8f) + { + Debug.LogWarning("Found AISequence with very high difficulty (" + sequence.Difficulty + "). Name: " + sequence.Name); + } + + // Warn about default difficulty (-1). Glue sequences can ignore this. + if (Mathf.Abs(sequence.Difficulty - -1) < 0.01f && !isGlueSequence) + { + Debug.LogWarning("Found AISequence with default difficulty (-1). Name: " + sequence.Name); + } + + // Warn about invalid difficulty (<= 0). Glue sequences can ignore this. + if (sequence.Difficulty <= 0f && !isGlueSequence) + { + Debug.LogWarning("Found AISequence with invalid difficulty (<= 0). Name: " + sequence.Name); + } + + return true; + } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/InternalMove.cs b/Assets/Scripts/Boss Core/AI/InternalMove.cs new file mode 100644 index 0000000..0b9d862 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/InternalMove.cs @@ -0,0 +1,110 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AI +{ + /// + /// A subclass of AISequence that allows for more low-level control over the internal status of the game. + /// + /// If you need to work with things like moving the camera, instantiating projectiles, or + /// messing with the arena size, you need an InternalMove. + /// + public class InternalMove : AISequence + { + // Pass-through constructor from AISequence. + internal InternalMove(params AISequence[] sequences) : base(sequences) {} + + /* + * Creates a new singleton AISequence from the given Action. + * This has no delay after its event. + */ + internal InternalMove(AIEvent.Action a) + { + this.Events = new AIEvent[] { new AIEvent(0f, a) }; + this.Children = () => { return null; }; + } + + // Used uniquely by Pause() to generate an AIEvent with a nonzero duration. + internal InternalMove(AIEvent a) { + this.Events = new AIEvent[] { a }; + this.Children = () => { return null; }; + } + + /* + * Some delegates used to generate a sequence of events that need more dynamic + * information. This allows for for loops over sequences and events. + */ + internal delegate AISequence[] GenerateSequences(); + internal delegate AISequence GenerateSequence(); + + /* + * Keeps track of a function that can "explode" into a list of AISequences. + * When this is added to the event queue, this function is called. + */ + internal InternalMove(GenerateSequences genFunction) + { + this.Events = null; + this.Children = () => genFunction(); + this.Description = ShouldTryExpandFunctions ? null : "Some sequences were generated from a function."; + } + + /* + * Keeps track of a function that can "explode" into a single AISequence. + * When this is added to the event queue, this function is called. + */ + internal InternalMove(GenerateSequence genFunction) + { + this.Events = null; + this.Children = () => new AISequence[] { genFunction() }; + this.Description = ShouldTryExpandFunctions ? null : "A sequence was generated from a function."; + } + + + private static readonly string[] validNames = new string[] { + "Invincible", + "MoveCamera", + "Pause", + "PlayerLock", + "Shoot1", + "Shoot3", + "ShootAOE", + "ShootArc", + "ShootHomingStrafe", + "ShootLine", + "ShootWall", + "Strafe", + "Teleport" + }; + + /// + /// Returns true if the internal move is valid. + /// + /// This checks against the whitelist of known internal moves to see if the provided move matches. + /// This helps to prevent users from creating invalid moves and adding them to the queue. + /// + /// true if the move is valid, false otherwise. + /// The move to check. + public static bool IsValid(InternalMove move) + { + string name = move.GetType().Name; + bool isNameValid = false; + for (int i = 0; i < validNames.Length; i++) { + if (validNames[i].Equals(name)) { + isNameValid = true; + break; + } + } + + if (!isNameValid) { + return false; + } + + if (!"Moves.Basic".Equals(move.GetType().Namespace)) { + return false; + } + + return true; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/InternalMove.cs.meta b/Assets/Scripts/Boss Core/AI/InternalMove.cs.meta new file mode 100644 index 0000000..8f5cef9 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/InternalMove.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28338ec150eee49e4a3e640291212545 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Move.cs b/Assets/Scripts/Boss Core/AI/Move.cs index fd9ce94..8085636 100644 --- a/Assets/Scripts/Boss Core/AI/Move.cs +++ b/Assets/Scripts/Boss Core/AI/Move.cs @@ -6,6 +6,15 @@ namespace AI { public class Move : AISequence { + // Hide the parent's Children property so that no subclass can use it. + public new AISequenceGenerator Children { + get; private set; + } + + public new AIEvent[] Events { + get; private set; + } + private AISequence _sequence; public AISequence Sequence { @@ -21,19 +30,7 @@ public AISequence Sequence } public Move() { - this.GetChildren = () => new AISequence[] { Sequence }; - } - - // TODO this is provided for backwards compatibility with the base(...) - // style of building moves. Later we should move away from it. - [System.Obsolete] - public Move(params AISequence[] sequences) : base(sequences) { - Debug.LogWarning("Using the base(...) notation is deprecated! Name: " + Name); + base.Children = () => new AISequence[] { Sequence }; } - - // Hide the AISequence constructors so that we get a compilation error for using them - private Move(AIEvent[] events) { } - private Move(GenerateSequence sequence) { } - private Move(GenerateSequences sequence) { } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs index 5dda558..d5facdc 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs @@ -18,20 +18,9 @@ public Sweep_Back_And_Forth() Sequence = new AISequence( new Teleport().Wait(0.25f), new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - for (int i = -30; i < 90; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); - } - sequences.Add(Pause(0.25f)); - for (int i = 30; i > -90; i -= 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)); - } - return sequences.ToArray(); - }), + For(-30, 90, 5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)), + new Pause(0.25f), + For(30, -90, -5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)), new PlayerLock(false), new Pause(0.5f) ); diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs index b105f3c..0417c8a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs @@ -18,18 +18,12 @@ public Sweep_Both() Sequence = new AISequence( new Teleport().Wait(0.25f), new PlayerLock(true), - new AISequence(() => - { - - List sequences = new List(); - for (int i = 0; i < 120; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i - 60 })); - sequences.Add(new Shoot1(new Projectile { AngleOffset = 60 - i })); - sequences.Add(new Pause(0.05f)); - } - return sequences.ToArray(); - }), + For(0, 120, 5, + i => Merge( + new Shoot1(new Projectile { AngleOffset = i - 60 }), + new Shoot1(new Projectile { AngleOffset = 60 - i }) + ).Wait(0.05f) + ), new PlayerLock(false), new Pause(0.5f) ); diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Invincible.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Invincible.cs new file mode 100644 index 0000000..d962a03 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Invincible.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using CombatCore; +using AI; + +namespace Moves.Basic +{ + public class Invincible : InternalMove + { + + // A reference to the BossController's Entity. + private static Entity self; + + public Invincible(bool to) : base + ( + () => + { + if (self == null) { + self = GameManager.Boss.GetComponent(); + } + self.SetInvincible(to); + } + ) + { + Description = "Makes the boss " + (to ? "" : "not") + " invincible."; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Invincible.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Invincible.cs.meta new file mode 100644 index 0000000..34ea270 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Invincible.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d691ef926069844bb9761572e82dc8b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs index d720fa2..5830dc9 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs @@ -5,7 +5,7 @@ namespace Moves.Basic { - public class MoveCamera : AISequence + public class MoveCamera : InternalMove { public MoveCamera(bool isFollow = false, Vector3? targetPosition = null) : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Pause.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Pause.cs index 5885717..ae1c3ba 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Pause.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Pause.cs @@ -2,14 +2,18 @@ namespace Moves.Basic { - public class Pause : AISequence + public class Pause : InternalMove { + /// + /// Creates a new AISequence that does nothing, but has a specified duration. + /// + /// How long we should wait for. public Pause(float duration) : base ( - new AIEvent[] { new AIEvent(duration, () => { }) } + new AIEvent(duration, () => { }) ) { - Description = "Waiting for " + duration + " seconds."; + Description = "Wait for " + duration + " seconds."; } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs index 0b7e236..c1a6e82 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs @@ -3,7 +3,7 @@ namespace Moves.Basic { - public class PlayerLock : AISequence + public class PlayerLock : InternalMove { // Used for the "PlayerLock" move. Keeps track of the current player position // for events and sequences that need a slightly out of date version. diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs index f639240..328c3e4 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs @@ -4,7 +4,7 @@ namespace Moves.Basic { - public class Shoot1 : AISequence + public class Shoot1 : InternalMove { public Shoot1(Projectile skeleton = null) : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs index 7c8cf3a..afe55ee 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs @@ -4,7 +4,7 @@ namespace Moves.Basic { - public class Shoot3 : AISequence + public class Shoot3 : InternalMove { public Shoot3(Projectile skeleton = null) : base diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs index 1cadef0..1cf65c9 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs @@ -6,7 +6,7 @@ namespace Moves.Basic { - public class ShootAOE : AISequence + public class ShootAOE : InternalMove { public ShootAOE(AOE skeleton = null) : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs index a1d7811..403a823 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs @@ -4,7 +4,7 @@ namespace Moves.Basic { - public class ShootArc : AISequence + public class ShootArc : InternalMove { public ShootArc(int density = 50, float from = 0, float to = 360, Projectile skeleton = null) : base diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs index 3d52812..2b34c22 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs @@ -4,7 +4,7 @@ namespace Moves.Basic { - public class ShootHomingStrafe : AISequence + public class ShootHomingStrafe : InternalMove { public ShootHomingStrafe(bool clockwise = true, int strafeAmount = 5, int speed = 25) : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs index 32472ac..281227c 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs @@ -6,7 +6,7 @@ namespace Moves.Basic { - public class ShootLine : AISequence + public class ShootLine : InternalMove { public ShootLine(int amount = 50, float width = 75f, Vector3? target = null, Speed speed = Speed.MEDIUM, Size size = Size.MEDIUM) : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs index 5f7020a..3fc786d 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs @@ -6,7 +6,7 @@ namespace Moves.Basic { - public class ShootWall : AISequence + public class ShootWall : InternalMove { public ShootWall(float angleOffset) : base ( diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Strafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Strafe.cs index 80c5847..8e9fb64 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Strafe.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Strafe.cs @@ -6,7 +6,7 @@ namespace Moves.Basic { - public class Strafe : AISequence + public class Strafe : InternalMove { // A reference to the BossController's entity. Assigned when teleport is called. private static CombatCore.Entity self = null; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs index 2943997..de105cc 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs @@ -3,7 +3,7 @@ namespace Moves.Basic { - public class Teleport : AISequence + public class Teleport : InternalMove { // A reference to the BossController's entity. Assigned when teleport is called. private static CombatCore.Entity self = null; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs index ed4a0a6..d29409d 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs @@ -18,17 +18,7 @@ public Lightning_Arena() Difficulty = 5f; Sequence = new AISequence( new Teleport(World.Arena.CENTER).Wait(0.25f), - new AISequence(() => - { - List sequences = new List(); - - for (int i = 0; i < 1; i++) - { - sequences.Add(new Shoot1( - new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)); - } - return sequences.ToArray(); - }), + For(4, i => new Shoot1(new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)), Pause(1f) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs index ebe98d8..31a4ed1 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -10,12 +10,31 @@ using static BossController; namespace Moves.Test -{ +{ + + public class Test : Move { public Test() { - Sequence = new Shoot1(Projectile.DEFAULT_LARGE_SLOW).Wait(0.1f); + //Sequence = new Shoot1(Projectile.DEFAULT_LARGE_SLOW).Wait(0.1f); + //Sequence = Merge( + // Either(new Shoot1(Projectile.DEFAULT_LARGE_SLOW), new Shoot3(Projectile.DEFAULT_MEDIUM_MEDIUM)) + //); + //Sequence = + //Either(new Shoot1(Projectile.DEFAULT_LARGE_SLOW), new Shoot3(Projectile.DEFAULT_MEDIUM_MEDIUM)); + //InternalMove move = new InternalMove(() => { Debug.Log("Bad!"); }); + + //Sequence = new Shoot1(new Projectile + //{ + // MaxTime = 0f, + // OnDestroyTimeout = (self) => { + // return new InternalMove(() => { Debug.Log("Bad!"); }); + // } + //}); + + Sequence = new InternalMove(); + } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs index f61e67b..8ff2b5e 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs @@ -14,12 +14,8 @@ public Shoot_1_Several() Description = "Shoots between 5 and 10 default projectiles at the player."; Difficulty = 2f; Sequence = new AISequence( - // TODO find a way to allow random values to any parameter. new Teleport().Wait(0.5f), - new AISequence(() => - { - return new Shoot1().Wait(0.1f).Times(Random.Range(5, 10)); - }), + GenerateRandom(ran => new Shoot1().Wait(0.1f).Times((int) (5 + (ran * 5)))), new Pause(1.5f) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs index ff89c90..5dd7e67 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs @@ -15,11 +15,7 @@ public Shoot_3_Several() Difficulty = 3f; Sequence = new AISequence( new Teleport().Wait(0.5f), - // TODO add some way to include random values here - new AISequence(() => - { - return new Shoot3().Wait(0.1f).Times(Random.Range(7, 12)); - }), + GenerateRandom(ran => new Shoot3().Wait(0.1f).Times((int) (7 + (ran * 5)))), new Pause(1.5f) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs index 87d1213..2c0fc81 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs @@ -19,7 +19,7 @@ public Shoot_AOE(int width) Sequence = new AISequence( new Teleport().Wait(0.25f), new ShootAOE(new AOE { FixedWidth = 3f }.On(-width / 2, width / 2)), - new Pause(0.5f) + new Pause(1.5f) ); } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs index 2000dd0..e750a02 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs @@ -13,18 +13,18 @@ namespace Moves.Unsorted { public class Big_Homing_Strafe : Move { - public Big_Homing_Strafe() : base - ( - new MoveCamera(false, new Vector3(0, 17.5f, -35f)).Wait(1f), - new Teleport(NORTH_FAR).Wait(1f), - new ShootHomingStrafe(strafeAmount: 65).Times(10), - new Teleport(NORTH_FAR).Wait(1f), - new ShootHomingStrafe(strafeAmount: 15).Times(15), - new MoveCamera(true).Wait(2f) - ) + public Big_Homing_Strafe() { Description = "Does a circle along the outside of the arena, shooting homing projectiles at the player."; - Difficulty = 5f; + Difficulty = 5f; + Sequence = new AISequence( + new MoveCamera(false, new Vector3(0, 17.5f, -35f)).Wait(1f), + new Teleport(NORTH_FAR).Wait(1f), + new ShootHomingStrafe(strafeAmount: 65).Times(10), + new Teleport(NORTH_FAR).Wait(1f), + new ShootHomingStrafe(strafeAmount: 15).Times(15), + new MoveCamera(true).Wait(2f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs index 726f832..5a28a63 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs @@ -12,14 +12,14 @@ namespace Moves.Unsorted { public class Dash_Test : Move { - public Dash_Test() : base - ( - new ShootAOE(new AOE { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f) ), - new Pause(0.75f) - ) + public Dash_Test() { Description = "Aggressively tests dashing."; - Difficulty = 8f; + Difficulty = 8f; + Sequence = new AISequence( + new ShootAOE(new AOE { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f)), + new Pause(0.75f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs index 661a983..6baa482 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs @@ -20,18 +20,18 @@ namespace Moves.Unsorted */ public class Death_Hex : Move { - public Death_Hex() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot_Death_Hex(2f).Wait(1f), - new Shoot_Death_Hex(1f).Wait(2f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(0.75f) - ) + public Death_Hex() { Description = "Fires 6 projectiles that explode into 6 more projectiles, repeated twice to form a lattice."; - Difficulty = 9f; + Difficulty = 9f; + Sequence = new AISequence( + new Teleport(CENTER).Wait(0.5f), + new Shoot_Death_Hex(2f).Wait(1f), + new Shoot_Death_Hex(1f).Wait(2f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(0.75f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs index 3db92af..43b22e9 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs @@ -13,20 +13,20 @@ namespace Moves.Unsorted { public class Double_Hex_Curve : Move { - public Double_Hex_Curve() : base - ( - new Teleport(CENTER).Wait(1.5f), - new PlayerLock(true), - new Shoot_Hex_Curve(true), - new AOE_360().Wait(0.5f), - new Shoot_Hex_Curve(true, 30f).Wait(0.5f), - new AOE_360().Wait(1f), - new AOE_360().Wait(1f), - new PlayerLock(false) - ) + public Double_Hex_Curve() { Description = "Fires two hex curves, the second offset 30 degrees from the first."; - Difficulty = 5f; + Difficulty = 5f; + Sequence = new AISequence( + new Teleport(CENTER).Wait(1.5f), + new PlayerLock(true), + new Shoot_Hex_Curve(true), + new AOE_360().Wait(0.5f), + new Shoot_Hex_Curve(true, 30f).Wait(0.5f), + new AOE_360().Wait(1f), + new AOE_360().Wait(1f), + new PlayerLock(false) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs index 65e368c..1275b02 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs @@ -14,23 +14,23 @@ namespace Moves.Unsorted { public class Double_Hex_Curve_Hard : Move { - public Double_Hex_Curve_Hard() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot_Hex_Curve(false, 0f), - new Shoot_Hex_Curve(false, 30f), - // This homing might be too hard; especially with this amount of 360s. - new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(10), - new AOE_360(), - new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(5), - new AOE_360(), - new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(5), - new AOE_360().Wait(0.5f), - new AOE_360().Wait(0.5f) - ) + public Double_Hex_Curve_Hard() { Description = "A harder variant of the double hex curve."; - Difficulty = 10f; + Difficulty = 10f; + Sequence = new AISequence( + new Teleport(CENTER).Wait(0.5f), + new Shoot_Hex_Curve(false, 0f), + new Shoot_Hex_Curve(false, 30f), + // This homing might be too hard; especially with this amount of 360s. + new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(10), + new AOE_360(), + new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(5), + new AOE_360(), + new Shoot3(ProjectileHoming.DEFAULT).Wait(0.1f).Times(5), + new AOE_360().Wait(0.5f), + new AOE_360().Wait(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs index e793da0..560c860 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs @@ -17,43 +17,33 @@ public Four_Way_Sweep_With_Homing() Description = "Shoots a 4-directional sweep with homing projectiles in between."; Difficulty = 6f; - // TODO refactor me to use standard notation - Sequence = new AISequence(() => - { - List sequences = new List(); - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 7; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); - for (int j = 7; j < 15; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new AOE_360()); - } - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 5; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); - for (int j = 5; j < 10; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new Shoot1(new ProjectileHoming { Size = Size.LARGE })); - for (int j = 10; j < 15; j++) - { - sequences.Add(new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f)); - } - sequences.Add(new AOE_360()); - } - return sequences.ToArray(); - }); + Sequence = new AISequence( + For(4, i => new AISequence + ( + For(0, 7, j => + new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f) + ), + new Shoot1(new ProjectileHoming { Size = Size.LARGE }), + For(8, 15, j => + new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f) + ), + new AOE_360() + )), + For(4, i => new AISequence( + For(0, 5, j => + new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) + ), + new Shoot1(new ProjectileHoming { Size = Size.LARGE }), + For(5, 10, j => + new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) + ), + new Shoot1(new ProjectileHoming { Size = Size.LARGE }), + For(10, 15, j => + new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) + ), + new AOE_360() + )) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs index 6160aad..1effaa9 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs @@ -12,22 +12,22 @@ namespace Moves.Unsorted { public class Hex_Curve_Intro : Move { - public Hex_Curve_Intro() : base - ( - new Shoot_Hex_Curve(true), - new AOE_360().Wait(2.5f), - new Shoot_Hex_Curve(false), - new AOE_360().Wait(2.5f), - new Shoot_Hex_Curve(true), - new AOE_360(), - new Shoot_Hex_Curve(false).Wait(1f), - new AOE_360().Wait(1f), - new AOE_360().Wait(1.5f), - new Teleport().Wait(0.5f) - ) + public Hex_Curve_Intro() { Description = "Introduces the player to the hex curve attack"; - Difficulty = 4f; + Difficulty = 4f; + Sequence = new AISequence( + new Shoot_Hex_Curve(true), + new AOE_360().Wait(2.5f), + new Shoot_Hex_Curve(false), + new AOE_360().Wait(2.5f), + new Shoot_Hex_Curve(true), + new AOE_360(), + new Shoot_Hex_Curve(false).Wait(1f), + new AOE_360().Wait(1f), + new AOE_360().Wait(1.5f), + new Teleport().Wait(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs index 95cd30d..8154d77 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs @@ -14,22 +14,22 @@ namespace Moves.Unsorted { public class Jump_Rope_Fast : Move { - public Jump_Rope_Fast() : base - ( - new MoveCamera(false, new Vector3(0, 17.5f, -35)).Wait(1f), - new Teleport(WEST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(EAST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(WEST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new Teleport(EAST_FAR, 35), - new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - new MoveCamera(true) - ) + public Jump_Rope_Fast() { Description = "Fires lines at the player from the left and right."; - Difficulty = 4f; + Difficulty = 4f; + Sequence = new AISequence( + new MoveCamera(false, new Vector3(0, 17.5f, -35)).Wait(1f), + new Teleport(WEST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(EAST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(WEST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(EAST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new MoveCamera(true) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs index ee5ab26..133f84b 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs @@ -16,38 +16,27 @@ public class Random_200 : Move public Random_200() { Description = "Spawns 200 random projectiles."; - Difficulty = 8f; - Sequence = new AISequence(() => - { - List sequences = new List(); - for (int j = 0; j < 200; j++) - { - switch (Random.Range(0, 3)) - { - case 0: - sequences.Add(Merge( + Difficulty = 8f; + + Sequence = new AISequence( + For(200, i => Either( + Merge( new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) - )); break; - case 1: - sequences.Add(Merge( + ), + Merge( new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) - )); break; - case 2: - sequences.Add( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }) - ); - break; - } - if (j % 20 == 0) - { - sequences.Add(new Shoot1(ProjectileHoming.DEFAULT)); - } - if (j % 40 == 0) - { - sequences.Add(new Shoot1( + ), + new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }), + If( + (int)i % 20 == 0, + new Shoot1(ProjectileHoming.DEFAULT) + ), + If( + (int)i % 40 == 0, + new Shoot1( new Projectile { Size = Size.MEDIUM, @@ -56,12 +45,11 @@ public Random_200() MaxTime = 0.5f, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE } - )); - } - sequences.Add(Pause(0.05f)); - } - return sequences.ToArray(); - }); + ) + ), + new Pause(0.05f) + )) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs index 25074e5..a2d8b80 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs @@ -13,18 +13,18 @@ namespace Moves.Unsorted { public class Shoot3_Wave3 : Move { - public Shoot3_Wave3() : base - ( - new Teleport().Wait(0.5f), - new AOE_360(), - new Shoot3().Wait(0.1f).Times(20), - new AOE_360(), - new Shoot3().Wait(0.1f).Times(20), - new AOE_360().Wait(0.5f) - ) + public Shoot3_Wave3() { Description = "40 basic bullets, with a 360 wave at the start, middle, and end."; - Difficulty = 3f; + Difficulty = 3f; + Sequence = new AISequence( + new Teleport().Wait(0.5f), + new AOE_360(), + new Shoot3().Wait(0.1f).Times(20), + new AOE_360(), + new Shoot3().Wait(0.1f).Times(20), + new AOE_360().Wait(0.5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs index 79e9982..c440173 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs @@ -14,17 +14,17 @@ namespace Moves.Unsorted { public class Shoot_4_Waves_Behind : Move { - public Shoot_4_Waves_Behind() : base - ( - new Teleport(CENTER).Wait(0.5f), - new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.MEDIUM_SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 220, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), - new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 200, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), - new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 160, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), - new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 140, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(5f) - ) + public Shoot_4_Waves_Behind() { Description = "Shoots 4 projectiles behind the boss which explode into AOE attacks."; - Difficulty = 5.5f; + Difficulty = 5.5f; + Sequence = new AISequence( + new Teleport(CENTER).Wait(0.5f), + new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.MEDIUM_SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 220, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 200, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 160, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 140, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(5f) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs index e396c31..0e89e07 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs @@ -12,19 +12,20 @@ namespace Moves.Unsorted { public class Shoot_Hex_Curve : Move { - public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) : base - ( - ForConcurrent(6, i => - new Shoot1( - new ProjectileCurving((float)Speed.MEDIUM * (clockwise ? 1 : -1) * 2f, true) { - MaxTime = 3f, AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) - } - ) - ) - ) + public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) { Description = "Shoots 6 curving projectiles " + (clockwise ? "clockwise" : "counterclockwise") + " from the boss's location."; Difficulty = 3f; + Sequence = + ForConcurrent(6, i => + new Shoot1( + new ProjectileCurving((float)Speed.MEDIUM * (clockwise ? 1 : -1) * 2f, true) + { + MaxTime = 3f, + AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) + } + ) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs index 43f4786..c3f911c 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs @@ -12,47 +12,35 @@ namespace Moves.Unsorted { public class Sweep_Back_And_Forth_Advanced : Move { - public Sweep_Back_And_Forth_Advanced() : base - ( - // TODO refactor me to use standard notation - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => { - List sequences = new List(); - for (int i = -30; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( + public Sweep_Back_And_Forth_Advanced() + { + Description = "Sweeps back and forth with additional medium and tiny projectiles."; + Difficulty = 6.5f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new PlayerLock(true), + For(-30, 80, 5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)), + For(80, -80, -5, i => + Merge( new Shoot1(new Projectile { AngleOffset = i }), new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - for (int i = -80; i < 80; i += 5) - { - sequences.Add(Merge( + ).Wait(0.02f) + ), + For(-80, 80, 5, i => + Merge( new Shoot1(new Projectile { AngleOffset = i }), new Shoot1(new Projectile { AngleOffset = i, Size = Size.TINY, Speed = Speed.FAST }) - ).Wait(0.02f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -30; i -= 5) - { - sequences.Add(Merge( + ).Wait(0.02f) + ), + For(80, -30, -5, i => + Merge( new Shoot1(new Projectile { AngleOffset = i }), new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - return sequences.ToArray(); - }).Wait(0.75f), - new PlayerLock(false) - ) - { - Description = "Sweeps back and forth with additional medium and tiny projectiles."; - Difficulty = 6.5f; + ).Wait(0.02f) + ), + new Pause(0.75f), + new PlayerLock(false) + ); } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs index 279552a..da1ad3f 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs @@ -12,45 +12,30 @@ namespace Moves.Unsorted { public class Sweep_Back_And_Forth_Medium : Move { - public Sweep_Back_And_Forth_Medium() : base - ( - // TODO refactor me to use standard notation - new Teleport().Wait(0.25f), - new PlayerLock(true), - new AISequence(() => { - List sequences = new List(); - for (int i = -30; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = -80; i < 80; i += 5) - { - sequences.Add(new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)); - } - //sequences.Add(Shoot1(speed: Speed.MEDIUM, size: Size.LARGE, type: Type.HOMING).Wait(0.01f)); - for (int i = 80; i > -80; i -= 5) - { - sequences.Add(Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) - ).Wait(0.02f)); - } - return sequences.ToArray(); - }).Wait(0.75f), - new PlayerLock(false) - ) + public Sweep_Back_And_Forth_Medium() { Description = "Sweeps back and forth with additional medium projectiles."; Difficulty = 5.5f; + Sequence = new AISequence( + new Teleport().Wait(0.25f), + new PlayerLock(true), + For(-30, 80, 5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)), + For(80, -80, -5, i => + Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f) + ), + For(-80, 80, 5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)), + For(80, -80, -5, i => + Merge( + new Shoot1(new Projectile { AngleOffset = i }), + new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + ).Wait(0.02f) + ), + new Pause(0.75f), + new PlayerLock(false) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs index 168ae7b..be10c93 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs @@ -16,22 +16,19 @@ public class Sweep_Wall : Move public Sweep_Wall(bool clockwise=true) { Description = "Shoots a sweeping wall " + (clockwise ? "clockwise" : "counterclockwise") + "."; - Difficulty = 5f; - Sequence = new AISequence(() => - { - List sequences = new List(); + Difficulty = 5f; - for (int angle = 0; angle != (clockwise ? 72 : -72); angle += clockwise ? 6 : -6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } + int start1 = 0; + int end1 = clockwise ? 72 : -72; + int step1 = clockwise ? 6 : -6; + int start2 = clockwise ? 72 : -72; + int end2 = 0; + int step2 = clockwise ? -6 : 6; - for (int angle = clockwise ? 72 : -72; angle != 0; angle -= clockwise ? 6 : -6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - return sequences.ToArray(); - }); + Sequence = new AISequence( + For(start1, end1, step1, angle => new ShootWall(angle).Wait(0.1f)), + For(start2, end2, step2, angle => new ShootWall(angle).Wait(0.1f)) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs index 1bdd84e..ebe960a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs @@ -13,16 +13,16 @@ namespace Moves.Unsorted { public class Sweep_Wall_Back_And_Forth : Move { - public Sweep_Wall_Back_And_Forth() : base - ( - new PlayerLock(true), - new Sweep_Wall(true), - new Sweep_Wall(false), - new PlayerLock(false) - ) + public Sweep_Wall_Back_And_Forth() { Description = "Sweeps a wall clockwise, then counterclockwise."; - Difficulty = 6f; + Difficulty = 6f; + Sequence = new AISequence( + new PlayerLock(true), + new Sweep_Wall(true), + new Sweep_Wall(false), + new PlayerLock(false) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs index 6fe4f94..266cd93 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs @@ -14,34 +14,34 @@ namespace Moves.Unsorted public class Wave_Circle : Move { - private class Slow_Wave_Circle : AISequence { - public Slow_Wave_Circle() : base - ( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), - new Strafe(true, 60f, 50).Wait(0.5f) - ) + private class Slow_Wave_Circle : Move { + public Slow_Wave_Circle() { Description = "Fires a medium-slow AOE, and then strafes 60 degrees clockwise."; Difficulty = 2f; + Sequence = new AISequence( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), + new Strafe(true, 60f, 50).Wait(0.5f) + ); } } - public Wave_Circle() : base - ( - new Teleport(WEST_MED), - new Slow_Wave_Circle().Times(6), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), - new Slow_Wave_Circle().Times(3), - new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW) - ) + public Wave_Circle() { Description = "Fires six slow circles around the arena in a circular pattern. Then repeats twice, with lines appearing on the left and right sides."; - Difficulty = 5f; + Difficulty = 5f; + Sequence = new AISequence( + new Teleport(WEST_MED), + new Slow_Wave_Circle().Times(6), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW) + ); } } } From e4e6472dc38d5f81851832af6d7fe513d84b695d Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Wed, 7 Nov 2018 17:06:14 -0600 Subject: [PATCH 27/33] Wrote out idea for copy constructor replacement. --- .../Scripts/Boss Core/AI/Moves/Test/Test.cs | 19 +++++++++---------- .../Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs | 1 + 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs index 31a4ed1..4c9dfd1 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -25,16 +25,15 @@ public Test() //Either(new Shoot1(Projectile.DEFAULT_LARGE_SLOW), new Shoot3(Projectile.DEFAULT_MEDIUM_MEDIUM)); //InternalMove move = new InternalMove(() => { Debug.Log("Bad!"); }); - //Sequence = new Shoot1(new Projectile - //{ - // MaxTime = 0f, - // OnDestroyTimeout = (self) => { - // return new InternalMove(() => { Debug.Log("Bad!"); }); - // } - //}); - - Sequence = new InternalMove(); - + Sequence = new Shoot1(new Projectile + { + MaxTime = 0f, + OnDestroyTimeout = (self) => { + // Delegates allow for arbitrary code execution. + Debug.Log("Bad!"); + return new AISequence(); + } + }); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs index c994771..f83fe89 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs @@ -48,6 +48,7 @@ public AOE_Test_2() { Target = Vector3.forward, MaxTime = 2f, // TODO add ability to change values in callbacks like before + // (self) => ShootAOE(new AOE { Parent = self.data }) // add parent field to avoid copy constructor? //OnDestroyTimeout = (self) => self.data.Clone().Freeze().RotationSpeed(20f).MaxTime(12.6f).Create(), OnDestroyOutOfBounds = AOECallbackDictionary.DONT_DESTROY_OOB } From 32a753a133d542f57584f0ac14c87885e3ea1c22 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Thu, 8 Nov 2018 09:38:12 -0600 Subject: [PATCH 28/33] Didnt add every file --- .../Boss Core/AOE/AOECallbackDictionary.cs | 2 +- Assets/Scripts/Boss Core/AOE/AOEComponent.cs | 19 +-- Assets/Scripts/Boss Core/BossController.cs | 139 ++++++------------ .../Projectile/ProjectileComponent.cs | 5 + .../Boss Core/Projectile/ProjectileManager.cs | 8 +- Assets/Scripts/Boss Core/ProxyFloat.cs | 62 ++++++++ Assets/Scripts/Boss Core/ProxyFloat.cs.meta | 11 ++ Assets/Scripts/Combat Core/Abilities.cs | 16 +- .../StatusComponents/ShieldPlaced.cs | 1 - Assets/Scripts/KeepOnArena.cs | 1 - Assets/Scripts/ThrownShield.cs | 1 - Assets/Scripts/World/Arena.cs | 25 ++-- 12 files changed, 151 insertions(+), 139 deletions(-) create mode 100644 Assets/Scripts/Boss Core/ProxyFloat.cs create mode 100644 Assets/Scripts/Boss Core/ProxyFloat.cs.meta diff --git a/Assets/Scripts/Boss Core/AOE/AOECallbackDictionary.cs b/Assets/Scripts/Boss Core/AOE/AOECallbackDictionary.cs index 90401c0..829ede4 100644 --- a/Assets/Scripts/Boss Core/AOE/AOECallbackDictionary.cs +++ b/Assets/Scripts/Boss Core/AOE/AOECallbackDictionary.cs @@ -8,7 +8,7 @@ namespace AOEs { public class AOECallbackDictionary { - public static AOECallbackDelegate NOTHING = (self) => { Debug.Log("AOE callback nothing"); }; + public static AOECallbackDelegate NOTHING = (self) => { }; public static AOECallbackDelegate DONT_DESTROY_OOB = (self) => { self.data.ShouldDestroyOnOutOfBounds(false); }; } diff --git a/Assets/Scripts/Boss Core/AOE/AOEComponent.cs b/Assets/Scripts/Boss Core/AOE/AOEComponent.cs index 83a94fa..0d17e8e 100644 --- a/Assets/Scripts/Boss Core/AOE/AOEComponent.cs +++ b/Assets/Scripts/Boss Core/AOE/AOEComponent.cs @@ -54,16 +54,14 @@ public void Update() data.CurrentTime += Time.deltaTime; if (data.CurrentTime > data.MaxTime) { - //Debug.Log("Time is over! " + data.currentTime + " max: " + data.maxTime); data.OnDestroyTimeout(this); Destroy(this.gameObject); } // Hit the arena walls // should be "innerscale"- what about AOE attacks without hole in center? - if (data.Scale > GameManager.Arena.RadiusInWorldUnits + data.Start.GetValue().magnitude) + if (data.Scale > GameManager.Arena.RadiusInWorldUnits + Start.magnitude) { - //Debug.Log("Ring hit arena. Returning."); data.OnDestroyOutOfBounds(this); if (data.shouldDestroyOnOutOfBounds) { @@ -71,10 +69,6 @@ public void Update() } } - // Update the size of the AOE per its expansion rate. - // We divide by two because AOEs move based on radius, not diameter; - // this makes the speeds faster than for projectiles without this correction. - //Debug.Log("Speed: " + data.expansionSpeed); data.Scale += (float)data.OuterSpeed * Time.deltaTime; gameObject.transform.localScale = data.Scale * Vector3.one; @@ -89,8 +83,6 @@ public void Update() Mathf.Abs((float)data.OuterSpeed) > 0.01f && !Mathf.Approximately((float)data.OuterSpeed, (float)data.InnerSpeed)) { - //Debug.Log("Separate inner AOE update"); - //Debug.Log("Separate inner update"); float ideal = ((float)data.InnerSpeed / (float)data.OuterSpeed); data.InnerScale = data.InnerScale - ((data.InnerScale - ideal) * Time.deltaTime); @@ -101,15 +93,11 @@ public void Update() // If we have a fixed width to maintain, we must recompute. if (Mathf.Abs(data.FixedWidth) > 0.01f && Mathf.Abs(data.Scale) > 0.01f) { - //Debug.Log("Fixed width AOE update"); - //Debug.Log("Fixed width update"); data.InnerScale = (data.Scale < data.FixedWidth) ? 0f : (data.Scale - data.FixedWidth) / data.Scale; RecomputeMeshHole(); return; } - - //Debug.Log("Normal AOE update"); } /* @@ -144,11 +132,8 @@ public virtual void OnTriggerStay(Collider other) } degrees -= data.InternalRotation; degrees = Mathf.Repeat(degrees, 360f); - //Debug.Log(degrees); - int section = (int)(degrees / AOE.THETA_STEP); - //Debug.Log("In section " + section); if (data.Regions[section]) { @@ -202,7 +187,7 @@ private void RecomputeMeshHole() meshFilter.sharedMesh.vertices = vertices; meshFilter.sharedMesh.triangles = triangles; meshFilter.sharedMesh.RecalculateNormals(); - transform.position = new Vector3(data.Start.x, AOE.HEIGHT, data.Start.z); + transform.position = new Vector3(Start.x, AOE.HEIGHT, Start.z); } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/BossController.cs b/Assets/Scripts/Boss Core/BossController.cs index 917d748..d146c4c 100644 --- a/Assets/Scripts/Boss Core/BossController.cs +++ b/Assets/Scripts/Boss Core/BossController.cs @@ -12,10 +12,6 @@ public class BossController : MonoBehaviour [SerializeField] private bool insaneMode = false; - [Tooltip("If enabled, will print logging messages related to current attacks. Has a mild performance impact.")] - [SerializeField] - private bool DebugMode = true; - [Tooltip("If enabled, the boss won't attack you or move at the start.")] [SerializeField] private bool Chill = false; @@ -105,12 +101,11 @@ public void NextPhase() // Add i-frames for 3 seconds while we move to center & regain health. if (!Chill) - { - self.SetInvincible(true); - Add(new Moves.Basic.Teleport(World.Arena.CENTER).Wait(3f)); - Add(new AISequence(() => { self.SetInvincible(false); })); + { + Add(new Moves.Basic.Invincible(true)); + Add(new Moves.Basic.Teleport(World.Arena.CENTER).Wait(3f)); + Add(new Moves.Basic.Invincible(false)); } - Debug.Log("Queue length: " + queuedSequences.Count); } public void ResetBoss() @@ -132,68 +127,12 @@ public void ResetBoss() private void Add(AISequence sequence) { - // Debug mode provides additional information when executing an event. - // TODO: possibly move this into a static analysis done when loading in an AIPhase/AIRoutine. - if (GameManager.Boss.DebugMode) + if (AISequence.IsValid(sequence)) { - if (sequence == null) - { - Debug.LogError("Null AISequence added to queue."); - return; - } - - // "glue" AISequences are special: AISequences followed by "Then" or "Wait" - // won't have descriptions, but can be identified by being direct instances - // of the "AISequence" class (vs. subclasses for every other move). - // - // These guys don't need to have a valid difficulty or description. - bool isGlueSequence = sequence.Name.Equals("AISequence"); - - // Warn about unnamed sequences. By default, this shouldn't be called; the standard name is valid. - if (sequence.Name == null) - { - Debug.LogWarning("Found AISequence without a name. Description: " + sequence.Description ?? "not provided."); - } - - // Warn if there's a named sequence without a description. - // - if (sequence.Description == null && !isGlueSequence) - { - Debug.LogWarning("Found AISequence with a name, but without a description. Name: " + sequence.Name); - } - - // Warn about default descriptions. - if (sequence.Description != null && sequence.Description.Equals("Your description here")) - { - Debug.LogWarning("Found AISequence with default description. Name: " + sequence.Name); - } - - // Warn if there's a sequence with too high a difficulty. - if (sequence.Difficulty >= 8f) - { - Debug.LogWarning("Found AISequence with very high difficulty (" + sequence.Difficulty + "). Name: " + sequence.Name); - } - - // Warn about default difficulty (-1). Glue sequences can ignore this. - if (Mathf.Abs(sequence.Difficulty - -1) < 0.01f && !isGlueSequence) - { - Debug.LogWarning("Found AISequence with default difficulty (-1). Name: " + sequence.Name); - } - - // Warn about invalid difficulty (<= 0). Glue sequences can ignore this. - if (sequence.Difficulty <= 0f && !isGlueSequence) - { - Debug.LogWarning("Found AISequence with invalid difficulty (<= 0). Name: " + sequence.Name); - } - - // If we (finally) get to the end and still have a valid sequence, then we print out what it does. - Debug.Log("Added AISequence" + - (sequence.Name.Equals("AISequence") ? " " : " \"" + sequence.Name + "\" ") + - "to queue. Here's what it says it'll do: \"" + - (sequence.Description ?? sequence.ToString()) + "\"."); + queuedSequences.Enqueue(sequence); + } else { + Debug.LogError("Refusing to add invalid sequence: " + sequence.Name); } - - queuedSequences.Enqueue(sequence); } void Update() @@ -213,10 +152,6 @@ void Update() /// /// The main "thread" that executes the next event on the event queue. /// If there aren't any sequences, then we spin until there are some. - /// - /// TODO: either here or in "Execute", have some way to interrupt the current - /// executing AISequence so the next phase can be started immediately. Also so - /// that if the player interrupts, we can do something about it. /// private IEnumerator ExecuteQueue() { @@ -229,7 +164,12 @@ private IEnumerator ExecuteQueue() } AISequence nextSequence = queuedSequences.Peek(); - yield return Execute(nextSequence); + if (AISequence.IsValid(nextSequence)) + { + yield return Execute(nextSequence); + } else { + Debug.LogError("Refusing to execute invalid AISequence."); + } queuedSequences.Dequeue(); //Profiler.EndSample(); } @@ -243,29 +183,29 @@ private IEnumerator ExecuteQueue() /// /// The sequence to be executed. private IEnumerator Execute(AISequence sequence) - { - if (sequence.events != null) - { - for (int i = 0; i < sequence.events.Length; i++) - { - // If the event queue is paused, then wait until it's unpaused. + { + if (sequence.Events != null) + { + for (int i = 0; i < sequence.Events.Length; i++) + { + // If the event queue is paused, then wait until it's unpaused. while (paused) - { - yield return new WaitForSecondsRealtime(0.05f); - } - - sequence.events[i].action?.Invoke(); - // TODO reduce the wait time if the above invocation takes too long - yield return new WaitForSecondsRealtime(sequence.events[i].duration); - } - } - else - { - AISequence[] children = sequence.GetChildren(); - for (int i = 0; i < children.Length; i++) - { - yield return Execute(children[i]); - } + { + yield return new WaitForSecondsRealtime(0.05f); + } + + sequence.Events[i].action?.Invoke(); + // TODO reduce the wait time if the above invocation takes too long + yield return new WaitForSecondsRealtime(sequence.Events[i].duration); + } + } + else + { + AISequence[] children = sequence.Children(); + for (int i = 0; i < children.Length; i++) + { + yield return Execute(children[i]); + } } } @@ -276,7 +216,12 @@ private IEnumerator Execute(AISequence sequence) /// The sequence to be executed immediately. public void ExecuteAsync(AISequence sequence) { - GameManager.Boss.StartCoroutine(Execute(sequence)); + if (AISequence.IsValid(sequence)) + { + GameManager.Boss.StartCoroutine(Execute(sequence)); + } else { + Debug.LogError("Refusing to execute invalid AISequence."); + } } /* diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs index 08f4fd9..70118d0 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs @@ -41,6 +41,11 @@ public void Awake() rend = GetComponent(); } + public void Poke() { + rend.enabled = true; + shouldUpdate = true; + } + public void Initialize() { // Resolve the proxy variables for start and target diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileManager.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileManager.cs index e5d9fad..69a1ea3 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileManager.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileManager.cs @@ -26,6 +26,7 @@ public void Start() { public void Update() { + /* if (count++ > 10) { Profiler.BeginSample("Flushing hot cache"); count = 0; @@ -36,7 +37,8 @@ public void Update() cache.Enqueue(current); } Profiler.EndSample(); - } + } + */ } public static GameObject Checkout() { @@ -44,8 +46,10 @@ public static GameObject Checkout() { if (hotCache.Count > 0) { + GameObject obj = hotCache.Dequeue(); + //obj.GetComponent().Poke(); Profiler.EndSample(); - return hotCache.Dequeue(); + return obj; } if (cache.Count > 0) diff --git a/Assets/Scripts/Boss Core/ProxyFloat.cs b/Assets/Scripts/Boss Core/ProxyFloat.cs new file mode 100644 index 0000000..9db9993 --- /dev/null +++ b/Assets/Scripts/Boss Core/ProxyFloat.cs @@ -0,0 +1,62 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace BossCore +{ + public class ProxyFloat : ProxyVariable + { + private float mulOffset = 1; + private float addOffset = 0; + + public ProxyFloat(ProxiedValueGet get) : base(get) { } + + public override float GetValue() + { + float proxyVal = (float)get(); + return (mulOffset * proxyVal) + addOffset; + } + + // Creates a new proxy vector3 that just holds a simple pass-through value. + public static implicit operator ProxyFloat(float other) + { + return new ProxyFloat(() => other); + } + + public static ProxyFloat operator +(ProxyFloat thisValue, float offset) { + return new ProxyFloat(thisValue.get) + { + mulOffset = thisValue.mulOffset, + addOffset = thisValue.addOffset + offset + }; + } + + public static ProxyFloat operator -(ProxyFloat thisValue, float offset) + { + return new ProxyFloat(thisValue.get) + { + mulOffset = thisValue.mulOffset, + addOffset = thisValue.addOffset - offset + }; + } + + public static ProxyFloat operator *(ProxyFloat thisValue, float offset) + { + return new ProxyFloat(thisValue.get) + { + mulOffset = thisValue.mulOffset * offset, + addOffset = thisValue.addOffset * offset + }; + } + + public static ProxyFloat operator /(ProxyFloat thisValue, float offset) + { + return new ProxyFloat(thisValue.get) + { + mulOffset = thisValue.mulOffset / offset, + addOffset = thisValue.addOffset / offset + }; + } + + } +} diff --git a/Assets/Scripts/Boss Core/ProxyFloat.cs.meta b/Assets/Scripts/Boss Core/ProxyFloat.cs.meta new file mode 100644 index 0000000..1b94539 --- /dev/null +++ b/Assets/Scripts/Boss Core/ProxyFloat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e2015264b6634957a8904675ebd5456 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat Core/Abilities.cs b/Assets/Scripts/Combat Core/Abilities.cs index 5cb6d20..71da2dc 100644 --- a/Assets/Scripts/Combat Core/Abilities.cs +++ b/Assets/Scripts/Combat Core/Abilities.cs @@ -59,7 +59,7 @@ private static bool DebugAbil(Entity subject, Vector3 targetPosition, params obj private static bool PlayerDash(Entity subject, Vector3 targetPosition, params object[] args) { float range = (float)args[0]; - Debug.Log ("PlayerDash: " + range); + //Debug.Log ("PlayerDash: " + range); Vector3 dir = targetPosition - subject.transform.position; Vector3 targetPos = subject.transform.position + dir.normalized * Mathf.Min (range, dir.magnitude); Controller c = subject.GetComponent (); @@ -76,7 +76,7 @@ private static bool PlayerDash(Entity subject, Vector3 targetPosition, params ob // this needs to throw the shield model (+animation) private static bool PlayerThrow(Entity subject, Vector3 targetPosition, params object[] args) { - Debug.Log("Player shield throw"); + //Debug.Log("Player shield throw"); bool? shouldReturn = CheckValidity(subject); if (shouldReturn.HasValue) { @@ -100,7 +100,7 @@ private static bool PlayerThrow(Entity subject, Vector3 targetPosition, params o // this needs a better model for the blocking shield private static bool PlayerBlock(Entity subject, Vector3 targetPosition, params object[] args) { - Debug.Log("Player Block"); + //Debug.Log("Player Block"); bool? shouldReturn = CheckValidity(subject); if (shouldReturn.HasValue) { @@ -125,7 +125,7 @@ private static bool PlayerBlock(Entity subject, Vector3 targetPosition, params o // If we're tied to the shield, then reclaim it if (subject.HasStatus("ShieldRegen")) { - Debug.Log("Tied to shield, reclaiming it"); + //Debug.Log("Tied to shield, reclaiming it"); subject.RemoveStatus("Shield Placed"); subject.RemoveStatus("ShieldRegen"); return true; @@ -133,14 +133,14 @@ private static bool PlayerBlock(Entity subject, Vector3 targetPosition, params o // If we're not tied, but close to the shield, also reclaim it. else if ((GameManager.PlacedShield.transform.position - subject.transform.position).magnitude < 5f) { - Debug.Log("Close to shield, reclaiming it"); + //Debug.Log("Close to shield, reclaiming it"); subject.RemoveStatus("Shield Placed"); return true; } // Too far away. else { - Debug.Log("Too far to reclaim shield"); + //Debug.Log("Too far to reclaim shield"); return false; } } @@ -150,11 +150,11 @@ private static bool PlayerBlock(Entity subject, Vector3 targetPosition, params o { if ((GameManager.ThrownShield.transform.position - subject.transform.position).magnitude < 5f) { - Debug.Log("Close to thrown shield, reclaiming it"); + //Debug.Log("Close to thrown shield, reclaiming it"); subject.RemoveStatus("Shield Thrown"); return true; } - Debug.Log("Shield is currently thrown. Go pick it up!"); + //Debug.Log("Shield is currently thrown. Go pick it up!"); return false; } diff --git a/Assets/Scripts/Combat Core/StatusComponents/ShieldPlaced.cs b/Assets/Scripts/Combat Core/StatusComponents/ShieldPlaced.cs index 994e7dc..4f991fc 100644 --- a/Assets/Scripts/Combat Core/StatusComponents/ShieldPlaced.cs +++ b/Assets/Scripts/Combat Core/StatusComponents/ShieldPlaced.cs @@ -61,7 +61,6 @@ public override void OnApply(Entity subject) int shieldStatus = Mathf.Min(4, (int)(shieldEntity.ShieldPerc * 5)); - Debug.Log(shieldStatus); oldShieldStatus = shieldStatus; _shield = shield.transform.GetChild(shieldStatus).gameObject; diff --git a/Assets/Scripts/KeepOnArena.cs b/Assets/Scripts/KeepOnArena.cs index d310a7a..b0cb878 100644 --- a/Assets/Scripts/KeepOnArena.cs +++ b/Assets/Scripts/KeepOnArena.cs @@ -26,7 +26,6 @@ void Update () { if (body != null) { - Debug.Log("YEET"); body.velocity = Vector3.zero; body.drag = 0f; //body.AddForce(100f * new Vector3(0f, -1f, 0f), ForceMode.Impulse); diff --git a/Assets/Scripts/ThrownShield.cs b/Assets/Scripts/ThrownShield.cs index 9c4b6d6..be45dc1 100644 --- a/Assets/Scripts/ThrownShield.cs +++ b/Assets/Scripts/ThrownShield.cs @@ -79,7 +79,6 @@ public void OnShieldTriggerEntered(Collider other) GameObject otherObject = other.gameObject; Entity otherEntity = otherObject.GetComponentInParent(); - Debug.Log(otherObject.name); if (otherEntity != null) { // Do damage if the target isn't invincible and not on our team diff --git a/Assets/Scripts/World/Arena.cs b/Assets/Scripts/World/Arena.cs index 8a55d8e..8bedc3c 100644 --- a/Assets/Scripts/World/Arena.cs +++ b/Assets/Scripts/World/Arena.cs @@ -50,7 +50,7 @@ public float RadiusInWorldUnits { get { return transform.localScale.x * DEFAULT_ARENA_SCALE; } set - { + { ARENA_SCALE = value; maxArea = ARENA_SCALE * ARENA_SCALE / DEFAULT_ARENA_SCALE / DEFAULT_ARENA_SCALE * Mathf.PI; if (GameManager.Player.GetComponent()) @@ -94,7 +94,6 @@ public void Update() //drop the player if they're outside the arena if (Vector3.Distance (transform.position, GameManager.Player.transform.position) > RadiusInWorldUnits) { - Debug.Log("Player distance is greater than " + RadiusInWorldUnits); //swap out a dummy and blow it up GameManager.Player.gameObject.SetActive (false); GameObject dummyPlayer = Instantiate( @@ -141,15 +140,19 @@ private void OnPlayerDamageTaken(Entity victim, Entity attacker, float rawDamage StartCoroutine (ChangeArenaSize (maxArea * victim.HealthPerc)); } - private IEnumerator ChangeArenaSize(float targetArea) - { - while (Mathf.Abs(CurrentArea - targetArea) > threshold) - { - float newRadius = Mathf.Lerp (transform.localScale.x, (ARENA_SCALE / 50f) * Mathf.Sqrt (targetArea / Mathf.PI), Time.deltaTime * adjustSpeed); - transform.localScale = Vector3.one * newRadius; + private IEnumerator ChangeArenaSize(float targetArea) + { + float idealRadius = Mathf.Sqrt((ARENA_SCALE / DEFAULT_ARENA_SCALE) * Mathf.Sqrt(targetArea / Mathf.PI)); + while (Mathf.Abs(CurrentArea - targetArea) > threshold) + { + float newRadius = Mathf.Lerp(transform.localScale.x, idealRadius, Time.deltaTime * adjustSpeed); + transform.localScale = Vector3.one * newRadius; - yield return null; - } - } + yield return null; + } + + // Set to the ideal value + transform.localScale = Vector3.one * idealRadius; + } } } From 739b9043153979f605955bd2c53c7a98cc79a103 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Thu, 8 Nov 2018 00:58:25 -0600 Subject: [PATCH 29/33] Added todo on projectile cleanup --- Assets/Scripts/Boss Core/BossController.cs | 44 +++++++++---------- .../Boss Core/Projectile/Projectile.cs | 2 + Packages/manifest.json | 1 - 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/Assets/Scripts/Boss Core/BossController.cs b/Assets/Scripts/Boss Core/BossController.cs index d146c4c..8c891fc 100644 --- a/Assets/Scripts/Boss Core/BossController.cs +++ b/Assets/Scripts/Boss Core/BossController.cs @@ -183,29 +183,29 @@ private IEnumerator ExecuteQueue() /// /// The sequence to be executed. private IEnumerator Execute(AISequence sequence) - { - if (sequence.Events != null) - { - for (int i = 0; i < sequence.Events.Length; i++) - { - // If the event queue is paused, then wait until it's unpaused. + { + if (sequence.Events != null) + { + for (int i = 0; i < sequence.Events.Length; i++) + { + // If the event queue is paused, then wait until it's unpaused. while (paused) - { - yield return new WaitForSecondsRealtime(0.05f); - } - - sequence.Events[i].action?.Invoke(); - // TODO reduce the wait time if the above invocation takes too long - yield return new WaitForSecondsRealtime(sequence.Events[i].duration); - } - } - else - { - AISequence[] children = sequence.Children(); - for (int i = 0; i < children.Length; i++) - { - yield return Execute(children[i]); - } + { + yield return new WaitForSecondsRealtime(0.05f); + } + + sequence.Events[i].action?.Invoke(); + // TODO reduce the wait time if the above invocation takes too long + yield return new WaitForSecondsRealtime(sequence.Events[i].duration); + } + } + else + { + AISequence[] children = sequence.Children(); + for (int i = 0; i < children.Length; i++) + { + yield return Execute(children[i]); + } } } diff --git a/Assets/Scripts/Boss Core/Projectile/Projectile.cs b/Assets/Scripts/Boss Core/Projectile/Projectile.cs index 5e7cb73..d9efae6 100644 --- a/Assets/Scripts/Boss Core/Projectile/Projectile.cs +++ b/Assets/Scripts/Boss Core/Projectile/Projectile.cs @@ -36,6 +36,8 @@ public class Projectile /* * Called after object is destroyed due to time limit. */ + // TODO find a way to remove public-facing delegate here. + // Maybe make this an AISequence? But then how to pass the (self) reference? public ProjectileCallback OnDestroyTimeout { get; set; } = CallbackDictionary.NOTHING; /* diff --git a/Packages/manifest.json b/Packages/manifest.json index c2ce345..77b8ab4 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -9,7 +9,6 @@ "com.unity.textmeshpro": "2.0.1", "com.unity.timeline": "1.1.0", "com.unity.ugui": "1.0.0", - "com.unity.postprocessing": "2.0.16-preview", "com.unity.ads": "2.0.8", "com.unity.analytics": "2.0.16", "com.unity.postprocessing": "2.0.16-preview", From 205ea7eeb186227a51d7c3febe76e505ba0e7b80 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Thu, 8 Nov 2018 18:56:18 -0600 Subject: [PATCH 30/33] WIP ProjectileCallback refactor, on the quest to tighten loopholes in the code --- Assets/Scripts/Boss Core/AI/AISequence.cs | 2 +- .../AI/Moves/Basic_Generators/MoveCamera.cs | 2 +- .../AI/Moves/Basic_Generators/Shoot1.cs | 9 ++- .../AI/Moves/Basic_Generators/Shoot3.cs | 8 ++- .../AI/Moves/Basic_Generators/ShootAOE.cs | 5 +- .../AI/Moves/Basic_Generators/ShootArc.cs | 8 ++- .../AI/Moves/Basic_Generators/Teleport.cs | 4 ++ .../Scripts/Boss Core/AI/Moves/Test/Test.cs | 20 +++++- .../AI/Moves/Unsorted/Wave_Reverse_Faster.cs | 3 +- .../Boss Core/Projectile/Projectile.cs | 62 ++++++++++++++++--- .../ProjectileCallbackDictionary.cs | 28 +++++---- .../Projectile/ProjectileComponent.cs | 6 +- .../Boss Core/Projectile/ProjectileHoming.cs | 2 + .../Projectile/ProjectileLightning.cs | 5 +- 14 files changed, 125 insertions(+), 39 deletions(-) diff --git a/Assets/Scripts/Boss Core/AI/AISequence.cs b/Assets/Scripts/Boss Core/AI/AISequence.cs index 02e15e0..dde6408 100644 --- a/Assets/Scripts/Boss Core/AI/AISequence.cs +++ b/Assets/Scripts/Boss Core/AI/AISequence.cs @@ -116,7 +116,7 @@ public string Description get; protected set; } - public override string ToString() + public override sealed string ToString() { if (Description != null) { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs index 5830dc9..89eb613 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs @@ -7,7 +7,7 @@ namespace Moves.Basic { public class MoveCamera : InternalMove { - public MoveCamera(bool isFollow = false, Vector3? targetPosition = null) : base + public MoveCamera(bool isFollow, Vector3? targetPosition = null) : base ( () => { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs index 328c3e4..e91e480 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs @@ -6,18 +6,21 @@ namespace Moves.Basic { public class Shoot1 : InternalMove { - public Shoot1(Projectile skeleton = null) : base + + public Shoot1() : this(Projectile.DEFAULT) { } + + public Shoot1(Projectile skeleton) : base ( () => { GameManager.Boss.Glare(); - Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); + Projectile newStruc = skeleton.Clone(); newStruc.Create(); } ) { - Description = "Shot one " + (skeleton == null ? "default projectile at the player." : skeleton + "."); + Description = "Shot one " + (skeleton == Projectile.DEFAULT ? "default projectile at the player." : skeleton + "."); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs index afe55ee..4c1b3a3 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs @@ -7,7 +7,9 @@ namespace Moves.Basic public class Shoot3 : InternalMove { - public Shoot3(Projectile skeleton = null) : base + public Shoot3() : this(Projectile.DEFAULT) { } + + public Shoot3(Projectile skeleton) : base ( () => { @@ -15,14 +17,14 @@ public Shoot3(Projectile skeleton = null) : base for (int i = 0; i < 3; i++) { - Projectile newStruc = skeleton != null ? skeleton.Clone() : new Projectile(); + Projectile newStruc = skeleton.Clone(); newStruc.AngleOffset = -30 + (30 * i) + newStruc.AngleOffset; newStruc.Create(); } } ) { - Description = "Shot three " + (skeleton == null ? "default projectiles at the player." : skeleton + "."); + Description = "Shot three " + (skeleton == Projectile.DEFAULT ? "default projectiles at the player." : skeleton + "."); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs index 1cf65c9..a221766 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs @@ -8,7 +8,10 @@ namespace Moves.Basic { public class ShootAOE : InternalMove { - public ShootAOE(AOE skeleton = null) : base + // TODO add default AOEs + public ShootAOE() : this(null) { } + + public ShootAOE(AOE skeleton) : base ( () => { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs index 403a823..6dd00a7 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs @@ -7,7 +7,11 @@ namespace Moves.Basic public class ShootArc : InternalMove { - public ShootArc(int density = 50, float from = 0, float to = 360, Projectile skeleton = null) : base + public ShootArc() : this(50, 0, 360, Projectile.DEFAULT) { } + + public ShootArc(Projectile skeleton) : this(50, 0, 360, skeleton) { } + + public ShootArc(int density, float from, float to, Projectile skeleton = null) : base ( () => { @@ -33,7 +37,7 @@ public ShootArc(int density = 50, float from = 0, float to = 360, Projectile ske ) { Description = "Shot an arc (density=" + density + ", from=" + from + ", to=" + to + ") of " + - (skeleton == null ? "default projectiles at the player." : skeleton + "."); + (skeleton == Projectile.DEFAULT ? "default projectiles at the player." : skeleton + "."); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs index de105cc..e21d92b 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs @@ -8,6 +8,10 @@ public class Teleport : InternalMove // A reference to the BossController's entity. Assigned when teleport is called. private static CombatCore.Entity self = null; + public Teleport() : this(null, 25) { } + + public Teleport(Vector3 target) : this(target, 25) { } + public Teleport(Vector3? target = null, int speed = 25) : base ( () => diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs index 4c9dfd1..dbb21f7 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -25,15 +25,31 @@ public Test() //Either(new Shoot1(Projectile.DEFAULT_LARGE_SLOW), new Shoot3(Projectile.DEFAULT_MEDIUM_MEDIUM)); //InternalMove move = new InternalMove(() => { Debug.Log("Bad!"); }); + /* Sequence = new Shoot1(new Projectile { MaxTime = 0f, - OnDestroyTimeout = (self) => { + OnDestroyTimeout = self => { // Delegates allow for arbitrary code execution. Debug.Log("Bad!"); return new AISequence(); - } + } }); + */ + + /* + Sequence = new Shoot1(new Projectile + { + //OnDestroyTimeout = self => new AISequence() + OnDestroyTimeout = self => new Shoot1(new ProjectileHoming()) + }); + */ + + Sequence = new AISequence( + For(-30f, 30f, 1f, + i => new Shoot1(new Projectile { Size = Size.MEDIUM, Speed = Speed.MEDIUM, AngleOffset = i }) + ) + ); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs index 18413ac..04ee62a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs @@ -28,7 +28,8 @@ public Wave_Reverse_Faster() Size = Size.MEDIUM, MaxTime = 1f, AngleOffset = i * (360f / 50f), - OnDestroyTimeout = CallbackDictionary.REVERSE_FASTER + //OnDestroyTimeout = CallbackDictionary.REVERSE_FASTER + //TODO reimplement above^^ } ) ).Wait(2f); diff --git a/Assets/Scripts/Boss Core/Projectile/Projectile.cs b/Assets/Scripts/Boss Core/Projectile/Projectile.cs index d9efae6..e5024e2 100644 --- a/Assets/Scripts/Boss Core/Projectile/Projectile.cs +++ b/Assets/Scripts/Boss Core/Projectile/Projectile.cs @@ -8,11 +8,16 @@ namespace Projectiles { + //using ProjectileCallback = System.Linq.Expressions.Expression>; + using ProjectileCallbackExpression = System.Linq.Expressions.Expression; + /* * Used for handling events for Projectiles. Currently death events are supported. */ public delegate AI.AISequence ProjectileCallback(ProjectileComponent self); + //public System.Func ProjectileCallback2; + public class Projectile { // Experimental. Static Projectiles that are commonly used (note: there don't tend to be duplicate projectiles) @@ -32,23 +37,62 @@ public class Projectile public virtual float Damage { get; set; } = ((float)Size.SMALL + 0.5f) * 2f; public virtual Vector3 Velocity { get; set; } = Vector3.forward; - + + public ProjectileCallbackExpression OnDestroyTimeout { get; set; } = CallbackDictionary.NOTHING; + + /* + private ProjectileCallback _onDestroyTimeout; + public object OnDestroyTimeout { + get { + return _onDestroyTimeout; + } + + set { + System.Linq.Expressions.Expression expression = value as System.Linq.Expressions.Expression; + if (expression == null) { + Debug.LogError("Setting OnDestroyTimeout failed, found expression body"); + return; + } + _onDestroyTimeout = expression.Compile(); + //_onDestroyTimeout = value; + } + } + */ + /* - * Called after object is destroyed due to time limit. - */ - // TODO find a way to remove public-facing delegate here. - // Maybe make this an AISequence? But then how to pass the (self) reference? - public ProjectileCallback OnDestroyTimeout { get; set; } = CallbackDictionary.NOTHING; + private System.Func _onDestroyTimeout; + public ProjectileCallback OnDestroyTimeout { + get { + return x => _onDestroyTimeout(x); + //return null; + } + set { + //System.Linq.Expressions.Expression expression = value as System.Linq.Expressions.Expression; + _onDestroyTimeout = value.Compile(); + } + } + */ + + // Works but doesn't allow for setting in the object initializer + /* + public void OnDestroyTimeout(System.Linq.Expressions.Expression expression) { + this._onDestroyTimeout = expression.Compile(); + } + public ProjectileCallback OnDestroyTimeout() { + return this._onDestroyTimeout; + } + */ + /* * Called after object is destroyed due to hitting the arena. - */ - public ProjectileCallback OnDestroyOutOfBounds { get; set; } = CallbackDictionary.NOTHING; + */ + public ProjectileCallbackExpression OnDestroyOutOfBounds { get; set; } = CallbackDictionary.NOTHING; /* * Called when the object hits the player */ - public ProjectileCallback OnDestroyCollision { get; set; } = CallbackDictionary.NOTHING; + public ProjectileCallbackExpression OnDestroyCollision { get; set; } = CallbackDictionary.NOTHING; /// /// This method is called at the end of every Update() call. When overridden, diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs index cf0aea1..597428d 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs @@ -7,12 +7,14 @@ using Moves.Basic; namespace Projectiles -{ +{ + using ProjectileCallbackExpression = System.Linq.Expressions.Expression; + public static class CallbackDictionary { - public static ProjectileCallback NOTHING = self => new Pause(0f); + public static ProjectileCallbackExpression NOTHING = self => new Pause(0f); - public static ProjectileCallback FREEZE = self => + public static ProjectileCallbackExpression FREEZE = self => new Shoot1( new Projectile { @@ -22,7 +24,7 @@ public static class CallbackDictionary } ); - public static ProjectileCallback SPAWN_6_CURVING = self => + public static ProjectileCallbackExpression SPAWN_6_CURVING = self => ForConcurrent(6, i => new Shoot1( new ProjectileCurving((float)self.data.Speed * 2f, true) { @@ -33,7 +35,7 @@ public static class CallbackDictionary } )); - public static ProjectileCallback SPAWN_6 = self => + public static ProjectileCallbackExpression SPAWN_6 = self => ForConcurrent(6, i => new Shoot1( new ProjectileCurving(0f, true) { @@ -45,10 +47,10 @@ public static class CallbackDictionary )); // Spawns a wave at the death position. - public static ProjectileCallback SPAWN_WAVE = self => + public static ProjectileCallbackExpression SPAWN_WAVE = self => new ShootAOE(new AOEs.AOE { Start = self.transform.position }.On(0, 360f)); - public static ProjectileCallback SPAWN_1_TOWARDS_PLAYER = self => + public static ProjectileCallbackExpression SPAWN_1_TOWARDS_PLAYER = self => new Shoot1( new Projectile { @@ -58,9 +60,9 @@ public static class CallbackDictionary } ); - public static ProjectileCallback SPAWN_1_HOMING_TOWARDS_PLAYER = self => + public static ProjectileCallbackExpression SPAWN_1_HOMING_TOWARDS_PLAYER = self => new Shoot1( - new ProjectileHoming + new ProjectileHoming(0) { Start = self.transform.position, MaxTime = self.data.MaxTime, @@ -69,7 +71,7 @@ public static class CallbackDictionary } ); - public static ProjectileCallback REVERSE = (self) => + public static ProjectileCallbackExpression REVERSE = (self) => new Shoot1( new Projectile { @@ -80,11 +82,12 @@ public static class CallbackDictionary } ); - public static ProjectileCallback REVERSE_FASTER = (self) => + /* + public static ProjectileCallbackExpression REVERSE_FASTER = (self) => { if (self.data.Speed == Speed.LIGHTNING) { - return NOTHING(self); + return NOTHING.Compile().Invoke(self); } Speed currentSpeed = self.data.Speed; @@ -102,5 +105,6 @@ public static class CallbackDictionary } ); }; + */ } } diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs index 70118d0..de3a15c 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs @@ -128,7 +128,7 @@ void Update() if (currentTime >= maxTime) { - GameManager.Boss.ExecuteAsync(data.OnDestroyTimeout(this)); + GameManager.Boss.ExecuteAsync(data.OnDestroyTimeout.Compile().Invoke(this)); //Destroy(this.gameObject); Cleanup(); } @@ -143,7 +143,7 @@ void Update() Profiler.BeginSample("Bounds check"); if (trans.position.sqrMagnitude > 5625f) { - GameManager.Boss.ExecuteAsync(data.OnDestroyOutOfBounds(this)); + GameManager.Boss.ExecuteAsync(data.OnDestroyOutOfBounds.Compile().Invoke(this)); Cleanup(); } @@ -180,7 +180,7 @@ public virtual void OnTriggerEnter(Collider other) //Debug.Log("Projectile collided, should apply damage"); // Note that the entity causing the damage is null; callbacks may fail. Entity.DamageEntity(otherEntity, null, data.Damage); - GameManager.Boss.ExecuteAsync(data.OnDestroyCollision(this)); + GameManager.Boss.ExecuteAsync(data.OnDestroyCollision.Compile().Invoke(this)); //Destroy(this.gameObject); Cleanup(); } diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs index 95882c6..2b6ccdc 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs @@ -24,6 +24,8 @@ public class ProjectileHoming : Projectile private int difficulty; + public ProjectileHoming() : this(0) { } + public ProjectileHoming(int difficulty=0) { this.difficulty = difficulty; if (difficulty == 1) { diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs index 0e13e6c..9d10441 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs @@ -28,7 +28,7 @@ private ProjectileLightning(int level, float initialMaxTime) base.MaxTime = 0.05f; Speed = BossCore.Speed.LIGHTNING; - OnDestroyTimeout = LIGHTNING_RECUR; + //OnDestroyTimeout = LIGHTNING_RECUR; } public override float MaxTime @@ -81,6 +81,8 @@ public override void CustomUpdate(ProjectileComponent component) } // Recursively generates more lightning + // TODO move this into the CustomUpdate so this compiles + /* private static ProjectileCallback LIGHTNING_RECUR = (self) => { ProjectileLightning lightningSelf = self.data as ProjectileLightning; @@ -118,5 +120,6 @@ public override void CustomUpdate(ProjectileComponent component) ) ); }; + */ } } \ No newline at end of file From b04c5870767d530381925d9b0abced8ad0f8cbc7 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Fri, 9 Nov 2018 01:07:58 -0600 Subject: [PATCH 31/33] Added expression body for ForBody; TODO finish by adding expression body for AOEs --- Assets/Scripts/Boss Core/AI/AISequence.cs | 28 ++++++----- .../Boss Core/AI/Moves/Test/Pincer_Sweep.cs | 2 +- .../Boss Core/Projectile/Projectile.cs | 47 ++----------------- 3 files changed, 19 insertions(+), 58 deletions(-) diff --git a/Assets/Scripts/Boss Core/AI/AISequence.cs b/Assets/Scripts/Boss Core/AI/AISequence.cs index dde6408..4a031f5 100644 --- a/Assets/Scripts/Boss Core/AI/AISequence.cs +++ b/Assets/Scripts/Boss Core/AI/AISequence.cs @@ -4,7 +4,9 @@ using UnityEngine; namespace AI -{ +{ + using ForBodyExpression = System.Linq.Expressions.Expression; + public class AISequence { /// @@ -437,22 +439,22 @@ public static AISequence Either(params AISequence[] sequences) // A delegate that captures an iterator in a for loop public delegate AISequence ForBody(float iterator); - public static AISequence For(float count, ForBody body) + public static AISequence For(float count, ForBodyExpression body) { if (count <= 0) { Debug.LogError("Found a for loop with negative count."); - return body(0); + return body.Compile().Invoke(0); } return For(0, count, 1, body); } - public static AISequence For(float start, float end, ForBody body) + public static AISequence For(float start, float end, ForBodyExpression body) { if (end < start) { Debug.LogError("Found a for loop with end before start."); - return body(start); + return body.Compile().Invoke(start); } return For(start, end, 1, body); } @@ -464,18 +466,18 @@ public static AISequence For(float start, float end, ForBody body) * separate events; if the ForBody's AISequence has a delay, this will appear * between all the events produced. */ - public static AISequence For(float start, float end, float step, ForBody body) + public static AISequence For(float start, float end, float step, ForBodyExpression body) { if (Mathf.Approximately(step, 0)) { Debug.LogError("Found for loop with step size 0."); - return body(start); + return body.Compile().Invoke(start); } if (Mathf.Abs(Mathf.Sign(end - start) - Mathf.Sign(step)) > 0.01f) { Debug.LogError("Found for loop that will never terminate."); - return body(start); + return body.Compile().Invoke(start); } AISequence[] sequences = new AISequence[(int)Mathf.Abs((end - start) / step)]; @@ -484,25 +486,25 @@ public static AISequence For(float start, float end, float step, ForBody body) { for (float i = start; i > end; i += step) { - sequences[count++] = body(i); + sequences[count++] = body.Compile().Invoke(i); } } else { for (float i = start; i < end; i += step) { - sequences[count++] = body(i); + sequences[count++] = body.Compile().Invoke(i); } } return new AISequence(sequences); } - public static AISequence ForConcurrent(float count, ForBody body) + public static AISequence ForConcurrent(float count, ForBodyExpression body) { return ForConcurrent(0, count, 1, body); } - public static AISequence ForConcurrent(float start, float end, ForBody body) + public static AISequence ForConcurrent(float start, float end, ForBodyExpression body) { return ForConcurrent(start, end, 1, body); } @@ -514,7 +516,7 @@ public static AISequence ForConcurrent(float start, float end, ForBody body) * This means a wait returned by ForBody will happen at the end, rather than * between each sequence. */ - public static AISequence ForConcurrent(float start, float end, float step, ForBody body) + public static AISequence ForConcurrent(float start, float end, float step, ForBodyExpression body) { return Merge(For(start, end, step, body).Children()); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs index 1dda377..46fed27 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs @@ -16,7 +16,7 @@ public class Pincer_Sweep : Move public Pincer_Sweep() { Description = "Sweeps pincer projectiles from +150 to +0 degrees"; - Sequence = For(150, 0, -5, i => new Pincer(i).Wait(0.05f)); + Sequence = For(150, 0, -5, i => new Pincer(i, Speed.SNIPE).Wait(0.05f)); } } } diff --git a/Assets/Scripts/Boss Core/Projectile/Projectile.cs b/Assets/Scripts/Boss Core/Projectile/Projectile.cs index e5024e2..18da31b 100644 --- a/Assets/Scripts/Boss Core/Projectile/Projectile.cs +++ b/Assets/Scripts/Boss Core/Projectile/Projectile.cs @@ -37,52 +37,11 @@ public class Projectile public virtual float Damage { get; set; } = ((float)Size.SMALL + 0.5f) * 2f; public virtual Vector3 Velocity { get; set; } = Vector3.forward; - - public ProjectileCallbackExpression OnDestroyTimeout { get; set; } = CallbackDictionary.NOTHING; - /* - private ProjectileCallback _onDestroyTimeout; - public object OnDestroyTimeout { - get { - return _onDestroyTimeout; - } - - set { - System.Linq.Expressions.Expression expression = value as System.Linq.Expressions.Expression; - if (expression == null) { - Debug.LogError("Setting OnDestroyTimeout failed, found expression body"); - return; - } - _onDestroyTimeout = expression.Compile(); - //_onDestroyTimeout = value; - } - } - */ - - /* - private System.Func _onDestroyTimeout; - public ProjectileCallback OnDestroyTimeout { - get { - return x => _onDestroyTimeout(x); - //return null; - } - set { - //System.Linq.Expressions.Expression expression = value as System.Linq.Expressions.Expression; - _onDestroyTimeout = value.Compile(); - } - } - */ - - // Works but doesn't allow for setting in the object initializer /* - public void OnDestroyTimeout(System.Linq.Expressions.Expression expression) { - this._onDestroyTimeout = expression.Compile(); - } - - public ProjectileCallback OnDestroyTimeout() { - return this._onDestroyTimeout; - } - */ + * Called after MaxTime number of seconds have elapsed. + */ + public ProjectileCallbackExpression OnDestroyTimeout { get; set; } = CallbackDictionary.NOTHING; /* * Called after object is destroyed due to hitting the arena. From 471361ae37a3d8c9dae130f58cb505dd093736ae Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Fri, 28 Feb 2020 13:52:27 -0600 Subject: [PATCH 32/33] Refactor --- Assets/81-Custom__Move-NewMove.cs.txt | 4 +- Assets/Resources/Prefabs/Projectile.prefab | 4 +- Assets/Scenes/BossScene.unity | 3806 ++++++++++------- Assets/Scripts/Boss Core/AI/AIPhase.cs | 7 +- Assets/Scripts/Boss Core/AI/AISequence.cs | 51 +- Assets/Scripts/Boss Core/AI/InternalMove.cs | 3 +- .../Boss Core/AI/Moves/Basic/AOE_120.cs | 2 +- .../Boss Core/AI/Moves/Basic/AOE_131.cs | 8 +- .../Boss Core/AI/Moves/Basic/AOE_360.cs | 2 +- .../Boss Core/AI/Moves/Basic/AOE_90.cs | 2 +- .../Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs | 6 +- .../AI/Moves/Basic/Shoot_Death_Hex.cs | 2 +- .../Boss Core/AI/Moves/Basic/Shoot_Split_6.cs | 2 +- .../AI/Moves/Basic/Shoot_Split_6_Curve.cs | 2 +- .../AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs | 2 +- .../Scripts/Boss Core/AI/Moves/Basic/Sweep.cs | 2 +- .../AI/Moves/Basic/Sweep_Back_And_Forth.cs | 4 +- .../Boss Core/AI/Moves/Basic/Sweep_Both.cs | 4 +- .../AI/Moves/Basic_Generators/PlayerLock.cs | 4 +- .../AI/Moves/Basic_Generators/Shoot1.cs | 8 +- .../AI/Moves/Basic_Generators/Shoot3.cs | 8 +- .../AI/Moves/Basic_Generators/ShootAOE.cs | 6 +- .../AI/Moves/Basic_Generators/ShootArc.cs | 12 +- .../AI/Moves/Basic_Generators/ShootLine.cs | 6 +- .../AI/Moves/Basic_Generators/ShootWall.cs | 6 +- .../AI/Moves/Test/Double_Laser_Sweep.cs | 2 +- .../AI/Moves/Test/Double_Laser_Sweep_AOE.cs | 6 +- .../Boss Core/AI/Moves/Test/Horseshoe_AOE.cs | 12 +- .../Scripts/Boss Core/AI/Moves/Test/Laser.cs | 4 +- .../AI/Moves/Test/Laser_Sweep_With_AOE.cs | 6 +- .../AI/Moves/Test/Lightning_Arena.cs | 4 +- .../AI/Moves/Test/Lightning_With_AOE.cs | 6 +- .../Scripts/Boss Core/AI/Moves/Test/Pincer.cs | 3 +- .../Boss Core/AI/Moves/Test/Pincer_Sweep.cs | 2 +- .../AI/Moves/Test/Player_Strafe_Waves.cs | 2 +- .../Boss Core/AI/Moves/Test/Quick_Waves.cs | 12 +- .../Boss Core/AI/Moves/Test/Random_Leading.cs | 25 +- .../Boss Core/AI/Moves/Test/ReverseTest.cs | 10 +- .../Boss Core/AI/Moves/Test/Sniper_Final.cs | 41 +- .../Scripts/Boss Core/AI/Moves/Test/Test.cs | 4 +- .../AI/Moves/Tutorial2/Force_Block.cs | 2 +- .../Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs | 2 +- .../Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs | 34 +- .../AI/Moves/Unsorted/Big_Homing_Strafe.cs | 5 +- .../AI/Moves/Unsorted/Circle_In_Out.cs | 4 +- .../AI/Moves/Unsorted/Circle_Jump_Rope.cs | 6 +- .../Boss Core/AI/Moves/Unsorted/Dash_Test.cs | 4 +- .../Boss Core/AI/Moves/Unsorted/Death_Hex.cs | 10 +- .../AI/Moves/Unsorted/Double_Hex_Curve.cs | 4 +- .../Moves/Unsorted/Double_Hex_Curve_Hard.cs | 4 +- .../Unsorted/Four_Way_Sweep_With_Homing.cs | 12 +- .../AI/Moves/Unsorted/Hex_Curve_Intro.cs | 2 +- .../AI/Moves/Unsorted/Jump_Rope_Fast.cs | 4 +- .../Moves/Unsorted/Jump_Rope_Slow_Circles.cs | 8 +- .../Boss Core/AI/Moves/Unsorted/Random_200.cs | 16 +- .../AI/Moves/Unsorted/Shoot3_Wave3.cs | 2 +- .../AI/Moves/Unsorted/Shoot_2_Waves_45.cs | 4 +- .../AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs | 14 +- .../AI/Moves/Unsorted/Shoot_Hex_Curve.cs | 2 +- .../Unsorted/Sweep_Back_And_Forth_Advanced.cs | 16 +- .../Unsorted/Sweep_Back_And_Forth_Medium.cs | 14 +- .../Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs | 2 +- .../Unsorted/Sweep_Wall_Back_And_Forth.cs | 2 +- .../AI/Moves/Unsorted/Wave_Circle.cs | 7 +- .../AI/Moves/Unsorted/Wave_Reverse.cs | 4 +- .../AI/Moves/Unsorted/Wave_Reverse_Faster.cs | 4 +- .../AI/Moves/Unsorted/Wave_Reverse_Target.cs | 4 +- .../Unsorted/Wave_Reverse_Target_Homing.cs | 4 +- .../Boss Core/AI/Phases/Phase_Unsorted.cs | 22 +- Assets/Scripts/Boss Core/AOE/AOE.cs | 344 +- .../Boss Core/AOE/AOECallbackDictionary.cs | 2 +- Assets/Scripts/Boss Core/AOE/AOEComponent.cs | 193 - Assets/Scripts/Boss Core/AOE/AOEData.cs | 248 ++ .../Type.cs.meta => AOE/AOEData.cs.meta} | 2 +- Assets/Scripts/Boss Core/BossController.cs | 54 +- .../Boss Core/Projectile/Projectile.cs | 266 +- .../ProjectileCallbackDictionary.cs | 10 +- .../Projectile/ProjectileComponent.cs | 201 - .../Projectile/ProjectileComponent.cs.meta | 11 - .../Boss Core/Projectile/ProjectileCurving.cs | 8 +- .../Boss Core/Projectile/ProjectileData.cs | 141 + .../ProjectileData.cs.meta} | 2 +- .../Projectile/ProjectileDeathHex.cs | 2 +- .../Boss Core/Projectile/ProjectileHoming.cs | 10 +- .../Projectile/ProjectileLightning.cs | 12 +- .../Boss Core/Projectile/ProjectileManager.cs | 4 +- .../Boss Core/Projectile/ProjectileReverse.cs | 6 +- Assets/Scripts/Boss Core/Projectile/Type.cs | 16 - Assets/Scripts/Boss Core/ProxyFloat.cs | 2 +- Assets/Scripts/Boss Core/ProxyVariable.cs | 2 +- Assets/Scripts/Boss Core/ProxyVector3.cs | 2 +- Assets/Scripts/Boss Core/Speed.cs | 18 - Assets/Scripts/Combat Core/Abilities.cs | 21 +- .../StatusComponents/ShieldThrown.cs | 2 +- Assets/Scripts/Constants.cs | 105 + .../Speed.cs.meta => Constants.cs.meta} | 2 +- Assets/Scripts/KeepOnArena.cs | 2 +- Assets/Scripts/MoveRandomly.cs | 2 +- Assets/Scripts/ThrownShield.cs | 5 +- Assets/Scripts/User Input/Controller.cs | 2 +- Assets/Scripts/World/Arena.cs | 23 - Logs/Packages-Update.log | 13 + ProjectSettings/ProjectSettings.asset | 99 +- 103 files changed, 3362 insertions(+), 2790 deletions(-) delete mode 100644 Assets/Scripts/Boss Core/AOE/AOEComponent.cs create mode 100644 Assets/Scripts/Boss Core/AOE/AOEData.cs rename Assets/Scripts/Boss Core/{Projectile/Type.cs.meta => AOE/AOEData.cs.meta} (83%) delete mode 100644 Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs delete mode 100644 Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs.meta create mode 100644 Assets/Scripts/Boss Core/Projectile/ProjectileData.cs rename Assets/Scripts/Boss Core/{AOE/AOEComponent.cs.meta => Projectile/ProjectileData.cs.meta} (83%) delete mode 100644 Assets/Scripts/Boss Core/Projectile/Type.cs delete mode 100644 Assets/Scripts/Boss Core/Speed.cs create mode 100644 Assets/Scripts/Constants.cs rename Assets/Scripts/{Boss Core/Speed.cs.meta => Constants.cs.meta} (83%) create mode 100644 Logs/Packages-Update.log diff --git a/Assets/81-Custom__Move-NewMove.cs.txt b/Assets/81-Custom__Move-NewMove.cs.txt index 0b75e58..44ad838 100644 --- a/Assets/81-Custom__Move-NewMove.cs.txt +++ b/Assets/81-Custom__Move-NewMove.cs.txt @@ -1,4 +1,4 @@ -using System.Collections; +using System.Collections; using System.Collections.Generic; using UnityEngine; @@ -8,7 +8,7 @@ using BossCore; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.User { diff --git a/Assets/Resources/Prefabs/Projectile.prefab b/Assets/Resources/Prefabs/Projectile.prefab index 2ceba74..e236690 100644 --- a/Assets/Resources/Prefabs/Projectile.prefab +++ b/Assets/Resources/Prefabs/Projectile.prefab @@ -105,9 +105,11 @@ MonoBehaviour: m_GameObject: {fileID: 1006427959804524} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 53649a2517c5d4c128e97a0a97c82839, type: 3} + m_Script: {fileID: 11500000, guid: aadb7001f206345bca23c28c72cc6c95, type: 3} m_Name: m_EditorClassIdentifier: + Start: {x: 0, y: 0, z: 0} + Target: {x: 0, y: 0, z: 0} shouldUpdate: 1 currentTime: 0 --- !u!135 &135941191046163174 diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index b806a52..5be88d7 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -50,7 +50,6 @@ LightmapSettings: m_BounceScale: 1 m_IndirectOutputScale: 1 m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 m_EnvironmentLightingMode: 0 m_EnableBakedLightmaps: 0 m_EnableRealtimeLightmaps: 0 @@ -114,12 +113,24 @@ NavMeshSettings: m_Flags: 0 m_NavMeshData: {fileID: 0} --- !u!1001 &15416965 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (1) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 258 @@ -152,31 +163,20 @@ Prefab: propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (1) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &15416966 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 15416965} + m_PrefabInstance: {fileID: 15416965} + m_PrefabAsset: {fileID: 0} --- !u!1 &22236696 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 22236697} @@ -194,7 +194,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 22236696} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 148.00002, y: 0, z: 98} @@ -207,7 +208,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 22236696} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -219,7 +221,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 22236696} m_Enabled: 1 m_CastShadows: 1 @@ -229,6 +232,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -254,16 +258,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 22236696} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &27388440 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (7) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -149 @@ -296,33 +313,33 @@ Prefab: propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (7) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &27388441 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 27388440} + m_PrefabInstance: {fileID: 27388440} + m_PrefabAsset: {fileID: 0} --- !u!1001 &27432028 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (18) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 916.7258 @@ -355,10 +372,6 @@ Prefab: propertyPath: m_RootOrder value: 18 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (18) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -371,22 +384,14 @@ Prefab: propertyPath: m_LocalEulerAnglesHint.y value: -45.935 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &28569094 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 28569095} @@ -404,7 +409,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 28569094} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 495, y: 0, z: 111.00003} @@ -417,7 +423,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 28569094} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -429,7 +436,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 28569094} m_Enabled: 1 m_CastShadows: 1 @@ -439,6 +447,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -464,16 +473,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 28569094} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &46741873 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (6) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 389 @@ -506,33 +528,33 @@ Prefab: propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (6) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &46741874 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 46741873} + m_PrefabInstance: {fileID: 46741873} + m_PrefabAsset: {fileID: 0} --- !u!1001 &50220129 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: Arena + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Layer + value: 11 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Layer + value: 11 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -0 @@ -565,39 +587,28 @@ Prefab: propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: Arena + - target: {fileID: 400002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.y + value: -0.25 objectReference: {fileID: 0} - target: {fileID: 2300000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Materials.Array.data[0] value: objectReference: {fileID: 2100000, guid: 595fb6ee6d2874170b611f5de99c9e04, type: 2} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Layer - value: 11 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Layer - value: 11 - objectReference: {fileID: 0} - - target: {fileID: 400002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_LocalPosition.y - value: -0.25 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &59157369 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1388961157} + m_PrefabInstance: {fileID: 1388961157} + m_PrefabAsset: {fileID: 0} --- !u!1 &67887081 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 67887082} @@ -612,7 +623,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 67887081} m_LocalRotation: {x: 0, y: 0.9659259, z: -0, w: -0.25881898} m_LocalPosition: {x: 14.444933, y: -249.83902, z: 166.58737} @@ -664,13 +676,15 @@ Transform: --- !u!4 &73869256 stripped Transform: m_CorrespondingSourceObject: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} - m_PrefabInternal: {fileID: 1299480888} + type: 3} + m_PrefabInstance: {fileID: 1299480888} + m_PrefabAsset: {fileID: 0} --- !u!1 &78006219 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 78006220} @@ -688,7 +702,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 78006219} m_LocalRotation: {x: 0.23913902, y: 0.13237491, z: 0.27581668, w: 0.9215284} m_LocalPosition: {x: 0, y: 0, z: -337} @@ -701,7 +716,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 78006219} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -713,7 +729,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 78006219} m_Enabled: 1 m_CastShadows: 1 @@ -723,6 +740,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -748,26 +766,41 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 78006219} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &81997158 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 272330350} + m_PrefabInstance: {fileID: 272330350} + m_PrefabAsset: {fileID: 0} --- !u!4 &88062648 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 201162570} + m_PrefabInstance: {fileID: 201162570} + m_PrefabAsset: {fileID: 0} --- !u!1001 &95719682 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (4) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -92 @@ -800,31 +833,20 @@ Prefab: propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (4) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &95719683 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 95719682} + m_PrefabInstance: {fileID: 95719682} + m_PrefabAsset: {fileID: 0} --- !u!1 &97194724 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 97194725} @@ -842,7 +864,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 97194724} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 495, y: 0, z: 111.00003} @@ -855,7 +878,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 97194724} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -867,7 +891,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 97194724} m_Enabled: 1 m_CastShadows: 1 @@ -877,6 +902,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -902,16 +928,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 97194724} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &108150777 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (10) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 59 @@ -944,31 +983,20 @@ Prefab: propertyPath: m_RootOrder value: 10 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (10) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &108150778 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 108150777} + m_PrefabInstance: {fileID: 108150777} + m_PrefabAsset: {fileID: 0} --- !u!1 &114817029 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 114817030} @@ -986,7 +1014,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 114817029} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 333, y: 0, z: -547} @@ -999,7 +1028,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 114817029} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1011,7 +1041,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 114817029} m_Enabled: 1 m_CastShadows: 1 @@ -1021,6 +1052,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -1046,14 +1078,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 114817029} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &116977386 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 116977387} @@ -1071,7 +1105,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 116977386} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 175.00002, y: 0, z: -104.00002} @@ -1084,7 +1119,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 116977386} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1096,7 +1132,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 116977386} m_Enabled: 1 m_CastShadows: 1 @@ -1106,6 +1143,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -1131,16 +1169,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 116977386} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &134677726 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (9) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 250 @@ -1173,31 +1224,20 @@ Prefab: propertyPath: m_RootOrder value: 9 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (9) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &134677727 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 134677726} + m_PrefabInstance: {fileID: 134677726} + m_PrefabAsset: {fileID: 0} --- !u!1 &178900435 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 178900436} @@ -1212,7 +1252,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 178900435} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 14.444933, y: -99.83902, z: 91.587364} @@ -1229,7 +1270,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 182519836} @@ -1247,7 +1289,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 182519835} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 391, y: 0, z: 40} @@ -1260,7 +1303,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 182519835} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1272,7 +1316,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 182519835} m_Enabled: 1 m_CastShadows: 1 @@ -1282,6 +1327,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -1307,14 +1353,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 182519835} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &185383431 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 185383432} @@ -1332,7 +1380,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 185383431} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 44, y: 0, z: -138} @@ -1345,7 +1394,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 185383431} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1357,7 +1407,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 185383431} m_Enabled: 1 m_CastShadows: 1 @@ -1367,6 +1418,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -1392,14 +1444,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 185383431} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &185535309 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 185535310} @@ -1417,7 +1471,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 185535309} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -309.00003, y: -39, z: -20.00003} @@ -1430,7 +1485,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 185535309} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1442,7 +1498,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 185535309} m_Enabled: 1 m_CastShadows: 1 @@ -1452,6 +1509,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -1477,16 +1535,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 185535309} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &201162570 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (7) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -149 @@ -1519,9 +1590,18 @@ Prefab: propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} +--- !u!1001 &201841937 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 67887082} + m_Modifications: - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Name - value: arena (7) + value: arena (14) objectReference: {fileID: 0} - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_StaticEditorFlags @@ -1531,16 +1611,6 @@ Prefab: propertyPath: m_StaticEditorFlags value: 4294967295 objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 ---- !u!1001 &201841937 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 67887082} - m_Modifications: - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 78 @@ -1573,10 +1643,6 @@ Prefab: propertyPath: m_RootOrder value: 14 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (14) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -1585,27 +1651,20 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &201841938 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 201841937} + m_PrefabInstance: {fileID: 201841937} + m_PrefabAsset: {fileID: 0} --- !u!1 &224510289 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 224510290} @@ -1620,7 +1679,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 224510289} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -14.444933, y: 24.839018, z: -91.587364} @@ -1637,12 +1697,14 @@ Transform: Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1250207028} + m_PrefabInstance: {fileID: 1250207028} + m_PrefabAsset: {fileID: 0} --- !u!1 &242937393 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 242937394} @@ -1660,7 +1722,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 242937393} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -172.00002, y: 0, z: -117} @@ -1673,7 +1736,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 242937393} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1685,7 +1749,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 242937393} m_Enabled: 1 m_CastShadows: 1 @@ -1695,6 +1760,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -1720,16 +1786,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 242937393} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &264443813 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (4) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -92 @@ -1762,31 +1841,20 @@ Prefab: propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (4) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &264443814 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 264443813} + m_PrefabInstance: {fileID: 264443813} + m_PrefabAsset: {fileID: 0} --- !u!1 &265025425 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 265025426} @@ -1804,7 +1872,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 265025425} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -261, y: 0, z: -216} @@ -1817,7 +1886,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 265025425} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -1829,7 +1899,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 265025425} m_Enabled: 1 m_CastShadows: 1 @@ -1839,6 +1910,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -1864,16 +1936,25 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 265025425} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &272330350 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 178900436} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 85.4 @@ -1922,24 +2003,27 @@ Prefab: propertyPath: m_MotionVectors value: 0 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1001 &296469258 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (4) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -92 @@ -1972,33 +2056,33 @@ Prefab: propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (4) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &296469259 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 296469258} + m_PrefabInstance: {fileID: 296469258} + m_PrefabAsset: {fileID: 0} --- !u!1001 &345123535 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (8) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 134 @@ -2031,31 +2115,20 @@ Prefab: propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (8) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &345147098 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 345123535} + m_PrefabInstance: {fileID: 345123535} + m_PrefabAsset: {fileID: 0} --- !u!1 &352152831 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 352152832} @@ -2073,7 +2146,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 352152831} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -372, y: 0, z: -236.00002} @@ -2086,7 +2160,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 352152831} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2098,7 +2173,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 352152831} m_Enabled: 1 m_CastShadows: 1 @@ -2108,6 +2184,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2133,14 +2210,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 352152831} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &354532722 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 354532723} @@ -2158,7 +2237,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 354532722} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -89, y: 0, z: -750} @@ -2171,7 +2251,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 354532722} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2183,7 +2264,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 354532722} m_Enabled: 1 m_CastShadows: 1 @@ -2193,6 +2275,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2218,14 +2301,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 354532722} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &366241755 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 366241756} @@ -2243,7 +2328,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 366241755} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 273, y: 0, z: -230} @@ -2256,7 +2342,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 366241755} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2268,7 +2355,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 366241755} m_Enabled: 1 m_CastShadows: 1 @@ -2278,6 +2366,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2303,14 +2392,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 366241755} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &369395355 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 369395356} @@ -2328,7 +2419,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 369395355} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -106, y: 0, z: 101} @@ -2341,7 +2433,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 369395355} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2353,7 +2446,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 369395355} m_Enabled: 1 m_CastShadows: 1 @@ -2363,6 +2457,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2388,14 +2483,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 369395355} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &372042093 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 372042094} @@ -2413,7 +2510,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 372042093} m_LocalRotation: {x: 0.00000010430813, y: -0.000000014901161, z: 0.8100965, w: 0.5862966} m_LocalPosition: {x: 333, y: 0, z: 110} @@ -2426,7 +2524,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 372042093} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2438,7 +2537,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 372042093} m_Enabled: 1 m_CastShadows: 1 @@ -2448,6 +2548,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2473,16 +2574,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 372042093} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &396513714 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (10) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 538 @@ -2515,10 +2629,6 @@ Prefab: propertyPath: m_RootOrder value: 10 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (10) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -2527,27 +2637,20 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &396513715 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 396513714} + m_PrefabInstance: {fileID: 396513714} + m_PrefabAsset: {fileID: 0} --- !u!1 &408158094 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 408158095} @@ -2565,7 +2668,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 408158094} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 273, y: 0, z: -230.00002} @@ -2578,7 +2682,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 408158094} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2590,7 +2695,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 408158094} m_Enabled: 1 m_CastShadows: 1 @@ -2600,6 +2706,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2625,14 +2732,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 408158094} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &413524973 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 413524974} @@ -2650,7 +2759,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 413524973} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 273, y: 0, z: -230.00002} @@ -2663,7 +2773,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 413524973} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2675,7 +2786,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 413524973} m_Enabled: 1 m_CastShadows: 1 @@ -2685,6 +2797,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2710,16 +2823,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 413524973} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &414423259 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (12) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 548.00006 @@ -2752,31 +2878,20 @@ Prefab: propertyPath: m_RootOrder value: 12 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (12) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &414423260 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 414423259} + m_PrefabInstance: {fileID: 414423259} + m_PrefabAsset: {fileID: 0} --- !u!1 &442186348 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 442186349} @@ -2794,7 +2909,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 442186348} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -172, y: 0, z: -117} @@ -2807,7 +2923,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 442186348} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2819,7 +2936,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 442186348} m_Enabled: 1 m_CastShadows: 1 @@ -2829,6 +2947,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2854,14 +2973,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 442186348} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &451749918 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 451749919} @@ -2879,7 +3000,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 451749918} m_LocalRotation: {x: -0.26148728, y: -0.004056542, z: -0.35544282, w: 0.8973674} m_LocalPosition: {x: 379, y: 0, z: -57} @@ -2892,7 +3014,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 451749918} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -2904,7 +3027,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 451749918} m_Enabled: 1 m_CastShadows: 1 @@ -2914,6 +3038,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -2939,14 +3064,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 451749918} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &475145665 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 475145666} @@ -2961,7 +3088,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 475145665} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2988,7 +3116,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 483480898} @@ -3006,7 +3135,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 483480897} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -106, y: 0, z: 101} @@ -3019,7 +3149,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 483480897} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3031,7 +3162,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 483480897} m_Enabled: 1 m_CastShadows: 1 @@ -3041,6 +3173,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3066,16 +3199,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 483480897} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &483628363 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (6) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 389 @@ -3108,31 +3254,20 @@ Prefab: propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (6) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &483628364 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 483628363} + m_PrefabInstance: {fileID: 483628363} + m_PrefabAsset: {fileID: 0} --- !u!1 &488375196 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 488375197} @@ -3150,7 +3285,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 488375196} m_LocalRotation: {x: 0.23913902, y: 0.13237491, z: 0.27581668, w: 0.9215284} m_LocalPosition: {x: 0, y: 0, z: -337} @@ -3163,7 +3299,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 488375196} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3175,7 +3312,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 488375196} m_Enabled: 1 m_CastShadows: 1 @@ -3185,6 +3323,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3210,16 +3349,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 488375196} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &496676544 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (19) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -180 @@ -3252,10 +3404,6 @@ Prefab: propertyPath: m_RootOrder value: 19 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (19) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -3264,22 +3412,14 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &497146013 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 497146014} @@ -3297,7 +3437,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 497146013} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 549, y: 0, z: -196} @@ -3310,7 +3451,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 497146013} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3322,7 +3464,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 497146013} m_Enabled: 1 m_CastShadows: 1 @@ -3332,6 +3475,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3357,14 +3501,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 497146013} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &498775560 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 498775561} @@ -3382,7 +3528,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 498775560} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 44, y: 0, z: -138} @@ -3395,7 +3542,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 498775560} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3407,7 +3555,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 498775560} m_Enabled: 1 m_CastShadows: 1 @@ -3417,6 +3566,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3442,16 +3592,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 498775560} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &509922437 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (11) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 305 @@ -3484,33 +3647,33 @@ Prefab: propertyPath: m_RootOrder value: 11 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (11) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &509922438 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 509922437} + m_PrefabInstance: {fileID: 509922437} + m_PrefabAsset: {fileID: 0} --- !u!1001 &525605389 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (1) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 258 @@ -3543,31 +3706,20 @@ Prefab: propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (1) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &525605390 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 525605389} + m_PrefabInstance: {fileID: 525605389} + m_PrefabAsset: {fileID: 0} --- !u!1 &528367774 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 528367775} @@ -3585,7 +3737,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528367774} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 44, y: 0, z: -550} @@ -3598,7 +3751,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528367774} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3610,7 +3764,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528367774} m_Enabled: 1 m_CastShadows: 1 @@ -3620,6 +3775,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3645,14 +3801,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528367774} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &528468834 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 528468835} @@ -3670,7 +3828,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528468834} m_LocalRotation: {x: 0.23913902, y: 0.13237491, z: 0.27581668, w: 0.9215284} m_LocalPosition: {x: 0, y: 0, z: -337} @@ -3683,7 +3842,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528468834} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3695,7 +3855,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528468834} m_Enabled: 1 m_CastShadows: 1 @@ -3705,6 +3866,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3730,14 +3892,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528468834} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &528661218 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 528661219} @@ -3755,7 +3919,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528661218} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 647, y: 0, z: -322} @@ -3768,7 +3933,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528661218} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -3780,7 +3946,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528661218} m_Enabled: 1 m_CastShadows: 1 @@ -3790,6 +3957,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -3815,16 +3983,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 528661218} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &531475809 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (3) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -147.00002 @@ -3857,31 +4038,20 @@ Prefab: propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (3) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &531475810 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 531475809} + m_PrefabInstance: {fileID: 531475809} + m_PrefabAsset: {fileID: 0} --- !u!1 &541939788 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 541939789} @@ -3896,7 +4066,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 541939788} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 14.444933, y: -1024.839, z: 591.58734} @@ -3907,125 +4078,126 @@ Transform: m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &544798803 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224150434440102018, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: m_Pivot.y value: 0 objectReference: {fileID: 0} - target: {fileID: 114979808143589782, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: target value: objectReference: {fileID: 1299480889} - target: {fileID: 114979808143589782, guid: 96f64c8325da2694bbbd1b4a7d9699eb, - type: 2} + type: 3} propertyPath: numberOfPhases value: 3 objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 96f64c8325da2694bbbd1b4a7d9699eb, type: 2} - m_IsPrefabAsset: 0 + m_SourcePrefab: {fileID: 100100000, guid: 96f64c8325da2694bbbd1b4a7d9699eb, type: 3} --- !u!4 &584307321 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1550776901} + m_PrefabInstance: {fileID: 1550776901} + m_PrefabAsset: {fileID: 0} --- !u!1 &594877635 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 594877636} @@ -4043,7 +4215,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 594877635} m_LocalRotation: {x: 0.23913904, y: 0.1323749, z: 0.2758167, w: 0.9215284} m_LocalPosition: {x: -85, y: -6, z: -166} @@ -4056,7 +4229,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 594877635} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -4068,7 +4242,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 594877635} m_Enabled: 1 m_CastShadows: 1 @@ -4078,6 +4253,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -4103,14 +4279,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 594877635} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &612655018 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 612655019} @@ -4128,7 +4306,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 612655018} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -372, y: 0, z: -236.00002} @@ -4141,7 +4320,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 612655018} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -4153,7 +4333,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 612655018} m_Enabled: 1 m_CastShadows: 1 @@ -4163,6 +4344,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -4188,21 +4370,35 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 612655018} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &612813143 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1323809550} + m_PrefabInstance: {fileID: 1323809550} + m_PrefabAsset: {fileID: 0} --- !u!1001 &637534025 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (11) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 347 @@ -4235,10 +4431,6 @@ Prefab: propertyPath: m_RootOrder value: 11 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (11) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -4247,27 +4439,20 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &637534026 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 637534025} + m_PrefabInstance: {fileID: 637534025} + m_PrefabAsset: {fileID: 0} --- !u!1 &645874563 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 645874564} @@ -4285,7 +4470,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 645874563} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -263, y: 0, z: 83.000015} @@ -4298,7 +4484,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 645874563} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -4310,7 +4497,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 645874563} m_Enabled: 1 m_CastShadows: 1 @@ -4320,6 +4508,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -4345,14 +4534,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 645874563} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &651292909 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 651292910} @@ -4370,7 +4561,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 651292909} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -89.000015, y: 0, z: -338.00003} @@ -4383,7 +4575,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 651292909} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -4395,7 +4588,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 651292909} m_Enabled: 1 m_CastShadows: 1 @@ -4405,6 +4599,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -4430,14 +4625,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 651292909} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &674142661 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 674142662} @@ -4455,7 +4652,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 674142661} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -309.00003, y: -39, z: -20.00003} @@ -4468,7 +4666,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 674142661} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -4480,7 +4679,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 674142661} m_Enabled: 1 m_CastShadows: 1 @@ -4490,6 +4690,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -4515,14 +4716,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 674142661} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &678380934 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 678380935} @@ -4537,7 +4740,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 678380934} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -4555,12 +4759,24 @@ Transform: m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &680452282 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (12) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 548.00006 @@ -4593,38 +4809,39 @@ Prefab: propertyPath: m_RootOrder value: 12 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (12) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &680452283 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 680452282} + m_PrefabInstance: {fileID: 680452282} + m_PrefabAsset: {fileID: 0} --- !u!4 &708187449 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1329937145} + m_PrefabInstance: {fileID: 1329937145} + m_PrefabAsset: {fileID: 0} --- !u!1001 &712857392 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (2) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 44 @@ -4657,36 +4874,26 @@ Prefab: propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (2) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &712857393 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 712857392} + m_PrefabInstance: {fileID: 712857392} + m_PrefabAsset: {fileID: 0} --- !u!4 &716878731 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 903232666} + m_PrefabInstance: {fileID: 903232666} + m_PrefabAsset: {fileID: 0} --- !u!1 &747072579 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 747072580} @@ -4704,7 +4911,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 747072579} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 128, y: 0, z: 202} @@ -4717,7 +4925,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 747072579} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -4729,7 +4938,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 747072579} m_Enabled: 1 m_CastShadows: 1 @@ -4739,6 +4949,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -4764,14 +4975,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 747072579} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &768971857 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 768971858} @@ -4789,7 +5002,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 768971857} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -309.00003, y: -39, z: -20.00003} @@ -4802,7 +5016,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 768971857} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -4814,7 +5029,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 768971857} m_Enabled: 1 m_CastShadows: 1 @@ -4824,6 +5040,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -4849,16 +5066,25 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 768971857} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &780082795 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 99 @@ -4891,29 +5117,33 @@ Prefab: propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &780082796 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 780082795} + m_PrefabInstance: {fileID: 780082795} + m_PrefabAsset: {fileID: 0} --- !u!1001 &799153012 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (1) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 258 @@ -4946,26 +5176,14 @@ Prefab: propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (1) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &821115816 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 821115817} @@ -4983,7 +5201,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 821115816} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -106, y: 0, z: 101} @@ -4996,7 +5215,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 821115816} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -5008,7 +5228,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 821115816} m_Enabled: 1 m_CastShadows: 1 @@ -5018,6 +5239,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -5043,14 +5265,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 821115816} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &830949077 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 830949078} @@ -5068,7 +5292,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 830949077} m_LocalRotation: {x: -0.26148728, y: -0.0040565724, z: -0.35544285, w: 0.8973674} m_LocalPosition: {x: 216, y: -10, z: 212} @@ -5081,7 +5306,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 830949077} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -5093,7 +5319,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 830949077} m_Enabled: 1 m_CastShadows: 1 @@ -5103,6 +5330,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -5128,14 +5356,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 830949077} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &846240635 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 846240636} @@ -5150,7 +5380,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 846240635} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 689, y: 0, z: -339} @@ -5175,7 +5406,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 856528626} @@ -5190,7 +5422,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 856528625} m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079} m_LocalPosition: {x: 0, y: 14, z: -20} @@ -5201,12 +5434,24 @@ Transform: m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0} --- !u!1001 &866933241 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (2) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 44.1 @@ -5239,26 +5484,14 @@ Prefab: propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (2) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &868550188 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 868550189} @@ -5276,7 +5509,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 868550188} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 128, y: 0, z: 202.00002} @@ -5289,7 +5523,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 868550188} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -5301,7 +5536,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 868550188} m_Enabled: 1 m_CastShadows: 1 @@ -5311,6 +5547,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -5336,14 +5573,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 868550188} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &879976845 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 879976847} @@ -5359,7 +5598,8 @@ GameObject: Light: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 879976845} m_Enabled: 1 serializedVersion: 8 @@ -5396,7 +5636,8 @@ Light: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 879976845} m_LocalRotation: {x: 0.40821788, y: 0.23456976, z: -0.10938167, w: 0.8754261} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -5409,12 +5650,14 @@ Transform: Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1788803043} + m_PrefabInstance: {fileID: 1788803043} + m_PrefabAsset: {fileID: 0} --- !u!1 &887959728 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 887959729} @@ -5432,7 +5675,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 887959728} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -172.00002, y: 0, z: -117} @@ -5445,7 +5689,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 887959728} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -5457,7 +5702,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 887959728} m_Enabled: 1 m_CastShadows: 1 @@ -5467,6 +5713,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -5492,16 +5739,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 887959728} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &903232666 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (16) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 704.47205 @@ -5534,10 +5794,6 @@ Prefab: propertyPath: m_RootOrder value: 16 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (16) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -5550,24 +5806,27 @@ Prefab: propertyPath: m_LocalEulerAnglesHint.y value: -45.935 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1001 &931155112 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (5) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -32 @@ -5600,116 +5859,123 @@ Prefab: propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (5) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &931155113 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 931155112} + m_PrefabInstance: {fileID: 931155112} + m_PrefabAsset: {fileID: 0} --- !u!1001 &943402142 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_LocalPosition.z value: -20 objectReference: {fileID: 0} - - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} + - target: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} - target: {fileID: 114841838092227364, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} + type: 3} propertyPath: shieldsMax value: 0 objectReference: {fileID: 0} - target: {fileID: 95172841293179122, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} + type: 3} propertyPath: m_Enabled value: 1 objectReference: {fileID: 0} - target: {fileID: 114744886842337002, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} + type: 3} propertyPath: m_Enabled value: 1 objectReference: {fileID: 0} - target: {fileID: 114941571434193320, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} + type: 3} propertyPath: shieldsMax value: 50 objectReference: {fileID: 0} - target: {fileID: 198749797921285654, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} + type: 3} propertyPath: prewarm value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 2} - m_IsPrefabAsset: 0 + m_SourcePrefab: {fileID: 100100000, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} --- !u!1 &943402143 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1531581295551972, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} - m_PrefabInternal: {fileID: 943402142} + type: 3} + m_PrefabInstance: {fileID: 943402142} + m_PrefabAsset: {fileID: 0} --- !u!1 &943402144 stripped GameObject: m_CorrespondingSourceObject: {fileID: 1740473415712136, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} - m_PrefabInternal: {fileID: 943402142} + type: 3} + m_PrefabInstance: {fileID: 943402142} + m_PrefabAsset: {fileID: 0} --- !u!114 &943402145 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114744886842337002, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} - m_PrefabInternal: {fileID: 943402142} + type: 3} + m_PrefabInstance: {fileID: 943402142} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 43b55afaa3edcd847a705ca151d1cf5a, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &957761747 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (2) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 44 @@ -5742,31 +6008,20 @@ Prefab: propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (2) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &957761748 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 957761747} + m_PrefabInstance: {fileID: 957761747} + m_PrefabAsset: {fileID: 0} --- !u!1 &974849018 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 974849019} @@ -5784,7 +6039,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 974849018} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 227, y: 0, z: -407} @@ -5797,7 +6053,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 974849018} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -5809,7 +6066,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 974849018} m_Enabled: 1 m_CastShadows: 1 @@ -5819,6 +6077,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -5844,16 +6103,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 974849018} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1020810654 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (11) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 305 @@ -5886,31 +6158,20 @@ Prefab: propertyPath: m_RootOrder value: 11 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (11) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1020810655 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1020810654} + m_PrefabInstance: {fileID: 1020810654} + m_PrefabAsset: {fileID: 0} --- !u!1 &1027693417 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1027693418} @@ -5928,7 +6189,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1027693417} m_LocalRotation: {x: 0.00000010430813, y: -0.000000014901161, z: 0.8100965, w: 0.5862966} m_LocalPosition: {x: 333, y: 0, z: 110} @@ -5941,7 +6203,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1027693417} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -5953,7 +6216,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1027693417} m_Enabled: 1 m_CastShadows: 1 @@ -5963,6 +6227,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -5988,14 +6253,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1027693417} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1030314710 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1030314711} @@ -6013,7 +6280,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1030314710} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 273, y: 0, z: -230.00002} @@ -6026,7 +6294,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1030314710} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -6038,7 +6307,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1030314710} m_Enabled: 1 m_CastShadows: 1 @@ -6048,6 +6318,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -6073,16 +6344,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1030314710} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1073537210 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (15) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 264 @@ -6115,10 +6399,6 @@ Prefab: propertyPath: m_RootOrder value: 15 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (15) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -6127,35 +6407,39 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1073537211 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1073537210} + m_PrefabInstance: {fileID: 1073537210} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1091142695 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 178900436} m_Modifications: - - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_LocalPosition.x - value: 46.9 + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (2) objectReference: {fileID: 0} - - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_LocalPosition.y + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.x + value: 46.9 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} @@ -6182,28 +6466,27 @@ Prefab: propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} +--- !u!1001 &1095335478 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 475145666} + m_Modifications: - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Name - value: arena (2) + value: arena (13) objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_StaticEditorFlags value: 4294967295 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_StaticEditorFlags value: 4294967295 objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 ---- !u!1001 &1095335478 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 475145666} - m_Modifications: - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 490.00003 @@ -6236,31 +6519,20 @@ Prefab: propertyPath: m_RootOrder value: 13 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (13) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1095335479 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1095335478} + m_PrefabInstance: {fileID: 1095335478} + m_PrefabAsset: {fileID: 0} --- !u!1 &1096671123 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1096671124} @@ -6278,7 +6550,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1096671123} m_LocalRotation: {x: 0.23913904, y: 0.1323749, z: 0.2758167, w: 0.9215284} m_LocalPosition: {x: -85, y: -6, z: -166} @@ -6291,7 +6564,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1096671123} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -6303,7 +6577,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1096671123} m_Enabled: 1 m_CastShadows: 1 @@ -6313,6 +6588,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -6338,14 +6614,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1096671123} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1102438652 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1102438653} @@ -6363,7 +6641,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1102438652} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -172, y: 0, z: -529} @@ -6376,7 +6655,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1102438652} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -6388,7 +6668,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1102438652} m_Enabled: 1 m_CastShadows: 1 @@ -6398,6 +6679,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -6423,16 +6705,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1102438652} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1104313816 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (3) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -147.00002 @@ -6465,31 +6760,20 @@ Prefab: propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (3) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1104313817 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1104313816} + m_PrefabInstance: {fileID: 1104313816} + m_PrefabAsset: {fileID: 0} --- !u!1 &1117252380 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1117252382} @@ -6506,7 +6790,8 @@ GameObject: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1117252380} m_Enabled: 1 m_EditorHideFlags: 0 @@ -6524,7 +6809,8 @@ MonoBehaviour: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1117252380} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.5, z: 0} @@ -6537,7 +6823,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1117252380} m_Enabled: 1 m_EditorHideFlags: 0 @@ -6548,7 +6835,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1132028608} @@ -6566,7 +6854,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1132028607} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 448, y: 0, z: 417} @@ -6579,7 +6868,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1132028607} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -6591,7 +6881,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1132028607} m_Enabled: 1 m_CastShadows: 1 @@ -6601,6 +6892,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -6626,14 +6918,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1132028607} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1158028474 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1158028475} @@ -6651,7 +6945,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1158028474} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 148.00002, y: 0, z: 98} @@ -6664,7 +6959,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1158028474} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -6676,7 +6972,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1158028474} m_Enabled: 1 m_CastShadows: 1 @@ -6686,6 +6983,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -6711,19 +7009,22 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1158028474} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &1165734110 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 799153012} + m_PrefabInstance: {fileID: 799153012} + m_PrefabAsset: {fileID: 0} --- !u!1 &1171425762 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1171425763} @@ -6741,7 +7042,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1171425762} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 175.00002, y: 0, z: -104.00002} @@ -6754,7 +7056,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1171425762} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -6766,7 +7069,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1171425762} m_Enabled: 1 m_CastShadows: 1 @@ -6776,6 +7080,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -6801,14 +7106,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1171425762} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1175709016 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1175709017} @@ -6826,7 +7133,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175709016} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -216.00002, y: 0, z: -223.00002} @@ -6839,7 +7147,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175709016} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -6851,7 +7160,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175709016} m_Enabled: 1 m_CastShadows: 1 @@ -6861,6 +7171,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -6886,16 +7197,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175709016} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1188876246 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (13) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 490.00003 @@ -6928,31 +7252,20 @@ Prefab: propertyPath: m_RootOrder value: 13 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (13) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1188876247 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1188876246} + m_PrefabInstance: {fileID: 1188876246} + m_PrefabAsset: {fileID: 0} --- !u!1 &1238735395 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1238735396} @@ -6970,7 +7283,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1238735395} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -216.00002, y: 0, z: -223.00002} @@ -6983,7 +7297,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1238735395} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -6995,7 +7310,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1238735395} m_Enabled: 1 m_CastShadows: 1 @@ -7005,6 +7321,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -7030,16 +7347,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1238735395} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1250207028 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (5) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -32 @@ -7072,26 +7402,14 @@ Prefab: propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (5) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &1253625528 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1253625529} @@ -7109,7 +7427,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1253625528} m_LocalRotation: {x: -0.26148728, y: -0.0040565724, z: -0.35544285, w: 0.8973674} m_LocalPosition: {x: 216, y: -10, z: 212} @@ -7122,7 +7441,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1253625528} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -7134,7 +7454,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1253625528} m_Enabled: 1 m_CastShadows: 1 @@ -7144,6 +7465,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -7169,14 +7491,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1253625528} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1254263346 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1254263347} @@ -7194,7 +7518,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1254263346} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -172.00002, y: 0, z: -117} @@ -7207,7 +7532,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1254263346} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -7219,7 +7545,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1254263346} m_Enabled: 1 m_CastShadows: 1 @@ -7229,6 +7556,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -7254,16 +7582,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1254263346} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1257275937 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (13) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -120 @@ -7296,10 +7637,6 @@ Prefab: propertyPath: m_RootOrder value: 13 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (13) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -7308,29 +7645,33 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1257275938 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1257275937} + m_PrefabInstance: {fileID: 1257275937} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1260559704 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (3) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -147.00002 @@ -7363,36 +7704,26 @@ Prefab: propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (3) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1260559705 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1260559704} + m_PrefabInstance: {fileID: 1260559704} + m_PrefabAsset: {fileID: 0} --- !u!1 &1286897560 stripped GameObject: m_CorrespondingSourceObject: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 50220129} + m_PrefabInstance: {fileID: 50220129} + m_PrefabAsset: {fileID: 0} --- !u!23 &1286897561 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1286897560} m_Enabled: 1 m_CastShadows: 1 @@ -7402,6 +7733,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 15303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -7427,7 +7759,8 @@ MeshRenderer: MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1286897560} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -7435,13 +7768,13 @@ MeshCollider: serializedVersion: 3 m_Convex: 1 m_CookingOptions: 14 - m_SkinWidth: 0.01 m_Mesh: {fileID: 4300000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} --- !u!114 &1286897563 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1286897560} m_Enabled: 1 m_EditorHideFlags: 0 @@ -7454,12 +7787,14 @@ MonoBehaviour: Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1091142695} + m_PrefabInstance: {fileID: 1091142695} + m_PrefabAsset: {fileID: 0} --- !u!1 &1292294611 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1292294612} @@ -7477,7 +7812,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1292294611} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 391, y: 0, z: -322.00012} @@ -7490,7 +7826,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1292294611} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -7502,7 +7839,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1292294611} m_Enabled: 1 m_CastShadows: 1 @@ -7512,6 +7850,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -7537,159 +7876,183 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1292294611} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1299480888 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1361199117965970, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} + propertyPath: m_Layer + value: 14 + objectReference: {fileID: 0} + - target: {fileID: 1361199117965970, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_LocalPosition.y value: 1.31 objectReference: {fileID: 0} - - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 4161752672674268, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} + type: 3} propertyPath: movespeed.baseValue value: 100 objectReference: {fileID: 0} - - target: {fileID: 1258213056334190, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} - propertyPath: m_Layer - value: 14 + - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 3} + propertyPath: shieldsMax + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 3} + propertyPath: shieldRegen + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 3} + propertyPath: shieldDelayMax + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, + type: 3} + propertyPath: healthMax + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1361199117965970, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1258213056334190, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1279753824129228, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1279753824129228, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1076956229501808, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1076956229501808, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1852215713901966, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1852215713901966, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1065768404458646, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1065768404458646, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1705574593270298, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1705574593270298, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1246922315647794, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1246922315647794, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1617057268946778, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1617057268946778, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1889529610353062, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} + - target: {fileID: 1889529610353062, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: m_Layer value: 14 objectReference: {fileID: 0} - - target: {fileID: 1361199117965970, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} - propertyPath: shieldsMax - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} - propertyPath: shieldRegen - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} - propertyPath: shieldDelayMax - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} - propertyPath: healthMax - value: 0 - objectReference: {fileID: 0} - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} + type: 3} propertyPath: DebugMode value: 1 objectReference: {fileID: 0} - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} + type: 3} propertyPath: isPlayerLocked value: 1 objectReference: {fileID: 0} - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} + type: 3} propertyPath: Chill value: 0 objectReference: {fileID: 0} - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} + type: 3} propertyPath: Routine - value: 2 + value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} - m_IsPrefabAsset: 0 + m_SourcePrefab: {fileID: 100100000, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} --- !u!114 &1299480889 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114615383473035938, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} - m_PrefabInternal: {fileID: 1299480888} + type: 3} + m_PrefabInstance: {fileID: 1299480888} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 70dae659e9d6bae4db41c2b2fc0b7d77, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!114 &1299480890 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, - type: 2} - m_PrefabInternal: {fileID: 1299480888} + type: 3} + m_PrefabInstance: {fileID: 1299480888} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 281669b33e37543babdb0261c006392e, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &1308306554 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (1) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 258 @@ -7722,45 +8085,46 @@ Prefab: propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (1) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1308306555 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1308306554} + m_PrefabInstance: {fileID: 1308306554} + m_PrefabAsset: {fileID: 0} --- !u!4 &1310658896 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1453734869} + m_PrefabInstance: {fileID: 1453734869} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1323809550 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: - - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_LocalPosition.x - value: 389 - objectReference: {fileID: 0} - - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (6) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.x + value: 389 + objectReference: {fileID: 0} + - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.z @@ -7786,28 +8150,27 @@ Prefab: propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} +--- !u!1001 &1329937145 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 67887082} + m_Modifications: - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Name - value: arena (6) + value: arena (4) objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_StaticEditorFlags value: 4294967295 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_StaticEditorFlags value: 4294967295 objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 ---- !u!1001 &1329937145 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 67887082} - m_Modifications: - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -92 @@ -7840,9 +8203,18 @@ Prefab: propertyPath: m_RootOrder value: 4 objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} +--- !u!1001 &1331668915 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1556267953} + m_Modifications: - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_Name - value: arena (4) + value: arena (5) objectReference: {fileID: 0} - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_StaticEditorFlags @@ -7852,16 +8224,6 @@ Prefab: propertyPath: m_StaticEditorFlags value: 4294967295 objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 ---- !u!1001 &1331668915 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1556267953} - m_Modifications: - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -32 @@ -7894,33 +8256,33 @@ Prefab: propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (5) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1331668916 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1331668915} + m_PrefabInstance: {fileID: 1331668915} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1348897495 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (10) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 59 @@ -7953,31 +8315,20 @@ Prefab: propertyPath: m_RootOrder value: 10 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (10) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1348897496 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1348897495} + m_PrefabInstance: {fileID: 1348897495} + m_PrefabAsset: {fileID: 0} --- !u!1 &1355643777 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1355643778} @@ -7992,7 +8343,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1355643777} m_LocalRotation: {x: -0, y: 0.43290868, z: -0, w: 0.90143776} m_LocalPosition: {x: -78, y: 0, z: -743} @@ -8014,127 +8366,133 @@ Transform: m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 51.305004, z: 0} --- !u!1001 &1366463253 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: -20 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: 0.1 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 10 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 10 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_Pivot.x value: 0.5 objectReference: {fileID: 0} - target: {fileID: 224310705885013480, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: m_Pivot.y value: 0.5 objectReference: {fileID: 0} - target: {fileID: 114315413463394226, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: player value: objectReference: {fileID: 1521525899} - target: {fileID: 114315413463394226, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} + type: 3} propertyPath: shield value: objectReference: {fileID: 1521525900} m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: bb41b54f16c577b4394b91efd8f95232, type: 2} - m_IsPrefabAsset: 0 + m_SourcePrefab: {fileID: 100100000, guid: bb41b54f16c577b4394b91efd8f95232, type: 3} --- !u!114 &1366463254 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114315413463394226, guid: bb41b54f16c577b4394b91efd8f95232, - type: 2} - m_PrefabInternal: {fileID: 1366463253} + type: 3} + m_PrefabInstance: {fileID: 1366463253} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: fae87115b5d35c04790c9e97a3f4e548, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1369181890 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1174022983365280, guid: 1cac6195606574b31be30813600757cc, - type: 2} - m_PrefabInternal: {fileID: 0} + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1369181891} @@ -8153,8 +8511,9 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 4742906667431576, guid: 1cac6195606574b31be30813600757cc, - type: 2} - m_PrefabInternal: {fileID: 0} + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1369181890} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -8167,16 +8526,18 @@ Transform: AudioListener: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 81380850973551798, guid: 1cac6195606574b31be30813600757cc, - type: 2} - m_PrefabInternal: {fileID: 0} + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1369181890} m_Enabled: 1 --- !u!20 &1369181893 Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 20451642182706338, guid: 1cac6195606574b31be30813600757cc, - type: 2} - m_PrefabInternal: {fileID: 0} + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1369181890} m_Enabled: 1 serializedVersion: 2 @@ -8185,6 +8546,7 @@ Camera: m_projectionMatrixMode: 1 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 @@ -8216,7 +8578,8 @@ Camera: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1369181890} m_Enabled: 0 m_EditorHideFlags: 0 @@ -8232,7 +8595,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1369181890} m_Enabled: 0 m_EditorHideFlags: 0 @@ -8287,12 +8651,20 @@ MonoBehaviour: m_BeforeStackBundles: [] m_AfterStackBundles: [] --- !u!1001 &1377803165 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 99 @@ -8325,29 +8697,33 @@ Prefab: propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1377803166 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1377803165} + m_PrefabInstance: {fileID: 1377803165} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1388961157 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (17) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 765.3285 @@ -8388,30 +8764,18 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (17) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalEulerAnglesHint.y value: -45.935 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &1389195876 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1389195877} @@ -8429,7 +8793,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1389195876} m_LocalRotation: {x: 0.00000011920929, y: -0.000000014901161, z: 0.81009656, w: 0.5862966} m_LocalPosition: {x: 130, y: -39, z: 360} @@ -8442,7 +8807,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1389195876} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -8454,7 +8820,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1389195876} m_Enabled: 1 m_CastShadows: 1 @@ -8464,6 +8831,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -8489,14 +8857,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1389195876} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1398776837 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1398776838} @@ -8514,7 +8884,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1398776837} m_LocalRotation: {x: -0.26148728, y: -0.004056542, z: -0.35544282, w: 0.8973674} m_LocalPosition: {x: 379, y: 0, z: -57} @@ -8527,7 +8898,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1398776837} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -8539,7 +8911,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1398776837} m_Enabled: 1 m_CastShadows: 1 @@ -8549,6 +8922,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -8574,21 +8948,31 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1398776837} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &1408365333 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 866933241} + m_PrefabInstance: {fileID: 866933241} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1431846791 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 99 @@ -8621,22 +9005,14 @@ Prefab: propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &1435677684 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1435677685} @@ -8654,7 +9030,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1435677684} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -216.00002, y: 0, z: -223.00002} @@ -8667,7 +9044,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1435677684} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -8679,7 +9057,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1435677684} m_Enabled: 1 m_CastShadows: 1 @@ -8689,6 +9068,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -8714,16 +9094,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1435677684} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1435787229 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 178900436} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (4) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -89.5 @@ -8756,33 +9149,33 @@ Prefab: propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (4) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1435787230 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1435787229} + m_PrefabInstance: {fileID: 1435787229} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1453734869 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (20) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 82 @@ -8815,10 +9208,6 @@ Prefab: propertyPath: m_RootOrder value: 20 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (20) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -8827,24 +9216,27 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1001 &1465101908 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (8) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 134 @@ -8877,31 +9269,20 @@ Prefab: propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (8) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1465101909 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1465101908} + m_PrefabInstance: {fileID: 1465101908} + m_PrefabAsset: {fileID: 0} --- !u!1 &1465528060 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1465528061} @@ -8919,7 +9300,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1465528060} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -263, y: 0, z: 83.000015} @@ -8932,7 +9314,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1465528060} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -8944,7 +9327,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1465528060} m_Enabled: 1 m_CastShadows: 1 @@ -8954,6 +9338,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -8979,16 +9364,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1465528060} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1471185164 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (21) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 373 @@ -9021,10 +9419,6 @@ Prefab: propertyPath: m_RootOrder value: 21 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (21) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -9033,22 +9427,14 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &1483075634 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1483075635} @@ -9066,7 +9452,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1483075634} m_LocalRotation: {x: 0.00000010430813, y: -0.000000014901161, z: 0.8100965, w: 0.5862966} m_LocalPosition: {x: 333, y: 0, z: 110} @@ -9079,7 +9466,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1483075634} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -9091,7 +9479,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1483075634} m_Enabled: 1 m_CastShadows: 1 @@ -9101,6 +9490,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -9126,16 +9516,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1483075634} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1487829723 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (9) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 250 @@ -9168,31 +9571,20 @@ Prefab: propertyPath: m_RootOrder value: 9 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (9) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1487829724 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1487829723} + m_PrefabInstance: {fileID: 1487829723} + m_PrefabAsset: {fileID: 0} --- !u!1 &1488144755 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1488144756} @@ -9210,7 +9602,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1488144755} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 495, y: 0, z: 111.00003} @@ -9223,7 +9616,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1488144755} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -9235,7 +9629,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1488144755} m_Enabled: 1 m_CastShadows: 1 @@ -9245,6 +9640,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -9270,16 +9666,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1488144755} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1502427373 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (9) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 593 @@ -9320,31 +9729,20 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (9) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1502427374 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1502427373} + m_PrefabInstance: {fileID: 1502427373} + m_PrefabAsset: {fileID: 0} --- !u!1 &1514659194 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1514659195} @@ -9362,7 +9760,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1514659194} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 448, y: 0, z: 417} @@ -9375,7 +9774,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1514659194} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -9387,7 +9787,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1514659194} m_Enabled: 1 m_CastShadows: 1 @@ -9397,6 +9798,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -9422,16 +9824,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1514659194} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1515513379 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (9) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 250 @@ -9464,50 +9879,63 @@ Prefab: propertyPath: m_RootOrder value: 9 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (9) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1515513380 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1515513379} + m_PrefabInstance: {fileID: 1515513379} + m_PrefabAsset: {fileID: 0} --- !u!4 &1521525898 stripped Transform: m_CorrespondingSourceObject: {fileID: 4712219835925784, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} - m_PrefabInternal: {fileID: 943402142} + type: 3} + m_PrefabInstance: {fileID: 943402142} + m_PrefabAsset: {fileID: 0} --- !u!114 &1521525899 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114841838092227364, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} - m_PrefabInternal: {fileID: 943402142} + type: 3} + m_PrefabInstance: {fileID: 943402142} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 70dae659e9d6bae4db41c2b2fc0b7d77, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!114 &1521525900 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 114941571434193320, guid: 0a4bf3da0a89acc43a328f456d51b1cf, - type: 2} - m_PrefabInternal: {fileID: 943402142} + type: 3} + m_PrefabInstance: {fileID: 943402142} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 943402143} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 70dae659e9d6bae4db41c2b2fc0b7d77, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &1522173993 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (13) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 490.00003 @@ -9540,33 +9968,33 @@ Prefab: propertyPath: m_RootOrder value: 13 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (13) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1522173994 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1522173993} + m_PrefabInstance: {fileID: 1522173993} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1550776901 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (3) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -147 @@ -9599,26 +10027,14 @@ Prefab: propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (3) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &1556267952 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1556267953} @@ -9633,7 +10049,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1556267952} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 689, y: 0, z: -339} @@ -9657,12 +10074,24 @@ Transform: m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1579538674 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (8) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 134 @@ -9695,41 +10124,32 @@ Prefab: propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (8) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1579538675 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1579538674} + m_PrefabInstance: {fileID: 1579538674} + m_PrefabAsset: {fileID: 0} --- !u!4 &1633857449 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 27432028} + m_PrefabInstance: {fileID: 27432028} + m_PrefabAsset: {fileID: 0} --- !u!4 &1672215955 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1431846791} + m_PrefabInstance: {fileID: 1431846791} + m_PrefabAsset: {fileID: 0} --- !u!1 &1683122321 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1683122322} @@ -9747,7 +10167,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1683122321} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 148.00002, y: 0, z: 98} @@ -9760,7 +10181,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1683122321} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -9772,7 +10194,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1683122321} m_Enabled: 1 m_CastShadows: 1 @@ -9782,6 +10205,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -9807,14 +10231,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1683122321} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1696671855 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1696671856} @@ -9832,7 +10258,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1696671855} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 44, y: 0, z: -138} @@ -9845,7 +10272,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1696671855} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -9857,7 +10285,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1696671855} m_Enabled: 1 m_CastShadows: 1 @@ -9867,6 +10296,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -9892,15 +10322,17 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1696671855} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1699681801 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 1332467706374624, guid: 1cac6195606574b31be30813600757cc, - type: 2} - m_PrefabInternal: {fileID: 0} + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1699681803} @@ -9916,8 +10348,9 @@ GameObject: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 114677581309639984, guid: 1cac6195606574b31be30813600757cc, - type: 2} - m_PrefabInternal: {fileID: 0} + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1699681801} m_Enabled: 1 m_EditorHideFlags: 0 @@ -9934,8 +10367,9 @@ MonoBehaviour: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 4460077260118954, guid: 1cac6195606574b31be30813600757cc, - type: 2} - m_PrefabInternal: {fileID: 0} + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1699681801} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -9946,12 +10380,20 @@ Transform: m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1702978278 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 99 @@ -9984,29 +10426,33 @@ Prefab: propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1702978279 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1702978278} + m_PrefabInstance: {fileID: 1702978278} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1713190743 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (7) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -149 @@ -10039,31 +10485,20 @@ Prefab: propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (7) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1713190744 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1713190743} + m_PrefabInstance: {fileID: 1713190743} + m_PrefabAsset: {fileID: 0} --- !u!1 &1715763547 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1715763548} @@ -10081,7 +10516,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1715763547} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -10094,7 +10530,8 @@ Transform: MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1715763547} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -10102,13 +10539,13 @@ MeshCollider: serializedVersion: 3 m_Convex: 0 m_CookingOptions: 14 - m_SkinWidth: 0.01 m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!23 &1715763550 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1715763547} m_Enabled: 1 m_CastShadows: 1 @@ -10118,6 +10555,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 85b224a7395584d7a9d2f19f4580e3f8, type: 2} m_StaticBatchInfo: @@ -10143,16 +10581,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1715763547} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1745544780 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (11) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 305 @@ -10185,33 +10636,33 @@ Prefab: propertyPath: m_RootOrder value: 11 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (11) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1745544781 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1745544780} + m_PrefabInstance: {fileID: 1745544780} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1758730868 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (7) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -149 @@ -10244,36 +10695,26 @@ Prefab: propertyPath: m_RootOrder value: 7 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (7) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1758730869 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1758730868} + m_PrefabInstance: {fileID: 1758730868} + m_PrefabAsset: {fileID: 0} --- !u!4 &1759970249 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1959599394} + m_PrefabInstance: {fileID: 1959599394} + m_PrefabAsset: {fileID: 0} --- !u!1 &1771452710 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1771452711} @@ -10291,7 +10732,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771452710} m_LocalRotation: {x: -0.26148728, y: -0.004056542, z: -0.35544282, w: 0.8973674} m_LocalPosition: {x: 379, y: 0, z: -57} @@ -10304,7 +10746,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771452710} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -10316,7 +10759,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771452710} m_Enabled: 1 m_CastShadows: 1 @@ -10326,6 +10770,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -10351,14 +10796,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771452710} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1783294397 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1783294398} @@ -10373,7 +10820,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1783294397} m_LocalRotation: {x: -0, y: 0.43290868, z: -0, w: 0.90143776} m_LocalPosition: {x: -78, y: 0, z: -743} @@ -10391,12 +10839,24 @@ Transform: m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 51.305004, z: 0} --- !u!1001 &1788803043 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 178900436} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (3) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -122.9 @@ -10429,26 +10889,14 @@ Prefab: propertyPath: m_RootOrder value: 2 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (3) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &1789516006 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1789516007} @@ -10466,7 +10914,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1789516006} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 44, y: 0, z: -138} @@ -10479,7 +10928,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1789516006} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -10491,7 +10941,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1789516006} m_Enabled: 1 m_CastShadows: 1 @@ -10501,6 +10952,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -10526,16 +10978,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1789516006} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &1809424255 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (12) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 548.00006 @@ -10568,31 +11033,20 @@ Prefab: propertyPath: m_RootOrder value: 12 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (12) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1809424256 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1809424255} + m_PrefabInstance: {fileID: 1809424255} + m_PrefabAsset: {fileID: 0} --- !u!1 &1841681394 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1841681395} @@ -10610,7 +11064,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1841681394} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -89.000015, y: 0, z: -338.00003} @@ -10623,7 +11078,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1841681394} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -10635,7 +11091,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1841681394} m_Enabled: 1 m_CastShadows: 1 @@ -10645,6 +11102,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -10670,14 +11128,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1841681394} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1870098049 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1870098050} @@ -10695,7 +11155,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1870098049} m_LocalRotation: {x: -0.26148728, y: -0.0040565724, z: -0.35544285, w: 0.8973674} m_LocalPosition: {x: 216, y: -10, z: 212} @@ -10708,7 +11169,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1870098049} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -10720,7 +11182,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1870098049} m_Enabled: 1 m_CastShadows: 1 @@ -10730,6 +11193,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -10755,14 +11219,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1870098049} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1875121800 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1875121801} @@ -10780,7 +11246,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1875121800} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -89.000015, y: 0, z: -338.00003} @@ -10793,7 +11260,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1875121800} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -10805,7 +11273,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1875121800} m_Enabled: 1 m_CastShadows: 1 @@ -10815,6 +11284,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -10840,19 +11310,22 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1875121800} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &1885867594 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1471185164} + m_PrefabInstance: {fileID: 1471185164} + m_PrefabAsset: {fileID: 0} --- !u!1 &1893472741 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1893472742} @@ -10867,7 +11340,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1893472741} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -10889,12 +11363,24 @@ Transform: m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1937909870 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (2) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 44 @@ -10927,31 +11413,20 @@ Prefab: propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (2) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &1937909871 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 1937909870} + m_PrefabInstance: {fileID: 1937909870} + m_PrefabAsset: {fileID: 0} --- !u!1 &1955063702 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1955063703} @@ -10966,7 +11441,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1955063702} m_LocalRotation: {x: -0, y: 0.43290868, z: -0, w: 0.90143776} m_LocalPosition: {x: -78, y: 0, z: -743} @@ -10990,12 +11466,24 @@ Transform: m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 51.305004, z: 0} --- !u!1001 &1959599394 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (22) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 466 @@ -11028,10 +11516,6 @@ Prefab: propertyPath: m_RootOrder value: 22 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (22) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -11040,22 +11524,14 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!1 &1974456960 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1974456961} @@ -11073,7 +11549,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1974456960} m_LocalRotation: {x: 0.00000011920929, y: -0.000000014901161, z: 0.81009656, w: 0.5862966} m_LocalPosition: {x: 130, y: -39, z: 360} @@ -11086,7 +11563,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1974456960} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -11098,7 +11576,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1974456960} m_Enabled: 1 m_CastShadows: 1 @@ -11108,6 +11587,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -11133,14 +11613,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1974456960} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1985931094 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1985931095} @@ -11158,7 +11640,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1985931094} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -263, y: 0, z: 83.000015} @@ -11171,7 +11654,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1985931094} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -11183,7 +11667,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1985931094} m_Enabled: 1 m_CastShadows: 1 @@ -11193,6 +11678,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -11218,14 +11704,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1985931094} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2006497207 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2006497210} @@ -11242,7 +11730,8 @@ GameObject: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2006497207} m_Enabled: 1 m_EditorHideFlags: 0 @@ -11260,7 +11749,8 @@ MonoBehaviour: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2006497207} m_Enabled: 1 m_EditorHideFlags: 0 @@ -11274,7 +11764,8 @@ MonoBehaviour: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2006497207} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -11287,7 +11778,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2008613432} @@ -11302,7 +11794,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2008613431} m_LocalRotation: {x: 0, y: 0.9848078, z: -0, w: -0.17364809} m_LocalPosition: {x: 114.44493, y: -624.839, z: 391.58737} @@ -11321,12 +11814,24 @@ Transform: m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 200, z: 0} --- !u!1001 &2016192631 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (10) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 59 @@ -11359,31 +11864,20 @@ Prefab: propertyPath: m_RootOrder value: 10 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (10) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &2016192632 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 2016192631} + m_PrefabInstance: {fileID: 2016192631} + m_PrefabAsset: {fileID: 0} --- !u!1 &2041752258 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2041752259} @@ -11401,7 +11895,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041752258} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 128, y: 0, z: 202.00002} @@ -11414,7 +11909,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041752258} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -11426,7 +11922,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041752258} m_Enabled: 1 m_CastShadows: 1 @@ -11436,6 +11933,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -11461,14 +11959,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041752258} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2049943850 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2049943851} @@ -11486,7 +11986,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2049943850} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 175, y: 0, z: -104} @@ -11499,7 +12000,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2049943850} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -11511,7 +12013,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2049943850} m_Enabled: 1 m_CastShadows: 1 @@ -11521,6 +12024,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -11546,14 +12050,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2049943850} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2063050058 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2063050059} @@ -11571,7 +12077,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2063050058} m_LocalRotation: {x: 0.00000011920929, y: -0.000000014901161, z: 0.81009656, w: 0.5862966} m_LocalPosition: {x: 130, y: -39, z: 360} @@ -11584,7 +12091,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2063050058} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -11596,7 +12104,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2063050058} m_Enabled: 1 m_CastShadows: 1 @@ -11606,6 +12115,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -11631,14 +12141,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2063050058} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2069303806 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2069303807} @@ -11656,7 +12168,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2069303806} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -89, y: 0, z: -338} @@ -11669,7 +12182,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2069303806} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -11681,7 +12195,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2069303806} m_Enabled: 1 m_CastShadows: 1 @@ -11691,6 +12206,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -11716,19 +12232,22 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2069303806} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &2090600544 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 496676544} + m_PrefabInstance: {fileID: 496676544} + m_PrefabAsset: {fileID: 0} --- !u!1 &2090638974 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2090638975} @@ -11746,7 +12265,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2090638974} m_LocalRotation: {x: 0.23913904, y: 0.1323749, z: 0.2758167, w: 0.9215284} m_LocalPosition: {x: -85, y: -6, z: -166} @@ -11759,7 +12279,8 @@ Transform: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2090638974} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -11771,7 +12292,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2090638974} m_Enabled: 1 m_CastShadows: 1 @@ -11781,6 +12303,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -11806,14 +12329,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2090638974} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2102374924 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2102374925} @@ -11831,7 +12356,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102374924} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 128, y: 0, z: 202.00002} @@ -11844,7 +12370,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102374924} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -11856,7 +12383,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102374924} m_Enabled: 1 m_CastShadows: 1 @@ -11866,6 +12394,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -11891,16 +12420,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2102374924} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &2103322984 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 67887082} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (12) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 558 @@ -11933,10 +12475,6 @@ Prefab: propertyPath: m_RootOrder value: 12 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (12) - objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalScale.x value: 1.0000004 @@ -11945,27 +12483,20 @@ Prefab: propertyPath: m_LocalScale.z value: 1.0000004 objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &2103322985 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 2103322984} + m_PrefabInstance: {fileID: 2103322984} + m_PrefabAsset: {fileID: 0} --- !u!1 &2103733819 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2103733820} @@ -11983,7 +12514,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2103733819} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 456, y: 0, z: -430} @@ -11996,7 +12528,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2103733819} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -12008,7 +12541,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2103733819} m_Enabled: 1 m_CastShadows: 1 @@ -12018,6 +12552,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -12043,14 +12578,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2103733819} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2121800291 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2121800292} @@ -12068,7 +12605,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2121800291} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -372, y: 0, z: -236.00002} @@ -12081,7 +12619,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2121800291} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -12093,7 +12632,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2121800291} m_Enabled: 1 m_CastShadows: 1 @@ -12103,6 +12643,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -12128,14 +12669,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2121800291} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2125873241 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2125873242} @@ -12153,7 +12696,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2125873241} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 448, y: 0, z: 417} @@ -12166,7 +12710,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2125873241} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -12178,7 +12723,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2125873241} m_Enabled: 1 m_CastShadows: 1 @@ -12188,6 +12734,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -12213,16 +12760,29 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2125873241} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1001 &2136060661 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 475145666} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (5) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: -32 @@ -12255,33 +12815,33 @@ Prefab: propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (5) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &2136060662 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 2136060661} + m_PrefabInstance: {fileID: 2136060661} + m_PrefabAsset: {fileID: 0} --- !u!1001 &2141926614 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1955063703} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (8) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 134 @@ -12314,33 +12874,33 @@ Prefab: propertyPath: m_RootOrder value: 8 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (8) - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &2141926615 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 2141926614} + m_PrefabInstance: {fileID: 2141926614} + m_PrefabAsset: {fileID: 0} --- !u!1001 &2144238944 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1556267953} m_Modifications: + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_Name + value: arena (6) + objectReference: {fileID: 0} + - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} + - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} + propertyPath: m_StaticEditorFlags + value: 4294967295 + objectReference: {fileID: 0} - target: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} propertyPath: m_LocalPosition.x value: 389 @@ -12373,31 +12933,20 @@ Prefab: propertyPath: m_RootOrder value: 6 objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_Name - value: arena (6) - objectReference: {fileID: 0} - - target: {fileID: 100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} - - target: {fileID: 100002, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - propertyPath: m_StaticEditorFlags - value: 4294967295 - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_IsPrefabAsset: 0 --- !u!4 &2144238945 stripped Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: e8abd750775e9469c9e72526b4e0d534, type: 3} - m_PrefabInternal: {fileID: 2144238944} + m_PrefabInstance: {fileID: 2144238944} + m_PrefabAsset: {fileID: 0} --- !u!1 &2144566414 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2144566415} @@ -12415,7 +12964,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2144566414} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 175.00002, y: 0, z: -104.00002} @@ -12428,7 +12978,8 @@ Transform: SphereCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2144566414} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -12440,7 +12991,8 @@ SphereCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2144566414} m_Enabled: 1 m_CastShadows: 1 @@ -12450,6 +13002,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: @@ -12475,14 +13028,16 @@ MeshRenderer: MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2144566414} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2147156488 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2147156489} @@ -12497,7 +13052,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2147156488} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 689, y: 0, z: -339} diff --git a/Assets/Scripts/Boss Core/AI/AIPhase.cs b/Assets/Scripts/Boss Core/AI/AIPhase.cs index 15f80aa..c7e7842 100644 --- a/Assets/Scripts/Boss Core/AI/AIPhase.cs +++ b/Assets/Scripts/Boss Core/AI/AIPhase.cs @@ -74,6 +74,7 @@ public AISequence GetNext() foreach (AIPhaseScriptedComponent component in scriptedSequences) { // Only run if the event is scheduled to run. if (count == component.everyX) { + Debug.Log("Returned scripted ai sequence"); return component.sequence; } } @@ -83,11 +84,13 @@ public AISequence GetNext() { if (count == 0 && component.everyX == 0) { + Debug.Log("Returned scheduled scripted ai sequence"); return component.sequence; } if (count % component.everyX == 0) { + Debug.Log("Returned scheduled scripted ai sequence"); return component.sequence; } } @@ -96,7 +99,9 @@ public AISequence GetNext() int targetWeight = Random.Range(0, totalWeight); int currentWeight = 0; foreach (AIPhaseComponent component in phaseSequences) { - if (targetWeight < currentWeight + component.weight) { + if (targetWeight < currentWeight + component.weight) + { + Debug.Log("Returned random ai sequence"); return component.sequence; } currentWeight += component.weight; diff --git a/Assets/Scripts/Boss Core/AI/AISequence.cs b/Assets/Scripts/Boss Core/AI/AISequence.cs index 4a031f5..509a577 100644 --- a/Assets/Scripts/Boss Core/AI/AISequence.cs +++ b/Assets/Scripts/Boss Core/AI/AISequence.cs @@ -1,6 +1,6 @@ using System.Collections; using System.Collections.Generic; -using BossCore; +using Constants; using UnityEngine; namespace AI @@ -15,51 +15,6 @@ public class AISequence /// public static bool ShouldTryExpandFunctions = false; - // TODO put these in a publically accessable location. Possibly in world or game manager. - public static ProxyVector3 PLAYER_POSITION = new ProxyVector3(() => { return GameManager.Player.transform.position + World.Arena.CENTER; }); - - /// - /// Grabs the delayed player position. If the "PlayerLock" move is locked on, then - /// this will return the player position at the time the move was run. Otherwise, this - /// returns the same value as PLAYER_POSITION. - /// - /// - public static ProxyVector3 DELAYED_PLAYER_POSITION = Moves.Basic.PlayerLock._delayed_player_position; - - // Experimental. Leads ahead of the player based on their current velocity and distance from boss. - // This is quite realtime, but can be jittery as a result. - public static ProxyVector3 LEADING_PLAYER_POSITION = new ProxyVector3(() => - { - float distance = (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude; - //Vector3 offset = (distance / 2f * GameManager.Player.GetComponent().velocity.normalized); - Vector3 offset = 1f * GameManager.Player.GetComponent().velocity.normalized; - - return PLAYER_POSITION.GetValue() + offset; - }); - - // Smooths the value of LEADING_PLAYER_POSITION using two samples over time. - // This is less "realtime", but provides a smoother tracking. - private static Vector3 last_lead = Vector3.zero; - private static Vector3 curr_lead = Vector3.zero; - public static ProxyVector3 SMOOTHED_LEADING_PLAYER_POSITION = new ProxyVector3(() => - { - Vector3 raw_value = LEADING_PLAYER_POSITION.GetValue(); - - last_lead = curr_lead; - curr_lead = raw_value; - - return (last_lead + curr_lead) / 2.0f; - - }); - - public static ProxyVector3 BOSS_POSITION = new ProxyVector3(() => { return GameManager.Boss.transform.position; }); - public static ProxyVector3 RANDOM_IN_ARENA = new ProxyVector3(() => - { - float angle = Random.value * 360; - float distance = Random.Range(0, GameManager.Arena.RadiusInWorldUnits); - return distance * (Quaternion.AngleAxis(angle, Vector3.up) * Vector3.forward) + World.Arena.CENTER; - }); - // A list of events to execute. This is the data, or leaf, of the recursive structure. public AIEvent[] Events { @@ -158,8 +113,6 @@ public override sealed string ToString() private AISequence(AIEvent[] events) { this.Events = events; - //this.Children = null; - this.Children = () => { return null; }; } @@ -170,8 +123,6 @@ private AISequence(AIEvent[] events) public AISequence(params AISequence[] sequences) { this.Events = null; - //this.Children = sequences; - this.Children = () => { return sequences; }; } diff --git a/Assets/Scripts/Boss Core/AI/InternalMove.cs b/Assets/Scripts/Boss Core/AI/InternalMove.cs index 0b9d862..6018b78 100644 --- a/Assets/Scripts/Boss Core/AI/InternalMove.cs +++ b/Assets/Scripts/Boss Core/AI/InternalMove.cs @@ -26,7 +26,8 @@ internal InternalMove(AIEvent.Action a) } // Used uniquely by Pause() to generate an AIEvent with a nonzero duration. - internal InternalMove(AIEvent a) { + internal InternalMove(AIEvent a) + { this.Events = new AIEvent[] { a }; this.Children = () => { return null; }; } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs index d302084..fd4846e 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs @@ -14,7 +14,7 @@ public AOE_120() { Description = "Shoots a 120 degree wide AOE at the player."; Difficulty = 1f; - Sequence = new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)); + Sequence = new ShootAOE(new AOEData { FixedWidth = 3f }.On(-60, 60)); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs index eab764a..f6812cc 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; @@ -20,9 +20,9 @@ public AOE_131() Sequence = new AISequence( new Teleport().Wait(0.5f), new PlayerLock(true), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.19f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20 }.On(-60, -40).On(-10, 10).On(40, 60)).Wait(0.76f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.2f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.19f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 20 }.On(-60, -40).On(-10, 10).On(40, 60)).Wait(0.76f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 5 }.On(-60, 60)).Wait(0.2f), new PlayerLock(false).Wait(1f) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs index 8cc52a4..39bf303 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs @@ -14,7 +14,7 @@ public AOE_360() { Description = "Shoots a 360 degree wide AOE."; Difficulty = 1f; - Sequence = new ShootAOE(new AOE { FixedWidth = 3f }.On(0, 360)); + Sequence = new ShootAOE(new AOEData { FixedWidth = 3f }.On(0, 360)); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs index db213a2..88e6c9a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs @@ -14,7 +14,7 @@ public AOE_90() { Description = "Shoots a 90 degree wide AOE at the player."; Difficulty = 1f; - Sequence = new ShootAOE(new AOE { FixedWidth = 3f }.On(-45, 45)); + Sequence = new ShootAOE(new AOEData { FixedWidth = 3f }.On(-45, 45)); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs index 5eaa926..0c0ac7e 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs @@ -1,6 +1,6 @@ using AI; using Projectiles; -using BossCore; +using Constants; using static BossController; @@ -14,8 +14,8 @@ public Shoot_2_Waves() Difficulty = 4f; Sequence = new AISequence( new Teleport().Wait(0.5f), - new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = -2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new ShootArc(100, -45f, 45f, new Projectile { AngleOffset = 2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(100, -45f, 45f, new ProjectileData { AngleOffset = -2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(100, -45f, 45f, new ProjectileData { AngleOffset = 2.5f, Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), new Pause(1f) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs index 9dfb3ee..de43e56 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs index 6eb5eb3..5c80993 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs index 97ed38e..4b8981e 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs index e53cc79..0d35007 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs @@ -1,6 +1,6 @@ using AI; using Projectiles; -using BossCore; +using Constants; using static BossController; using static AI.AISequence; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs index a064cf9..5fd8816 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs @@ -22,7 +22,7 @@ public Sweep(bool reverse = false) For(reverse ? 90 : -30, reverse ? -30 : 90, reverse ? -5 : 5, - i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f) + i => new Shoot1(new ProjectileData { AngleOffset = i }).Wait(0.05f) ), new PlayerLock(false), Pause(0.25f) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs index d5facdc..0610dbe 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs @@ -18,9 +18,9 @@ public Sweep_Back_And_Forth() Sequence = new AISequence( new Teleport().Wait(0.25f), new PlayerLock(true), - For(-30, 90, 5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)), + For(-30, 90, 5, i => new Shoot1(new ProjectileData { AngleOffset = i }).Wait(0.05f)), new Pause(0.25f), - For(30, -90, -5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.05f)), + For(30, -90, -5, i => new Shoot1(new ProjectileData { AngleOffset = i }).Wait(0.05f)), new PlayerLock(false), new Pause(0.5f) ); diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs index 0417c8a..f656ff2 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs @@ -20,8 +20,8 @@ public Sweep_Both() new PlayerLock(true), For(0, 120, 5, i => Merge( - new Shoot1(new Projectile { AngleOffset = i - 60 }), - new Shoot1(new Projectile { AngleOffset = 60 - i }) + new Shoot1(new ProjectileData { AngleOffset = i - 60 }), + new Shoot1(new ProjectileData { AngleOffset = 60 - i }) ).Wait(0.05f) ), new PlayerLock(false), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs index c1a6e82..8677040 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs @@ -10,8 +10,8 @@ public class PlayerLock : InternalMove private static Vector3 playerLockPosition; private static bool isPlayerLocked; - public static BossCore.ProxyVector3 _delayed_player_position = new BossCore.ProxyVector3(() => { - return isPlayerLocked ? playerLockPosition : PLAYER_POSITION.GetValue(); + public static Constants.ProxyVector3 _delayed_player_position = new Constants.ProxyVector3(() => { + return isPlayerLocked ? playerLockPosition : Constants.Positions.PLAYER_POSITION.GetValue(); }); public PlayerLock(bool enableLock = true) : base diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs index e91e480..4341ee1 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs @@ -7,20 +7,20 @@ namespace Moves.Basic public class Shoot1 : InternalMove { - public Shoot1() : this(Projectile.DEFAULT) { } + public Shoot1() : this(ProjectileData.DEFAULT) { } - public Shoot1(Projectile skeleton) : base + public Shoot1(ProjectileData skeleton) : base ( () => { GameManager.Boss.Glare(); - Projectile newStruc = skeleton.Clone(); + ProjectileData newStruc = skeleton.Clone(); newStruc.Create(); } ) { - Description = "Shot one " + (skeleton == Projectile.DEFAULT ? "default projectile at the player." : skeleton + "."); + Description = "Shot one " + (skeleton == ProjectileData.DEFAULT ? "default projectile at the player." : skeleton + "."); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs index 4c1b3a3..301107c 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs @@ -7,9 +7,9 @@ namespace Moves.Basic public class Shoot3 : InternalMove { - public Shoot3() : this(Projectile.DEFAULT) { } + public Shoot3() : this(ProjectileData.DEFAULT) { } - public Shoot3(Projectile skeleton) : base + public Shoot3(ProjectileData skeleton) : base ( () => { @@ -17,14 +17,14 @@ public Shoot3(Projectile skeleton) : base for (int i = 0; i < 3; i++) { - Projectile newStruc = skeleton.Clone(); + ProjectileData newStruc = skeleton.Clone(); newStruc.AngleOffset = -30 + (30 * i) + newStruc.AngleOffset; newStruc.Create(); } } ) { - Description = "Shot three " + (skeleton == Projectile.DEFAULT ? "default projectiles at the player." : skeleton + "."); + Description = "Shot three " + (skeleton == ProjectileData.DEFAULT ? "default projectiles at the player." : skeleton + "."); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs index a221766..7b861d2 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs @@ -1,6 +1,6 @@ using AI; using AOEs; -using BossCore; +using Constants; using static BossController; @@ -11,12 +11,12 @@ public class ShootAOE : InternalMove // TODO add default AOEs public ShootAOE() : this(null) { } - public ShootAOE(AOE skeleton) : base + public ShootAOE(AOEData skeleton) : base ( () => { GameManager.Boss.Glare(); - skeleton = skeleton != null ? skeleton.Clone() : new AOE(); + skeleton = skeleton != null ? skeleton.Clone() : new AOEData(); skeleton.Create(); } ) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs index 6dd00a7..aa81754 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs @@ -7,11 +7,11 @@ namespace Moves.Basic public class ShootArc : InternalMove { - public ShootArc() : this(50, 0, 360, Projectile.DEFAULT) { } + public ShootArc() : this(50, 0, 360, ProjectileData.DEFAULT) { } - public ShootArc(Projectile skeleton) : this(50, 0, 360, skeleton) { } + public ShootArc(ProjectileData skeleton) : this(50, 0, 360, skeleton) { } - public ShootArc(int density, float from, float to, Projectile skeleton = null) : base + public ShootArc(int density, float from, float to, ProjectileData skeleton = null) : base ( () => { @@ -26,10 +26,10 @@ public ShootArc(int density, float from, float to, Projectile skeleton = null) : } float step = 360f / density; - Projectile clone = skeleton ?? new Projectile { Size = Size.MEDIUM }; + ProjectileData clone = skeleton ?? new ProjectileData { Size = Size.MEDIUM }; for (float i = from; i <= to; i += step) { - Projectile newStruc = clone.Clone(); + ProjectileData newStruc = clone.Clone(); newStruc.AngleOffset = newStruc.AngleOffset + i; newStruc.Create(); } @@ -37,7 +37,7 @@ public ShootArc(int density, float from, float to, Projectile skeleton = null) : ) { Description = "Shot an arc (density=" + density + ", from=" + from + ", to=" + to + ") of " + - (skeleton == Projectile.DEFAULT ? "default projectiles at the player." : skeleton + "."); + (skeleton == ProjectileData.DEFAULT ? "default projectiles at the player." : skeleton + "."); } } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs index 281227c..0a05396 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs @@ -1,8 +1,8 @@ using AI; using Projectiles; -using static BossController; using UnityEngine; -using BossCore; + +using Constants; namespace Moves.Basic { @@ -19,7 +19,7 @@ public ShootLine(int amount = 50, float width = 75f, Vector3? target = null, Spe for (int i = 0; i < amount; i++) { Vector3 spawn = GameManager.Boss.transform.position + ((i - (amount / 2f)) * (width / amount) * leftDirection); - new Projectile() + new ProjectileData() { Start = spawn, Target = spawn + targetPos, diff --git a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs index 3fc786d..43a83fa 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs @@ -2,7 +2,7 @@ using Projectiles; using static BossController; -using BossCore; +using Constants; namespace Moves.Basic { @@ -11,8 +11,8 @@ public class ShootWall : InternalMove public ShootWall(float angleOffset) : base ( Merge( - new ShootArc(100, angleOffset + -60, angleOffset + -60 + 28, new Projectile { Speed = Speed.SLOW }), - new ShootArc(100, angleOffset + 20, angleOffset + 60, new Projectile { Speed = Speed.SLOW }) + new ShootArc(100, angleOffset + -60, angleOffset + -60 + 28, new ProjectileData { Speed = Speed.SLOW }), + new ShootArc(100, angleOffset + 20, angleOffset + 60, new ProjectileData { Speed = Speed.SLOW }) ) ) { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs index 8e819ec..8adda0a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs @@ -6,7 +6,7 @@ using Moves.Basic; using Projectiles; using AOEs; -using BossCore; +using Constants; using static BossController; namespace Moves.Test diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs index 6e9db34..1a0c26e 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs @@ -6,7 +6,7 @@ using Moves.Basic; using Projectiles; using AOEs; -using BossCore; +using Constants; using static BossController; namespace Moves.Test @@ -23,13 +23,13 @@ public Double_Laser_Sweep_AOE() Merge( new Laser().Wait(1f), new Laser(90, -90, 5, -90).Wait(1f), - new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) + new ShootAOE(new AOEData { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) ), new Pause(1f), Merge( new Laser().Wait(1f), new Laser(90, -90, 5, -90).Wait(1f), - new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) + new ShootAOE(new AOEData { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60)) ), new PlayerLock(false), new Pause(1f) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs index 3449748..5fc3748 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; @@ -21,17 +21,17 @@ public Horseshoe_AOE() //Pause(1f), For(10, i => Merge( - new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) + new Shoot1(new ProjectileData { AngleOffset = 15 + (6 * i) }).Wait(0.05f), + new Shoot1(new ProjectileData { AngleOffset = -15 - (6 * i) }).Wait(0.05f) ) ), For(10, i => Merge( - new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), - new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) + new Shoot1(new ProjectileData { AngleOffset = 75 - (6 * i) }).Wait(0.05f), + new Shoot1(new ProjectileData { AngleOffset = -75 + (6 * i) }).Wait(0.05f) ) ), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + new ShootAOE(new AOEData { FixedWidth = 3f }.On(-60, 60)) ); } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs index 9a6a592..3ade3c4 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using static BossController; using Moves.Basic; @@ -18,7 +18,7 @@ public Laser(float startOffset = -90, float finalOffset = 90, float width = 5, f Description = "A laser that sweeps from " + startOffset + " to " + finalOffset + " with a beam width of " + width + " and speed " + angularSpeed; Difficulty = 5f; Sequence = new ShootAOE( - new AOE + new AOEData { InnerSpeed = Speed.FROZEN, OuterSpeed = Speed.FROZEN, diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs index b01e122..b2a135a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs @@ -6,7 +6,7 @@ using Moves.Basic; using Projectiles; using AOEs; -using BossCore; +using Constants; using static BossController; namespace Moves.Test @@ -22,12 +22,12 @@ public Laser_Sweep_With_AOE() new PlayerLock(true), Merge( new Laser().Wait(1f), - new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) + new Pause(1f).Then(new ShootAOE(new AOEData { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) ), new Pause(1f), Merge( new Laser(90, -90, 5, -90).Wait(1f), - new Pause(1f).Then(new ShootAOE(new AOE { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) + new Pause(1f).Then(new ShootAOE(new AOEData { FixedWidth = 3f, OuterSpeed = Speed.FAST }.On(-60, 60))) ), new PlayerLock(false), new Pause(1f) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs index d29409d..d0403e9 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs @@ -5,7 +5,7 @@ using Projectiles; using static BossController; -using BossCore; +using Constants; using Moves.Basic; namespace Moves.Test @@ -17,7 +17,7 @@ public Lightning_Arena() Description = "Spawns lightning on the whole arena"; Difficulty = 5f; Sequence = new AISequence( - new Teleport(World.Arena.CENTER).Wait(0.25f), + new Teleport(Constants.Positions.CENTER).Wait(0.25f), For(4, i => new Shoot1(new ProjectileLightning { AngleOffset = i * 90f }).Wait(0.1f)), Pause(1f) ); diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs index 5c2abfe..ebb63ac 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs @@ -4,7 +4,7 @@ using UnityEngine; using AOEs; -using BossCore; +using Constants; using Moves.Test; using Moves.Basic; using static BossController; @@ -18,7 +18,7 @@ public Lightning_With_AOE() Description = "Lightning with aoe"; Difficulty = 6f; Sequence = new AISequence( - new ShootAOE(new AOE + new ShootAOE(new AOEData { AngleOffset = (-25), RotationSpeed = (15f), @@ -31,7 +31,7 @@ public Lightning_With_AOE() .On(270 - 22.5f, 270 + 22.5f) ).Wait(1.5f), new Lightning_Arena().Wait(0.5f), - new ShootAOE(new AOE + new ShootAOE(new AOEData { AngleOffset = (-25), RotationSpeed = (15f), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs index ade3cdc..861f8c7 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs @@ -1,10 +1,11 @@ using System.Collections.Generic; using AI; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using UnityEngine; + namespace Moves.Test { public class Pincer : Move diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs index 46fed27..e2a27b6 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs @@ -6,7 +6,7 @@ using Moves.Basic; using Projectiles; using AOEs; -using BossCore; +using Constants; using static BossController; namespace Moves.Test diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs index 35eb8c3..1ada38b 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs @@ -14,7 +14,7 @@ public class Player_Strafe_Waves : Move public Player_Strafe_Waves() { - Sequence = For(6, i => new Strafe(true, 60, 25, GameManager.Player.transform.position)).Then(new ShootAOE(new AOE().On(-60, 60))).Wait(0.75f); + Sequence = For(6, i => new Strafe(true, 60, 25, GameManager.Player.transform.position)).Then(new ShootAOE(new AOEData().On(-60, 60))).Wait(0.75f); } } } \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs index 7d88f01..be8c3db 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs @@ -6,7 +6,7 @@ using Moves.Basic; using Projectiles; using AOEs; -using BossCore; +using Constants; namespace Moves.Test { @@ -18,14 +18,14 @@ public Quick_Waves() Difficulty = 6f; Sequence = new AISequence( Either( - new ShootArc(100, -60, 60, new Projectile { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), - new ShootAOE(new AOE { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), + new ShootArc(100, -60, 60, new ProjectileData { Size = Size.HUGE, Speed = Speed.VERY_FAST }).Wait(0.05f).Times(3), + new ShootAOE(new AOEData { OuterSpeed = Speed.VERY_FAST, FixedWidth = 3 }.On(-60, 60)), new Shoot1(new ProjectileLightning()), Merge( - new ShootArc(150, 22.5f, 22.5f + 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), - new ShootArc(150, -22.5f, -22.5f - 60f, new Projectile { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }) + new ShootArc(150, 22.5f, 22.5f + 60f, new ProjectileData { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }), + new ShootArc(150, -22.5f, -22.5f - 60f, new ProjectileData { Size = Size.MEDIUM, Speed = Speed.VERY_FAST }) ), - new ShootArc(100, -60, 60, new Projectile { Speed = Speed.VERY_FAST, Size = Size.SMALL }).Wait(0.1f).Times(5) + new ShootArc(100, -60, 60, new ProjectileData { Speed = Speed.VERY_FAST, Size = Size.SMALL }).Wait(0.1f).Times(5) ).Wait(0.6f).Times(7) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs index 83260c9..456588f 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs @@ -3,6 +3,7 @@ using UnityEngine; using AI; +using Constants; using Projectiles; using AOEs; using Moves.Basic; @@ -20,39 +21,39 @@ public Random_Leading(int count = 20) new Shoot1( new ProjectileReverse() { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, + Start = Positions.RANDOM_IN_ARENA, + Target = Positions.PLAYER_POSITION, Size = Size.HUGE, - Speed = BossCore.Speed.FAST, + Speed = Constants.Speed.FAST, MaxTime = 4f } ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), + new ShootAOE(new AOEData { OuterSpeed = Constants.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), new Laser(-60, 480, 5, 60), new Laser(60, 480, 5, 45), new Laser(120, 480, 5, 30), new Shoot1( new ProjectileReverse() { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, + Start = Positions.RANDOM_IN_ARENA, + Target = Positions.PLAYER_POSITION, Size = Size.HUGE, - Speed = BossCore.Speed.FAST, + Speed = Constants.Speed.FAST, MaxTime = 4f } ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), + new ShootAOE(new AOEData { OuterSpeed = Constants.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f), new Shoot1( new ProjectileReverse() { - Start = RANDOM_IN_ARENA, - Target = PLAYER_POSITION, + Start = Positions.RANDOM_IN_ARENA, + Target = Positions.PLAYER_POSITION, Size = Size.HUGE, - Speed = BossCore.Speed.FAST, + Speed = Constants.Speed.FAST, MaxTime = 4f } ).Wait(0.15f).Times(count), - new ShootAOE(new AOE { OuterSpeed = BossCore.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f) + new ShootAOE(new AOEData { OuterSpeed = Constants.Speed.MEDIUM, FixedWidth = 5f }.On(0, 360)).Wait(0.5f) ); } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs index 9427337..3b3babe 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs @@ -17,17 +17,17 @@ public SpinReverse(int count = 50) new Shoot1( new ProjectileCurving(187, false) { - Start = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward)), - Target = (PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward) + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.right)), - Speed = (BossCore.Speed.FAST), + Start = (Constants.Positions.PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward)), + Target = (Constants.Positions.PLAYER_POSITION + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.forward) + Quaternion.AngleAxis(i * (360f / count), Vector3.up) * (10 * Vector3.right)), + Speed = (Constants.Speed.FAST), MaxTime = (0.75f), OnDestroyTimeout = self => new Shoot1( new ProjectileReverse() { Start = (self.transform.position), - Target = (PLAYER_POSITION), - Speed = (BossCore.Speed.SNIPE), + Target = (Constants.Positions.PLAYER_POSITION), + Speed = (Constants.Speed.SNIPE), MaxTime = (0.75f) } ) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs index 201c46f..88aa5ed 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs @@ -6,9 +6,8 @@ using Moves.Basic; using Projectiles; using AOEs; -using static BossController; -using static World.Arena; -using BossCore; +using Constants; +using static Constants.Positions; namespace Moves.Test { @@ -18,7 +17,7 @@ public Sniper_Final() { Sequence = new AISequence( new Teleport(NORTH_FAR).Wait(0.5f), - new ShootAOE(new AOE + new ShootAOE(new AOEData { OuterSpeed = Speed.SLOW, InnerSpeed = Speed.FROZEN, @@ -29,7 +28,7 @@ public Sniper_Final() self => { // TODO write a better API for this - AOE clone = self.data.Clone(); + AOEData clone = self.data.Clone(); clone.MaxTime = 10f; clone.Freeze(); clone.Create(); @@ -39,25 +38,25 @@ public Sniper_Final() .Wait(1f), new AISequence( new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(0.25f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) ).Times(2), new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), - new ShootAOE(new AOE { Start = WEST_FAR, Target = EAST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), - new ShootAOE(new AOE { Start = EAST_FAR, Target = WEST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), + new ShootAOE(new AOEData { Start = WEST_FAR, Target = EAST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-15, 15)).Wait(0.75f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)), + new ShootAOE(new AOEData { Start = EAST_FAR, Target = WEST_FAR, OuterSpeed = Speed.FAST, FixedWidth = 7f }.On(-90, 90)).Wait(0.25f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 20f, Target = SOUTH_FAR }.On(-45, -15).On(15, 45)).Wait(0.75f), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM, FixedWidth = 7f, Target = SOUTH_FAR }.On(-80, 80)).Wait(1f) ).Times(2), - new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f), - new Shoot1(new Projectile { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f) + new Shoot1(new ProjectileData { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f), + new Shoot1(new ProjectileData { Speed = Speed.SNAIL, Size = Size.HUGE, MaxTime = 1f, OnDestroyTimeout = CallbackDictionary.SPAWN_1_HOMING_TOWARDS_PLAYER }).Wait(2.5f) ) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs index dbb21f7..76c2b03 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -6,7 +6,7 @@ using Moves.Basic; using Projectiles; using AOEs; -using BossCore; +using Constants; using static BossController; namespace Moves.Test @@ -47,7 +47,7 @@ public Test() Sequence = new AISequence( For(-30f, 30f, 1f, - i => new Shoot1(new Projectile { Size = Size.MEDIUM, Speed = Speed.MEDIUM, AngleOffset = i }) + i => new Shoot1(new ProjectileData { Size = Size.MEDIUM, Speed = Speed.MEDIUM, AngleOffset = i }) ) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs index 7c69b19..1b34989 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs @@ -19,7 +19,7 @@ public Force_Block() Sequence = new AISequence( new Teleport().Wait(0.25f), new PlayerLock(true), - new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), + new ShootArc(100, -90, 90, new ProjectileData { Size = Size.TINY }).Wait(0.1f).Times(10), new PlayerLock(false), new Pause(4f) ); diff --git a/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs index 2c0fc81..8eec085 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs @@ -18,7 +18,7 @@ public Shoot_AOE(int width) Difficulty = 1.5f; Sequence = new AISequence( new Teleport().Wait(0.25f), - new ShootAOE(new AOE { FixedWidth = 3f }.On(-width / 2, width / 2)), + new ShootAOE(new AOEData { FixedWidth = 3f }.On(-width / 2, width / 2)), new Pause(1.5f) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs index f83fe89..4261d36 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/AOE_Test_2.cs @@ -6,7 +6,7 @@ using AOEs; using Projectiles; using Moves.Basic; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { @@ -15,22 +15,22 @@ public class AOE_Test_2 : Move //// Lets the player know the cardinal directions will be dangerous soon. private static AISequence TELEGRAPH_CARDINAL = new AISequence( Merge( - new ShootArc(100, -7, 7, new Projectile { Target = SOUTH_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -7, 7, new Projectile { Target = WEST_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -7, 7, new Projectile { Target = NORTH_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -7, 7, new Projectile { Target = EAST_FAR }).Wait(0.2f).Times(3) + new ShootArc(100, -7, 7, new ProjectileData { Target = SOUTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -7, 7, new ProjectileData { Target = WEST_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -7, 7, new ProjectileData { Target = NORTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -7, 7, new ProjectileData { Target = EAST_FAR }).Wait(0.2f).Times(3) ), Merge( - new ShootArc(100, -15, 15, new Projectile { Target = SOUTH_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -15, 15, new Projectile { Target = WEST_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -15, 15, new Projectile { Target = NORTH_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -15, 15, new Projectile { Target = EAST_FAR }).Wait(0.2f).Times(3) + new ShootArc(100, -15, 15, new ProjectileData { Target = SOUTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -15, 15, new ProjectileData { Target = WEST_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -15, 15, new ProjectileData { Target = NORTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -15, 15, new ProjectileData { Target = EAST_FAR }).Wait(0.2f).Times(3) ), Merge( - new ShootArc(100, -25, 25, new Projectile { Target = SOUTH_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -25, 25, new Projectile { Target = WEST_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -25, 25, new Projectile { Target = NORTH_FAR }).Wait(0.2f).Times(3), - new ShootArc(100, -25, 25, new Projectile { Target = EAST_FAR }).Wait(0.2f).Times(3) + new ShootArc(100, -25, 25, new ProjectileData { Target = SOUTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -25, 25, new ProjectileData { Target = WEST_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -25, 25, new ProjectileData { Target = NORTH_FAR }).Wait(0.2f).Times(3), + new ShootArc(100, -25, 25, new ProjectileData { Target = EAST_FAR }).Wait(0.2f).Times(3) ) ); @@ -42,9 +42,9 @@ public AOE_Test_2() { TELEGRAPH_CARDINAL, new ShootAOE( - new AOE { - OuterSpeed = BossCore.Speed.MEDIUM, - InnerSpeed = BossCore.Speed.SLOW, + new AOEData { + OuterSpeed = Constants.Speed.MEDIUM, + InnerSpeed = Constants.Speed.SLOW, Target = Vector3.forward, MaxTime = 2f, // TODO add ability to change values in callbacks like before @@ -100,7 +100,7 @@ public AOE_Test_2() { ); } - void HandleAOECallbackDelegate(AOEComponent self) + void HandleAOECallbackDelegate(AOE self) { } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs index e750a02..358219a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs @@ -3,11 +3,8 @@ using UnityEngine; using AI; -using AOEs; -using BossCore; using Moves.Basic; -using static World.Arena; -using Projectiles; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs index c9ed121..697d89f 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_In_Out.cs @@ -4,11 +4,11 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs index cf39763..b110a38 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Circle_Jump_Rope.cs @@ -4,11 +4,11 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { @@ -22,7 +22,7 @@ public Circle_Jump_Rope() new Teleport(CENTER).Wait(0.5f), new Wave_Reverse_Faster().Wait(1f), new Wave_Reverse_Faster(), - new Shoot1(new Projectile { Size = Size.TINY, Speed = Speed.FAST }).Wait(0.1f).Times(60) // This pushes it a bit over 8. + new Shoot1(new ProjectileData { Size = Size.TINY, Speed = Speed.FAST }).Wait(0.1f).Times(60) // This pushes it a bit over 8. // Adding any of the below additional attacks makes it too hard for gameplay purposes. //Shoot1(size: Size.TINY, speed: Speed.VERY_FAST, angleOffset: -20f).Wait(0.1f).Times(30) //Shoot3(speed: Speed.FAST, size: Size.SMALL).Wait(0.1f).Times(60) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs index 5a28a63..cba88a4 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; @@ -17,7 +17,7 @@ public Dash_Test() Description = "Aggressively tests dashing."; Difficulty = 8f; Sequence = new AISequence( - new ShootAOE(new AOE { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f)), + new ShootAOE(new AOEData { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f)), new Pause(0.75f) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs index 6baa482..fa3e546 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs @@ -4,10 +4,10 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { @@ -28,9 +28,9 @@ public Death_Hex() new Teleport(CENTER).Wait(0.5f), new Shoot_Death_Hex(2f).Wait(1f), new Shoot_Death_Hex(1f).Wait(2f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), - new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(0.75f) + new ShootArc(50, 0, 360, new ProjectileData { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new ProjectileData { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new ProjectileData { MaxTime = 0.25f }).Wait(0.75f) ); } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs index 43b22e9..48ef667 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs @@ -4,10 +4,10 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs index 1275b02..87107e3 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs @@ -4,11 +4,11 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs index 560c860..9a17c4a 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; @@ -21,25 +21,25 @@ public Four_Way_Sweep_With_Homing() For(4, i => new AISequence ( For(0, 7, j => - new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f) + new ShootArc(4, 0, 360, new ProjectileData { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f) ), new Shoot1(new ProjectileHoming { Size = Size.LARGE }), For(8, 15, j => - new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f) + new ShootArc(4, 0, 360, new ProjectileData { Target = Vector3.forward, AngleOffset = j * 6f, Size = Size.MEDIUM }).Wait(0.1f) ), new AOE_360() )), For(4, i => new AISequence( For(0, 5, j => - new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) + new ShootArc(4, 0, 360, new ProjectileData { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) ), new Shoot1(new ProjectileHoming { Size = Size.LARGE }), For(5, 10, j => - new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) + new ShootArc(4, 0, 360, new ProjectileData { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) ), new Shoot1(new ProjectileHoming { Size = Size.LARGE }), For(10, 15, j => - new ShootArc(4, 0, 360, new Projectile { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) + new ShootArc(4, 0, 360, new ProjectileData { Target = Vector3.forward, AngleOffset = j * -6f, Size = Size.MEDIUM }).Wait(0.1f) ), new AOE_360() )) diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs index 1effaa9..57368c7 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs index 8154d77..d5f64df 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs @@ -4,11 +4,11 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs index 507cf51..919cad0 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Slow_Circles.cs @@ -4,11 +4,9 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; -using Projectiles; -using static BossController; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { @@ -22,7 +20,7 @@ public class Jump_Rope_Slow_Circles : Move ); private static AISequence Line_Circle_Strafe_60 = new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360f)), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360f)), new Pause(0.1f), new Strafe(true, 30f, 50), new Pause(0.3f), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs index 133f84b..1616da9 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Random_200.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; @@ -21,15 +21,15 @@ public Random_200() Sequence = new AISequence( For(200, i => Either( Merge( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) + new Shoot1(new ProjectileData { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new ProjectileData { AngleOffset = Random.Range(0, 360f), Size = Size.SMALL, Speed = Speed.FAST }), + new Shoot1(new ProjectileData { AngleOffset = Random.Range(0, 360f), Size = Size.TINY, Speed = Speed.FAST }) ), Merge( - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) + new Shoot1(new ProjectileData { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }), + new Shoot1(new ProjectileData { AngleOffset = Random.Range(0, 360f), Size = Size.MEDIUM, Speed = Speed.MEDIUM }) ), - new Shoot1(new Projectile { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }), + new Shoot1(new ProjectileData { AngleOffset = Random.Range(0, 360f), Size = Size.LARGE, Speed = Speed.SLOW }), If( (int)i % 20 == 0, new Shoot1(ProjectileHoming.DEFAULT) @@ -37,7 +37,7 @@ public Random_200() If( (int)i % 40 == 0, new Shoot1( - new Projectile + new ProjectileData { Size = Size.MEDIUM, Speed = Speed.MEDIUM, diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs index a2d8b80..4fc0755 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs index 08f73dc..149db75 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_2_Waves_45.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; @@ -19,7 +19,7 @@ public Shoot_2_Waves_45() Difficulty = 4f; Sequence = new AISequence( new Teleport().Wait(0.25f), - new ShootArc(4, -45f, 45f, new Projectile { + new ShootArc(4, -45f, 45f, new ProjectileData { Size = Size.LARGE, Speed = Speed.MEDIUM_SLOW, MaxTime = 1f, diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs index c440173..4ad4f58 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_4_Waves_Behind.cs @@ -3,12 +3,10 @@ using UnityEngine; using AI; -using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static BossController; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { @@ -20,10 +18,10 @@ public Shoot_4_Waves_Behind() Difficulty = 5.5f; Sequence = new AISequence( new Teleport(CENTER).Wait(0.5f), - new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.MEDIUM_SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 220, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), - new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 200, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), - new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 160, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), - new Shoot1(new Projectile { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 140, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(5f) + new Shoot1(new ProjectileData { Size = Size.LARGE, Speed = Speed.MEDIUM_SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 220, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new ProjectileData { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 200, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new ProjectileData { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 160, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(0.5f), + new Shoot1(new ProjectileData { Size = Size.LARGE, Speed = Speed.SLOW, MaxTime = 2f, Target = SOUTH_FAR, AngleOffset = 140, OnDestroyTimeout = CallbackDictionary.SPAWN_WAVE }).Wait(5f) ); } } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs index 0e89e07..8a9120c 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs index c3f911c..4ebea1f 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Advanced.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; @@ -19,23 +19,23 @@ public Sweep_Back_And_Forth_Advanced() Sequence = new AISequence( new Teleport().Wait(0.25f), new PlayerLock(true), - For(-30, 80, 5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)), + For(-30, 80, 5, i => new Shoot1(new ProjectileData { AngleOffset = i }).Wait(0.01f)), For(80, -80, -5, i => Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + new Shoot1(new ProjectileData { AngleOffset = i }), + new Shoot1(new ProjectileData { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) ).Wait(0.02f) ), For(-80, 80, 5, i => Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.TINY, Speed = Speed.FAST }) + new Shoot1(new ProjectileData { AngleOffset = i }), + new Shoot1(new ProjectileData { AngleOffset = i, Size = Size.TINY, Speed = Speed.FAST }) ).Wait(0.02f) ), For(80, -30, -5, i => Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + new Shoot1(new ProjectileData { AngleOffset = i }), + new Shoot1(new ProjectileData { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) ).Wait(0.02f) ), new Pause(0.75f), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs index da1ad3f..2abf565 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Back_And_Forth_Medium.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; @@ -19,18 +19,18 @@ public Sweep_Back_And_Forth_Medium() Sequence = new AISequence( new Teleport().Wait(0.25f), new PlayerLock(true), - For(-30, 80, 5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)), + For(-30, 80, 5, i => new Shoot1(new ProjectileData { AngleOffset = i }).Wait(0.01f)), For(80, -80, -5, i => Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + new Shoot1(new ProjectileData { AngleOffset = i }), + new Shoot1(new ProjectileData { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) ).Wait(0.02f) ), - For(-80, 80, 5, i => new Shoot1(new Projectile { AngleOffset = i }).Wait(0.01f)), + For(-80, 80, 5, i => new Shoot1(new ProjectileData { AngleOffset = i }).Wait(0.01f)), For(80, -80, -5, i => Merge( - new Shoot1(new Projectile { AngleOffset = i }), - new Shoot1(new Projectile { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) + new Shoot1(new ProjectileData { AngleOffset = i }), + new Shoot1(new ProjectileData { AngleOffset = i, Size = Size.MEDIUM, Speed = Speed.SLOW }) ).Wait(0.02f) ), new Pause(0.75f), diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs index be10c93..74bb7ff 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs index ebe960a..c79f727 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Sweep_Wall_Back_And_Forth.cs @@ -4,7 +4,7 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; using static BossController; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs index 266cd93..e9f7c20 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs @@ -4,10 +4,9 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; -using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { @@ -20,7 +19,7 @@ public Slow_Wave_Circle() Description = "Fires a medium-slow AOE, and then strafes 60 degrees clockwise."; Difficulty = 2f; Sequence = new AISequence( - new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), + new ShootAOE(new AOEData { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), new Strafe(true, 60f, 50).Wait(0.5f) ); } diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs index 1ef9ad6..552b43b 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse.cs @@ -4,10 +4,10 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs index 04ee62a..606ef88 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Faster.cs @@ -4,10 +4,10 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs index af1b3f8..2e6e4b1 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target.cs @@ -4,10 +4,10 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs index efc71e7..6d97909 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Reverse_Target_Homing.cs @@ -4,10 +4,10 @@ using AI; using AOEs; -using BossCore; +using Constants; using Moves.Basic; using Projectiles; -using static World.Arena; +using static Constants.Positions; namespace Moves.Unsorted { diff --git a/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs index d5b524c..c2168a7 100644 --- a/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs +++ b/Assets/Scripts/Boss Core/AI/Phases/Phase_Unsorted.cs @@ -19,14 +19,28 @@ public Phase_Unsorted() { if (type.Namespace != null && type.Namespace.Equals("Moves.Unsorted")) { + if (System.Attribute.GetCustomAttribute(type, typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute)) != null) + { + Debug.Log("Skipping compiler type: " + type); + continue; + } + try { - Debug.Log("Adding type: " + type); - AddSequence(10, System.Activator.CreateInstance(type) as AISequence); + Debug.Log("Trying to add type: " + type); + object rawObj = System.Activator.CreateInstance(type); + Debug.Log("Instantiated type parent type: " + rawObj.GetType().BaseType); + AISequence instantiatedSequence = (AISequence) rawObj; + if (instantiatedSequence == null) + { + Debug.LogError("Instantiation failure! Got back null."); + } + AddSequence(10, instantiatedSequence); } - catch (System.Exception) + catch (System.Exception e) { - Debug.Log("Failed to add type: " + type); + Debug.LogError("Failed to add type: " + type); + Debug.LogError(e); } } } diff --git a/Assets/Scripts/Boss Core/AOE/AOE.cs b/Assets/Scripts/Boss Core/AOE/AOE.cs index d35adca..949ec52 100644 --- a/Assets/Scripts/Boss Core/AOE/AOE.cs +++ b/Assets/Scripts/Boss Core/AOE/AOE.cs @@ -1,249 +1,193 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; + using CombatCore; -using BossCore; -using System.Runtime.CompilerServices; namespace AOEs -{ - public delegate void AOECallbackDelegate(AOEComponent self); - - public class AOE - { - - // This is a hack. It works, but the compiler will give a warning about hiding - // the outer method. There's probably a better way, but this gives nice syntax. -// public class RegionObj { -//#pragma warning disable RECS0146 // Member hides static member from outer class -// public RegionObj On(float from, float to) -// { -//#pragma warning restore RECS0146 // Member hides static member from outer class - // // Do the actual math here - // return new RegionObj(); - // } - //} +{ + public class AOE : MonoBehaviour + { + // A reference containing the data we'll be using. + public AOEData data; - //public static RegionObj On(float from, float to) { - // // Do the actual math here - // return new RegionObj(); - //} + private Vector3 Start; + private Vector3 Target; - // How many sections are in the AOE attack mesh - public const int NUM_SECTIONS = 360 / 5; - - // The number of degrees subtended by an AOE region. - public const float THETA_STEP = 360f / NUM_SECTIONS; + // Initialize values to the latest ones- start and target, if null, should + // be set to the live boss/player positions. + public void Awake() + { + Start = data.Start.GetValue(); + Target = data.Target.GetValue(); - // The height at which we render the AOE, so it doesn't clip the ground. - public const float HEIGHT = 0.5f; + // Remove any height from the start and target vectors + Vector3 topDownSpawn = new Vector3(Start.x, 0, Start.z); + Vector3 topDownTarget = new Vector3(Target.x, 0, Target.z); - // Every AOE has the same material, for now. We cache it here. - public static Material AOE_MATERIAL; - - // internal. Tracks what triangles are on or off in the mesh - public bool[] Regions { get; protected set; } = new bool[NUM_SECTIONS]; - - // Origin of the attack - public ProxyVector3 Start { get; set; } = AI.AISequence.BOSS_POSITION; - - // Where the attack is facing (the 0 line is defined by start-target) - public ProxyVector3 Target { get; set; } = AI.AISequence.DELAYED_PLAYER_POSITION; - - // internal. How much this attack is rotated from the north line. - public float InternalRotation { get; set; } = 0f; - - // How much this attack is rotated from the center line. - public float AngleOffset { get; set; } = 0f; - - // The scale of the inside ring, from 0-1 relative to the outside ring. - // This value has no effect if "fixedWidth" is set; it will impact the - // profile of the attack if "innerExpansionSpeed" is set and different - // from "expansionSpeed". - public float InnerScale { get; set; } = 0.95f; - - // Current scale. This is exactly equal to the world unit radius of the attack. - public float Scale { get; set; } = 1f; - - // How fast the inner ring expands - private Speed _innerSpeed = Speed.MEDIUM; - public Speed InnerSpeed - { - get + float degrees = Vector3.Angle(Vector3.forward, topDownTarget - topDownSpawn); + if (topDownTarget.x < topDownSpawn.x) { - return _innerSpeed; - } - - set - { - if (Mathf.Abs(FixedWidth) < 0.01f) - { - _innerSpeed = value; - _outerSpeed = value; - } - } - } - - // How fast the outer ring expands - private Speed _outerSpeed = Speed.MEDIUM; - public Speed OuterSpeed { - get { - return _outerSpeed; + degrees = 360 - degrees; } + data.InternalRotation = degrees + data.AngleOffset; - set { - if (Mathf.Abs(FixedWidth) < 0.01f) { - _innerSpeed = value; - _outerSpeed = value; - } - } - } - - // Does nothing if 0. Else, represents how many units there are between - // the inner and outer ring at all times. - // Setting fixed width and then speed will change both at once. - // TODO fix logic to what it used to be. - public float FixedWidth { get; set; } = 0f; - - // internal. Time since the move started - public float CurrentTime { get; set; } = 0f; - - // The maximum lifetime of this attack - public float MaxTime { get; set; } = 100f; - - // How much damage this attack does. - public float Damage { get; set; } = 5f; - - // How fast this guy rotates. - public float RotationSpeed { get; set; } = 0f; - - // Whether or not this AOE is destroyed when it goes out of bounds. - public bool shouldDestroyOnOutOfBounds; - - #region callbacks - - public void ShouldDestroyOnOutOfBounds(bool to) { - this.shouldDestroyOnOutOfBounds = to; + // Compute the final rotation + Quaternion rotation = Quaternion.AngleAxis(degrees + data.AngleOffset, Vector3.up); + gameObject.transform.rotation = rotation; + RecomputeMeshHole(); + + // We set the scale to 0 so that timing based attacks work properly. + // Otherwise the scale is 1, because computing the mesh required it. + // If the scale is not 1, then it's most likely a clone- so we keep the scale as-is. + if (Mathf.Approximately(data.Scale, 1f)) + { + data.Scale = 0; + transform.localScale = data.Scale * Vector3.one; + } } - - public AOECallbackDelegate OnDestroyOutOfBounds { get; set; } = AOECallbackDictionary.NOTHING; - public AOECallbackDelegate OnDestroyTimeout { get; set; } = AOECallbackDictionary.NOTHING; - #endregion - - public AOE() + public void Update() { - for (int i = 0; i < Regions.Length; i++) + // Timeout + data.CurrentTime += Time.deltaTime; + if (data.CurrentTime > data.MaxTime) { - Regions[i] = false; + data.OnDestroyTimeout(this); + Destroy(this.gameObject); } - this.shouldDestroyOnOutOfBounds = true; - } - public AOE On(float from, float to) - { - if (to < from) + // Hit the arena walls + // should be "innerscale"- what about AOE attacks without hole in center? + if (data.Scale > GameManager.Arena.RadiusInWorldUnits + Start.magnitude) { - return On(to, from); + data.OnDestroyOutOfBounds(this); + if (data.shouldDestroyOnOutOfBounds) + { + Destroy(this.gameObject); + } } - if (from < 0 && to > 0) - { - return On(from + 360, 360).On(0, to); - } + data.Scale += (float)data.OuterSpeed * Time.deltaTime; + gameObject.transform.localScale = data.Scale * Vector3.one; - from = from < 0 ? from + 360 : from; - to = to < 0 ? to + 360 : to; + // Rotate it, if needed. + data.InternalRotation += data.RotationSpeed * Time.deltaTime; + gameObject.transform.rotation = Quaternion.AngleAxis(data.InternalRotation, Vector3.up); + //gameObject.transform.Rotate(Vector3.up, data.rotationSpeed * Time.deltaTime); - for (int i = 0; i < NUM_SECTIONS; i++) + // If the inner expansion speed is set, we must recompute the mesh- except if it's equal + // to the outer expansion speed, which is the same as just scaling. Then we don't recompute. + if (Mathf.Abs((float)data.InnerSpeed) > 0.01f && + Mathf.Abs((float)data.OuterSpeed) > 0.01f && + !Mathf.Approximately((float)data.OuterSpeed, (float)data.InnerSpeed)) { - float angle = (i + 0.5f) * THETA_STEP; - if (angle >= from && angle <= to) - { - Regions[i] = true; - } + float ideal = ((float)data.InnerSpeed / (float)data.OuterSpeed); + data.InnerScale = data.InnerScale - ((data.InnerScale - ideal) * Time.deltaTime); + + RecomputeMeshHole(); + return; } - return this; - } - public AOE Off(float from, float to) - { - if (to < from) + // If we have a fixed width to maintain, we must recompute. + if (Mathf.Abs(data.FixedWidth) > 0.01f && Mathf.Abs(data.Scale) > 0.01f) { - return Off(to, from); + data.InnerScale = (data.Scale < data.FixedWidth) ? 0f : (data.Scale - data.FixedWidth) / data.Scale; + + RecomputeMeshHole(); + return; } + } - if (from < 0 && to > 0) + /* + * Called on collision with player. Triggers damage. + */ + public virtual void OnTriggerStay(Collider other) + { + GameObject otherObject = other.gameObject; + Entity otherEntity = otherObject.GetComponent(); + if (otherEntity != null && !otherEntity.IsInvincible() && otherEntity.GetFaction() != Entity.Faction.enemy) { - return Off(from + 360, 360).Off(0, to); - } + // Position relative to us; not absolute + Vector3 playerPositionFlat = new Vector3(other.transform.position.x - transform.position.x, 0f, other.transform.position.z - transform.position.z); - from = from < 0 ? from + 360 : from; - to = to < 0 ? to + 360 : to; + // Inside of the safe circle + if (playerPositionFlat.magnitude < data.InnerScale * data.Scale) + { + return; + } - for (int i = 0; i < NUM_SECTIONS; i++) - { - float angle = (i + 0.5f) * THETA_STEP; - if (angle >= from && angle <= to) + // Outside the AOE attack (should be impossible) + if (playerPositionFlat.magnitude > data.Scale) { - Regions[i] = false; + return; } - } - return this; - } - // Stops this AOE from moving, until otherwise specified. - public AOE Freeze() - { - this.InnerSpeed = Speed.FROZEN; - this.OuterSpeed = Speed.FROZEN; - this.RotationSpeed = 0f; + // Get the section the player is colliding with + float degrees = Vector3.Angle(Vector3.forward, playerPositionFlat); + if (playerPositionFlat.x < 0) + { + degrees = 360 - degrees; + } + degrees -= data.InternalRotation; + degrees = Mathf.Repeat(degrees, 360f); - return this; - } + int section = (int)(degrees / AOEData.THETA_STEP); - public AOE Clone() - { - return MemberwiseClone() as AOE; + if (data.Regions[section]) + { + // Note: we pass in a null entity; callbacks might break + Entity.DamageEntity(otherEntity, null, data.Damage); + } + } } - public AOEComponent Create() + // Makes a mesh, possibly with a hole if variable size in the middle. + private void RecomputeMeshHole() { - // Set up the gameobject - GameObject obj = new GameObject(); - obj.transform.position = Start.GetValue(); // TODO move this into initialization of AOEComponent - obj.layer = LayerMask.NameToLayer("AOE"); - obj.name = "AOE"; - obj.SetActive(false); // hack so we can assign variables on init - - MeshFilter meshFilter = obj.AddComponent(); - meshFilter.mesh = new Mesh(); - - MeshRenderer meshRenderer = obj.AddComponent(); - if (AOE_MATERIAL == null) + MeshFilter meshFilter = GetComponent(); + + List verticesList = new List(); + for (int i = 0; i < AOEData.NUM_SECTIONS; i++) { - AOE_MATERIAL = new Material(Resources.Load("Art/Materials/AOE")); + if (!data.Regions[i]) + { + continue; + } + + float theta1 = Mathf.Deg2Rad * (90f + (i * AOEData.THETA_STEP)); + float theta2 = Mathf.Deg2Rad * (90f + ((i + 1) * AOEData.THETA_STEP)); + + verticesList.Add(new Vector3(data.InnerScale * Mathf.Cos(theta1), 0f, data.InnerScale * Mathf.Sin(theta1))); + verticesList.Add(new Vector3(Mathf.Cos(theta1), 0f, Mathf.Sin(theta1))); + + verticesList.Add(new Vector3(data.InnerScale * Mathf.Cos(theta2), 0f, data.InnerScale * Mathf.Sin(theta2))); + verticesList.Add(new Vector3(Mathf.Cos(theta2), 0f, Mathf.Sin(theta2))); } - meshRenderer.material = AOE_MATERIAL; + Vector3[] vertices = verticesList.ToArray(); - CapsuleCollider collider = obj.AddComponent(); - collider.center = Vector3.zero; - collider.radius = 1f; - collider.isTrigger = true; + int[] triangles = new int[vertices.Length / 4 * 6]; + for (int i = 0; i < vertices.Length / 4; i++) + { + triangles[(6 * i) + 0] = (4 * i) + 0; + triangles[(6 * i) + 1] = (4 * i) + 2; + triangles[(6 * i) + 2] = (4 * i) + 1; - // Add the component with this as its data reference - // We specifically make a copy, so that we can use this as a template. - AOEComponent aoe = obj.AddComponent(); - aoe.data = Clone(); + triangles[(6 * i) + 3] = (4 * i) + 2; + triangles[(6 * i) + 4] = (4 * i) + 3; + triangles[(6 * i) + 5] = (4 * i) + 1; + } - obj.SetActive(true); - return aoe; - } - - public override string ToString() - { - return "AOE"; + // Unity complains about assigning a new vertices array to a mesh + if (meshFilter.sharedMesh.vertices.Length != vertices.Length) + { + meshFilter.sharedMesh.Clear(); + } + meshFilter.sharedMesh.vertices = vertices; + meshFilter.sharedMesh.triangles = triangles; + meshFilter.sharedMesh.RecalculateNormals(); + transform.position = new Vector3(Start.x, AOEData.HEIGHT, Start.z); } } -} +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AOE/AOECallbackDictionary.cs b/Assets/Scripts/Boss Core/AOE/AOECallbackDictionary.cs index 829ede4..bbe0549 100644 --- a/Assets/Scripts/Boss Core/AOE/AOECallbackDictionary.cs +++ b/Assets/Scripts/Boss Core/AOE/AOECallbackDictionary.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using UnityEngine; -using static AOEs.AOE; +using static AOEs.AOEData; namespace AOEs { diff --git a/Assets/Scripts/Boss Core/AOE/AOEComponent.cs b/Assets/Scripts/Boss Core/AOE/AOEComponent.cs deleted file mode 100644 index 0d17e8e..0000000 --- a/Assets/Scripts/Boss Core/AOE/AOEComponent.cs +++ /dev/null @@ -1,193 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using CombatCore; - -namespace AOEs -{ - public class AOEComponent : MonoBehaviour - { - // A reference containing the data we'll be using. - public AOE data; - - private Vector3 Start; - private Vector3 Target; - - // Initialize values to the latest ones- start and target, if null, should - // be set to the live boss/player positions. - public void Awake() - { - Start = data.Start.GetValue(); - Target = data.Target.GetValue(); - - // Remove any height from the start and target vectors - Vector3 topDownSpawn = new Vector3(Start.x, 0, Start.z); - Vector3 topDownTarget = new Vector3(Target.x, 0, Target.z); - - float degrees = Vector3.Angle(Vector3.forward, topDownTarget - topDownSpawn); - if (topDownTarget.x < topDownSpawn.x) - { - degrees = 360 - degrees; - } - data.InternalRotation = degrees + data.AngleOffset; - - // Compute the final rotation - Quaternion rotation = Quaternion.AngleAxis(degrees + data.AngleOffset, Vector3.up); - gameObject.transform.rotation = rotation; - RecomputeMeshHole(); - - // We set the scale to 0 so that timing based attacks work properly. - // Otherwise the scale is 1, because computing the mesh required it. - // If the scale is not 1, then it's most likely a clone- so we keep the scale as-is. - if (Mathf.Approximately(data.Scale, 1f)) - { - data.Scale = 0; - transform.localScale = data.Scale * Vector3.one; - } - } - - - public void Update() - { - // Timeout - data.CurrentTime += Time.deltaTime; - if (data.CurrentTime > data.MaxTime) - { - data.OnDestroyTimeout(this); - Destroy(this.gameObject); - } - - // Hit the arena walls - // should be "innerscale"- what about AOE attacks without hole in center? - if (data.Scale > GameManager.Arena.RadiusInWorldUnits + Start.magnitude) - { - data.OnDestroyOutOfBounds(this); - if (data.shouldDestroyOnOutOfBounds) - { - Destroy(this.gameObject); - } - } - - data.Scale += (float)data.OuterSpeed * Time.deltaTime; - gameObject.transform.localScale = data.Scale * Vector3.one; - - // Rotate it, if needed. - data.InternalRotation += data.RotationSpeed * Time.deltaTime; - gameObject.transform.rotation = Quaternion.AngleAxis(data.InternalRotation, Vector3.up); - //gameObject.transform.Rotate(Vector3.up, data.rotationSpeed * Time.deltaTime); - - // If the inner expansion speed is set, we must recompute the mesh- except if it's equal - // to the outer expansion speed, which is the same as just scaling. Then we don't recompute. - if (Mathf.Abs((float)data.InnerSpeed) > 0.01f && - Mathf.Abs((float)data.OuterSpeed) > 0.01f && - !Mathf.Approximately((float)data.OuterSpeed, (float)data.InnerSpeed)) - { - float ideal = ((float)data.InnerSpeed / (float)data.OuterSpeed); - data.InnerScale = data.InnerScale - ((data.InnerScale - ideal) * Time.deltaTime); - - RecomputeMeshHole(); - return; - } - - // If we have a fixed width to maintain, we must recompute. - if (Mathf.Abs(data.FixedWidth) > 0.01f && Mathf.Abs(data.Scale) > 0.01f) - { - data.InnerScale = (data.Scale < data.FixedWidth) ? 0f : (data.Scale - data.FixedWidth) / data.Scale; - - RecomputeMeshHole(); - return; - } - } - - /* - * Called on collision with player. Triggers damage. - */ - public virtual void OnTriggerStay(Collider other) - { - GameObject otherObject = other.gameObject; - Entity otherEntity = otherObject.GetComponent(); - if (otherEntity != null && !otherEntity.IsInvincible() && otherEntity.GetFaction() != Entity.Faction.enemy) - { - // Position relative to us; not absolute - Vector3 playerPositionFlat = new Vector3(other.transform.position.x - transform.position.x, 0f, other.transform.position.z - transform.position.z); - - // Inside of the safe circle - if (playerPositionFlat.magnitude < data.InnerScale * data.Scale) - { - return; - } - - // Outside the AOE attack (should be impossible) - if (playerPositionFlat.magnitude > data.Scale) - { - return; - } - - // Get the section the player is colliding with - float degrees = Vector3.Angle(Vector3.forward, playerPositionFlat); - if (playerPositionFlat.x < 0) - { - degrees = 360 - degrees; - } - degrees -= data.InternalRotation; - degrees = Mathf.Repeat(degrees, 360f); - - int section = (int)(degrees / AOE.THETA_STEP); - - if (data.Regions[section]) - { - // Note: we pass in a null entity; callbacks might break - Entity.DamageEntity(otherEntity, null, data.Damage); - } - } - } - - // Makes a mesh, possibly with a hole if variable size in the middle. - private void RecomputeMeshHole() - { - MeshFilter meshFilter = GetComponent(); - - List verticesList = new List(); - for (int i = 0; i < AOE.NUM_SECTIONS; i++) - { - if (!data.Regions[i]) - { - continue; - } - - float theta1 = Mathf.Deg2Rad * (90f + (i * AOE.THETA_STEP)); - float theta2 = Mathf.Deg2Rad * (90f + ((i + 1) * AOE.THETA_STEP)); - - verticesList.Add(new Vector3(data.InnerScale * Mathf.Cos(theta1), 0f, data.InnerScale * Mathf.Sin(theta1))); - verticesList.Add(new Vector3(Mathf.Cos(theta1), 0f, Mathf.Sin(theta1))); - - verticesList.Add(new Vector3(data.InnerScale * Mathf.Cos(theta2), 0f, data.InnerScale * Mathf.Sin(theta2))); - verticesList.Add(new Vector3(Mathf.Cos(theta2), 0f, Mathf.Sin(theta2))); - } - Vector3[] vertices = verticesList.ToArray(); - - int[] triangles = new int[vertices.Length / 4 * 6]; - for (int i = 0; i < vertices.Length / 4; i++) - { - triangles[(6 * i) + 0] = (4 * i) + 0; - triangles[(6 * i) + 1] = (4 * i) + 2; - triangles[(6 * i) + 2] = (4 * i) + 1; - - triangles[(6 * i) + 3] = (4 * i) + 2; - triangles[(6 * i) + 4] = (4 * i) + 3; - triangles[(6 * i) + 5] = (4 * i) + 1; - } - - // Unity complains about assigning a new vertices array to a mesh - if (meshFilter.sharedMesh.vertices.Length != vertices.Length) - { - meshFilter.sharedMesh.Clear(); - } - meshFilter.sharedMesh.vertices = vertices; - meshFilter.sharedMesh.triangles = triangles; - meshFilter.sharedMesh.RecalculateNormals(); - transform.position = new Vector3(Start.x, AOE.HEIGHT, Start.z); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AOE/AOEData.cs b/Assets/Scripts/Boss Core/AOE/AOEData.cs new file mode 100644 index 0000000..f3deeda --- /dev/null +++ b/Assets/Scripts/Boss Core/AOE/AOEData.cs @@ -0,0 +1,248 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using Constants; + +namespace AOEs +{ + public delegate void AOECallbackDelegate(AOE self); + + public class AOEData + { + + // This is a hack. It works, but the compiler will give a warning about hiding + // the outer method. There's probably a better way, but this gives nice syntax. +// public class RegionObj { +//#pragma warning disable RECS0146 // Member hides static member from outer class +// public RegionObj On(float from, float to) +// { +//#pragma warning restore RECS0146 // Member hides static member from outer class + // // Do the actual math here + // return new RegionObj(); + // } + //} + + //public static RegionObj On(float from, float to) { + // // Do the actual math here + // return new RegionObj(); + //} + + // How many sections are in the AOE attack mesh + public const int NUM_SECTIONS = 360 / 5; + + // The number of degrees subtended by an AOE region. + public const float THETA_STEP = 360f / NUM_SECTIONS; + + // The height at which we render the AOE, so it doesn't clip the ground. + public const float HEIGHT = 0.5f; + + // Every AOE has the same material, for now. We cache it here. + public static Material AOE_MATERIAL; + + // internal. Tracks what triangles are on or off in the mesh + public bool[] Regions { get; protected set; } = new bool[NUM_SECTIONS]; + + // Origin of the attack + public ProxyVector3 Start { get; set; } = Positions.BOSS_POSITION; + + // Where the attack is facing (the 0 line is defined by start-target) + public ProxyVector3 Target { get; set; } = Positions.DELAYED_PLAYER_POSITION; + + // internal. How much this attack is rotated from the north line. + public float InternalRotation { get; set; } = 0f; + + // How much this attack is rotated from the center line. + public float AngleOffset { get; set; } = 0f; + + // The scale of the inside ring, from 0-1 relative to the outside ring. + // This value has no effect if "fixedWidth" is set; it will impact the + // profile of the attack if "innerExpansionSpeed" is set and different + // from "expansionSpeed". + public float InnerScale { get; set; } = 0.95f; + + // Current scale. This is exactly equal to the world unit radius of the attack. + public float Scale { get; set; } = 1f; + + // How fast the inner ring expands + private Speed _innerSpeed = Speed.MEDIUM; + public Speed InnerSpeed + { + get + { + return _innerSpeed; + } + + set + { + if (Mathf.Abs(FixedWidth) < 0.01f) + { + _innerSpeed = value; + _outerSpeed = value; + } + } + } + + // How fast the outer ring expands + private Speed _outerSpeed = Speed.MEDIUM; + public Speed OuterSpeed { + get { + return _outerSpeed; + } + + set { + if (Mathf.Abs(FixedWidth) < 0.01f) { + _innerSpeed = value; + _outerSpeed = value; + } + } + } + + // Does nothing if 0. Else, represents how many units there are between + // the inner and outer ring at all times. + // Setting fixed width and then speed will change both at once. + // TODO fix logic to what it used to be. + public float FixedWidth { get; set; } = 0f; + + // internal. Time since the move started + public float CurrentTime { get; set; } = 0f; + + // The maximum lifetime of this attack + public float MaxTime { get; set; } = 100f; + + // How much damage this attack does. + public float Damage { get; set; } = 5f; + + // How fast this guy rotates. + public float RotationSpeed { get; set; } = 0f; + + // Whether or not this AOE is destroyed when it goes out of bounds. + public bool shouldDestroyOnOutOfBounds; + + #region callbacks + + public void ShouldDestroyOnOutOfBounds(bool to) { + this.shouldDestroyOnOutOfBounds = to; + } + + public AOECallbackDelegate OnDestroyOutOfBounds { get; set; } = AOECallbackDictionary.NOTHING; + + public AOECallbackDelegate OnDestroyTimeout { get; set; } = AOECallbackDictionary.NOTHING; + + #endregion + + public AOEData() + { + for (int i = 0; i < Regions.Length; i++) + { + Regions[i] = false; + } + this.shouldDestroyOnOutOfBounds = true; + } + + public AOEData On(float from, float to) + { + if (to < from) + { + return On(to, from); + } + + if (from < 0 && to > 0) + { + return On(from + 360, 360).On(0, to); + } + + from = from < 0 ? from + 360 : from; + to = to < 0 ? to + 360 : to; + + for (int i = 0; i < NUM_SECTIONS; i++) + { + float angle = (i + 0.5f) * THETA_STEP; + if (angle >= from && angle <= to) + { + Regions[i] = true; + } + } + return this; + } + + public AOEData Off(float from, float to) + { + if (to < from) + { + return Off(to, from); + } + + if (from < 0 && to > 0) + { + return Off(from + 360, 360).Off(0, to); + } + + from = from < 0 ? from + 360 : from; + to = to < 0 ? to + 360 : to; + + for (int i = 0; i < NUM_SECTIONS; i++) + { + float angle = (i + 0.5f) * THETA_STEP; + if (angle >= from && angle <= to) + { + Regions[i] = false; + } + } + return this; + } + + // Stops this AOE from moving, until otherwise specified. + public AOEData Freeze() + { + this.InnerSpeed = Speed.FROZEN; + this.OuterSpeed = Speed.FROZEN; + this.RotationSpeed = 0f; + + return this; + } + + public AOEData Clone() + { + return MemberwiseClone() as AOEData; + } + + public AOE Create() + { + // Set up the gameobject + GameObject obj = new GameObject(); + obj.transform.position = Start.GetValue(); // TODO move this into initialization of AOEComponent + obj.layer = LayerMask.NameToLayer("AOE"); + obj.name = "AOE"; + obj.SetActive(false); // hack so we can assign variables on init + + MeshFilter meshFilter = obj.AddComponent(); + meshFilter.mesh = new Mesh(); + + MeshRenderer meshRenderer = obj.AddComponent(); + if (AOE_MATERIAL == null) + { + AOE_MATERIAL = new Material(Resources.Load("Art/Materials/AOE")); + } + meshRenderer.material = AOE_MATERIAL; + + CapsuleCollider collider = obj.AddComponent(); + collider.center = Vector3.zero; + collider.radius = 1f; + collider.isTrigger = true; + + // Add the component with this as its data reference + // We specifically make a copy, so that we can use this as a template. + AOE aoe = obj.AddComponent(); + aoe.data = Clone(); + + obj.SetActive(true); + return aoe; + } + + public override string ToString() + { + return "AOE"; + } + } +} diff --git a/Assets/Scripts/Boss Core/Projectile/Type.cs.meta b/Assets/Scripts/Boss Core/AOE/AOEData.cs.meta similarity index 83% rename from Assets/Scripts/Boss Core/Projectile/Type.cs.meta rename to Assets/Scripts/Boss Core/AOE/AOEData.cs.meta index 96103b1..1858372 100644 --- a/Assets/Scripts/Boss Core/Projectile/Type.cs.meta +++ b/Assets/Scripts/Boss Core/AOE/AOEData.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ceaf1095298de4a2d9e86e91fc1e6e87 +guid: a3d58942f22b74be3ae4f25612eb761f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Boss Core/BossController.cs b/Assets/Scripts/Boss Core/BossController.cs index 8c891fc..d7d06b9 100644 --- a/Assets/Scripts/Boss Core/BossController.cs +++ b/Assets/Scripts/Boss Core/BossController.cs @@ -4,8 +4,8 @@ using UnityEngine.Profiling; -using AI; - +using AI; + public class BossController : MonoBehaviour { [Tooltip("If enabled, reduces delays between attacks and increases base movement speed.")] @@ -25,7 +25,9 @@ public class BossController : MonoBehaviour // Event queue variables. This is how we schedule our attacks. private Queue queuedSequences; private bool paused; - private bool running = true; + private bool running = true; + + private System.Diagnostics.Stopwatch stopWatch; #region Debugging code that should be refactored soon™ // Debug code. Used to set the routine from the inspector rather than changing code. @@ -48,6 +50,7 @@ void Awake() self = GetComponent(); } queuedSequences = new Queue(); + stopWatch = new System.Diagnostics.Stopwatch(); } // Use this for initialization @@ -103,7 +106,7 @@ public void NextPhase() if (!Chill) { Add(new Moves.Basic.Invincible(true)); - Add(new Moves.Basic.Teleport(World.Arena.CENTER).Wait(3f)); + Add(new Moves.Basic.Teleport(Constants.Positions.CENTER).Wait(3f)); Add(new Moves.Basic.Invincible(false)); } } @@ -131,7 +134,7 @@ private void Add(AISequence sequence) { queuedSequences.Enqueue(sequence); } else { - Debug.LogError("Refusing to add invalid sequence: " + sequence.Name); + Debug.LogError("Refusing to add invalid sequence: " + sequence == null ? "null" : sequence.Name); } } @@ -190,21 +193,38 @@ private IEnumerator Execute(AISequence sequence) { // If the event queue is paused, then wait until it's unpaused. while (paused) - { - yield return new WaitForSecondsRealtime(0.05f); - } + { + yield return new WaitForSecondsRealtime(0.05f); + } + stopWatch.Reset(); + stopWatch.Start(); sequence.Events[i].action?.Invoke(); + stopWatch.Stop(); + + long elapsedMillis = stopWatch.ElapsedMilliseconds; + float elapsedSeconds = stopWatch.ElapsedMilliseconds / 1000.0f; + if (elapsedMillis > 0) + { + Debug.Log("Elapsed time for execution: " + elapsedSeconds); + } // TODO reduce the wait time if the above invocation takes too long - yield return new WaitForSecondsRealtime(sequence.Events[i].duration); - } - } - else - { - AISequence[] children = sequence.Children(); - for (int i = 0; i < children.Length; i++) - { - yield return Execute(children[i]); + if (Time.timeScale > 0) + { + yield return new WaitForSecondsRealtime((sequence.Events[i].duration / Time.timeScale) - elapsedSeconds); + } + else + { + Debug.LogError("Time scale was set to 0, but the game was not paused."); + } + } + } + else + { + AISequence[] children = sequence.Children(); + for (int i = 0; i < children.Length; i++) + { + yield return Execute(children[i]); } } } diff --git a/Assets/Scripts/Boss Core/Projectile/Projectile.cs b/Assets/Scripts/Boss Core/Projectile/Projectile.cs index 18da31b..a0b3df9 100644 --- a/Assets/Scripts/Boss Core/Projectile/Projectile.cs +++ b/Assets/Scripts/Boss Core/Projectile/Projectile.cs @@ -1,138 +1,196 @@ using System.Collections; using System.Collections.Generic; -using BossCore; -using CombatCore; using UnityEngine; -using UnityEngine.Profiling; - -namespace Projectiles -{ - //using ProjectileCallback = System.Linq.Expressions.Expression>; - using ProjectileCallbackExpression = System.Linq.Expressions.Expression; - - /* - * Used for handling events for Projectiles. Currently death events are supported. - */ - public delegate AI.AISequence ProjectileCallback(ProjectileComponent self); +using CombatCore; - //public System.Func ProjectileCallback2; +using UnityEngine.Profiling; - public class Projectile +namespace Projectiles { + public class Projectile : MonoBehaviour { - // Experimental. Static Projectiles that are commonly used (note: there don't tend to be duplicate projectiles) - public static Projectile DEFAULT = new Projectile(); - public static Projectile DEFAULT_LARGE_SLOW = new Projectile { Size = Size.LARGE, Speed = Speed.SLOW }; - public static Projectile DEFAULT_MEDIUM_MEDIUM = new Projectile { Size = Size.MEDIUM, Speed = Speed.MEDIUM }; - public static Projectile DEFAULT_SMALL_FAST = new Projectile { Size = Size.SMALL, Speed = Speed.FAST }; + // The data representing this component's specific appearance and behavior. + public ProjectileData data; - public virtual ProxyVector3 Start { get; set; } = AI.AISequence.BOSS_POSITION; - public virtual ProxyVector3 Target { get; set; } = AI.AISequence.DELAYED_PLAYER_POSITION; - public virtual float AngleOffset { get; set; } = 0f; + public Vector3 FixedStart; + public Vector3 FixedTarget; - public virtual Speed Speed { get; set; } = Speed.MEDIUM; - public virtual Size Size { get; set; } = Size.SMALL; + // Some cached GameObject values for increased performance. + private Transform trans; + private MeshRenderer rend; + public bool shouldUpdate = true; - public virtual float MaxTime { get; set; } = 10f; - public virtual float Damage { get; set; } = ((float)Size.SMALL + 0.5f) * 2f; + // Time is updated in the component rather than the Projectile for increased performance + public float currentTime; + private float maxTime; - public virtual Vector3 Velocity { get; set; } = Vector3.forward; + public static Material blueMaterial; + public static Material orangeMaterial; + public static Material orangeRedMaterial; - /* - * Called after MaxTime number of seconds have elapsed. - */ - public ProjectileCallbackExpression OnDestroyTimeout { get; set; } = CallbackDictionary.NOTHING; - - /* - * Called after object is destroyed due to hitting the arena. - */ - public ProjectileCallbackExpression OnDestroyOutOfBounds { get; set; } = CallbackDictionary.NOTHING; + public void Awake() + { + if (blueMaterial == null) + { + blueMaterial = Resources.Load("Art/Materials/BlueTransparent"); + orangeMaterial = Resources.Load("Art/Materials/OrangeTransparent"); + orangeRedMaterial = Resources.Load("Art/Materials/OrangeRedTransparent"); + } + + trans = transform; + rend = GetComponent(); + } - /* - * Called when the object hits the player - */ - public ProjectileCallbackExpression OnDestroyCollision { get; set; } = CallbackDictionary.NOTHING; - - /// - /// This method is called at the end of every Update() call. When overridden, - /// this can be used to specify custom movement. - /// - /// The ProjectileComponent of this active GameObject. - public virtual void CustomUpdate(ProjectileComponent component) { } - - /// - /// Provides a custom material. By default, material is chosen based on the size - /// of the Projectile. - /// - /// The material to render with. - public virtual Material CustomMaterial() { return null; } - - /// - /// Clones this Projectile data object. - /// - /// This is mostly used internally by the ShootX() AISequences. If you try to - /// use Projectiles without first cloning them, then any time you reuse a reference, - /// you will be modifying the position of the same one every time. - /// - /// The clone. - public Projectile Clone() + public void Initialize() { - return MemberwiseClone() as Projectile; + // Resolve the proxy variables for start and target + // This also "locks" them so they don't keep updating. + FixedStart = data.Start.GetValue(); + FixedTarget = data.Target.GetValue(); + + // Sets size (and assigns default material, if none set) + gameObject.transform.localScale = SizeToScale(data.Size) * Vector3.one; + + Material material = data.CustomMaterial(); + if (material != null) + { + gameObject.GetComponent().material = material; + } + else + { + switch (data.Size) + { + case Size.TINY: + case Size.SMALL: + gameObject.GetComponent().material = blueMaterial; + break; + case Size.MEDIUM: + gameObject.GetComponent().material = orangeMaterial; + break; + case Size.LARGE: + case Size.HUGE: + gameObject.GetComponent().material = orangeRedMaterial; + break; + default: + gameObject.GetComponent().material = orangeMaterial; + break; + } + } + + // Computes the starting position, rotation, and velocity. + + // Remove any height from the start and target vectors + Vector3 topDownSpawn = new Vector3(FixedStart.x, 0, FixedStart.z); + Vector3 topDownTarget = new Vector3(FixedTarget.x, 0, FixedTarget.z); + + // Add in rotation offset from the angleOffset parameter + Quaternion offset = Quaternion.AngleAxis(data.AngleOffset, Vector3.up); + + // Compute the final rotation + // TODO update this to be rotation around the up axis to fix 180 degree bug + Quaternion rotation = offset * Quaternion.FromToRotation(Vector3.forward, topDownTarget - topDownSpawn); + + this.gameObject.transform.position = (Vector3)FixedStart; + this.gameObject.transform.rotation = rotation; + //this.gameObject.GetComponent().velocity = rotation * (Vector3.forward * (float)data.speed); + this.data.Velocity = rotation * (Vector3.forward * (float)data.Speed); + + shouldUpdate = true; + rend.enabled = true; + currentTime = 0; + maxTime = data.MaxTime; } - /// - /// Generates a new GameObject with a ProjectileComponent that references this - /// data object. - /// - /// The ProjectileComponent added to the new GameObject. - public ProjectileComponent Create() + /* + * A helper function that retuns the local scale of a projectile, given + * its size. This corresponds to its diameter. + */ + public static float SizeToScale(Size size) { - Profiler.BeginSample("Projectile.Create"); + return 1.0f + ((float)size / 2.0f); + } - Profiler.BeginSample("Projectile.Create GameObject Instantiate"); - // Create new GameObject - //GameObject newObj = GameObject.Instantiate(Resources.Load("Prefabs/Projectile")); - GameObject newObj = ProjectileManager.Checkout(); - Profiler.EndSample(); - - Profiler.BeginSample("Projectile.Create Component Instantiate"); - // Create a new Projectile component - ProjectileComponent projectile = newObj.GetComponent(); + void Update() + { + if (!shouldUpdate) + { + return; + } + Profiler.BeginSample("Projectile update loop"); + Profiler.BeginSample("Time check"); + //data.currentTime += Time.deltaTime; + currentTime += Time.deltaTime; + + if (currentTime >= maxTime) + { + GameManager.Boss.ExecuteAsync(data.OnDestroyTimeout.Compile().Invoke(this)); + //Destroy(this.gameObject); + Cleanup(); + } Profiler.EndSample(); - Profiler.BeginSample("Projectile.Create data Clone()"); - // Make a memberwise clone of the most derived type - projectile.data = Clone(); + Profiler.BeginSample("Movement"); + if (data.Speed != Constants.Speed.FROZEN) + { + trans.position += (Time.deltaTime * data.Velocity); + Profiler.EndSample(); + + Profiler.BeginSample("Bounds check"); + if (trans.position.sqrMagnitude > 5625f) + { + GameManager.Boss.ExecuteAsync(data.OnDestroyOutOfBounds.Compile().Invoke(this)); + Cleanup(); + + } + } Profiler.EndSample(); - Profiler.BeginSample("Projectile.Create data Initialize()"); - // Do the initialization (resolve null variables -> live variables) - projectile.Initialize(); + Profiler.BeginSample("Custom update"); + data.CustomUpdate(this); Profiler.EndSample(); - - Profiler.BeginSample("Projectile.Create data CustomCreate()"); - // Do any custom derived initialization logic (you can access the component now) - projectile.data.CustomCreate(projectile); Profiler.EndSample(); + } + private void Cleanup() { + Profiler.BeginSample("Cleanup"); + shouldUpdate = false; + rend.enabled = false; + ProjectileManager.Return(gameObject); Profiler.EndSample(); - return projectile; } /* - * Allows for custom instantiation once the component is created and can - * be referenced. Things like accessing the RigidBody are done here, as well - * as being able to reference live variables, like the updated target value - * (via component.data.target). + * Called on collision with player. Triggers collison death. */ - public virtual void CustomCreate(ProjectileComponent component) { } - - public override string ToString() + public virtual void OnTriggerEnter(Collider other) { - // TODO can make this more descriptive; i.e. if entity is boss and preTarget is null, then add "aimed at the player". - return "Projectile" - + " with speed " + Speed - + ", size " + Size; + Profiler.BeginSample("Projectile Collision"); + GameObject otherObject = other.gameObject; + Entity otherEntity = otherObject.GetComponentInParent(); + if (otherEntity != null) + { + // All projectiles break if they do damage + if (!otherEntity.IsInvincible() && otherEntity.GetFaction() != Entity.Faction.enemy) + { + //Debug.Log("Projectile collided, should apply damage"); + // Note that the entity causing the damage is null; callbacks may fail. + Entity.DamageEntity(otherEntity, null, data.Damage); + GameManager.Boss.ExecuteAsync(data.OnDestroyCollision.Compile().Invoke(this)); + //Destroy(this.gameObject); + Cleanup(); + } + } + Profiler.EndSample(); } + + /* + * Get the preferred material for this projectile. + * The standard only sets material based on size; if you want your projectile + * to have its own material, override this method and return it here. + * + * If you want to use the standard projectile logic, simply return null here. + */ + public virtual Material GetCustomMaterial() { return null; } } + } diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs index 597428d..21cd509 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using UnityEngine; -using BossCore; +using Constants; using static AI.AISequence; using Moves.Basic; @@ -16,7 +16,7 @@ public static class CallbackDictionary public static ProjectileCallbackExpression FREEZE = self => new Shoot1( - new Projectile + new ProjectileData { Start = self.transform.position, MaxTime = 5f, @@ -48,11 +48,11 @@ public static class CallbackDictionary // Spawns a wave at the death position. public static ProjectileCallbackExpression SPAWN_WAVE = self => - new ShootAOE(new AOEs.AOE { Start = self.transform.position }.On(0, 360f)); + new ShootAOE(new AOEs.AOEData { Start = self.transform.position }.On(0, 360f)); public static ProjectileCallbackExpression SPAWN_1_TOWARDS_PLAYER = self => new Shoot1( - new Projectile + new ProjectileData { Start = self.transform.position, MaxTime = self.data.MaxTime, @@ -73,7 +73,7 @@ public static class CallbackDictionary public static ProjectileCallbackExpression REVERSE = (self) => new Shoot1( - new Projectile + new ProjectileData { Start = self.transform.position, Target = self.data.Start, diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs deleted file mode 100644 index de3a15c..0000000 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs +++ /dev/null @@ -1,201 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using CombatCore; - -using UnityEngine.Profiling; - -namespace Projectiles { - public class ProjectileComponent : MonoBehaviour - { - // The data representing this component's specific appearance and behavior. - public Projectile data; - - public Vector3 Start; - public Vector3 Target; - - // Some cached GameObject values for increased performance. - private Transform trans; - private MeshRenderer rend; - public bool shouldUpdate = true; - - // Time is updated in the component rather than the Projectile for increased performance - public float currentTime; - private float maxTime; - - public static Material blueMaterial; - public static Material orangeMaterial; - public static Material orangeRedMaterial; - - public void Awake() - { - if (blueMaterial == null) - { - blueMaterial = Resources.Load("Art/Materials/BlueTransparent"); - orangeMaterial = Resources.Load("Art/Materials/OrangeTransparent"); - orangeRedMaterial = Resources.Load("Art/Materials/OrangeRedTransparent"); - } - - trans = transform; - rend = GetComponent(); - } - - public void Poke() { - rend.enabled = true; - shouldUpdate = true; - } - - public void Initialize() - { - // Resolve the proxy variables for start and target - // This also "locks" them so they don't keep updating. - Start = data.Start.GetValue(); - Target = data.Target.GetValue(); - - // Sets size (and assigns default material, if none set) - gameObject.transform.localScale = SizeToScale(data.Size) * Vector3.one; - - Material material = data.CustomMaterial(); - if (material != null) - { - gameObject.GetComponent().material = material; - } - else - { - switch (data.Size) - { - case Size.TINY: - case Size.SMALL: - gameObject.GetComponent().material = blueMaterial; - break; - case Size.MEDIUM: - gameObject.GetComponent().material = orangeMaterial; - break; - case Size.LARGE: - case Size.HUGE: - gameObject.GetComponent().material = orangeRedMaterial; - break; - default: - gameObject.GetComponent().material = orangeMaterial; - break; - } - } - - // Computes the starting position, rotation, and velocity. - - // Remove any height from the start and target vectors - Vector3 topDownSpawn = new Vector3(Start.x, 0, Start.z); - Vector3 topDownTarget = new Vector3(Target.x, 0, Target.z); - - // Add in rotation offset from the angleOffset parameter - Quaternion offset = Quaternion.AngleAxis(data.AngleOffset, Vector3.up); - - // Compute the final rotation - // TODO update this to be rotation around the up axis to fix 180 degree bug - Quaternion rotation = offset * Quaternion.FromToRotation(Vector3.forward, topDownTarget - topDownSpawn); - - this.gameObject.transform.position = (Vector3)Start; - this.gameObject.transform.rotation = rotation; - //this.gameObject.GetComponent().velocity = rotation * (Vector3.forward * (float)data.speed); - this.data.Velocity = rotation * (Vector3.forward * (float)data.Speed); - - shouldUpdate = true; - rend.enabled = true; - currentTime = 0; - maxTime = data.MaxTime; - } - - /* - * A helper function that retuns the local scale of a projectile, given - * its size. This corresponds to its diameter. - */ - public static float SizeToScale(Size size) - { - return 1.0f + ((float)size / 2.0f); - } - - void Update() - { - if (!shouldUpdate) - { - return; - } - Profiler.BeginSample("Projectile update loop"); - Profiler.BeginSample("Time check"); - //data.currentTime += Time.deltaTime; - currentTime += Time.deltaTime; - - if (currentTime >= maxTime) - { - GameManager.Boss.ExecuteAsync(data.OnDestroyTimeout.Compile().Invoke(this)); - //Destroy(this.gameObject); - Cleanup(); - } - Profiler.EndSample(); - - Profiler.BeginSample("Movement"); - if (data.Speed != BossCore.Speed.FROZEN) - { - trans.position += (Time.deltaTime * data.Velocity); - Profiler.EndSample(); - - Profiler.BeginSample("Bounds check"); - if (trans.position.sqrMagnitude > 5625f) - { - GameManager.Boss.ExecuteAsync(data.OnDestroyOutOfBounds.Compile().Invoke(this)); - Cleanup(); - - } - } - Profiler.EndSample(); - - Profiler.BeginSample("Custom update"); - data.CustomUpdate(this); - Profiler.EndSample(); - Profiler.EndSample(); - } - - private void Cleanup() { - Profiler.BeginSample("Cleanup"); - shouldUpdate = false; - rend.enabled = false; - ProjectileManager.Return(gameObject); - Profiler.EndSample(); - } - - /* - * Called on collision with player. Triggers collison death. - */ - public virtual void OnTriggerEnter(Collider other) - { - Profiler.BeginSample("Projectile Collision"); - GameObject otherObject = other.gameObject; - Entity otherEntity = otherObject.GetComponentInParent(); - if (otherEntity != null) - { - // All projectiles break if they do damage - if (!otherEntity.IsInvincible() && otherEntity.GetFaction() != Entity.Faction.enemy) - { - //Debug.Log("Projectile collided, should apply damage"); - // Note that the entity causing the damage is null; callbacks may fail. - Entity.DamageEntity(otherEntity, null, data.Damage); - GameManager.Boss.ExecuteAsync(data.OnDestroyCollision.Compile().Invoke(this)); - //Destroy(this.gameObject); - Cleanup(); - } - } - Profiler.EndSample(); - } - - /* - * Get the preferred material for this projectile. - * The standard only sets material based on size; if you want your projectile - * to have its own material, override this method and return it here. - * - * If you want to use the standard projectile logic, simply return null here. - */ - public virtual Material GetCustomMaterial() { return null; } - } - -} diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs.meta b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs.meta deleted file mode 100644 index 3031854..0000000 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 53649a2517c5d4c128e97a0a97c82839 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs index e8a144f..9b2572a 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs @@ -6,7 +6,7 @@ namespace Projectiles { - public class ProjectileCurving : Projectile + public class ProjectileCurving : ProjectileData { private readonly float curveAmount; @@ -27,7 +27,7 @@ public override Material CustomMaterial() return Resources.Load("Art/Materials/GreenTransparent"); } - public override void CustomUpdate(ProjectileComponent component) + public override void CustomUpdate(Projectile component) { Quaternion rot = Quaternion.AngleAxis(Time.deltaTime * curveAmount, Vector3.up); //body.velocity = rot * body.velocity; @@ -38,12 +38,12 @@ public override void CustomUpdate(ProjectileComponent component) if (component.currentTime > count / numSpawners) { count++; - new Projectile + new ProjectileData { Start = component.transform.position, MaxTime = MaxTime - component.currentTime, Size = Size.SMALL, - Speed = BossCore.Speed.FROZEN + Speed = Constants.Speed.FROZEN }.Create(); } } diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileData.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileData.cs new file mode 100644 index 0000000..1d41c9b --- /dev/null +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileData.cs @@ -0,0 +1,141 @@ +using Constants; + +using UnityEngine; +using UnityEngine.Profiling; + +namespace Projectiles +{ + //using ProjectileCallback = System.Linq.Expressions.Expression>; + using ProjectileCallbackExpression = System.Linq.Expressions.Expression; + + /* + * Used for handling events for Projectiles. Currently death events are supported. + */ + public delegate AI.AISequence ProjectileCallback(Projectile self); + + /// + /// A class representing the underlying data of a Projectile GameObject. + /// + /// This does not represent any one physical GameObject, and multiple GameObjects can be created + /// from this ProjectileData object. + /// + public class ProjectileData + { + // Experimental. Static Projectiles that are commonly used (note: there don't tend to be duplicate projectiles) + public static ProjectileData DEFAULT = new ProjectileData(); + public static ProjectileData DEFAULT_LARGE_SLOW = new ProjectileData { Size = Size.LARGE, Speed = Speed.SLOW }; + public static ProjectileData DEFAULT_MEDIUM_MEDIUM = new ProjectileData { Size = Size.MEDIUM, Speed = Speed.MEDIUM }; + public static ProjectileData DEFAULT_SMALL_FAST = new ProjectileData { Size = Size.SMALL, Speed = Speed.FAST }; + + public virtual ProxyVector3 Start { get; set; } = Positions.BOSS_POSITION; + public virtual ProxyVector3 Target { get; set; } = Positions.DELAYED_PLAYER_POSITION; + public virtual float AngleOffset { get; set; } = 0f; + + public virtual Speed Speed { get; set; } = Speed.MEDIUM; + + // todo make this update damage appropriately + public virtual Size Size { get; set; } = Size.SMALL; + + public virtual float MaxTime { get; set; } = 10f; + public virtual float Damage { get; set; } = ((float)Size.SMALL + 0.5f) * 2f; + + public virtual Vector3 Velocity { get; set; } = Vector3.forward; + + /* + * Called after MaxTime number of seconds have elapsed. + */ + public ProjectileCallbackExpression OnDestroyTimeout { get; set; } = CallbackDictionary.NOTHING; + + /* + * Called after object is destroyed due to hitting the arena. + */ + public ProjectileCallbackExpression OnDestroyOutOfBounds { get; set; } = CallbackDictionary.NOTHING; + + /* + * Called when the object hits the player + */ + public ProjectileCallbackExpression OnDestroyCollision { get; set; } = CallbackDictionary.NOTHING; + + /// + /// This method is called at the end of every Update() call. When overridden, + /// this can be used to specify custom movement. + /// + /// The ProjectileComponent of this active GameObject. + public virtual void CustomUpdate(Projectile component) { } + + /// + /// Provides a custom material. By default, material is chosen based on the size + /// of the Projectile. + /// + /// The material to render with. + public virtual Material CustomMaterial() { return null; } + + /// + /// Clones this Projectile data object. + /// + /// This is mostly used internally by the ShootX() AISequences. If you try to + /// use Projectiles without first cloning them, then any time you reuse a reference, + /// you will be modifying the position of the same one every time. + /// + /// The clone. + public ProjectileData Clone() + { + return MemberwiseClone() as ProjectileData; + } + + /// + /// Generates a new GameObject with a ProjectileComponent that references this + /// data object. + /// + /// The ProjectileComponent added to the new GameObject. + public Projectile Create() + { + Profiler.BeginSample("Projectile.Create"); + + Profiler.BeginSample("Projectile.Create GameObject Instantiate"); + // Create new GameObject + //GameObject newObj = GameObject.Instantiate(Resources.Load("Prefabs/Projectile")); + GameObject newObj = ProjectileManager.Checkout(); + Profiler.EndSample(); + + Profiler.BeginSample("Projectile.Create Component Instantiate"); + // Create a new Projectile component + Projectile projectile = newObj.GetComponent(); + Profiler.EndSample(); + + Profiler.BeginSample("Projectile.Create data Clone()"); + // Make a memberwise clone of the most derived type + projectile.data = Clone(); + Profiler.EndSample(); + + Profiler.BeginSample("Projectile.Create data Initialize()"); + // Do the initialization (resolve null variables -> live variables) + projectile.Initialize(); + Profiler.EndSample(); + + Profiler.BeginSample("Projectile.Create data CustomCreate()"); + // Do any custom derived initialization logic (you can access the component now) + projectile.data.CustomCreate(projectile); + Profiler.EndSample(); + + Profiler.EndSample(); + return projectile; + } + + /* + * Allows for custom instantiation once the component is created and can + * be referenced. Things like accessing the RigidBody are done here, as well + * as being able to reference live variables, like the updated target value + * (via component.data.target). + */ + public virtual void CustomCreate(Projectile component) { } + + public override string ToString() + { + // TODO can make this more descriptive; i.e. if entity is boss and preTarget is null, then add "aimed at the player". + return "Projectile" + + " with speed " + Speed + + ", size " + Size; + } + } +} diff --git a/Assets/Scripts/Boss Core/AOE/AOEComponent.cs.meta b/Assets/Scripts/Boss Core/Projectile/ProjectileData.cs.meta similarity index 83% rename from Assets/Scripts/Boss Core/AOE/AOEComponent.cs.meta rename to Assets/Scripts/Boss Core/Projectile/ProjectileData.cs.meta index bdf15bd..475af54 100644 --- a/Assets/Scripts/Boss Core/AOE/AOEComponent.cs.meta +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileData.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fdca9979d8e274bc1b9ea49794484f6f +guid: 4e0b4264d4f684864b07dfa47dec7636 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs index 44e99fb..6ba9377 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs @@ -5,7 +5,7 @@ namespace Projectiles { - public class ProjectileDeathHex : Projectile + public class ProjectileDeathHex : ProjectileData { public ProjectileDeathHex() { MaxTime = 1f; diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs index 2b6ccdc..874b969 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs @@ -5,7 +5,7 @@ namespace Projectiles { - public class ProjectileHoming : Projectile + public class ProjectileHoming : ProjectileData { public static new ProjectileHoming DEFAULT = new ProjectileHoming { Size = Size.MEDIUM }; @@ -29,11 +29,11 @@ public ProjectileHoming() : this(0) { } public ProjectileHoming(int difficulty=0) { this.difficulty = difficulty; if (difficulty == 1) { - Target = AI.AISequence.SMOOTHED_LEADING_PLAYER_POSITION; + Target = Constants.Positions.SMOOTHED_LEADING_PLAYER_POSITION; } } - public override void CustomCreate(ProjectileComponent component) + public override void CustomCreate(Projectile component) { targetObject = GameManager.Player.gameObject; // TODO maybe make me a customizable parameter? wasClose = false; @@ -45,14 +45,14 @@ public override Material CustomMaterial() { return Resources.Load("Art/Materials/PurpleTransparent"); } - public override void CustomUpdate(ProjectileComponent component) { + public override void CustomUpdate(Projectile component) { switch (difficulty) { case 0: HomingLevel0(component); break; case 1: HomingLevel0(component); break; } } - private void HomingLevel0(ProjectileComponent component) { + private void HomingLevel0(Projectile component) { Vector3 idealVelocity = ((float)Speed) * (Target.GetValue() - component.transform.position).normalized; float idealRotation = Vector3.SignedAngle(idealVelocity, Velocity, Vector3.up); diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs index 9d10441..091436a 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs @@ -7,7 +7,7 @@ namespace Projectiles { - public class ProjectileLightning : Projectile + public class ProjectileLightning : ProjectileData { private readonly int level; private Vector3 initialTarget; @@ -27,7 +27,7 @@ private ProjectileLightning(int level, float initialMaxTime) base.MaxTime = 0.05f; - Speed = BossCore.Speed.LIGHTNING; + Speed = Constants.Speed.LIGHTNING; //OnDestroyTimeout = LIGHTNING_RECUR; } @@ -48,7 +48,7 @@ public override float MaxTime } } - public override void CustomCreate(ProjectileComponent component) + public override void CustomCreate(Projectile component) { // Make the target the player position, but at a radius of 100. // This prevents "bunching" around the true target. @@ -60,7 +60,7 @@ public override Material CustomMaterial() return Resources.Load("Art/Materials/BlueTransparent"); } - public override void CustomUpdate(ProjectileComponent component) + public override void CustomUpdate(Projectile component) { if ((component.transform.position - GameManager.Player.transform.position).magnitude < 5f) { @@ -70,12 +70,12 @@ public override void CustomUpdate(ProjectileComponent component) if (component.currentTime > count / numSpawners) { count++; - new Projectile + new ProjectileData { Start = component.transform.position, MaxTime = initialMaxTime - component.currentTime, Size = Size.SMALL, - Speed = BossCore.Speed.FROZEN + Speed = Constants.Speed.FROZEN }.Create(); } } diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileManager.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileManager.cs index 69a1ea3..3391f53 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileManager.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileManager.cs @@ -26,7 +26,6 @@ public void Start() { public void Update() { - /* if (count++ > 10) { Profiler.BeginSample("Flushing hot cache"); count = 0; @@ -37,8 +36,7 @@ public void Update() cache.Enqueue(current); } Profiler.EndSample(); - } - */ + } } public static GameObject Checkout() { diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileReverse.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileReverse.cs index 2bf2d78..1aecece 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileReverse.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileReverse.cs @@ -4,17 +4,17 @@ namespace Projectiles { - public class ProjectileReverse : Projectile + public class ProjectileReverse : ProjectileData { private Vector3 initialTarget; - public override void CustomCreate(ProjectileComponent component) + public override void CustomCreate(Projectile component) { component.currentTime = 0; initialTarget = (Target.GetValue() - Start.GetValue()).normalized; } - public override void CustomUpdate(ProjectileComponent component) + public override void CustomUpdate(Projectile component) { Velocity = (float)Speed * func(component.currentTime) * initialTarget; } diff --git a/Assets/Scripts/Boss Core/Projectile/Type.cs b/Assets/Scripts/Boss Core/Projectile/Type.cs deleted file mode 100644 index 96d517a..0000000 --- a/Assets/Scripts/Boss Core/Projectile/Type.cs +++ /dev/null @@ -1,16 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; - -namespace Projectiles -{ - public enum Type - { - BASIC, - INDESTRUCTIBLE, - HOMING, - CURVING, - DEATHHEX, - LIGHTNING - } -} diff --git a/Assets/Scripts/Boss Core/ProxyFloat.cs b/Assets/Scripts/Boss Core/ProxyFloat.cs index 9db9993..93ff1a6 100644 --- a/Assets/Scripts/Boss Core/ProxyFloat.cs +++ b/Assets/Scripts/Boss Core/ProxyFloat.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using UnityEngine; -namespace BossCore +namespace Constants { public class ProxyFloat : ProxyVariable { diff --git a/Assets/Scripts/Boss Core/ProxyVariable.cs b/Assets/Scripts/Boss Core/ProxyVariable.cs index a199599..8fa7c7e 100644 --- a/Assets/Scripts/Boss Core/ProxyVariable.cs +++ b/Assets/Scripts/Boss Core/ProxyVariable.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using UnityEngine; -namespace BossCore +namespace Constants { /// /// For referencing values that cannot be directly saved diff --git a/Assets/Scripts/Boss Core/ProxyVector3.cs b/Assets/Scripts/Boss Core/ProxyVector3.cs index 1e45790..045bf93 100644 --- a/Assets/Scripts/Boss Core/ProxyVector3.cs +++ b/Assets/Scripts/Boss Core/ProxyVector3.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using UnityEngine; -namespace BossCore +namespace Constants { public class ProxyVector3 : ProxyVariable { diff --git a/Assets/Scripts/Boss Core/Speed.cs b/Assets/Scripts/Boss Core/Speed.cs deleted file mode 100644 index 0ad3be5..0000000 --- a/Assets/Scripts/Boss Core/Speed.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace BossCore { - public enum Speed - { - FROZEN = 0, - SNAIL = 10, - SLOW = 15, - MEDIUM_SLOW = 20, - MEDIUM = 25, - FAST = 35, - VERY_FAST = 45, - SNIPE = 50, // This is realistically the fastest speed you should use. - LIGHTNING = 75 - }; -} \ No newline at end of file diff --git a/Assets/Scripts/Combat Core/Abilities.cs b/Assets/Scripts/Combat Core/Abilities.cs index 71da2dc..7dd506d 100644 --- a/Assets/Scripts/Combat Core/Abilities.cs +++ b/Assets/Scripts/Combat Core/Abilities.cs @@ -65,10 +65,29 @@ private static bool PlayerDash(Entity subject, Vector3 targetPosition, params ob Controller c = subject.GetComponent (); c.StartCoroutine (c.Dashing (targetPos)); - if (subject.HasStatus("ShieldRegen")) { + // If we're tied to the shield, first untie + if (subject.HasStatus("ShieldRegen")) + { subject.RemoveStatus(Status.Get("ShieldRegen")); } + // If the shield is placed down, then drop it to the ground. + if (subject.HasStatus("Shield Placed")) + { + subject.RemoveStatus(Status.Get("Shield Placed")); + + // Throw it + Status shieldThrown = Status.Get("Shield Thrown"); + shieldThrown.GetComponent().SetTarget(subject.transform.position); + subject.AddStatus(shieldThrown); + + GameManager.HUD.shieldAvailable = false; + + // But then also freeze it + GameManager.ThrownShield.GetComponent().velocity = Vector3.zero; + GameManager.ThrownShield.GetComponent().Unfreeze(); + } + return true; } diff --git a/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs b/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs index 9387e46..44b2d22 100644 --- a/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs +++ b/Assets/Scripts/Combat Core/StatusComponents/ShieldThrown.cs @@ -23,7 +23,7 @@ public override void OnApply(Entity subject) { GameManager.ThrownShield = GameObject.Instantiate(Resources.Load("Prefabs/Shield")); GameManager.ThrownShield.name = "Thrown Shield"; - GameManager.ThrownShield.transform.position = subject.transform.position + World.Arena.CENTER; + GameManager.ThrownShield.transform.position = subject.transform.position + Constants.Positions.CENTER; //GameManager.ThrownShield.transform.parent = homingProj.transform; GameManager.ThrownShield.GetComponent().shouldReset = false; } diff --git a/Assets/Scripts/Constants.cs b/Assets/Scripts/Constants.cs new file mode 100644 index 0000000..fefefbd --- /dev/null +++ b/Assets/Scripts/Constants.cs @@ -0,0 +1,105 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Constants +{ + public enum Speed + { + FROZEN = 0, + SNAIL = 10, + SLOW = 15, + MEDIUM_SLOW = 20, + MEDIUM = 25, + FAST = 35, + VERY_FAST = 45, + SNIPE = 50, // This is realistically the fastest speed you should use. + LIGHTNING = 75 + }; + + /// + /// Keeps track of various useful positions, in the form of ProxyVector3s. + /// These can be used like Vector3s, but contain live updating data until they are + /// queried with "GetValue()". + /// + /// Also keeps track of arena positions. + /// + public static class Positions + { + #region Proxy vector3s + + /// + /// The live player position. + /// + public static ProxyVector3 PLAYER_POSITION = new ProxyVector3(() => { return GameManager.Player.transform.position + CENTER; }); + + /// + /// Grabs the delayed player position. If the "PlayerLock" move is locked on, then + /// this will return the player position at the time the move was run. Otherwise, this + /// returns the same value as PLAYER_POSITION. + /// + /// + public static ProxyVector3 DELAYED_PLAYER_POSITION = Moves.Basic.PlayerLock._delayed_player_position; + + // Experimental. Leads ahead of the player based on their current velocity and distance from boss. + // This is quite realtime, but can be jittery as a result. + public static ProxyVector3 LEADING_PLAYER_POSITION = new ProxyVector3(() => + { + float distance = (GameManager.Boss.transform.position - GameManager.Player.transform.position).magnitude; + //Vector3 offset = (distance / 2f * GameManager.Player.GetComponent().velocity.normalized); + Vector3 offset = 1f * GameManager.Player.GetComponent().velocity.normalized; + + return PLAYER_POSITION.GetValue() + offset; + }); + + // Smooths the value of LEADING_PLAYER_POSITION using two samples over time. + // This is less "realtime", but provides a smoother tracking. + private static Vector3 last_lead = Vector3.zero; + private static Vector3 curr_lead = Vector3.zero; + public static ProxyVector3 SMOOTHED_LEADING_PLAYER_POSITION = new ProxyVector3(() => + { + Vector3 raw_value = LEADING_PLAYER_POSITION.GetValue(); + + last_lead = curr_lead; + curr_lead = raw_value; + + return (last_lead + curr_lead) / 2.0f; + + }); + + public static ProxyVector3 BOSS_POSITION = new ProxyVector3(() => { return GameManager.Boss.transform.position; }); + public static ProxyVector3 RANDOM_IN_ARENA = new ProxyVector3(() => + { + float angle = Random.value * 360; + float distance = Random.Range(0, GameManager.Arena.RadiusInWorldUnits); + return distance * (Quaternion.AngleAxis(angle, Vector3.up) * Vector3.forward) + CENTER; + }); + + #endregion + + #region Arena Location constants + public static readonly float BOSS_HEIGHT = 1.31f; + private static readonly float FAR = 45f; + private static readonly float MED = 30f; + private static readonly float CLOSE = 15f; + + public static readonly Vector3 CENTER = new Vector3(0, BOSS_HEIGHT, 0); + + public static readonly Vector3 NORTH_FAR = new Vector3(0f, BOSS_HEIGHT, FAR); + public static readonly Vector3 SOUTH_FAR = new Vector3(0f, BOSS_HEIGHT, -FAR); + public static readonly Vector3 EAST_FAR = new Vector3(45f, BOSS_HEIGHT, 0); + public static readonly Vector3 WEST_FAR = new Vector3(-45f, BOSS_HEIGHT, 0); + + public static readonly Vector3 NORTH_MED = new Vector3(0f, BOSS_HEIGHT, MED); + public static readonly Vector3 SOUTH_MED = new Vector3(0f, BOSS_HEIGHT, -MED); + public static readonly Vector3 EAST_MED = new Vector3(30f, BOSS_HEIGHT, 0); + public static readonly Vector3 WEST_MED = new Vector3(-30f, BOSS_HEIGHT, 0); + + public static readonly Vector3 NORTH_CLOSE = new Vector3(0f, BOSS_HEIGHT, CLOSE); + public static readonly Vector3 SOUTH_CLOSE = new Vector3(0f, BOSS_HEIGHT, -CLOSE); + public static readonly Vector3 EAST_CLOSE = new Vector3(15f, BOSS_HEIGHT, 0); + public static readonly Vector3 WEST_CLOSE = new Vector3(-15f, BOSS_HEIGHT, 0); + #endregion + } + +} diff --git a/Assets/Scripts/Boss Core/Speed.cs.meta b/Assets/Scripts/Constants.cs.meta similarity index 83% rename from Assets/Scripts/Boss Core/Speed.cs.meta rename to Assets/Scripts/Constants.cs.meta index cc258e2..64b315e 100644 --- a/Assets/Scripts/Boss Core/Speed.cs.meta +++ b/Assets/Scripts/Constants.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: de455f844a05c4255a8634165f451c54 +guid: bbf0e61870cf54fe3bda1dd420f99d09 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/KeepOnArena.cs b/Assets/Scripts/KeepOnArena.cs index b0cb878..884c2a8 100644 --- a/Assets/Scripts/KeepOnArena.cs +++ b/Assets/Scripts/KeepOnArena.cs @@ -17,7 +17,7 @@ void Start () { void Update () { if (shouldReset) { - //if (transform.position.magnitude > World.Arena.RadiusInWorldUnits) + //if (transform.position.magnitude > Constants.Positions.RadiusInWorldUnits) if (transform.position.y < -1f) { float randomDegrees = Random.Range(0f, 359f); diff --git a/Assets/Scripts/MoveRandomly.cs b/Assets/Scripts/MoveRandomly.cs index 10026fc..fe5b6a4 100644 --- a/Assets/Scripts/MoveRandomly.cs +++ b/Assets/Scripts/MoveRandomly.cs @@ -18,7 +18,7 @@ void Start () { // Update is called once per frame void Update () { if (!moving) { - newPosition = AI.AISequence.RANDOM_IN_ARENA.GetValue(); + newPosition = Constants.Positions.RANDOM_IN_ARENA.GetValue(); moving = true; } diff --git a/Assets/Scripts/ThrownShield.cs b/Assets/Scripts/ThrownShield.cs index be45dc1..9ed4533 100644 --- a/Assets/Scripts/ThrownShield.cs +++ b/Assets/Scripts/ThrownShield.cs @@ -3,6 +3,7 @@ using UnityEngine; using CombatCore; +using Constants; public class ThrownShield : MonoBehaviour { @@ -13,7 +14,7 @@ public class ThrownShield : MonoBehaviour { private KeepOnArena keepOnArenaScript; // How fast do we move? - private const BossCore.Speed speed = BossCore.Speed.LIGHTNING; + private const Speed speed = Speed.LIGHTNING; private float currentTime; private const float maxTime = 2f; @@ -97,7 +98,7 @@ public void OnShieldTriggerEntered(Collider other) } // Makes the shield fall down due to gravity, and interact with objects in the world - private void Unfreeze() + public void Unfreeze() { // Unfreeze y position constraint; make it spin for fun body.constraints = RigidbodyConstraints.None; diff --git a/Assets/Scripts/User Input/Controller.cs b/Assets/Scripts/User Input/Controller.cs index dd4612a..ae44e9d 100644 --- a/Assets/Scripts/User Input/Controller.cs +++ b/Assets/Scripts/User Input/Controller.cs @@ -167,7 +167,7 @@ public void OnDrawGizmos() UnityEditor.Handles.color = Color.red; UnityEditor.Handles.DrawWireArc(new Vector3(transform.position.x, 0f, transform.position.z), Vector3.up, Vector3.forward, 360f, dashRange); - UnityEditor.Handles.DrawWireArc(AI.AISequence.SMOOTHED_LEADING_PLAYER_POSITION.GetValue(), Vector3.up, Vector3.forward, 360f, 1f); + UnityEditor.Handles.DrawWireArc(Constants.Positions.SMOOTHED_LEADING_PLAYER_POSITION.GetValue(), Vector3.up, Vector3.forward, 360f, 1f); if (!UnityEditor.EditorApplication.isPlaying) { diff --git a/Assets/Scripts/World/Arena.cs b/Assets/Scripts/World/Arena.cs index 8bedc3c..83f9aac 100644 --- a/Assets/Scripts/World/Arena.cs +++ b/Assets/Scripts/World/Arena.cs @@ -6,29 +6,6 @@ namespace World { public class Arena : MonoBehaviour { - #region Arena Location constants - public static readonly float BOSS_HEIGHT = 1.31f; - private static readonly float FAR = 45f; - private static readonly float MED = 30f; - private static readonly float CLOSE = 15f; - - public static readonly Vector3 CENTER = new Vector3(0, BOSS_HEIGHT, 0); - - public static readonly Vector3 NORTH_FAR = new Vector3(0f, BOSS_HEIGHT, FAR); - public static readonly Vector3 SOUTH_FAR = new Vector3(0f, BOSS_HEIGHT, -FAR); - public static readonly Vector3 EAST_FAR = new Vector3(45f, BOSS_HEIGHT, 0); - public static readonly Vector3 WEST_FAR = new Vector3(-45f, BOSS_HEIGHT, 0); - - public static readonly Vector3 NORTH_MED = new Vector3(0f, BOSS_HEIGHT, MED); - public static readonly Vector3 SOUTH_MED = new Vector3(0f, BOSS_HEIGHT, -MED); - public static readonly Vector3 EAST_MED = new Vector3(30f, BOSS_HEIGHT, 0); - public static readonly Vector3 WEST_MED = new Vector3(-30f, BOSS_HEIGHT, 0); - - public static readonly Vector3 NORTH_CLOSE = new Vector3(0f, BOSS_HEIGHT, CLOSE); - public static readonly Vector3 SOUTH_CLOSE = new Vector3(0f, BOSS_HEIGHT, -CLOSE); - public static readonly Vector3 EAST_CLOSE = new Vector3(15f, BOSS_HEIGHT, 0); - public static readonly Vector3 WEST_CLOSE = new Vector3(-15f, BOSS_HEIGHT, 0); - #endregion [SerializeField] private float adjustSpeed = 3f; diff --git a/Logs/Packages-Update.log b/Logs/Packages-Update.log new file mode 100644 index 0000000..ff8fcae --- /dev/null +++ b/Logs/Packages-Update.log @@ -0,0 +1,13 @@ + +=== Wed Jan 16 13:41:47 2019 + +Packages were changed. +Update Mode: updateDependencies + +The following packages were added: + com.unity.collab-proxy@1.2.15 +The following packages were updated: + com.unity.ads from version 2.0.8 to 2.3.1 + com.unity.analytics from version 2.0.16 to 3.2.2 + com.unity.package-manager-ui from version 1.9.11 to 2.0.3 + com.unity.textmeshpro from version 1.2.4 to 1.3.0 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 039cdfa..36f9dc2 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -63,6 +63,8 @@ PlayerSettings: use32BitDisplayBuffer: 1 preserveFramebufferAlpha: 0 disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 0 androidBlitType: 0 defaultIsNativeResolution: 1 macRetinaSupport: 1 @@ -96,9 +98,6 @@ PlayerSettings: xboxEnableGuest: 0 xboxEnablePIXSampling: 0 metalFramebufferOnly: 0 - n3dsDisableStereoscopicView: 0 - n3dsEnableSharedListOpt: 1 - n3dsEnableVSync: 0 xboxOneResolution: 0 xboxOneSResolution: 0 xboxOneXResolution: 3 @@ -107,11 +106,7 @@ PlayerSettings: xboxOneDisableEsram: 0 xboxOnePresentImmediateThreshold: 0 switchQueueCommandMemory: 0 - videoMemoryForVertexBuffers: 0 - psp2PowerMode: 0 - psp2AcquireBGM: 1 vulkanEnableSetSRGBWrite: 0 - vulkanUseSWCommandBuffers: 0 m_SupportedAspectRatios: 4:3: 1 5:4: 1 @@ -145,6 +140,7 @@ PlayerSettings: dashSupport: 0 enable360StereoCapture: 0 protectGraphicsMemory: 0 + enableFrameTimingStats: 0 useHDRDisplay: 0 m_ColorGamuts: 00000000 targetPixelDensity: 30 @@ -170,7 +166,7 @@ PlayerSettings: StripUnusedMeshComponents: 1 VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 8.0 + iOSTargetOSVersionString: 9.0 tvOSSdkVersion: 0 tvOSRequireExtendedGameController: 0 tvOSTargetOSVersionString: 9.0 @@ -236,7 +232,6 @@ PlayerSettings: appleEnableAutomaticSigning: 0 iOSRequireARKit: 0 appleEnableProMotion: 0 - vulkanEditorSupport: 0 clonedFromGUID: 5f34be1353de5cf4398729fda238591b templatePackageId: com.unity.template.2d@1.0.1 templateDefaultScene: Assets/Scenes/SampleScene.unity @@ -393,6 +388,7 @@ PlayerSettings: switchAllowsVideoCapturing: 1 switchAllowsRuntimeAddOnContentInstall: 0 switchDataLossConfirmation: 0 + switchUserAccountLockEnabled: 0 switchSupportedNpadStyles: 3 switchNativeFsCacheSize: 32 switchIsHoldTypeHorizontal: 0 @@ -453,6 +449,7 @@ PlayerSettings: ps4pnGameCustomData: 1 playerPrefsSupport: 0 enableApplicationExit: 0 + resetTempFolder: 1 restrictedAudioUsageRights: 0 ps4UseResolutionFallback: 0 ps4ReprojectionSupport: 0 @@ -476,53 +473,6 @@ PlayerSettings: ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: [] monoEnv: - psp2Splashimage: {fileID: 0} - psp2NPTrophyPackPath: - psp2NPSupportGBMorGJP: 0 - psp2NPAgeRating: 12 - psp2NPTitleDatPath: - psp2NPCommsID: - psp2NPCommunicationsID: - psp2NPCommsPassphrase: - psp2NPCommsSig: - psp2ParamSfxPath: - psp2ManualPath: - psp2LiveAreaGatePath: - psp2LiveAreaBackroundPath: - psp2LiveAreaPath: - psp2LiveAreaTrialPath: - psp2PatchChangeInfoPath: - psp2PatchOriginalPackage: - psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui - psp2KeystoneFile: - psp2MemoryExpansionMode: 0 - psp2DRMType: 0 - psp2StorageType: 0 - psp2MediaCapacity: 0 - psp2DLCConfigPath: - psp2ThumbnailPath: - psp2BackgroundPath: - psp2SoundPath: - psp2TrophyCommId: - psp2TrophyPackagePath: - psp2PackagedResourcesPath: - psp2SaveDataQuota: 10240 - psp2ParentalLevel: 1 - psp2ShortTitle: Not Set - psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF - psp2Category: 0 - psp2MasterVersion: 01.00 - psp2AppVersion: 01.00 - psp2TVBootMode: 0 - psp2EnterButtonAssignment: 2 - psp2TVDisableEmu: 0 - psp2AllowTwitterDialog: 1 - psp2Upgradable: 0 - psp2HealthWarning: 0 - psp2UseLibLocation: 0 - psp2InfoBarOnStartup: 0 - psp2InfoBarColor: 0 - psp2ScriptOptimizationLevel: 0 splashScreenBackgroundSourceLandscape: {fileID: 0} splashScreenBackgroundSourcePortrait: {fileID: 0} spritePackerPolicy: @@ -538,6 +488,7 @@ PlayerSettings: webGLUseEmbeddedResources: 0 webGLCompressionFormat: 1 webGLLinkerTarget: 1 + webGLThreadsSupport: 0 scriptingDefineSymbols: 1: UNITY_POST_PROCESSING_STACK_V2 7: UNITY_POST_PROCESSING_STACK_V2 @@ -550,9 +501,11 @@ PlayerSettings: 25: UNITY_POST_PROCESSING_STACK_V2 26: UNITY_POST_PROCESSING_STACK_V2 27: UNITY_POST_PROCESSING_STACK_V2 + 28: UNITY_POST_PROCESSING_STACK_V2 platformArchitecture: {} scriptingBackend: {} il2cppCompilerConfiguration: {} + managedStrippingLevel: {} incrementalIl2cppBuild: {} allowUnsafeCode: 0 additionalIl2CppArgs: @@ -574,6 +527,8 @@ PlayerSettings: metroMediumTileShowName: 0 metroLargeTileShowName: 0 metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 metroDefaultTileSize: 1 metroTileForegroundText: 2 metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} @@ -581,21 +536,11 @@ PlayerSettings: a: 1} metroSplashScreenUseBackgroundColor: 0 platformCapabilities: {} + metroTargetDeviceFamilies: {} metroFTAName: metroFTAFileTypes: [] metroProtocolName: metroCompilationOverrides: 1 - n3dsUseExtSaveData: 0 - n3dsCompressStaticMem: 1 - n3dsExtSaveDataNumber: 0x12345 - n3dsStackSize: 131072 - n3dsTargetPlatform: 2 - n3dsRegion: 7 - n3dsMediaSize: 0 - n3dsLogoStyle: 3 - n3dsTitle: GameName - n3dsProductCode: - n3dsApplicationId: 0xFF3FF XboxOneProductId: XboxOneUpdateKey: XboxOneSandboxId: @@ -621,17 +566,37 @@ PlayerSettings: XboxOnePersistentLocalStorageSize: 0 XboxOneXTitleMemory: 8 xboxOneScriptCompiler: 0 + XboxOneOverrideIdentityName: vrEditorSettings: daydream: daydreamIconForeground: {fileID: 0} daydreamIconBackground: {fileID: 0} cloudServicesEnabled: UNet: 1 + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_PrivateKeyPath: + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: facebookSdkVersion: 7.9.4 + facebookAppId: + facebookCookies: 1 + facebookLogging: 1 + facebookStatus: 1 + facebookXfbml: 0 + facebookFrictionlessRequests: 1 apiCompatibilityLevel: 3 cloudProjectId: + framebufferDepthMemorylessMode: 0 projectName: organizationId: cloudEnabled: 0 enableNativePlatformBackendsForNewInputSystem: 0 disableOldInputManagerSupport: 0 + legacyClampBlendShapeWeights: 1 From df9cdd38fa082d06e5b2f06fb08c59d9954d71d0 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Fri, 28 Feb 2020 17:20:39 -0600 Subject: [PATCH 33/33] Small performance tweaks to Projectile. Testing out different coroutine call methods in BossController. --- Assets/Scenes/BossScene.unity | 141 +++++++++++++++++- Assets/Scripts/Boss Core/AI/AIPhase.cs | 8 +- .../Scripts/Boss Core/AI/Moves/Test/Test.cs | 7 +- Assets/Scripts/Boss Core/BossController.cs | 26 +++- .../Boss Core/Projectile/Projectile.cs | 25 +++- Assets/Scripts/User Input/Controller.cs | 4 +- ProjectSettings/EditorBuildSettings.asset | 2 +- ProjectSettings/GraphicsSettings.asset | 4 + ProjectSettings/ProjectSettings.asset | 45 +++++- ProjectSettings/UnityConnectSettings.asset | 16 +- 10 files changed, 231 insertions(+), 47 deletions(-) diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index 5be88d7..40780b0 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -54,7 +54,7 @@ LightmapSettings: m_EnableBakedLightmaps: 0 m_EnableRealtimeLightmaps: 0 m_LightmapEditorSettings: - serializedVersion: 10 + serializedVersion: 12 m_Resolution: 2 m_BakeResolution: 40 m_AtlasSize: 1024 @@ -62,6 +62,7 @@ LightmapSettings: m_AOMaxDistance: 1 m_CompAOExponent: 1 m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 m_Padding: 2 m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 @@ -76,10 +77,16 @@ LightmapSettings: m_PVRDirectSampleCount: 32 m_PVRSampleCount: 500 m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 m_PVRFilterTypeDirect: 0 m_PVRFilterTypeIndirect: 0 m_PVRFilterTypeAO: 0 - m_PVRFilteringMode: 1 + m_PVREnvironmentMIS: 0 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 m_PVRFilteringGaussRadiusIndirect: 5 @@ -87,7 +94,8 @@ LightmapSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ShowResolutionOverlay: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData m_LightingDataAsset: {fileID: 0} m_UseShadowmask: 1 --- !u!196 &4 @@ -242,6 +250,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -457,6 +466,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -750,6 +760,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -912,6 +923,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -1062,6 +1074,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -1153,6 +1166,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -1337,6 +1351,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -1428,6 +1443,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -1519,6 +1535,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -1770,6 +1787,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -1920,6 +1938,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -2194,6 +2213,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -2285,6 +2305,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -2376,6 +2397,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -2467,6 +2489,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -2558,6 +2581,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -2716,6 +2740,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -2807,6 +2832,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -2957,6 +2983,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -3048,6 +3075,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -3183,6 +3211,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -3333,6 +3362,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -3485,6 +3515,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -3576,6 +3607,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -3785,6 +3817,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -3876,6 +3909,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -3967,6 +4001,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -4263,6 +4298,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -4354,6 +4390,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -4518,6 +4555,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -4609,6 +4647,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -4700,6 +4739,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -4959,6 +4999,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -5050,6 +5091,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -5249,6 +5291,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -5340,6 +5383,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -5557,6 +5601,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -5602,12 +5647,13 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 879976845} m_Enabled: 1 - serializedVersion: 8 + serializedVersion: 9 m_Type: 1 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_Range: 10 m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 m_CookieSize: 10 m_Shadows: m_Type: 0 @@ -5617,6 +5663,24 @@ Light: m_Bias: 0.05 m_NormalBias: 0.4 m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 m_Cookie: {fileID: 0} m_DrawHalo: 0 m_Flare: {fileID: 0} @@ -5624,12 +5688,15 @@ Light: m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 + m_RenderingLayerMask: 1 m_Lightmapping: 4 m_LightShadowCasterMode: 0 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 0.96 m_ColorTemperature: 6570 m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &879976847 @@ -5723,6 +5790,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -5911,6 +5979,21 @@ PrefabInstance: propertyPath: shieldsMax value: 0 objectReference: {fileID: 0} + - target: {fileID: 114841838092227364, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 3} + propertyPath: faction + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114841838092227364, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 3} + propertyPath: health + value: 1000000 + objectReference: {fileID: 0} + - target: {fileID: 114841838092227364, guid: 0a4bf3da0a89acc43a328f456d51b1cf, + type: 3} + propertyPath: healthMax + value: 1000000 + objectReference: {fileID: 0} - target: {fileID: 95172841293179122, guid: 0a4bf3da0a89acc43a328f456d51b1cf, type: 3} propertyPath: m_Enabled @@ -6087,6 +6170,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -6237,6 +6321,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -6328,6 +6413,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -6598,6 +6684,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -6689,6 +6776,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -6902,6 +6990,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -6993,6 +7082,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -7090,6 +7180,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -7181,6 +7272,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -7331,6 +7423,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -7475,6 +7568,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -7566,6 +7660,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -7743,6 +7838,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -7860,6 +7956,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -8006,7 +8103,7 @@ PrefabInstance: - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} propertyPath: Routine - value: 0 + value: 2 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 3} @@ -8544,9 +8641,10 @@ Camera: m_ClearFlags: 2 m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 @@ -8841,6 +8939,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -8932,6 +9031,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -9078,6 +9178,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -9348,6 +9449,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -9500,6 +9602,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -9650,6 +9753,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -9808,6 +9912,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -10215,6 +10320,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -10306,6 +10412,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -10565,6 +10672,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -10780,6 +10888,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -10962,6 +11071,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -11112,6 +11222,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -11203,6 +11314,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -11294,6 +11406,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -11597,6 +11710,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -11688,6 +11802,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -11735,7 +11850,7 @@ MonoBehaviour: m_GameObject: {fileID: 2006497207} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalAxis: Horizontal @@ -11754,7 +11869,7 @@ MonoBehaviour: m_GameObject: {fileID: 2006497207} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} m_Name: m_EditorClassIdentifier: m_FirstSelected: {fileID: 0} @@ -11943,6 +12058,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -12034,6 +12150,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -12125,6 +12242,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -12216,6 +12334,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -12313,6 +12432,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -12404,6 +12524,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -12562,6 +12683,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -12653,6 +12775,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -12744,6 +12867,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 @@ -13012,6 +13136,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 + m_ReceiveGI: 1 m_PreserveUVs: 0 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 diff --git a/Assets/Scripts/Boss Core/AI/AIPhase.cs b/Assets/Scripts/Boss Core/AI/AIPhase.cs index c7e7842..6c77e5d 100644 --- a/Assets/Scripts/Boss Core/AI/AIPhase.cs +++ b/Assets/Scripts/Boss Core/AI/AIPhase.cs @@ -74,7 +74,7 @@ public AISequence GetNext() foreach (AIPhaseScriptedComponent component in scriptedSequences) { // Only run if the event is scheduled to run. if (count == component.everyX) { - Debug.Log("Returned scripted ai sequence"); + //Debug.Log("Returned scripted ai sequence"); return component.sequence; } } @@ -84,13 +84,13 @@ public AISequence GetNext() { if (count == 0 && component.everyX == 0) { - Debug.Log("Returned scheduled scripted ai sequence"); + //Debug.Log("Returned scheduled scripted ai sequence"); return component.sequence; } if (count % component.everyX == 0) { - Debug.Log("Returned scheduled scripted ai sequence"); + //Debug.Log("Returned scheduled scripted ai sequence"); return component.sequence; } } @@ -101,7 +101,7 @@ public AISequence GetNext() foreach (AIPhaseComponent component in phaseSequences) { if (targetWeight < currentWeight + component.weight) { - Debug.Log("Returned random ai sequence"); + //Debug.Log("Returned random ai sequence"); return component.sequence; } currentWeight += component.weight; diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs index 76c2b03..9aa09d3 100644 --- a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -45,8 +45,13 @@ public Test() }); */ + //Sequence = new AISequence( + // For(-30f, 30f, 1f, + // i => new Shoot1(new ProjectileData { Size = Size.MEDIUM, Speed = Speed.MEDIUM, AngleOffset = i }) + // ) + //); Sequence = new AISequence( - For(-30f, 30f, 1f, + ForConcurrent(0, 360, i => new Shoot1(new ProjectileData { Size = Size.MEDIUM, Speed = Speed.MEDIUM, AngleOffset = i }) ) ); diff --git a/Assets/Scripts/Boss Core/BossController.cs b/Assets/Scripts/Boss Core/BossController.cs index d7d06b9..6f04a43 100644 --- a/Assets/Scripts/Boss Core/BossController.cs +++ b/Assets/Scripts/Boss Core/BossController.cs @@ -204,14 +204,18 @@ private IEnumerator Execute(AISequence sequence) long elapsedMillis = stopWatch.ElapsedMilliseconds; float elapsedSeconds = stopWatch.ElapsedMilliseconds / 1000.0f; - if (elapsedMillis > 0) - { - Debug.Log("Elapsed time for execution: " + elapsedSeconds); - } + //if (elapsedMillis > 0) + //{ + //Debug.Log("Elapsed time for execution: " + elapsedSeconds + ". Execution frame: " + Time.frameCount); + //Debug.Log($"Sequence name: {sequence.Name} event iteration: {i}. Elapsed time: {elapsedSeconds} at frame: {Time.frameCount}"); + //} // TODO reduce the wait time if the above invocation takes too long if (Time.timeScale > 0) - { - yield return new WaitForSecondsRealtime((sequence.Events[i].duration / Time.timeScale) - elapsedSeconds); + { + float waitTime = (sequence.Events[i].duration / Time.timeScale) - elapsedSeconds; + //yield return new WaitForSecondsRealtime((sequence.Events[i].duration / Time.timeScale) - elapsedSeconds); + //Debug.Log($"Waiting for: {waitTime} seconds."); + yield return new WaitForSecondsRealtime(waitTime); } else { @@ -223,8 +227,14 @@ private IEnumerator Execute(AISequence sequence) { AISequence[] children = sequence.Children(); for (int i = 0; i < children.Length; i++) - { - yield return Execute(children[i]); + { + + //Debug.Log($"Sequence name: {sequence.Name} child sequence iteration: {i}. At frame: {Time.frameCount}"); + yield return Execute(children[i]); + //yield return StartCoroutine(Execute(children[i])); + //IEnumerator ienum = Execute(children[i]); + + //yield return ienum; } } } diff --git a/Assets/Scripts/Boss Core/Projectile/Projectile.cs b/Assets/Scripts/Boss Core/Projectile/Projectile.cs index a0b3df9..ed22702 100644 --- a/Assets/Scripts/Boss Core/Projectile/Projectile.cs +++ b/Assets/Scripts/Boss Core/Projectile/Projectile.cs @@ -123,22 +123,29 @@ void Update() if (currentTime >= maxTime) { - GameManager.Boss.ExecuteAsync(data.OnDestroyTimeout.Compile().Invoke(this)); - //Destroy(this.gameObject); + if (data.OnDestroyTimeout != CallbackDictionary.NOTHING) + { + GameManager.Boss.ExecuteAsync(data.OnDestroyTimeout.Compile().Invoke(this)); + } Cleanup(); } Profiler.EndSample(); - Profiler.BeginSample("Movement"); + Profiler.BeginSample("Movement speed check"); if (data.Speed != Constants.Speed.FROZEN) - { + { + Profiler.EndSample(); + Profiler.BeginSample("Movement update"); trans.position += (Time.deltaTime * data.Velocity); Profiler.EndSample(); Profiler.BeginSample("Bounds check"); if (trans.position.sqrMagnitude > 5625f) - { - GameManager.Boss.ExecuteAsync(data.OnDestroyOutOfBounds.Compile().Invoke(this)); + { + if (data.OnDestroyOutOfBounds != CallbackDictionary.NOTHING) + { + GameManager.Boss.ExecuteAsync(data.OnDestroyOutOfBounds.Compile().Invoke(this)); + } Cleanup(); } @@ -175,8 +182,10 @@ public virtual void OnTriggerEnter(Collider other) //Debug.Log("Projectile collided, should apply damage"); // Note that the entity causing the damage is null; callbacks may fail. Entity.DamageEntity(otherEntity, null, data.Damage); - GameManager.Boss.ExecuteAsync(data.OnDestroyCollision.Compile().Invoke(this)); - //Destroy(this.gameObject); + if (data.OnDestroyCollision != CallbackDictionary.NOTHING) + { + GameManager.Boss.ExecuteAsync(data.OnDestroyCollision.Compile().Invoke(this)); + } Cleanup(); } } diff --git a/Assets/Scripts/User Input/Controller.cs b/Assets/Scripts/User Input/Controller.cs index ae44e9d..2641bc1 100644 --- a/Assets/Scripts/User Input/Controller.cs +++ b/Assets/Scripts/User Input/Controller.cs @@ -161,6 +161,7 @@ private void facePoint(Vector3 point) public void OnDrawGizmos() { +#if UNITY_EDITOR UnityEditor.Handles.color = Color.green; UnityEditor.Handles.DrawWireArc(facePos, Vector3.up, Vector3.forward, 360f, 1f); @@ -178,6 +179,7 @@ public void OnDrawGizmos() { UnityEditor.Handles.color = Color.blue; UnityEditor.Handles.DrawWireArc(shield.transform.position, Vector3.up, Vector3.forward, 360f, 5f); - } + } +#endif } } diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 3958148..5b41217 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -5,7 +5,7 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 + - enabled: 0 path: Assets/Scenes/Main.unity guid: dd0867c38fae8f047a524149d9082269 - enabled: 1 diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index 6c2632a..0dbef41 100644 --- a/ProjectSettings/GraphicsSettings.asset +++ b/ProjectSettings/GraphicsSettings.asset @@ -31,6 +31,10 @@ GraphicsSettings: m_AlwaysIncludedShaders: - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16001, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 16002, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0} m_PreloadedShaders: [] m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 36f9dc2..ee40404 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,7 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 15 + serializedVersion: 18 productGUID: a520f6fbc37a6a5409e337827ba5899e AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 @@ -52,8 +52,8 @@ PlayerSettings: m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 - iosAppInBackgroundBehavior: 0 displayResolutionDialog: 1 + iosUseCustomAppBackgroundBehavior: 0 iosAllowHTTPDownload: 1 allowedAutorotateToPortrait: 1 allowedAutorotateToPortraitUpsideDown: 1 @@ -65,6 +65,7 @@ PlayerSettings: disableDepthAndStencilBuffers: 0 androidStartInFullscreen: 1 androidRenderOutsideSafeArea: 0 + androidUseSwappy: 0 androidBlitType: 0 defaultIsNativeResolution: 1 macRetinaSupport: 1 @@ -79,6 +80,7 @@ PlayerSettings: usePlayerLog: 1 bakeCollisionMeshes: 0 forceSingleInstance: 0 + useFlipModelSwapchain: 1 resizableWindow: 0 useMacAppStoreValidation: 0 macAppStoreCategory: public.app-category.games @@ -106,6 +108,11 @@ PlayerSettings: xboxOneDisableEsram: 0 xboxOnePresentImmediateThreshold: 0 switchQueueCommandMemory: 0 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 vulkanEnableSetSRGBWrite: 0 m_SupportedAspectRatios: 4:3: 1 @@ -120,7 +127,6 @@ PlayerSettings: m_HolographicPauseOnTrackingLoss: 1 xboxOneDisableKinectGpuReservation: 0 xboxOneEnable7thCore: 0 - isWsaHolographicRemotingEnabled: 0 vrSettings: cardboard: depthFormat: 0 @@ -135,10 +141,18 @@ PlayerSettings: hololens: depthFormat: 1 depthBufferSharingEnabled: 0 + lumin: + depthFormat: 0 + frameTiming: 2 + enableGLCache: 0 + glCacheMaxBlobSize: 524288 + glCacheMaxFileSize: 8388608 oculus: sharedDepthBuffer: 0 dashSupport: 0 + lowOverheadMode: 0 enable360StereoCapture: 0 + isWsaHolographicRemotingEnabled: 0 protectGraphicsMemory: 0 enableFrameTimingStats: 0 useHDRDisplay: 0 @@ -188,6 +202,10 @@ PlayerSettings: iPadHighResPortraitSplashScreen: {fileID: 0} iPadLandscapeSplashScreen: {fileID: 0} iPadHighResLandscapeSplashScreen: {fileID: 0} + iPhone65inPortraitSplashScreen: {fileID: 0} + iPhone65inLandscapeSplashScreen: {fileID: 0} + iPhone61inPortraitSplashScreen: {fileID: 0} + iPhone61inLandscapeSplashScreen: {fileID: 0} appleTVSplashScreen: {fileID: 0} appleTVSplashScreen2x: {fileID: 0} tvOSSmallIconLayers: [] @@ -231,6 +249,7 @@ PlayerSettings: tvOSManualSigningProvisioningProfileType: 0 appleEnableAutomaticSigning: 0 iOSRequireARKit: 0 + iOSAutomaticallyDetectAndAddCapabilities: 1 appleEnableProMotion: 0 clonedFromGUID: 5f34be1353de5cf4398729fda238591b templatePackageId: com.unity.template.2d@1.0.1 @@ -238,7 +257,7 @@ PlayerSettings: AndroidTargetArchitectures: 5 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} - AndroidKeystoreName: + AndroidKeystoreName: '{inproject}: ' AndroidKeyaliasName: AndroidBuildApkPerCpuArchitecture: 0 AndroidTVCompatibility: 1 @@ -246,20 +265,24 @@ PlayerSettings: AndroidEnableTango: 0 androidEnableBanner: 1 androidUseLowAccuracyLocation: 0 + androidUseCustomKeystore: 0 m_AndroidBanners: - width: 320 height: 180 banner: {fileID: 0} androidGamepadSupportLevel: 0 + AndroidValidateAppBundleSize: 1 + AndroidAppBundleSizeToValidate: 150 resolutionDialogBanner: {fileID: 0} m_BuildTargetIcons: [] m_BuildTargetPlatformIcons: [] m_BuildTargetBatching: [] m_BuildTargetGraphicsAPIs: [] m_BuildTargetVRSettings: [] - m_BuildTargetEnableVuforiaSettings: [] openGLRequireES31: 0 openGLRequireES31AEP: 0 + openGLRequireES32: 0 + vuforiaEnabled: 0 m_TemplateCustomTags: {} mobileMTRendering: Android: 1 @@ -389,6 +412,7 @@ PlayerSettings: switchAllowsRuntimeAddOnContentInstall: 0 switchDataLossConfirmation: 0 switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 switchSupportedNpadStyles: 3 switchNativeFsCacheSize: 32 switchIsHoldTypeHorizontal: 0 @@ -442,6 +466,7 @@ PlayerSettings: ps4DownloadDataSize: 0 ps4GarlicHeapSize: 2048 ps4ProGarlicHeapSize: 2560 + playerPrefsMaxSize: 32768 ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ ps4pnSessions: 1 ps4pnPresence: 1 @@ -475,6 +500,7 @@ PlayerSettings: monoEnv: splashScreenBackgroundSourceLandscape: {fileID: 0} splashScreenBackgroundSourcePortrait: {fileID: 0} + blurSplashScreenBackground: 1 spritePackerPolicy: webGLMemorySize: 256 webGLExceptionSupport: 1 @@ -489,6 +515,7 @@ PlayerSettings: webGLCompressionFormat: 1 webGLLinkerTarget: 1 webGLThreadsSupport: 0 + webGLWasmStreaming: 0 scriptingDefineSymbols: 1: UNITY_POST_PROCESSING_STACK_V2 7: UNITY_POST_PROCESSING_STACK_V2 @@ -502,6 +529,7 @@ PlayerSettings: 26: UNITY_POST_PROCESSING_STACK_V2 27: UNITY_POST_PROCESSING_STACK_V2 28: UNITY_POST_PROCESSING_STACK_V2 + 29: UNITY_POST_PROCESSING_STACK_V2 platformArchitecture: {} scriptingBackend: {} il2cppCompilerConfiguration: {} @@ -510,6 +538,8 @@ PlayerSettings: allowUnsafeCode: 0 additionalIl2CppArgs: scriptingRuntimeVersion: 1 + gcIncremental: 0 + gcWBarrierValidation: 0 apiCompatibilityLevelPerPlatform: {} m_RenderingPath: 1 m_MobileRenderingPath: 1 @@ -540,7 +570,6 @@ PlayerSettings: metroFTAName: metroFTAFileTypes: [] metroProtocolName: - metroCompilationOverrides: 1 XboxOneProductId: XboxOneUpdateKey: XboxOneSandboxId: @@ -565,7 +594,7 @@ PlayerSettings: XboxOneAllowedProductIds: [] XboxOnePersistentLocalStorageSize: 0 XboxOneXTitleMemory: 8 - xboxOneScriptCompiler: 0 + xboxOneScriptCompiler: 1 XboxOneOverrideIdentityName: vrEditorSettings: daydream: @@ -579,7 +608,7 @@ PlayerSettings: m_PortalFolderPath: luminCert: m_CertPath: - m_PrivateKeyPath: + m_SignPackage: 1 luminIsChannelApp: 0 luminVersion: m_VersionCode: 1 diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset index 3da14d5..c3ae9a0 100644 --- a/ProjectSettings/UnityConnectSettings.asset +++ b/ProjectSettings/UnityConnectSettings.asset @@ -3,25 +3,25 @@ --- !u!310 &1 UnityConnectSettings: m_ObjectHideFlags: 0 - m_Enabled: 0 + serializedVersion: 1 + m_Enabled: 1 m_TestMode: 0 - m_TestEventUrl: - m_TestConfigUrl: + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com m_TestInitMode: 0 CrashReportingSettings: - m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes - m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate + m_EventUrl: https://perf-events.cloud.unity3d.com m_Enabled: 0 + m_LogBufferSize: 10 m_CaptureEditorExceptions: 1 UnityPurchasingSettings: m_Enabled: 0 m_TestMode: 0 UnityAnalyticsSettings: m_Enabled: 0 - m_InitializeOnStartup: 1 m_TestMode: 0 - m_TestEventUrl: - m_TestConfigUrl: + m_InitializeOnStartup: 1 UnityAdsSettings: m_Enabled: 0 m_InitializeOnStartup: 1 /// This method is called at the end of every Update() call. When overridden, diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs index d78f120..cf0aea1 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileCallbackDictionary.cs @@ -14,7 +14,7 @@ public static class CallbackDictionary public static ProjectileCallback FREEZE = self => new Shoot1( - new Projectile(self.data.Entity) + new Projectile { Start = self.transform.position, MaxTime = 5f, @@ -24,7 +24,7 @@ public static class CallbackDictionary public static ProjectileCallback SPAWN_6_CURVING = self => ForConcurrent(6, i => new Shoot1( - new ProjectileCurving(self.data.Entity, (float)self.data.Speed * 2f, true) + new ProjectileCurving((float)self.data.Speed * 2f, true) { Start = self.transform.position, Target = self.data.Velocity, @@ -35,7 +35,7 @@ public static class CallbackDictionary public static ProjectileCallback SPAWN_6 = self => ForConcurrent(6, i => new Shoot1( - new ProjectileCurving(self.data.Entity, 0f, true) + new ProjectileCurving(0f, true) { Start = self.transform.position, Target = self.data.Velocity, @@ -46,11 +46,11 @@ public static class CallbackDictionary // Spawns a wave at the death position. public static ProjectileCallback SPAWN_WAVE = self => - new ShootAOE(new AOEs.AOE(self.data.Entity) { Start = self.transform.position }.On(0, 360f)); + new ShootAOE(new AOEs.AOE { Start = self.transform.position }.On(0, 360f)); public static ProjectileCallback SPAWN_1_TOWARDS_PLAYER = self => new Shoot1( - new Projectile(self.data.Entity) + new Projectile { Start = self.transform.position, MaxTime = self.data.MaxTime, @@ -60,7 +60,7 @@ public static class CallbackDictionary public static ProjectileCallback SPAWN_1_HOMING_TOWARDS_PLAYER = self => new Shoot1( - new ProjectileHoming(self.data.Entity) + new ProjectileHoming { Start = self.transform.position, MaxTime = self.data.MaxTime, @@ -71,7 +71,7 @@ public static class CallbackDictionary public static ProjectileCallback REVERSE = (self) => new Shoot1( - new Projectile(self.data.Entity) + new Projectile { Start = self.transform.position, Target = self.data.Start, @@ -92,7 +92,7 @@ public static class CallbackDictionary Speed nextSpeed = speeds[System.Array.IndexOf(speeds, currentSpeed) + 1]; return new Shoot1( - new Projectile(self.data.Entity) + new Projectile { Start = self.transform.position, Target = self.data.Start, diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs index 6461995..450a6f5 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs @@ -167,22 +167,14 @@ public virtual void OnTriggerEnter(Collider other) if (otherEntity != null) { // All projectiles break if they do damage - if (!otherEntity.IsInvincible() && otherEntity.GetFaction() != data.Entity.GetFaction()) + if (!otherEntity.IsInvincible() && otherEntity.GetFaction() != Entity.Faction.enemy) { //Debug.Log("Projectile collided, should apply damage"); - Entity.DamageEntity(otherEntity, data.Entity, data.Damage); + // Note that the entity causing the damage is null; callbacks may fail. + Entity.DamageEntity(otherEntity, null, data.Damage); GameManager.Boss.ExecuteAsync(data.OnDestroyCollision(this)); - Destroy(this.gameObject); - } - - // Player's projectiles always break on the boss, even if he's invincible - if (data.Entity.GetFaction() == Entity.Faction.player) - { - if (otherEntity.IsInvincible()) - { - data.OnDestroyCollision(this); - Destroy(this.gameObject); - } + //Destroy(this.gameObject); + Cleanup(); } } Profiler.EndSample(); diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs index b2ca7cb..e8a144f 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileCurving.cs @@ -17,11 +17,6 @@ public class ProjectileCurving : Projectile private readonly bool leavesTrail; public ProjectileCurving(float curveAmount, bool leavesTrail) - : this(GameManager.Boss.self, curveAmount, leavesTrail) - { } - - public ProjectileCurving(Entity self, float curveAmount, bool leavesTrail) - : base(self) { this.curveAmount = curveAmount; this.leavesTrail = leavesTrail; @@ -43,7 +38,7 @@ public override void CustomUpdate(ProjectileComponent component) if (component.currentTime > count / numSpawners) { count++; - ProjectileComponent newComp = new Projectile(Entity) + new Projectile { Start = component.transform.position, MaxTime = MaxTime - component.currentTime, diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs index e45cda7..44e99fb 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileDeathHex.cs @@ -7,10 +7,7 @@ namespace Projectiles { public class ProjectileDeathHex : Projectile { - - public ProjectileDeathHex() : this(GameManager.Boss.self) { } - - public ProjectileDeathHex(Entity self) : base(self) { + public ProjectileDeathHex() { MaxTime = 1f; Damage = 25f; OnDestroyTimeout = CallbackDictionary.SPAWN_6_CURVING; diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs index 6b0054a..abb6d6c 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileHoming.cs @@ -20,16 +20,12 @@ public class ProjectileHoming : Projectile // Was this projectile once close to the player? private bool wasClose; - public ProjectileHoming() : this(GameManager.Boss.self) { } - - public ProjectileHoming(Entity self) : base(self) { } - public override void CustomCreate(ProjectileComponent component) { - targetObject = component.data.Entity.GetFaction() == Entity.Faction.enemy ? GameManager.Player.gameObject : GameManager.Boss.gameObject; + targetObject = GameManager.Player.gameObject; // TODO maybe make me a customizable parameter? wasClose = false; curDivergence = 0f; - homingScale = (float)component.data.Speed / 7f; + homingScale = (float)component.data.Speed / 7f; // maybe make this one customizable too } public override Material CustomMaterial() { diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs index f952434..0e13e6c 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileLightning.cs @@ -16,11 +16,11 @@ public class ProjectileLightning : Projectile private int count; private readonly int numSpawners = 30; - public ProjectileLightning(int level=0) : this(GameManager.Boss.self, level) { } + public ProjectileLightning() : this(0, 1f) { } - public ProjectileLightning(Entity self, int level) : this(self, level, 1f) { } + private ProjectileLightning(int level) : this(level, 1f) { } - private ProjectileLightning(Entity self, int level, float initialMaxTime) : base(self) + private ProjectileLightning(int level, float initialMaxTime) { this.level = level; this.initialMaxTime = initialMaxTime; @@ -105,7 +105,7 @@ public override void CustomUpdate(ProjectileComponent component) return Merge( For(times, i => new Moves.Basic.Shoot1( - new ProjectileLightning(lightningSelf.Entity, lightningSelf.level + 1, lightningSelf.initialMaxTime - lightningSelf.MaxTime) + new ProjectileLightning(lightningSelf.level + 1, lightningSelf.initialMaxTime - lightningSelf.MaxTime) { Start = self.transform.position, Target = lightningSelf.initialTarget, diff --git a/Assets/Scripts/Boss Core/Routines.meta b/Assets/Scripts/Boss Core/Routines.meta new file mode 100644 index 0000000..c62da34 --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7382e9c48840d4a1cb3ed2cbd10f34a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Routines/Main.cs b/Assets/Scripts/Boss Core/Routines/Main.cs new file mode 100644 index 0000000..cad4e1c --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines/Main.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Routines +{ + public class Main : AIRoutine + { + public Main() + { + // TODO finish me (tutorial + main phase) + Phases = new List { + }; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Routines/Main.cs.meta b/Assets/Scripts/Boss Core/Routines/Main.cs.meta new file mode 100644 index 0000000..b316247 --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines/Main.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 064327c01ca8e4e988e8c26f59377fb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Routines/Test.cs b/Assets/Scripts/Boss Core/Routines/Test.cs new file mode 100644 index 0000000..6d85de1 --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines/Test.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Routines +{ + public class Test : AIRoutine + { + public Test() + { + Phases = new List { + new Phases.Phase_Test() + }; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Routines/Test.cs.meta b/Assets/Scripts/Boss Core/Routines/Test.cs.meta new file mode 100644 index 0000000..98f7c2f --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines/Test.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33b3d892d95214cec9e2bdaa467fd554 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Routines/Tutorial.cs b/Assets/Scripts/Boss Core/Routines/Tutorial.cs new file mode 100644 index 0000000..3f14d14 --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines/Tutorial.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Routines +{ + public class Tutorial : AIRoutine + { + public Tutorial() + { + Phases = new List { + new Phases.Phase_Tutorial_1(), + new Phases.Phase_Tutorial_2(), + new Phases.Phase_Tutorial_3() + }; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Routines/Tutorial.cs.meta b/Assets/Scripts/Boss Core/Routines/Tutorial.cs.meta new file mode 100644 index 0000000..fe2dad2 --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines/Tutorial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 709322f7cdbf14ba2b696e916327d3ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Routines/UnitTest.cs b/Assets/Scripts/Boss Core/Routines/UnitTest.cs new file mode 100644 index 0000000..a9741aa --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines/UnitTest.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Routines +{ + public class UnitTest : AIRoutine + { + public UnitTest() + { + // TODO finish me + Phases = new List { + }; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/Routines/UnitTest.cs.meta b/Assets/Scripts/Boss Core/Routines/UnitTest.cs.meta new file mode 100644 index 0000000..de1cea1 --- /dev/null +++ b/Assets/Scripts/Boss Core/Routines/UnitTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bed98f1c4db4f402ea23e502e1cb10ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat Core/StatusComponents/Reflecting.cs b/Assets/Scripts/Combat Core/StatusComponents/Reflecting.cs index 3b89000..8d76f82 100644 --- a/Assets/Scripts/Combat Core/StatusComponents/Reflecting.cs +++ b/Assets/Scripts/Combat Core/StatusComponents/Reflecting.cs @@ -23,6 +23,7 @@ public override void OnDamageTaken(Entity subject, Entity attacker, float rawDam public override void OnRevert(Entity subject) { + /* for (int i = -hitsAbsorbed / 2; i <= hitsAbsorbed / 2; i++) { //Projectile.spawnBasic(subject, subject.transform.position, subject.transform.forward, 2f, i * 30f, Speed.VERY_FAST); @@ -34,6 +35,7 @@ public override void OnRevert(Entity subject) AngleOffset = (i * 30f) }.Create(); } + */ subject.SetRooted (false); subject.SetInvincible (false); From ee82de38cb474cc24b9a951fad578e48482265d1 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Sun, 4 Nov 2018 20:41:36 -0600 Subject: [PATCH 15/33] WIP Lava test --- Assets/Art/Images.meta | 8 + Assets/Art/Images/flowmap.png | Bin 0 -> 32153 bytes Assets/Art/Images/flowmap.png.meta | 99 +++++ Assets/Art/Images/grid_small.png | Bin 0 -> 1174 bytes Assets/Art/Images/grid_small.png.meta | 88 +++++ Assets/Art/Images/lava.jpg | Bin 0 -> 162149 bytes Assets/Art/Images/lava.jpg.meta | 88 +++++ Assets/Art/Materials/Lava Material.mat | 82 +++++ Assets/Art/Materials/Lava Material.mat.meta | 8 + Assets/Art/Shaders/LavaShader.shader | 55 +++ Assets/Art/Shaders/LavaShader.shader.meta | 9 + Assets/Resources/Prefabs/City_Block_1.prefab | 2 +- Assets/Scenes/BossObserver.unity | 16 +- Assets/Scenes/BossScene.unity | 86 +---- Assets/Scenes/CityScene.unity | 4 +- Assets/Scenes/LavaScene.unity | 345 ++++++++++++++++++ Assets/Scenes/LavaScene.unity.meta | 7 + Assets/Scripts/Boss Core/AOE/AOEComponent.cs | 13 +- Assets/Scripts/Boss Core/BossController.cs | 22 +- .../Moves/Basic_Generators/ShootArc.cs | 1 + .../Boss Core/Moves/Tutorial2/Force_Block.cs | 6 +- .../Projectile/ProjectileComponent.cs | 13 +- Assets/Scripts/CityGen/CityGen.cs | 11 +- Assets/Scripts/User Input/Controller.cs | 336 ++++++++--------- Assets/Scripts/World/Arena.cs | 23 +- Packages/manifest.json | 4 + 26 files changed, 1051 insertions(+), 275 deletions(-) create mode 100644 Assets/Art/Images.meta create mode 100644 Assets/Art/Images/flowmap.png create mode 100644 Assets/Art/Images/flowmap.png.meta create mode 100644 Assets/Art/Images/grid_small.png create mode 100644 Assets/Art/Images/grid_small.png.meta create mode 100644 Assets/Art/Images/lava.jpg create mode 100644 Assets/Art/Images/lava.jpg.meta create mode 100644 Assets/Art/Materials/Lava Material.mat create mode 100644 Assets/Art/Materials/Lava Material.mat.meta create mode 100644 Assets/Art/Shaders/LavaShader.shader create mode 100644 Assets/Art/Shaders/LavaShader.shader.meta create mode 100644 Assets/Scenes/LavaScene.unity create mode 100644 Assets/Scenes/LavaScene.unity.meta diff --git a/Assets/Art/Images.meta b/Assets/Art/Images.meta new file mode 100644 index 0000000..949b3cb --- /dev/null +++ b/Assets/Art/Images.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b05facee10154c5aba7b0a1d19873fa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Images/flowmap.png b/Assets/Art/Images/flowmap.png new file mode 100644 index 0000000000000000000000000000000000000000..d71e01744df0752f51f8750ba5bf2d185537e689 GIT binary patch literal 32153 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 z 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 literal 0 HcmV?d00001 diff --git a/Assets/Art/Images/flowmap.png.meta b/Assets/Art/Images/flowmap.png.meta new file mode 100644 index 0000000..8f8e8c6 --- /dev/null +++ b/Assets/Art/Images/flowmap.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 5dfb91b1fe1e748adad4a3b7b2f0f22f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Images/grid_small.png b/Assets/Art/Images/grid_small.png new file mode 100644 index 0000000000000000000000000000000000000000..3b264cf73cf66e3dc992c12ef032fcffd55eea52 GIT binary patch literal 1174 zcmV;H1Zn$;P)4Tx062|}Rb6NtRTMtEb7vzY&QokOg>Hg1+lHrgWS zWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6wD^Ni=!>T7nL9I? zX}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8rehoBb*p;u8ID_yBf z0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J`jH<$>RKN5V(7Oq zK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYvwjAKwmYb0gKL(K8 z-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>!FI&AHCpoWI|RUq zx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVTrI(b06~u#xf1yS} z_UGdMvD``!0~u->P=lA4?YN`hilQ|3tHka)7T{2CGqw zjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^7T9R1gAN8V6s;5) zieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2bW$~+pTw@bIek?Zv zKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L_AC5qq~L$#SMj%U z$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=b6>{xYV#Ue-+LB$ z7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re4r3qYr~6#KE>;1F z`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+5K}u-6REM(K@W$s zrgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5h^QEb$V`rCQ-|7Z zS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX2i^rZ^Mu;6+rb@? zNPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV0id6JRZw95ZvX%Q zL`g(JR5%f1WME+U55#cr|33}HB2aW!N40ZnhqEk0LGje8;l-*0000007*qoM6N<$g8ZR7ivR!s literal 0 HcmV?d00001 diff --git a/Assets/Art/Images/grid_small.png.meta b/Assets/Art/Images/grid_small.png.meta new file mode 100644 index 0000000..741374e --- /dev/null +++ b/Assets/Art/Images/grid_small.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 334c920c4f79b43e0bbd954a46cd64ea +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Images/lava.jpg b/Assets/Art/Images/lava.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b699ef7923afec17bece31c7d1c3c04f4fc1c63 GIT binary patch literal 162149 zcmbTcWl&sC80I_ZV8Pv;;4Xs(2%g{$!3K92+$E4e1`irExVyVM6C^-z7+``s1kL8Z zyR}<&KizxZ)92Ia)78J~u6~|=yZ~kdTl77XKc=-xq*{ytaa@u7+dQ+ z9)N<3{9pMOsQ(HY1{xYFDjF6Lh>n4Sg@c2Qg^m3Rmk|FIE&(n!Ha;mn0TD3?2?-7! z896C2IUz9#@qdjVq5S&?6%7*&4U_m4_ABE5&+)epK!Aa~g1mx)#0WqpKtdrv`a1-m z0|1cF{-ORy`@aJT`ClK=ff$%r*#9at;{%Y9P*9LjQU2@ozuLk7z5`GR&fR-Lai~`{p#Bxam_5GMkg4*XK zR-Ut1q|8FwEEoTw{ZF$0cVH3!zsUX%*#G5P0pOq@{TnJ6oRG|*V7%}uB zAVv)>hilGUbftm%Y6fE~0d~!p97y3Bt5oL( z?v4=yfSFScKCp#1Nw^UmM$B!yzN%nP+F-ciylRS^PfAvL6vm6?=6aIxdUz{JWTuSk zYRlO){`{lsnkL{HN_45FO*XQW(VNh83d!Azo3a%_;r>LLPH8J$cXYA4 zvbY~jmh7@^2&Ou*(aX}ZTC(r@-0Mmh5lRW%O!xxgkb`NbAoX^KE)_nr*-;{tcnU?o zTf|ja5Q`;iV^uzyKK8pc4dzG=5`XGv52KEpwT_|_Z}%xz+mtE1Bq(hmZH^4b)i#Nw zf$$5-{a?T!-3Q~Q^LDm6C)LLHp{p^Q7s-NVF#MvVn~*oI803EeH$OE){rh*lZmSi( zjuiO1UWRBF7GlBl%w;Ua5R$$ z3cgrO6d;uZU~G9p-tiFQi~j`#u9PHlyfuWRTxL~8dIep;%#H13Q&O_&RIMZZXJj~% z!htv;rWeXXl~#hSNy#8YGeCR|WiSFA6IfTowl}kb7hozGU&``4Ev}5?QP^%VDu(7~ zdH4z-R7idmfrm&s(<;GaQDG{(nU);Up>VFW$SJLDevc?r79{+tmD4SOi&qVR$^D@V zxRYj2P)NJ5Xvi^s>yYtz#~b0hBWP$QJ%=6z=Qf*a5UTV#$qs6BRRsQcNmU!5jD`^& zynw0v_ClGPIFm*9APGYT?Lo4C+}MWb@a)BFQg#n1%b_c#j2(){nqftDXVkd;dh8=uxeIU8LXwn{(i^FpHe8vhzKadP9bAl^P5F6=~6Y( z69`;eDsbGyk~Aoe$xm0#Nqarmsn~^fd#o`pOdEL~IFvONv3@*~M;%6Zr;U2Aax9+v z^RR0ktMG(IdG#k9FD}LCLP{x?fbV5!CSsaA#h!!dKHw6Gw%OC3fPCN5V?^3CLi$r% zt!DQhyZk?tvUIWD9@Wru5=S zSj)$o=MF+M1^}A;SF|C`Tpu}*QUUSbGr7C!NqpbO4syb@)I3NTj8Kq2CN)tf1|P|P zvlWmOD98yK}o$)&&S3@#~#x*3=rv`{B-FtASEB>?`oqT}4#a zC^HmSN!W`1ZQ%0mb$=0mxkLcI|6PRv!wQ^8Y9z!WK=()7&{JnO(D*F?pFc9o-N!=x z7+go3GpWkyV{9L>H}hsh@a#l))nA6wQViZKr4wL%IrvAVpU$`*Ld|K1TDHexJ0$|B`CfQDH8y%BG7(U0H;@g#-Y>iYXv-cwRTj!m z?WXwD9hj;Df?UY~J`eL|x^MldE}5$349`#_&;xTFn~EfJZMV?<$oHda%3{pKg>5BH z(Dmt|DL*Sjg38DH4*6HU3PjTb3gSK2mC8%G3sS>3BwHk1A9l*ZlU_}k)c+ROtFOn( zrtQWoAzws(GZ-Ppv{-m0xa{eW=3xA$Q9Mj3V>&+clhEVQ@(d|X5rGZ3?{TzUdcUC6 zoM%y=*-ew!!UBqTz*{VzD9)z;E%ge*0+Z>RZvrciU+j_`k$_fNbX|m%@1!Yo~4emBv~mitf0T}v$btsK9D zt=T2f%_^pU!Q6T;&hCh30n`>E8q626Je#l4!d`g#w7L3r6UlM2A9@n)k#EGM>-f*Zpb79`UF_u_9BFdFFsm*8H2eY zOgE-MB6oHr^}uq zhFS2w!{rkrL6)Z+WA?HQsSw2hUsOc8IJKuS@%i?oI_w5QJ)e2VXegp2mWv5#YAR;L=eWS$mg}Z zQQ?8gj+DKGoBhCAUS0Q@W`p~nL$NEry(#t)8xaE*gDfQ)LbT3S!arK1Yj@#8Qa<2CP9^)*Y7BkDv_<<1__YEt z5JTXIt4_f=^79S@p zg*%nz6=cudTpxN;DP_h}$$Mhlr27r(+>6Sm(Cn#^7GF^8}L{{1qD4Cy%w+EmgXU(yhBRnMvW5fra_a{!Rb z^2Z^IM0ZbMH*1P*2caKKK6ony4cp%HLUDR>&a@C@Sink z37G0}Xm3Sk970Oe@OTMW`Z~!Z?|k8J9lWHkFVpFK4LVEMGmG3lqjp%CNqA1(Q5(Jd zn7J`1?Hru?`5aCBqfQ~gR$<(m^ys58^tEy7RZykKSKVT4IrUkC1K)LF zue;y=nYJr>NLo(^Z76e{bYxF5ZRbx3kkT>X_Y^5p@wfOCdcoxJd1le=gu1kbh$Hj& z@(b@d_Ms1Tzo=B;s9VA8t6>V-u}WIG;tz8h ztK(=3i&r=*s8E`Kr@lmuZUK_D)tpSd#xW_pYA?2_ngmcu9w!yWV2`frj4Xv%xn{EL z2SLxVyq%Yg|88A#TmiAC7u^TQN(2R!8e@Qnf=(Yj_it z*ua-+#cgAQNP8_D=Me4DcBxMVpM6Wt4MZ~wzprPM~hh-1YW@ow3!(%<&5OYK?AuarN{-3 zTpIj1Q3kD#rn$0bb4|BUwBI$>RM+MznRrA?Oj6zSvkcnJodcz z)5_a`+;*uckI&!dT~_wK&}<4^zm%SrZv2@;X!D{Dfsk?n*tuBI!(ZJ9ig)vVL>_0{pqsJK~0IA7JX?n4aWFne_gu`1{K-(JVS7 zFW}sbGGx}*cdoKZZ1{V{etUWJx)8jHTfpTB(zTC2O92ndgkj{I9U2WwieYmeyzMAH*u0icBlcV#J&aN(p)Vby--+oIpUbSfwBrxpg~)va^%c0Al?YklSqdR#85vBCvk6 zS#mnr-KSoXPW5MNI9ogy>i~XI@4jgO-b=UbdYr>x&fziCyOlrTTSTx!u3@}IXXE9I zV$ETQMf-|eP(I!|4sUCL0YJo3fL2MJHP$?`P`_<91gH=@F$ueFFx1Sn3+Gi>2MVYowx^RQS3U zk=JER$;x%-Jxgr%V&tQ6^(|Gc)W#8yY;e*|F$Q%55foV-_v=k>1hHwlzdT`o!{|}o zK+}|cHBo^+5lZ`4a0I&27DRKJNt6Z}!y}oIO1!=Hw8^X9UfTGf@4LNdnoiv+;%kC*XEkf#tXZ zhjDH(&=LfMrQ%66-uVXLxv56Qe2I;wU3%(V`(2s3RI06arGL+r< zMOE(L!+N_jXK$&$JfimtW`P6}&MhncuEK1%;HmOY7}1=LjI-|q8CCc)k-d1^tP!BQ z{f2x_k`e2vZ%BRS=Czh)aU=%mcP+h1mu+Vi;=RWXWubuvf0&ir^T+yuW21X)^R08= z$XA9g-yl}aO7qW54&8s5XfG@gJg1WKiJl5b*qsAHnvMG2 z2q={c8%0JSjg6L-R`AisLl$V;%Ax*RkUWX^*IaV5m5@o=`_e}L9Pt~;7d?{+hEL=$ zPfms7qI>#qoEih4V**%6v#p)c`J=vhy<>;V@Q}}J(<>o$G8}Vi=$#l!ZLvpvxpT5V z8|X|&qgchpjk-ouP-ISn^W-5?Te!&qi*KNf+4>>A^uZucJ=^~0*QJ&E>t*P>D;ye1 zfxm!sm80M@C)TcB?Q+B0RBCI__t*p}d-_;k?`J8E-Wl3xB?clL=*?migs-x8-Yws! z?yJsofeh!Tq_ByGg(k;%zmA?){OqhuO=1XhVI<*f*9EBDo$35C;vTVQ=|Ai z^9H_0Hx#HZm|RjbGa+OXo6hL-)Z;uB)##mQ%vZ>ny`M|o8S@)^P zTN<%Z5L|{n1-*eemZ^O+A<|E83~KG}IZOOOCEM)i-|&;5<9}MHd)8u16cBBr3$%jhJlx>Q`W&Vdd-0U% zUHOw?=qW?uyju`vZti%cA$(fuPn}5dg+_S_hCh~sL>}!c_W<(IV756Dk}i7U0&ou%PX)4mc*@abmZ!(D8;1atL_Oh}K@*RLm{whUsr-pLUiXt$ z+sZqT-e<_VF}$zOnz`Ra;_fC(3@X`G>t+OC)O=gH;9>L1>LX|aTfx1UF` z8p6Xuen0uMEp}0_bRSen>g{oc*!|8X3sWP!qHI(pP6-W%OY-f!8+O{|h(485c*;d4jFOmfuyhw-7&eN>hF5t?4626f{1zMI5v#lHb3f-o1i)ofv1Q z3!V?(13_DQpIup-qm{o~KF*hM^V567&5nV zSmRTE`>q$(ZMD12Wa6x{^hV%i=}8sKbChH?|NT{? zX1(V(D(#9}k!b%B)EO?*skJUk!Mz5rtD00cRxaX*+JstM3x71Oc4#iuxcUoV>hOGM zqM`KcOdnc$NqGse9=DxXZHcmKLmQ)N-val_{@dXpIcffGd8lf2{!u+R>RMbLFg!-mVMa^CiY?;USl>iDk$U{7d}vS18YY# z2cw*~>d*Jk+XDxUCyMgGt@>YPLUZ5;;V%bb4+dF(j<)}t=f%7#(&1PY$o!tH$VDCM zMf4DqBmCaYv1B1={5;Wy#V_r@<&@q{8|h^f#ltmY?KzayT_szd-ns z(o0Ab;j2A>C#TgxqjAXzo2=J8oNEYJ&yybli3lQncC8jkP40b9^0B=kX4}Ys{@My%$$T)s zVsUZD-kPP~n+{UqF`t#R)v*G-6nvY3g~?XBbYx(e%c`5?Ba{Jp1KI+IKfezolV%xJ zyB3i5|E;^N%Y#JI4%>0Gm*@V*2LOMkZIiUSDRY&>)MH`;z=0@vs%eLU?KGxj0QPsj zG{ZV9Bn7*B_01S4S7-WWwh<;7ks${?79KFwFK(Gmb>)Pdh*CDGIPvw5SGBpTN}4Cf zGGqBzI`pV%GbV`;?IwW^b|$FnJ)Z2@!CN>zHGaO0^7S;cCoxMv`C&;phNHlJFCS0) zZrZT&W%>Jxa0#gQH1nfj^cyC#$%Msk)S;qGI7*5X&#%cx82WA32feZ<$6IQeajfsDN)k^4GU5gbi=}4z^74}=K!Ozw(c~E%y;~iE;h{P zNGO*TPC{P@ zA+_)++sNGgKy0)#*rDoAOaKzm?_&@YXW@$#%d2Bce*xBG&zDUmpVSp)5kJC0v7CKv z4d4705JR9W?6k3K#c|xQ<~B5jdiToz_V6p;aTg14alp0idF-8Pjw0j{q*eMykn7l0 zm$yNTW=&%N1+Qj>{QgD6JfgCjGPQi;2pGlbRwCZ`eSU_DN=|1URm? zW`$t@G8wsxMPH zML-^KL1&^8rJL28KB-58eEU#rUbjV1Y1YOsY?7Dz zzWp|S!$Yxud*iA=3Lm}LX^uciA=epzL&!U62)_flE6bvK{BHF~z2D?>e$~Iru#rqSllB065nty0G{YFR{|r^O+=)dXRocJ98(&lUZ-I z|0G}e=Y&Tg>aJV!Kz_G4b}elVLCiFKnOu*kKeR+1EyIg#*VQ03n`aBW#{0G)2fbDf-ub7ULS3T_ zc^p$-)7S-JZxB0mJUzgIF=LEV*^r@dxr2cB3-u)&!1gZw zrf>ahK#xASB+D8-|Woh938ZTX!P zu&#{sVrgoU@VHZDcDN+1@?QX6vC)rXmY-*~F|x^SEZM%!;d$ws2?(P(Gy@A<_MIXI6% zPUw8Ln!NLUr_B4m0NIQ2`f$BLAGUm<`y!=q?3~Lxwq6;;RmC3`zY`UvKzOtF>&mrD z(@kDpS@+Xr&ghe2wJ;TZxl={Yq6_(Q?P{KrV7D4$293n7bSf~q#*%5M>o~4hz9Sno)Tztb6v(hY}zr`==#2z z@0Cw*UXoI+NL^b`J`5laqOMCkZZPrfa7mJaGFX^){L$1OkPknN|OjvohBcCcjdcD zmrqGwXb+YHEJD!BvGauYCTNPlsCM?SYVRVy+H*!_!xJ*6zpvh_xaucAv`5z;Pv9U+RB8?2jvZ$Ap^q~2xIR$Id}Y|k z?85TB%m$-EX#xb73Ke{7KrqbRG%LoDA#IWyfct!i$tx;1_L+d972H}ZV)U*+DJ>}; zmn=Ka%>U^%f$MT`{jR>nhlNT(Z`g;;Tp(O`ZaT4m)cQS0;uuv3#Vr^|< zV--Fa^lJtEm{v@3(Wl_MM(NYsd*Uz=*t%LLs?T45q|Q6Y)T|;Iq03qgB)NCjr}&Cz zzv^n#UvPD;Q;iwy95}v4j(d`lePuM2%t^w_nCSjyeDp|uRfTFtMBmz(fQ(6MT-W{|@L_8)uW@iNmUGe>hq*R*xLXca3( z9bh4?1VPr^bHNMEK`5rHmy4k4v?W;GI+ zl=`N(KFRBM+DpaPmzS$oBXp^Q*P~MY$R%kPF5&Sc=KNz4+17X#QlRUT4`-viQ7fMY zHHc@D4t&+NZwwa~k0T~uk4XEXAdRCYJ#$V$&paelk+75i*6@|ycLO`@;MXJF6lT0S zTOQ;AZN~AbhD}SJQ?15* zWtd}3Wq?!dX2CPj_PWwBr)8yl?#Hy+>0c)1+%HP7g!4(04|2-z`1R^>20H;~T#2A= zr5^_7TeYae+i`k#Q+6F*9P=)HDAW~^Kj@5)^eIZ4vwSu3xcUXhXxuqK#GwvGljCxj z{k!N`?lQ1q$imdo4&%XirSS@#fAsddUY>I5_vE5l!YsZGu8Y4yYNrM-a(g5}1)Xvp z9^zkhawGF5W6!sy1?#Q0>i1gzt=mU|OKulD&&@PmMrTIIJgQ}!P-wD-oXo?|iMJLa zlN1s(hBzsG<{l^J=E;^nIjCVfX}!B46g%j4lCGA=U{0OV?`BTEcgYGdVzw02Y;^ob z_u(4Wwuudd4PslRrjOyeyGq(M@+2_SpUc*Ijdr-J8BbGf_kttA9T3Wvci~r6nlK!ayo?l*hq$T~V8`|8 zB+)w#&AUHSRSx5o2D{^W^j!~2q<|$0MLDo7JOf`(s}L*1`_G`0k%MlipB=q>_|Wy` zNTNj|WaQZEhnAoP$e;R9Bt6#lztq(ub2MdA0Ek*W5uy3;i^|5e)f1I879#-_Md}3g zWyYMn>hHr{xh5bw50AX7xq@s8+&QKse|In{cqu-oQ4!A2u9&;;@Ri85s3HpB(YL15 zURk$R$iXE*1!Y_Bmjlvx^uKtk6eKfGMzZuy_%Z-5VB4Batn8tlyDi5ypwUtx{$gKi zuN5NW!5td*Gv+JjsWH|SNSH=wiN>DcqLY(%8Tp1nbAt%QfS^~4IA;H%BFt$R-lKT<);X(S(VNG^n21~HK#ZUt+Y9> z$U9uc-=>mE&&8IBvbSYFTjl=UuS24s2gtxkNUA?B`4beRDQvM@$nfgKHVYB%nI-df|LSiI zU#=kd>~XnE?Kucs)2aThZxOGW_M1QZXNq;>$O*;Z@ZJ4(?|K6TXMtbn-i-8K)sQA9`Y|hr$e|iK6Eoxx_G> zN*c>2(X$!7M9k$2P9#~V>b7eAz*2~7t@2c5!u5xwB-F6mHha5uRON#MuAdH>NJx)e zvF)c(JynU?8A#~ z6VGh#gK0N9ip{l=`tIG&F=+!(NWx1ugw&}qXpN4)=ie!nx|zrtIx*BhSe5utVun4Z zi9hxH!lPJgSbF%eePh>E`$SNBmg(XTLaJh98(Wp8|0BI`VkytEj91cqNJwf5c0(!) zc`hW(BYvGcPx7zatL?u4YNJ0{V)%+Br`q-Ycwyuh^O6MpGIMny^g--x zJqxbhQrtgFl3JVd-sR~@_l#cEa9!+uleiB10L1?m9v0@E6`S3l%-nwzZJEuTMj zN_=DWYL7N#Mm;sck9=5A#)P7TA8qt}oO|-fcWQiBH^t%(Ep{b4LsO@Sr;=7@$k^U=( zp7I_rt?2-hJefKQV-??e)c=xXrQ)t2rcGP_{*tmdY@18SLj2di00Gg}I-J*%4_9w6 z@!3j(>$O+S*ByNAXHC_d$NM>yEfAvO4sIp=*N44YztNY*GmHkVbGuODNb{i8S zirGjzC1|V9JBKRE6&M}U-PMGPwomr50ei}zyF>9M&;{$^#Kc~;ReSutqL061%bEdO z+-NWHUqI9?A9-_}>W;8|LA+QYA@3$jj7!mDsQA#u&dO*l*R9V0C+86EM=!ChXAJsX zgNfNeop>-CnayhH&BAjEU6xh7sj!M(L`uR+r)Q&!*{YY?ho)1@0j$K|k8h~y&a?{& zx@AWcjiR{TP;-F+=kA^|Fx8}mV+Irc^55N{+KP_lCz}D2r)GH+WR_g@VO~n-l zd4niYI20GeM*os3w3^FUWL-%edGH+i>}>$%({t%(292I)hid75z9e!CALDALxzG_* z;1DFin62?aKo{hsW*ehX9H@yFt6*Z6srbpU0u-OLt{>(JIoXYHe=N^<9CIk!;HP;x zORG%s!_0s*jtqEbBtVcDJa#^+np>o+W#`V0QSg$@tV)SXs;#P&Ikg(n5Jkq$4k@eo z3pig%s}fpXQKO1`H|gfW&jOAURe615dJQZIjz=1{F+)d+Q2f#N3CR%AOCjCtiZIGE zT6lN0Ya{aN<5NBkKyVosP-YWpt-+}rVwtMh{R*s3q><%jwjQ6Y;D~qUrJwV7|1?pz zHt9GqdFSa_CFYum>PtLcl)$}rN`Sy3_bDB9AbK+=bexRxQdRm-!_5a0-%i2l=w|?u zxB>1?-vu-lcFGlX=hBWkY@CyIao3(5hT~7$S*zAfnyV)V`qH2$Oa)^{DsK2VYBoBk zq}bVd*^7)ZMm>kgzu+jbtKkgx?>=_CJ?4vl?C+Ck$iJqBBpD@(wR&78x|0Kx%&%e> z=6RTc8F$u;lI+%u^xh02w;e*_-;58lYBMbe6-V0}gYJ|>u*Tj{e8@-8w6k3i%UXuI z5GhwM#!E^+=eMB-B1GAlm*RPgJ@td#R& znbb0hizXaXeOk5W1_Le^~H$R+-?$0Z`&o0{OJkP*S24&UrIuLl?munZd zk@?Z>KuF2&2SZX3d#K1*dA|h!&P@7Hj}ZP5gz{V-WOvT9bL^1T(ovG))z&e8Hkpc= zYlI=gL}yA@?6;8iNGS}4Ub}5e{`?#hZJ;Si`-yuLIM-I3Zs};LPuK*4yLLQH({fan z9h!|U(Q-f6O7ibKavn)^ld7qyjkS!m;pe;Go}*y{5OTlbPvKrFc&rFHjlT zk)XRid+WzF09w-rQs6rDMyq-6As{Fkv(5S~M&IXoRv4#Z^#%B|z1i~bZp#_wxQ|`C zI@^nrw_aaaw)VLo*c>2zCqIZjh{o*8bk zmoz*7B2<@Gebl};*VXSSFK0%-b@F@BDtJ#pC9WluWl|wv&tu7h=HvO^&AWPwMpJdx zpwx=ySueF&?jHED2I-UZr}y2li1!QhT}_>Ij^U}Fb*Q#eBtyO8rQ+Pla;dXmn#wjj zWLyIZG)nb%HH}-FC)nUhrP4nJAI^_uY~z^fB9G^slZj2A`a1DdZ+4-topU)?YhI`f z4=IryAJp56%?`9V)n1KeKo}!r`>waH;sXufa9 z3z$7Q*H-kb2jt-ena6Sqa1voLs@`w-cq{Y+a*L3irsm`xa~2qwFIrJ9Yu*2x*jfKr zS*^Zoipo+jjIlX7^rLAzG81703$W_NW58rLdM(E|0^i}780UTV3p;>Glxu%c=jJpi z$x7rggx8_9%fR((P`Fz(rRr9js3UtNEi812Ml9?$It6Etw(cr=ywa(be13F=LBfwl ztAlA0rq$|=#u?RnS(%^`qVh`sa1CTwZ_U7+9t{kI=k{*vpSUh!$7IX@&zgt6wNt&i7Fm@IA_zmUZ)2l+X01OG`J z{XSq7AbGXXxT7CoQJgU4ku-k+>o#vn{TQpuzIqjhi2Yr^n-C@Nt!P&SdF$qAEpUG1 z+>;4GL5~2vWd8+-dy!v#fQzZWkxi5exKLwf_!B28zGpx_M&ozGBup|bH6HYRHn&CT2iTo{lmT;td>T=4>-!78v3ItI4|R!PrN@FkPX{D{W@{<9EL z3L+A20wBI!;_VbBHrj0XRjE5e>|S*%>c|M38FDJcA*@LaXnXK3XH@W!VG@WOrC>XX z4ep@I)UyOxc`QBIcNoX9u~|!ROe4OHy_E)Md-qX$YLsyPa0&Xb-DVx-+GKxf-4w%M z6dN(W{f4C@fO3n)pPmH_{t?NTl9KXN(I%lAne5+RD@yP&o_)imc(35*-ppTzz4Z9E zf~rP{byn-!l*7({InCMH<}++3JQp{Ie0fKF{5gQ`mguh zELHS$M?>Min0w`aF#JK=305~UP%?4R!+$k8Mer3S=c$Cq8)(nN_d_u}=f3POH~9-F ziehHAsG}`qYP;FOI(Z=r((L&07tn%e%TlATp5L9`wJ+J8wA8if{gea+XA}C>N-qeT zbQ`XTb!KF$=;K0|BO{XsYhA@X=GxtB1uD&Sk0yAsU1rxeVQxp-jg;*?l$-?7gA=%+ zc-=nLCDXot0bv$1a~kxkU6tp82dhtxdYx%vBL49;U;6Y<@?Lr!Rp9m-X@l-&qG3w+ z!wLu?W(j=VbJ4It+U6Tl2m6E>Ud-|Kmf9;edpX5DoNp-jTS$Er{iDW0zlYK}!f$!$ zy+?utI9``#bA4jwjB5vgFX-l)t8C)uog}ro+r)jt+HEVNGS zVK2rnGOysIh?6ix1K0}ju2#wq^1sybf1^?t7<6ZwCs}X^h>t7}E^uoSO;ZN5&|;5j zs*8!Sm3WLO*xO4ppJ#M`-1Ku;dEHV*V2Y0`m^`5&CFKecUBrG*Sp-9_Q zNLM2Z3H@?$_s$<2f1t*%vB9xNjDNVc1-*rnBm`ZutjHCSG2`Uz_3w8J4hMV+uR49} zv-0jvz@m{$W3OOr1__wk?Xl9}l_TG`#5b{&Me-z2k4Yu(HNEFO{x~S#*Lc-R7IQT|Bbc(uGaoqB2v8I%;4D3l2k?Y z#pY!VBs=?IsZ4Y*htYv_gY)2B=6YAg#0lqDtTqakaM1O2)jD{awHoZ?_PVRN&EH1v zvIia(KnuUAh<1r~QPge>9wg`oRlim(7K0S`a;k5}^uaiXsqIU7Dz8L9vh(|TNY*@L|E zQp2@rJD+sYc_AW2U#_HVf!yUP8}-RGAG=}=3ZFtV_L^G*vv0vu3W*ULh8+BtyU!qD z;=|!x-0g-Ct1f8l>QC4CA(J!aIPM#C=iameZL@%+=QEF`L(ot%6H!BpD9Z9~h?h=T zaiMrne)a^4*5ss9ucSB8zt#7r=<*_p+^RKAV*6 z>%@_Nu9m?-sm22{`zix2S?+i#>E`(-&|-AVPN%szgH-e2=UjZjae8*zE;v(Ljk61n zeW3CgP3RU)yF#G8p?{Fz{D+iaXWOG5+F+K!Q3%O%xy0L~T)p~i@f)4^oP=syjzmnL zy>#<$8GFOX_(Le}!qxlc zJ-Ml_lQwkcKENE-+2ZH$_D~9=JW)bt&X%i=j1IDrnsE?SJ{?tPJN)40iQBl_m zo}wPNvfRcsyX&Quv$1gV`*m4wOd`5GbT_wI$og}LDP*p=amkJA?ZAdVBVkyBi?b`> zx?;{uYW5W)Iv`~t$~m-4rp8GK5v-rvdyZSK^lI#@?S0o`-nXZiIhP7`|6{;-(W7cr z`0o1N9hSeFYBSyK8_xalG7hMnmEzjn3xiJa(x+;g2;&ViL4-rD7G?P;Y7|XRNn@&$ z{rAnWgVOZ!BaRK|F|KG~W)CMK?o z;b2*<_2=!2tuG}*v<`Ym6NY?RTG_pKjnMRx87O$##4IrB1K>vnJ*BX7CTgr5 z{{yo?Our%ZKQW0pG28sAKRSC@Xl&tAShfkrE>o&tP`@`qvdq!yAUywItV**Y3CKbkNFj zyk%uhm3IXC$~rGwKhXL1HU?Ex0Iw^7*OAZp_NO$;@lBpyLZcr}b>~Z>6UK=ruSubf9 z2K${^mkZXz(VXyABU%u8xV?4jZSCfAV2ETGms=HM10_!G zNMMXQ{xy2jPm<{_CX#5-N3~i>vy8St1dRF;4m(s)LJtVUFl(t;+FF^IR15=Ppri`LzVeEug71=h&&xjMaEHm(@*fS{MpaTXXQkE#AKNm zqsGgEI30cIu`{d0>ci%Llri~FL&*B$k81S0pN<-awXe^At!N$|))M7_b-dG;a;W1A zB5iEr9FlrfTfYlgk(z*0C|T8cTNu=pTe~){9yWinQ>zbKw8X-OTY>{ zH>PvQ7(IBZu#GnQM~>4{lTA!-NiPsFI0Rri;PfP5FF%cFS$HlhnT#;_i%3DRWHFgM z&N483v&lUvR;xm!ZCO9Lo!D$9GKJ@clw4iYw4w73+rQAq4Js7ywP#ZN?$M35?(gzn zh|6VHw;PZU21(B~6fl`v9dporH25wS*#Ia>$sKYrPYV?2v6U=ak~(ew02=8$lD*12 zC6yd(=s3q;sQqcSTEyBt>{k|(d3R8fRoQcnD?y=+q*F0vK3`UlgN~ea2mb)AR4$s= zAV!<0MRRd=Ji%?I z8-N=JRczq%k-_GepwOa@eKS@|!!Qyhqc#3$Mhj18LP^k#b$?Kz5YjtOCt8+8K`W5D}cGk-j=#p)K%oqefPtI8X z0K410eJywKV^Y)Yt@J2nL#5b2En@{Xf}ud;@~@OMJB?Z$X2J_8UfS+Uq)ad%sV8n2 zAFoRHRq(y7x*xU6b#Zgal3z0leUx?;;ODq%bt*yEX~&|sUgy?umKugSjNTs)DNYaG za%nG<-u?X#Iry2X+Fxp6V}d(l8evvBGq|2fAg}f9TwF6U2;CUQ$PYNl1L<9F#M^%l z+3F~R&Ytcy+WTa{2RsAUBy(Immm*QL?o}M`ayNY|>vE{5;i96QkIZ{01RY0MEBj)z!`cy7V zyCZo56Tk=Z9Coi_=_|A0QgUf6%{ylEV85P3jf#XsWgsaeoPR9-6#>7Mqw-21kqP;; z_jAx5D@rd9$i4)=xC8fXdmL!$Lx(DjxD)B~3|Bj9&uNhFmn)U%ai4$ju4)ri9NK+t z_#@cNXiE(``iBjfI3JUem4w--^j;aO$@>9F(mG#dVs&z-mKcZPB#;V0Q{K7 zNB;n-k*yKFR#q%}bMlJoJYt{O*o@%dD1Z?($#opKOhoM*KwfY{-m&Sf7`1Esnnb z0R4JNu8EU)VJgS+k`Et^ScD{u4<$gz`VroXfcWt-M2WWaF3XO+Kc!Nh+&#ktQOV

6ALSokTQSz+++U$uUUIYCCu5?3@usI_Gy2^ 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

g3WlbZaHi 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 ar5yhNbpDlcBvWio26O3E$Qi8;Bmdd queuedSequences; private bool paused; - private bool running = true; + private bool running = true; + private bool shouldCancelCurrent = false; #region Debugging code that should be refactored soon™ // Debug code. Used to set the routine from the inspector rather than changing code. @@ -78,8 +79,12 @@ void Start() /* * Transitions to the next phase by loading in the next set of moves. */ - public void NextPhase() { + public void NextPhase() + { + Debug.Log("Next phase"); queuedSequences.Clear(); + StopAllCoroutines(); + StartCoroutine(ExecuteQueue()); routine.NextPhase(); @@ -96,6 +101,7 @@ public void NextPhase() { Add(new Moves.Basic.Teleport(World.Arena.CENTER).Wait(3f)); Add(new AISequence(() => { self.SetInvincible(false); })); } + Debug.Log("Queue length: " + queuedSequences.Count); } public void ResetBoss() @@ -103,11 +109,7 @@ public void ResetBoss() // Flush the execution engine // TODO: this might need more work to flush current attack. running = false; - StopCoroutine("Dash"); - StopCoroutine("Glare"); - StopCoroutine("Execute"); - StopCoroutine("ExecuteQueue"); - StopCoroutine("ExecuteAsync"); + StopAllCoroutines(); queuedSequences.Clear(); // Reset the routine and restart it @@ -204,6 +206,12 @@ private IEnumerator ExecuteQueue() /// The sequence to be executed. private IEnumerator Execute(AISequence sequence) { + Debug.Log("Executing " + sequence.Name); + if (shouldCancelCurrent) + { + yield return null; + } + if (sequence.events != null) { for (int i = 0; i < sequence.events.Length; i++) diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs b/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs index bb151d3..7cf8819 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs +++ b/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs @@ -28,6 +28,7 @@ public ShootArc(int density = 50, float from = 0, float to = 360, Projectile ske { Projectile newStruc = clone.Clone(); newStruc.AngleOffset = newStruc.AngleOffset + i; + UnityEngine.Debug.Log("Target: " + newStruc.Target.GetValue()); newStruc.Create(); } //long time = System.DateTime.Now.Ticks - start; diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial2/Force_Block.cs b/Assets/Scripts/Boss Core/Moves/Tutorial2/Force_Block.cs index 8bdd5bf..88981b8 100644 --- a/Assets/Scripts/Boss Core/Moves/Tutorial2/Force_Block.cs +++ b/Assets/Scripts/Boss Core/Moves/Tutorial2/Force_Block.cs @@ -14,8 +14,10 @@ public class Force_Block : AISequence { public Force_Block() : base ( - new Teleport().Wait(0.25f), - new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), + new Teleport().Wait(0.25f), + new PlayerLock(true), + new ShootArc(100, -90, 90, new Projectile { Size = Size.TINY }).Wait(0.1f).Times(10), + new PlayerLock(false), new Pause(4f) ) { diff --git a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs index 450a6f5..ef215a5 100644 --- a/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs +++ b/Assets/Scripts/Boss Core/Projectile/ProjectileComponent.cs @@ -12,6 +12,9 @@ public class ProjectileComponent : MonoBehaviour // The data representing this component's specific appearance and behavior. public Projectile data; + private Vector3 Start; + private Vector3 Target; + // Some cached GameObject values for increased performance. private Transform trans; private MeshRenderer rend; @@ -42,8 +45,8 @@ public void Initialize() { // Resolve the proxy variables for start and target // This also "locks" them so they don't keep updating. - data.Start = data.Start.GetValue(); - data.Target = data.Target.GetValue(); + Start = data.Start.GetValue(); + Target = data.Target.GetValue(); // Sets size (and assigns default material, if none set) gameObject.transform.localScale = SizeToScale(data.Size) * Vector3.one; @@ -77,8 +80,8 @@ public void Initialize() // Computes the starting position, rotation, and velocity. // Remove any height from the start and target vectors - Vector3 topDownSpawn = new Vector3(data.Start.x, 0, data.Start.z); - Vector3 topDownTarget = new Vector3(data.Target.x, 0, data.Target.z); + Vector3 topDownSpawn = new Vector3(Start.x, 0, Start.z); + Vector3 topDownTarget = new Vector3(Target.x, 0, Target.z); // Add in rotation offset from the angleOffset parameter Quaternion offset = Quaternion.AngleAxis(data.AngleOffset, Vector3.up); @@ -87,7 +90,7 @@ public void Initialize() // TODO update this to be rotation around the up axis to fix 180 degree bug Quaternion rotation = offset * Quaternion.FromToRotation(Vector3.forward, topDownTarget - topDownSpawn); - this.gameObject.transform.position = (Vector3)data.Start; + this.gameObject.transform.position = (Vector3)Start; this.gameObject.transform.rotation = rotation; //this.gameObject.GetComponent().velocity = rotation * (Vector3.forward * (float)data.speed); this.data.Velocity = rotation * (Vector3.forward * (float)data.Speed); diff --git a/Assets/Scripts/CityGen/CityGen.cs b/Assets/Scripts/CityGen/CityGen.cs index 74d0288..aaa2729 100644 --- a/Assets/Scripts/CityGen/CityGen.cs +++ b/Assets/Scripts/CityGen/CityGen.cs @@ -14,6 +14,9 @@ public class CityGen : MonoBehaviour { public float scale = 1f; private Vector3 offset = new Vector3(50, 0, 50); + public int Depth = 28; + public int MaxWidth = 8; + // Use this for initialization void Start () { arenaObjPrefab = Resources.Load("Models/City_Roundabout_Arena"); @@ -27,16 +30,16 @@ void Start () { initialTransforms.Add(arenaBlock.transform); //GameObject.Instantiate(blockPrefab, Vector3.zero, Quaternion.identity); - for (int depth = -1; depth < 28; depth++) + for (int depth = -1; depth < Depth; depth++) { - float maxWidth = Mathf.Max(8, scale * depth); + float maxWidth = Mathf.Max(MaxWidth, scale * depth); for (int width = (int)(-maxWidth); width <= maxWidth; width++) { if ((width == -1 || width == 0) && (depth == -1 || depth == 0)) { continue; } - GameObject newObj = GameObject.Instantiate(blockPrefab, offset + new Vector3(100f * width, 0f, 100f * depth), Quaternion.AngleAxis(Random.Range(0, 3) * 90f, Vector3.up)); + GameObject newObj = GameObject.Instantiate(blockPrefab, offset + new Vector3(200f * width, 0f, 200f * depth), Quaternion.AngleAxis(Random.Range(0, 3) * 90f, Vector3.up)); initialTransforms.Add(newObj.transform); } } @@ -44,7 +47,7 @@ void Start () { MoveDown(); } - private Vector3 finalOffset = new Vector3(0, -250, 0); + private Vector3 finalOffset = new Vector3(0, -1000, 0); bool shouldMove = true; private float currTime = 0f; private float maxTime = 5f; diff --git a/Assets/Scripts/User Input/Controller.cs b/Assets/Scripts/User Input/Controller.cs index 264e90a..30da17b 100644 --- a/Assets/Scripts/User Input/Controller.cs +++ b/Assets/Scripts/User Input/Controller.cs @@ -3,175 +3,179 @@ using UnityEngine; public class Controller : MonoBehaviour -{ - private const string ABILITY_1 = "Dash", ABILITY_2 = "Throw", ABILITY_3 = "Block"; - - [SerializeField] - private float dashRange = 15f; - - private Rigidbody physbody; - private Entity self; - - private Vector3 facePos; - private bool dashing; - - public void Awake() - { - physbody = GetComponent (); - self = GetComponent (); - dashing = false; - } - - public void Start() - { - self.AddAbility (Ability.Get (ABILITY_1)); - self.AddAbility (Ability.Get (ABILITY_2)); - self.AddAbility (Ability.Get (ABILITY_3)); - - self.tookDamage += Self_tookDamage; - self.died += Self_died; - } - - private void Self_died() - { - - } - - private void Self_tookDamage(Entity victim, Entity attacker, float rawDamage, float calcDamage, bool damageApplied, bool hitShields) - { - if (damageApplied) - { - CameraController.GetInstance ().Shake (1f, new Vector3 (rawDamage * 10f, rawDamage * 10f, rawDamage * 10f), 0.75f); - self.AddStatus (new Status ("Invincible", "", null, Status.DecayType.communal, 1, 0.25f, new CombatCore.StatusComponents.Invincible ())); - } - } - - public void Update() - { - if (dashing || self.IsRooted()) - return; - - if (Input.GetKey (KeyCode.Space)) - { - if (!self.GetAbility (ABILITY_1).Use (self, facePos, dashRange)) - { - //TODO play failed to use ability sound - } - } - if (Input.GetButtonDown("Fire1")) - { - if (!self.GetAbility (ABILITY_2).Use (self, facePos)) - { - //TODO play failed to use ability sound - } - } - if (Input.GetButtonDown("Fire2")) - { - if (!self.GetAbility (ABILITY_3).Use (self, facePos)) - { - //TODO play failed to use ability sound - } - } - } - - public IEnumerator Dashing(Vector3 targetPosition) - { - dashing = true; - physbody.velocity = Vector3.zero; - self.GetAbility (0).active = false; - self.SetInvincible (true); - - GameObject dashEffectPref = Resources.Load ("Prefabs/PlayerDashEffect"); - GameObject effect = Instantiate (dashEffectPref, gameObject.transform, false); - effect.transform.localPosition = new Vector3 (0f, 1f); - GetComponentInChildren ().enabled = false; - - Vector3 dashDir = (targetPosition - transform.position).normalized; - float accDist = 0f, maxDist = Vector3.Distance(targetPosition, transform.position); - while (accDist < maxDist) - { - float dashDistance = Mathf.Min(self.movespeed.Value * 4 * Time.deltaTime, maxDist - accDist); - RaycastHit hit; - if (Physics.Raycast (transform.position, dashDir, out hit, dashDistance, 1 << LayerMask.NameToLayer("Default"))) - { - transform.position = hit.point; - break; - } - - transform.position += dashDir * (dashDistance); - accDist += dashDistance; - yield return null; - } - - GetComponentInChildren ().enabled = true; - ParticleSystem.EmissionModule em = effect.GetComponentInChildren ().emission; - em.enabled = false; - Destroy (effect, self.GetAbility (0).cooldownMax); - - self.SetInvincible (false); - self.GetAbility (0).active = true; - physbody.velocity = Vector3.zero; - dashing = false; - } - - public void FixedUpdate() - { - if (dashing || self.IsRooted ()) - return; - - Ray camRay = Camera.main.ScreenPointToRay (Input.mousePosition); - Plane plane = new Plane (Vector3.up, Vector3.zero); - float dist; - if (plane.Raycast (camRay, out dist)) - { - facePos = camRay.origin + (dist * camRay.direction); - Vector3 dir; - if ((dir = (facePos - transform.position)).magnitude > dashRange) - { - facePos = transform.position + (dir.normalized * dashRange); - } - } - - //movement - Vector3 movementVector = new Vector3 (0f, physbody.velocity.y, 0f); - - float x = Input.GetAxisRaw ("Horizontal"); - float y = Input.GetAxisRaw ("Vertical"); - - movementVector += (Vector3.forward * y) + (Vector3.right * x); - GetComponent ().SetFloat ("SpeedPerc", Mathf.Abs (x) > 0f || Mathf.Abs (y) > 0f ? 1f : 0f); - - if (Mathf.Abs (x) > 0f || Mathf.Abs (y) > 0f) - transform.rotation = Quaternion.LookRotation (movementVector, Vector3.up); - - physbody.velocity = movementVector.normalized * self.movespeed.Value; - } - - public Vector3 GetDashTargetPoint() - { - return facePos; - } - - private void facePoint(Vector3 point) - { - Quaternion rot = Quaternion.LookRotation (point - transform.position, Vector3.up); - transform.rotation = rot; - transform.rotation = Quaternion.Euler (0f, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z); - } - - public void OnDrawGizmos() - { - UnityEditor.Handles.color = Color.green; - UnityEditor.Handles.DrawWireArc (facePos, Vector3.up, Vector3.forward, 360f, 1f); - - UnityEditor.Handles.color = Color.red; - UnityEditor.Handles.DrawWireArc (new Vector3(transform.position.x, 0f, transform.position.z), Vector3.up, Vector3.forward, 360f, dashRange); - +{ + private const string ABILITY_1 = "Dash", ABILITY_2 = "Throw", ABILITY_3 = "Block"; + + [SerializeField] + private float dashRange = 15f; + + private Rigidbody physbody; + private Entity self; + + private Vector3 facePos; + private bool dashing; + + public void Awake() + { + physbody = GetComponent(); + self = GetComponent(); + dashing = false; + } + + public void Start() + { + self.AddAbility(Ability.Get(ABILITY_1)); + self.AddAbility(Ability.Get(ABILITY_2)); + self.AddAbility(Ability.Get(ABILITY_3)); + + self.tookDamage += Self_tookDamage; + self.died += Self_died; + } + + private void Self_died() + { + + } + + private void Self_tookDamage(Entity victim, Entity attacker, float rawDamage, float calcDamage, bool damageApplied, bool hitShields) + { + if (damageApplied) + { + CameraController.GetInstance().Shake(1f, new Vector3(rawDamage * 10f, rawDamage * 10f, rawDamage * 10f), 0.75f); + self.AddStatus(new Status("Invincible", "", null, Status.DecayType.communal, 1, 0.25f, new CombatCore.StatusComponents.Invincible())); + } + } + + public void Update() + { + if (dashing || self.IsRooted()) + return; + + if (Input.GetKey(KeyCode.Space)) + { + if (!self.GetAbility(ABILITY_1).Use(self, facePos, dashRange)) + { + //TODO play failed to use ability sound + } + } + if (Input.GetButtonDown("Fire1")) + { + if (!self.GetAbility(ABILITY_2).Use(self, facePos)) + { + //TODO play failed to use ability sound + } + } + if (Input.GetButtonDown("Fire2")) + { + if (!self.GetAbility(ABILITY_3).Use(self, facePos)) + { + //TODO play failed to use ability sound + } + } + } + + public IEnumerator Dashing(Vector3 targetPosition) + { + dashing = true; + physbody.velocity = Vector3.zero; + self.GetAbility(0).active = false; + self.SetInvincible(true); + + GameObject dashEffectPref = Resources.Load("Prefabs/PlayerDashEffect"); + GameObject effect = Instantiate(dashEffectPref, gameObject.transform, false); + effect.transform.localPosition = new Vector3(0f, 1f); + GetComponentInChildren().enabled = false; + + Vector3 dashDir = (targetPosition - transform.position).normalized; + float accDist = 0f, maxDist = Vector3.Distance(targetPosition, transform.position); + while (accDist < maxDist) + { + float dashDistance = Mathf.Min(self.movespeed.Value * 4 * Time.deltaTime, maxDist - accDist); + RaycastHit hit; + if (Physics.Raycast(transform.position, dashDir, out hit, dashDistance, 1 << LayerMask.NameToLayer("Default"))) + { + transform.position = hit.point; + break; + } + + transform.position += dashDir * (dashDistance); + accDist += dashDistance; + yield return null; + } + + GetComponentInChildren().enabled = true; + ParticleSystem.EmissionModule em = effect.GetComponentInChildren().emission; + em.enabled = false; + Destroy(effect, self.GetAbility(0).cooldownMax); + + self.SetInvincible(false); + self.GetAbility(0).active = true; + physbody.velocity = Vector3.zero; + dashing = false; + } + + public void FixedUpdate() + { + if (dashing || self.IsRooted()) + return; + + Ray camRay = Camera.main.ScreenPointToRay(Input.mousePosition); + Plane plane = new Plane(Vector3.up, Vector3.zero); + float dist; + if (plane.Raycast(camRay, out dist)) + { + facePos = camRay.origin + (dist * camRay.direction); + Vector3 dir; + if ((dir = (facePos - transform.position)).magnitude > dashRange) + { + facePos = transform.position + (dir.normalized * dashRange); + } + } + + //movement + Vector3 movementVector = new Vector3(0f, physbody.velocity.y, 0f); + + float x = Input.GetAxisRaw("Horizontal"); + float y = Input.GetAxisRaw("Vertical"); + + movementVector += (Vector3.forward * y) + (Vector3.right * x); + GetComponent().SetFloat("SpeedPerc", Mathf.Abs(x) > 0f || Mathf.Abs(y) > 0f ? 1f : 0f); + + if (Mathf.Abs(x) > 0f || Mathf.Abs(y) > 0f) + transform.rotation = Quaternion.LookRotation(movementVector, Vector3.up); + + physbody.velocity = movementVector.normalized * self.movespeed.Value; + } + + public Vector3 GetDashTargetPoint() + { + return facePos; + } + + private void facePoint(Vector3 point) + { + Quaternion rot = Quaternion.LookRotation(point - transform.position, Vector3.up); + transform.rotation = rot; + transform.rotation = Quaternion.Euler(0f, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z); + } + + public void OnDrawGizmos() + { + UnityEditor.Handles.color = Color.green; + UnityEditor.Handles.DrawWireArc(facePos, Vector3.up, Vector3.forward, 360f, 1f); + + UnityEditor.Handles.color = Color.red; + UnityEditor.Handles.DrawWireArc(new Vector3(transform.position.x, 0f, transform.position.z), Vector3.up, Vector3.forward, 360f, dashRange); + + if (!UnityEditor.EditorApplication.isPlaying) + { + return; + } GameObject shield = GameManager.PlacedShield; if (shield != null) { UnityEditor.Handles.color = Color.blue; UnityEditor.Handles.DrawWireArc(shield.transform.position, Vector3.up, Vector3.forward, 360f, 5f); - } - } + } + } } diff --git a/Assets/Scripts/World/Arena.cs b/Assets/Scripts/World/Arena.cs index 7082ff0..8a55d8e 100644 --- a/Assets/Scripts/World/Arena.cs +++ b/Assets/Scripts/World/Arena.cs @@ -53,7 +53,11 @@ public float RadiusInWorldUnits { ARENA_SCALE = value; maxArea = ARENA_SCALE * ARENA_SCALE / DEFAULT_ARENA_SCALE / DEFAULT_ARENA_SCALE * Mathf.PI; - StartCoroutine(ChangeArenaSize(GameManager.Player.GetComponent().HealthPerc * maxArea)); + if (GameManager.Player.GetComponent()) + { + StartCoroutine(ChangeArenaSize(GameManager.Player.GetComponent().HealthPerc * maxArea)); + } + } } @@ -63,14 +67,23 @@ public void Start() transform.localScale = Vector3.one * maxRadius; maxArea = Mathf.PI * maxRadius * maxRadius; - if(GameManager.Player != null) - GameManager.Player.GetComponent().tookDamage += OnPlayerDamageTaken; + if (GameManager.Player != null) + { + if (GameManager.Player.GetComponent() != null) + { + GameManager.Player.GetComponent().tookDamage += OnPlayerDamageTaken; + } + } } public void OnDestroy() { - if (GameManager.Player != null) - GameManager.Player.GetComponent().tookDamage -= OnPlayerDamageTaken; + if (GameManager.Player != null) + { + if (GameManager.Player.GetComponent() != null) { + GameManager.Player.GetComponent().tookDamage -= OnPlayerDamageTaken; + } + } } public void Update() diff --git a/Packages/manifest.json b/Packages/manifest.json index 87d75f9..c2ce345 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -10,6 +10,10 @@ "com.unity.timeline": "1.1.0", "com.unity.ugui": "1.0.0", "com.unity.postprocessing": "2.0.16-preview", + "com.unity.ads": "2.0.8", + "com.unity.analytics": "2.0.16", + "com.unity.postprocessing": "2.0.16-preview", + "com.unity.purchasing": "2.0.3", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", From 3d9b393da3a2f7be2fb388f37eb03be7cadaeed2 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Mon, 5 Nov 2018 13:47:19 -0600 Subject: [PATCH 16/33] Moved AI-specific logic (Moves, Phases, Routines) into AI folder. Began adding SequenceDictionary moves into Unsorted folder. --- Assets/Scripts/Boss Core/{ => AI}/Moves.meta | 0 .../Boss Core/{ => AI}/Moves/Basic.meta | 0 .../Boss Core/{ => AI}/Moves/Basic/AOE_120.cs | 0 .../{ => AI}/Moves/Basic/AOE_120.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Basic/AOE_131.cs | 0 .../{ => AI}/Moves/Basic/AOE_131.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Basic/AOE_360.cs | 0 .../{ => AI}/Moves/Basic/AOE_360.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Basic/AOE_90.cs | 0 .../{ => AI}/Moves/Basic/AOE_90.cs.meta | 0 .../{ => AI}/Moves/Basic/Shoot_2_Waves.cs | 0 .../Moves/Basic/Shoot_2_Waves.cs.meta | 0 .../{ => AI}/Moves/Basic/Shoot_Death_Hex.cs | 4 +- .../Moves/Basic/Shoot_Death_Hex.cs.meta | 0 .../{ => AI}/Moves/Basic/Shoot_Split_6.cs | 0 .../Moves/Basic/Shoot_Split_6.cs.meta | 0 .../Moves/Basic/Shoot_Split_6_Curve.cs | 0 .../Moves/Basic/Shoot_Split_6_Curve.cs.meta | 0 .../Moves/Basic/Shoot_Wave_Middle_Gap.cs | 0 .../Moves/Basic/Shoot_Wave_Middle_Gap.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Basic/Sweep.cs | 0 .../{ => AI}/Moves/Basic/Sweep.cs.meta | 0 .../Moves/Basic/Sweep_Back_And_Forth.cs | 0 .../Moves/Basic/Sweep_Back_And_Forth.cs.meta | 0 .../{ => AI}/Moves/Basic/Sweep_Both.cs | 0 .../{ => AI}/Moves/Basic/Sweep_Both.cs.meta | 0 .../{ => AI}/Moves/Basic_Generators.meta | 0 .../Moves/Basic_Generators/MoveCamera.cs | 0 .../Moves/Basic_Generators/MoveCamera.cs.meta | 0 .../{ => AI}/Moves/Basic_Generators/Pause.cs | 0 .../Moves/Basic_Generators/Pause.cs.meta | 0 .../Moves/Basic_Generators/PlayerLock.cs | 0 .../Moves/Basic_Generators/PlayerLock.cs.meta | 0 .../{ => AI}/Moves/Basic_Generators/Shoot1.cs | 0 .../Moves/Basic_Generators/Shoot1.cs.meta | 0 .../{ => AI}/Moves/Basic_Generators/Shoot3.cs | 0 .../Moves/Basic_Generators/Shoot3.cs.meta | 0 .../Moves/Basic_Generators/ShootAOE.cs | 0 .../Moves/Basic_Generators/ShootAOE.cs.meta | 0 .../Moves/Basic_Generators/ShootArc.cs | 4 - .../Moves/Basic_Generators/ShootArc.cs.meta | 0 .../Basic_Generators/ShootHomingStrafe.cs | 0 .../ShootHomingStrafe.cs.meta | 0 .../Moves/Basic_Generators/ShootLine.cs | 0 .../Moves/Basic_Generators/ShootLine.cs.meta | 0 .../Moves/Basic_Generators/ShootWall.cs | 0 .../Moves/Basic_Generators/ShootWall.cs.meta | 0 .../{ => AI}/Moves/Basic_Generators/Strafe.cs | 0 .../Moves/Basic_Generators/Strafe.cs.meta | 0 .../Moves/Basic_Generators/Teleport.cs | 0 .../Moves/Basic_Generators/Teleport.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Test.meta | 0 .../{ => AI}/Moves/Test/Double_Laser_Sweep.cs | 0 .../Moves/Test/Double_Laser_Sweep.cs.meta | 0 .../Moves/Test/Double_Laser_Sweep_AOE.cs | 0 .../Moves/Test/Double_Laser_Sweep_AOE.cs.meta | 0 .../{ => AI}/Moves/Test/Horseshoe_AOE.cs | 1 + .../{ => AI}/Moves/Test/Horseshoe_AOE.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Test/Laser.cs | 0 .../{ => AI}/Moves/Test/Laser.cs.meta | 0 .../Moves/Test/Laser_Sweep_With_AOE.cs | 0 .../Moves/Test/Laser_Sweep_With_AOE.cs.meta | 0 .../{ => AI}/Moves/Test/Lightning_Arena.cs | 0 .../Moves/Test/Lightning_Arena.cs.meta | 0 .../{ => AI}/Moves/Test/Lightning_With_AOE.cs | 0 .../Moves/Test/Lightning_With_AOE.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Test/Pincer.cs | 0 .../{ => AI}/Moves/Test/Pincer.cs.meta | 0 .../{ => AI}/Moves/Test/Pincer_Sweep.cs | 0 .../{ => AI}/Moves/Test/Pincer_Sweep.cs.meta | 0 .../Moves/Test/Player_Strafe_Waves.cs | 0 .../Moves/Test/Player_Strafe_Waves.cs.meta | 0 .../{ => AI}/Moves/Test/Quick_Waves.cs | 0 .../{ => AI}/Moves/Test/Quick_Waves.cs.meta | 0 .../{ => AI}/Moves/Test/Random_Leading.cs | 0 .../Moves/Test/Random_Leading.cs.meta | 0 .../{ => AI}/Moves/Test/ReverseTest.cs | 0 .../{ => AI}/Moves/Test/ReverseTest.cs.meta | 0 .../{ => AI}/Moves/Test/Sniper_Final.cs | 0 .../{ => AI}/Moves/Test/Sniper_Final.cs.meta | 0 .../Scripts/Boss Core/AI/Moves/Test/Test.cs | 36 +++++ .../{ => AI}/Moves/Test/Test.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Tutorial1.meta | 0 .../Moves/Tutorial1/Shoot_1_Several.cs | 0 .../Moves/Tutorial1/Shoot_1_Several.cs.meta | 0 .../Moves/Tutorial1/Shoot_3_Several.cs | 0 .../Moves/Tutorial1/Shoot_3_Several.cs.meta | 0 .../{ => AI}/Moves/Tutorial1/Shoot_Arc.cs | 0 .../Moves/Tutorial1/Shoot_Arc.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Tutorial2.meta | 0 .../{ => AI}/Moves/Tutorial2/Force_Block.cs | 0 .../Moves/Tutorial2/Force_Block.cs.meta | 0 .../Boss Core/{ => AI}/Moves/Tutorial3.meta | 0 .../{ => AI}/Moves/Tutorial3/Shoot_AOE.cs | 0 .../Moves/Tutorial3/Shoot_AOE.cs.meta | 0 .../Scripts/Boss Core/AI/Moves/Unsorted.meta | 8 ++ .../AI/Moves/Unsorted/Big_Homing_Strafe.cs | 30 ++++ .../Moves/Unsorted/Big_Homing_Strafe.cs.meta | 11 ++ .../Boss Core/AI/Moves/Unsorted/Dash_Test.cs | 25 ++++ .../AI/Moves/Unsorted/Dash_Test.cs.meta | 11 ++ .../Boss Core/AI/Moves/Unsorted/Death_Hex.cs | 37 +++++ .../AI/Moves/Unsorted/Death_Hex.cs.meta | 11 ++ .../AI/Moves/Unsorted/Double_Hex_Curve.cs | 32 +++++ .../Moves/Unsorted/Double_Hex_Curve.cs.meta | 11 ++ .../Moves/Unsorted/Double_Hex_Curve_Hard.cs | 36 +++++ .../Unsorted/Double_Hex_Curve_Hard.cs.meta | 11 ++ .../AI/Moves/Unsorted/Hex_Curve_Intro.cs | 33 +++++ .../AI/Moves/Unsorted/Hex_Curve_Intro.cs.meta | 11 ++ .../AI/Moves/Unsorted/Jump_Rope_Fast.cs | 35 +++++ .../AI/Moves/Unsorted/Jump_Rope_Fast.cs.meta | 11 ++ .../AI/Moves/Unsorted/Shoot3_Wave3.cs | 30 ++++ .../AI/Moves/Unsorted/Shoot3_Wave3.cs.meta | 11 ++ .../AI/Moves/Unsorted/Shoot_Hex_Curve.cs | 30 ++++ .../AI/Moves/Unsorted/Shoot_Hex_Curve.cs.meta | 11 ++ .../AI/Moves/Unsorted/Wave_Circle.cs | 47 +++++++ .../AI/Moves/Unsorted/Wave_Circle.cs.meta | 11 ++ Assets/Scripts/Boss Core/{ => AI}/Phases.meta | 0 .../Boss Core/{ => AI}/Phases/Phase_Test.cs | 0 .../{ => AI}/Phases/Phase_Test.cs.meta | 0 .../Boss Core/AI/Phases/Phase_Test_Latest.cs | 16 +++ .../AI/Phases/Phase_Test_Latest.cs.meta | 11 ++ .../{ => AI}/Phases/Phase_Tutorial_1.cs | 0 .../{ => AI}/Phases/Phase_Tutorial_1.cs.meta | 0 .../{ => AI}/Phases/Phase_Tutorial_2.cs | 0 .../{ => AI}/Phases/Phase_Tutorial_2.cs.meta | 0 .../{ => AI}/Phases/Phase_Tutorial_3.cs | 0 .../{ => AI}/Phases/Phase_Tutorial_3.cs.meta | 0 .../Scripts/Boss Core/{ => AI}/Routines.meta | 0 .../Boss Core/{ => AI}/Routines/Main.cs | 0 .../Boss Core/{ => AI}/Routines/Main.cs.meta | 0 .../Boss Core/{ => AI}/Routines/Test.cs | 0 .../Boss Core/{ => AI}/Routines/Test.cs.meta | 0 .../Boss Core/AI/Routines/TestLatest.cs | 18 +++ .../Boss Core/AI/Routines/TestLatest.cs.meta | 11 ++ .../Boss Core/{ => AI}/Routines/Tutorial.cs | 0 .../{ => AI}/Routines/Tutorial.cs.meta | 0 .../Boss Core/{ => AI}/Routines/UnitTest.cs | 0 .../{ => AI}/Routines/UnitTest.cs.meta | 0 .../Scripts/Boss Core/AI/Routines/Unsorted.cs | 19 +++ .../Boss Core/AI/Routines/Unsorted.cs.meta | 11 ++ .../Boss Core/AI/SequenceDictionary.cs | 133 +----------------- Assets/Scripts/Boss Core/BossController.cs | 70 ++++++--- Assets/Scripts/Boss Core/Moves/Test/Test.cs | 43 ------ 143 files changed, 630 insertions(+), 200 deletions(-) rename Assets/Scripts/Boss Core/{ => AI}/Moves.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/AOE_120.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/AOE_120.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/AOE_131.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/AOE_131.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/AOE_360.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/AOE_360.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/AOE_90.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/AOE_90.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_2_Waves.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_2_Waves.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_Death_Hex.cs (72%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_Death_Hex.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_Split_6.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_Split_6.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_Split_6_Curve.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_Split_6_Curve.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_Wave_Middle_Gap.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Shoot_Wave_Middle_Gap.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Sweep.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Sweep.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Sweep_Back_And_Forth.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Sweep_Back_And_Forth.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Sweep_Both.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic/Sweep_Both.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/MoveCamera.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/MoveCamera.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Pause.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Pause.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/PlayerLock.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/PlayerLock.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Shoot1.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Shoot1.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Shoot3.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Shoot3.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootAOE.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootAOE.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootArc.cs (80%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootArc.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootHomingStrafe.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootHomingStrafe.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootLine.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootLine.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootWall.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/ShootWall.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Strafe.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Strafe.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Teleport.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Basic_Generators/Teleport.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Double_Laser_Sweep.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Double_Laser_Sweep.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Double_Laser_Sweep_AOE.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Double_Laser_Sweep_AOE.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Horseshoe_AOE.cs (94%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Horseshoe_AOE.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Laser.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Laser.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Laser_Sweep_With_AOE.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Laser_Sweep_With_AOE.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Lightning_Arena.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Lightning_Arena.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Lightning_With_AOE.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Lightning_With_AOE.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Pincer.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Pincer.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Pincer_Sweep.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Pincer_Sweep.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Player_Strafe_Waves.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Player_Strafe_Waves.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Quick_Waves.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Quick_Waves.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Random_Leading.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Random_Leading.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/ReverseTest.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/ReverseTest.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Sniper_Final.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Sniper_Final.cs.meta (100%) create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs rename Assets/Scripts/Boss Core/{ => AI}/Moves/Test/Test.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial1.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial1/Shoot_1_Several.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial1/Shoot_1_Several.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial1/Shoot_3_Several.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial1/Shoot_3_Several.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial1/Shoot_Arc.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial1/Shoot_Arc.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial2.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial2/Force_Block.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial2/Force_Block.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial3.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial3/Shoot_AOE.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Moves/Tutorial3/Shoot_AOE.cs.meta (100%) create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs.meta create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs.meta rename Assets/Scripts/Boss Core/{ => AI}/Phases.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Phases/Phase_Test.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Phases/Phase_Test.cs.meta (100%) create mode 100644 Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs create mode 100644 Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs.meta rename Assets/Scripts/Boss Core/{ => AI}/Phases/Phase_Tutorial_1.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Phases/Phase_Tutorial_1.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Phases/Phase_Tutorial_2.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Phases/Phase_Tutorial_2.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Phases/Phase_Tutorial_3.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Phases/Phase_Tutorial_3.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Routines.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Routines/Main.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Routines/Main.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Routines/Test.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Routines/Test.cs.meta (100%) create mode 100644 Assets/Scripts/Boss Core/AI/Routines/TestLatest.cs create mode 100644 Assets/Scripts/Boss Core/AI/Routines/TestLatest.cs.meta rename Assets/Scripts/Boss Core/{ => AI}/Routines/Tutorial.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Routines/Tutorial.cs.meta (100%) rename Assets/Scripts/Boss Core/{ => AI}/Routines/UnitTest.cs (100%) rename Assets/Scripts/Boss Core/{ => AI}/Routines/UnitTest.cs.meta (100%) create mode 100644 Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs create mode 100644 Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs.meta delete mode 100644 Assets/Scripts/Boss Core/Moves/Test/Test.cs diff --git a/Assets/Scripts/Boss Core/Moves.meta b/Assets/Scripts/Boss Core/AI/Moves.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves.meta rename to Assets/Scripts/Boss Core/AI/Moves.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/AOE_120.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/AOE_120.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/AOE_120.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/AOE_120.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_120.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/AOE_131.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/AOE_131.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/AOE_131.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/AOE_131.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_131.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/AOE_360.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/AOE_360.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/AOE_360.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/AOE_360.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_360.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/AOE_90.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/AOE_90.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/AOE_90.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/AOE_90.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/AOE_90.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_2_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_2_Waves.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_2_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_2_Waves.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_2_Waves.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs similarity index 72% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_Death_Hex.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs index a37902e..12cdaf9 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Death_Hex.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs @@ -13,9 +13,9 @@ namespace Moves.Basic { public class Shoot_Death_Hex : AISequence { - public Shoot_Death_Hex() : base + public Shoot_Death_Hex(float maxTime = 1f) : base ( - new Shoot1(new ProjectileDeathHex()).Wait(1f) + new Shoot1(new ProjectileDeathHex() { MaxTime = maxTime }).Wait(1f) ) { Description = "Shoots a high-damage projectile that splits into 6 curving projectiles with trails."; diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Death_Hex.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_Death_Hex.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Death_Hex.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Split_6.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_Split_6.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Split_6.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_Split_6.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Split_6_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_Split_6_Curve.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Split_6_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_Split_6_Curve.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Split_6_Curve.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Wave_Middle_Gap.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_Wave_Middle_Gap.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Shoot_Wave_Middle_Gap.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Shoot_Wave_Middle_Gap.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Shoot_Wave_Middle_Gap.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Sweep.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Sweep.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Sweep_Back_And_Forth.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Sweep_Back_And_Forth.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Sweep_Back_And_Forth.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Sweep_Back_And_Forth.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Back_And_Forth.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Sweep_Both.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Sweep_Both.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic/Sweep_Both.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic/Sweep_Both.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic/Sweep_Both.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/MoveCamera.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/MoveCamera.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/MoveCamera.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/MoveCamera.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/MoveCamera.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Pause.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Pause.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Pause.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Pause.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Pause.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Pause.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Pause.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Pause.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/PlayerLock.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/PlayerLock.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot1.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot1.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot1.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot1.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot1.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot3.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot3.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot3.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Shoot3.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Shoot3.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootAOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootAOE.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootAOE.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootAOE.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootAOE.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs similarity index 80% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs index 7cf8819..a1d7811 100644 --- a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs @@ -11,7 +11,6 @@ public ShootArc(int density = 50, float from = 0, float to = 360, Projectile ske ( () => { - //long start = System.DateTime.Now.Ticks; GameManager.Boss.Glare(); // Ensure that "from" is always less than "to". @@ -28,11 +27,8 @@ public ShootArc(int density = 50, float from = 0, float to = 360, Projectile ske { Projectile newStruc = clone.Clone(); newStruc.AngleOffset = newStruc.AngleOffset + i; - UnityEngine.Debug.Log("Target: " + newStruc.Target.GetValue()); newStruc.Create(); } - //long time = System.DateTime.Now.Ticks - start; - //UnityEngine.Debug.Log("Time taken : " + (time / 10000f / 1000f)); } ) { diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootArc.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootArc.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootHomingStrafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootHomingStrafe.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootHomingStrafe.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootHomingStrafe.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootHomingStrafe.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootLine.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootLine.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootLine.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootLine.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootLine.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootWall.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootWall.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootWall.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/ShootWall.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/ShootWall.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Strafe.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Strafe.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Strafe.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Strafe.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Strafe.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs diff --git a/Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Basic_Generators/Teleport.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Basic_Generators/Teleport.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test.meta b/Assets/Scripts/Boss Core/AI/Moves/Test.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Double_Laser_Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Double_Laser_Sweep.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Double_Laser_Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Double_Laser_Sweep.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Double_Laser_Sweep_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Double_Laser_Sweep_AOE.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Double_Laser_Sweep_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Double_Laser_Sweep_AOE.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Double_Laser_Sweep_AOE.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs similarity index 94% rename from Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs index 1bc847f..2c06a80 100644 --- a/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs @@ -8,6 +8,7 @@ using Moves.Basic; using Projectiles; +// TODO unfinished namespace Moves.Test { public class Horseshoe_AOE : AISequence diff --git a/Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Horseshoe_AOE.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Horseshoe_AOE.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Laser.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Laser.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Laser.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Laser.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Laser.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Laser_Sweep_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Laser_Sweep_With_AOE.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Laser_Sweep_With_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Laser_Sweep_With_AOE.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Laser_Sweep_With_AOE.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Lightning_Arena.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Lightning_Arena.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Lightning_Arena.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Lightning_Arena.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_Arena.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Lightning_With_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Lightning_With_AOE.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Lightning_With_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Lightning_With_AOE.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Lightning_With_AOE.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Pincer.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Pincer.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Pincer.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Pincer.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Pincer_Sweep.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Pincer_Sweep.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Pincer_Sweep.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Pincer_Sweep.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Pincer_Sweep.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Player_Strafe_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Player_Strafe_Waves.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Player_Strafe_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Player_Strafe_Waves.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Player_Strafe_Waves.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Quick_Waves.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Quick_Waves.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Quick_Waves.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Quick_Waves.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Quick_Waves.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Random_Leading.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Random_Leading.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Random_Leading.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Random_Leading.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Random_Leading.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/ReverseTest.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/ReverseTest.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/ReverseTest.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/ReverseTest.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/ReverseTest.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Test/Sniper_Final.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Sniper_Final.cs rename to Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs diff --git a/Assets/Scripts/Boss Core/Moves/Test/Sniper_Final.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Sniper_Final.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Sniper_Final.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs new file mode 100644 index 0000000..915c778 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using Moves.Basic; +using Projectiles; +using AOEs; +using BossCore; +using static BossController; + +namespace Moves.Test +{ + public class Test : AISequence + { + public Test() : base + ( + //Pause(1f), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 15 + (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -15 - (6 * i) }).Wait(0.05f) + ) + ), + For(10, i => + Merge( + new Shoot1(new Projectile { AngleOffset = 75 - (6 * i) }).Wait(0.05f), + new Shoot1(new Projectile { AngleOffset = -75 + (6 * i) }).Wait(0.05f) + ) + ), + new ShootAOE(new AOE { FixedWidth = 3f }.On(-60, 60)) + ) + { + } + } +} diff --git a/Assets/Scripts/Boss Core/Moves/Test/Test.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Test/Test.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Test/Test.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial1.meta b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial1.meta rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial1.meta diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_1_Several.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_1_Several.cs rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_1_Several.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_1_Several.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_1_Several.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_3_Several.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_3_Several.cs rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_3_Several.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_3_Several.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_3_Several.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_Arc.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_Arc.cs rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_Arc.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial1/Shoot_Arc.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial1/Shoot_Arc.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial2.meta b/Assets/Scripts/Boss Core/AI/Moves/Tutorial2.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial2.meta rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial2.meta diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial2/Force_Block.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial2/Force_Block.cs rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial2/Force_Block.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial2/Force_Block.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial2/Force_Block.cs.meta diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial3.meta b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial3.meta rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial3.meta diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial3/Shoot_AOE.cs b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial3/Shoot_AOE.cs rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs diff --git a/Assets/Scripts/Boss Core/Moves/Tutorial3/Shoot_AOE.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Moves/Tutorial3/Shoot_AOE.cs.meta rename to Assets/Scripts/Boss Core/AI/Moves/Tutorial3/Shoot_AOE.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted.meta new file mode 100644 index 0000000..53d20ea --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 19f0eee5fa4144939b234a29e52ef22f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs new file mode 100644 index 0000000..29912a8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using static World.Arena; +using Projectiles; + +namespace Moves.User +{ + public class Big_Homing_Strafe : AISequence + { + public Big_Homing_Strafe() : base + ( + new MoveCamera(false, new Vector3(0, 17.5f, -35f)).Wait(1f), + new Teleport(NORTH_FAR).Wait(1f), + new ShootHomingStrafe(strafeAmount: 65).Times(10), + new Teleport(NORTH_FAR).Wait(1f), + new ShootHomingStrafe(strafeAmount: 15).Times(15), + new MoveCamera(true).Wait(2f) + ) + { + Description = "Does a circle along the outside of the arena, shooting homing projectiles at the player."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs.meta new file mode 100644 index 0000000..26d7550 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Big_Homing_Strafe.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38f04ae34b2a24e4583f6af97baef312 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs new file mode 100644 index 0000000..1515fb6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs @@ -0,0 +1,25 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Dash_Test : AISequence + { + public Dash_Test() : base + ( + new ShootAOE(new AOE { Start = GameManager.Player.transform.position, OuterSpeed = Speed.FAST, FixedWidth = 2f }.On(0, 360f) ), + new Pause(0.75f) + ) + { + Description = "Aggressively tests dashing."; + Difficulty = 8f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs.meta new file mode 100644 index 0000000..01368d6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Dash_Test.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a230885efa9f04c25aa2deebc7f6009f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs new file mode 100644 index 0000000..25141dd --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + /* + * A really intricate pattern. 6 projectiles that explode into 6 more projectiles, + * repeated twice to forme a lattice. Safe spot is a midpoint between any two of + * the first projectiles, near the far edge of the arena. + * + * ** This might have changed due to the way ShootDeathHex was implemented. + */ + public class Death_Hex : AISequence + { + public Death_Hex() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot_Death_Hex(2f).Wait(1f), + new Shoot_Death_Hex(1f).Wait(2f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(1f), + new ShootArc(50, 0, 360, new Projectile { MaxTime = 0.25f }).Wait(0.75f) + ) + { + Description = "Fires 6 projectiles that explode into 6 more projectiles, repeated twice to form a lattice."; + Difficulty = 9f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs.meta new file mode 100644 index 0000000..4fd3096 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Death_Hex.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af6de9d59d1e340dca3eb7a5794efb47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs new file mode 100644 index 0000000..58d7c07 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Double_Hex_Curve : AISequence + { + public Double_Hex_Curve() : base + ( + new Teleport(CENTER).Wait(1.5f), + new PlayerLock(true), + new Shoot_Hex_Curve(true), + new AOE_360().Wait(0.5f), + new Shoot_Hex_Curve(true, 30f).Wait(0.5f), + new AOE_360().Wait(1f), + new AOE_360().Wait(1f), + new PlayerLock(false) + ) + { + Description = "Fires two hex curves, the second offset 30 degrees from the first."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs.meta new file mode 100644 index 0000000..036459d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd7f511867c014f278d55f64ce328dae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs new file mode 100644 index 0000000..0cff6b1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Double_Hex_Curve_Hard : AISequence + { + public Double_Hex_Curve_Hard() : base + ( + new Teleport(CENTER).Wait(0.5f), + new Shoot_Hex_Curve(false, 0f), + new Shoot_Hex_Curve(false, 30f), + // This homing might be too hard; especially with this amount of 360s. + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(10), + new AOE_360(), + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), + new AOE_360(), + new Shoot3(new ProjectileHoming { Size = Size.MEDIUM }).Wait(0.1f).Times(5), + new AOE_360().Wait(0.5f), + new AOE_360().Wait(0.5f) + ) + { + Description = "A harder variant of the double hex curve."; + Difficulty = 10f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs.meta new file mode 100644 index 0000000..82d5370 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Double_Hex_Curve_Hard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f8f7a93b4c2a445bbc3108fadbf883f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs new file mode 100644 index 0000000..ba2dd7d --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Hex_Curve_Intro : AISequence + { + public Hex_Curve_Intro() : base + ( + new Shoot_Hex_Curve(true), + new AOE_360().Wait(2.5f), + new Shoot_Hex_Curve(false), + new AOE_360().Wait(2.5f), + new Shoot_Hex_Curve(true), + new AOE_360(), + new Shoot_Hex_Curve(false).Wait(1f), + new AOE_360().Wait(1f), + new AOE_360().Wait(1.5f), + new Teleport().Wait(0.5f) + ) + { + Description = "Introduces the player to the hex curve attack"; + Difficulty = 4f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs.meta new file mode 100644 index 0000000..01a8073 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Hex_Curve_Intro.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34ab945d52f724b6495892198c8eef6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs new file mode 100644 index 0000000..ba2ec91 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Jump_Rope_Fast : AISequence + { + public Jump_Rope_Fast() : base + ( + new MoveCamera(false, new Vector3(0, 17.5f, -35)).Wait(1f), + new Teleport(WEST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(EAST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(WEST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new Teleport(EAST_FAR, 35), + new ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), + new MoveCamera(true) + ) + { + Description = "Fires lines at the player from the left and right."; + Difficulty = 4f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs.meta new file mode 100644 index 0000000..6821eb8 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Jump_Rope_Fast.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b0799783c67046f4a5f1f04a27b1ee2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs new file mode 100644 index 0000000..a6b1e90 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static BossController; + +namespace Moves.Unsorted +{ + public class Shoot3_Wave3 : AISequence + { + public Shoot3_Wave3() : base + ( + new Teleport().Wait(0.5f), + new AOE_360(), + new Shoot3().Wait(0.1f).Times(20), + new AOE_360(), + new Shoot3().Wait(0.1f).Times(20), + new AOE_360().Wait(0.5f) + ) + { + Description = "40 basic bullets, with a 360 wave at the start, middle, and end."; + Difficulty = 3f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs.meta new file mode 100644 index 0000000..bfe53d6 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot3_Wave3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcb3841cf08f64f0b98ce3c11109f231 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs new file mode 100644 index 0000000..caacf4e --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; + +namespace Moves.Unsorted +{ + public class Shoot_Hex_Curve : AISequence + { + public Shoot_Hex_Curve(bool clockwise=true, float offset=0f) : base + ( + ForConcurrent(6, i => + new Shoot1( + new ProjectileCurving((float)Speed.MEDIUM * (clockwise ? 1 : -1) * 2f, true) { + MaxTime = 5f, AngleOffset = offset + ((clockwise ? 1 : -1) * i * 60f) + } + ) + ) + ) + { + Description = "Shoots 6 curving projectiles " + (clockwise ? "clockwise" : "counterclockwise") + " from the boss's location."; + Difficulty = 3f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs.meta new file mode 100644 index 0000000..e8de7a1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Shoot_Hex_Curve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f927d8c238bc442ebbd7a3e08dadfca3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs new file mode 100644 index 0000000..ca68ad1 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; +using AOEs; +using BossCore; +using Moves.Basic; +using Projectiles; +using static World.Arena; + +namespace Moves.Unsorted +{ + public class Wave_Circle : AISequence + { + + private class Slow_Wave_Circle : AISequence { + public Slow_Wave_Circle() : base + ( + new ShootAOE(new AOE { OuterSpeed = Speed.MEDIUM_SLOW, FixedWidth = 5f }.On(0, 360)), + new Strafe(true, 60f, 50).Wait(0.5f) + ) + { + Description = "Fires a medium-slow AOE, and then strafes 60 degrees clockwise."; + Difficulty = 2f; + } + } + + public Wave_Circle() : base + ( + new Teleport(WEST_MED), + new Slow_Wave_Circle().Times(6), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), + new Slow_Wave_Circle().Times(3), + new ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW) + ) + { + Description = "Fires six slow circles around the arena in a circular pattern. Then repeats twice, with lines appearing on the left and right sides."; + Difficulty = 5f; + } + } +} diff --git a/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs.meta b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs.meta new file mode 100644 index 0000000..e47b7bc --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Moves/Unsorted/Wave_Circle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04c02d677a15844a2957185ce382513d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Phases.meta b/Assets/Scripts/Boss Core/AI/Phases.meta similarity index 100% rename from Assets/Scripts/Boss Core/Phases.meta rename to Assets/Scripts/Boss Core/AI/Phases.meta diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Test.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test.cs similarity index 100% rename from Assets/Scripts/Boss Core/Phases/Phase_Test.cs rename to Assets/Scripts/Boss Core/AI/Phases/Phase_Test.cs diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Test.cs.meta b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Phases/Phase_Test.cs.meta rename to Assets/Scripts/Boss Core/AI/Phases/Phase_Test.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs new file mode 100644 index 0000000..f558d42 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Phases +{ + public class Phase_Test_Latest : AIPhase + { + public Phase_Test_Latest() + { + AddSequence(10, new Moves.Test.Test()); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs.meta b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs.meta new file mode 100644 index 0000000..8761b6f --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Phases/Phase_Test_Latest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d92fe43022884d4198bbd4433c1e632 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_1.cs similarity index 100% rename from Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs rename to Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_1.cs diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs.meta b/Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_1.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Phases/Phase_Tutorial_1.cs.meta rename to Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_1.cs.meta diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_2.cs similarity index 100% rename from Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs rename to Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_2.cs diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs.meta b/Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_2.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Phases/Phase_Tutorial_2.cs.meta rename to Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_2.cs.meta diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs b/Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_3.cs similarity index 100% rename from Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs rename to Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_3.cs diff --git a/Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs.meta b/Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_3.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Phases/Phase_Tutorial_3.cs.meta rename to Assets/Scripts/Boss Core/AI/Phases/Phase_Tutorial_3.cs.meta diff --git a/Assets/Scripts/Boss Core/Routines.meta b/Assets/Scripts/Boss Core/AI/Routines.meta similarity index 100% rename from Assets/Scripts/Boss Core/Routines.meta rename to Assets/Scripts/Boss Core/AI/Routines.meta diff --git a/Assets/Scripts/Boss Core/Routines/Main.cs b/Assets/Scripts/Boss Core/AI/Routines/Main.cs similarity index 100% rename from Assets/Scripts/Boss Core/Routines/Main.cs rename to Assets/Scripts/Boss Core/AI/Routines/Main.cs diff --git a/Assets/Scripts/Boss Core/Routines/Main.cs.meta b/Assets/Scripts/Boss Core/AI/Routines/Main.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Routines/Main.cs.meta rename to Assets/Scripts/Boss Core/AI/Routines/Main.cs.meta diff --git a/Assets/Scripts/Boss Core/Routines/Test.cs b/Assets/Scripts/Boss Core/AI/Routines/Test.cs similarity index 100% rename from Assets/Scripts/Boss Core/Routines/Test.cs rename to Assets/Scripts/Boss Core/AI/Routines/Test.cs diff --git a/Assets/Scripts/Boss Core/Routines/Test.cs.meta b/Assets/Scripts/Boss Core/AI/Routines/Test.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Routines/Test.cs.meta rename to Assets/Scripts/Boss Core/AI/Routines/Test.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/Routines/TestLatest.cs b/Assets/Scripts/Boss Core/AI/Routines/TestLatest.cs new file mode 100644 index 0000000..daf0fb9 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Routines/TestLatest.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Routines +{ + public class TestLatest : AIRoutine + { + public TestLatest() + { + Phases = new List { + new Phases.Phase_Test_Latest() + }; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Routines/TestLatest.cs.meta b/Assets/Scripts/Boss Core/AI/Routines/TestLatest.cs.meta new file mode 100644 index 0000000..9fd3315 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Routines/TestLatest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 065b6694ce967423bb79478207deab14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/Routines/Tutorial.cs b/Assets/Scripts/Boss Core/AI/Routines/Tutorial.cs similarity index 100% rename from Assets/Scripts/Boss Core/Routines/Tutorial.cs rename to Assets/Scripts/Boss Core/AI/Routines/Tutorial.cs diff --git a/Assets/Scripts/Boss Core/Routines/Tutorial.cs.meta b/Assets/Scripts/Boss Core/AI/Routines/Tutorial.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Routines/Tutorial.cs.meta rename to Assets/Scripts/Boss Core/AI/Routines/Tutorial.cs.meta diff --git a/Assets/Scripts/Boss Core/Routines/UnitTest.cs b/Assets/Scripts/Boss Core/AI/Routines/UnitTest.cs similarity index 100% rename from Assets/Scripts/Boss Core/Routines/UnitTest.cs rename to Assets/Scripts/Boss Core/AI/Routines/UnitTest.cs diff --git a/Assets/Scripts/Boss Core/Routines/UnitTest.cs.meta b/Assets/Scripts/Boss Core/AI/Routines/UnitTest.cs.meta similarity index 100% rename from Assets/Scripts/Boss Core/Routines/UnitTest.cs.meta rename to Assets/Scripts/Boss Core/AI/Routines/UnitTest.cs.meta diff --git a/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs b/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs new file mode 100644 index 0000000..21c5a20 --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +using AI; + +namespace Routines +{ + public class Unsorted : AIRoutine + { + public Unsorted() + { + Phases = new List + { + new AIPhase().AddSequence(10, new Moves.Unsorted.Double_Hex_Curve_Hard()) + }; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs.meta b/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs.meta new file mode 100644 index 0000000..22c34cd --- /dev/null +++ b/Assets/Scripts/Boss Core/AI/Routines/Unsorted.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e96f9ceb6527411aac08a3087d572a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs index bfd0f9c..5939e39 100644 --- a/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs +++ b/Assets/Scripts/Boss Core/AI/SequenceDictionary.cs @@ -17,15 +17,6 @@ namespace AI { public partial class AISequence { - - //public static Move DASH_TEST = new Move( - // 8f, - // "DASH_TEST", - // "Aggressively tests dashing.", - // new AISequence(() => { - // return ShootAOE(AOE.New(self).Start(GameManager.Player.transform.position).On(0, 360f).Speed(Speed.FAST).FixedWidth(2f)).Wait(0.75f); - // }) - //); //#region Building Block Sequences @@ -43,61 +34,6 @@ public partial class AISequence //#region Full Moveset Sequences - ///* - // * 40 basic bullets, with a 360 wave at the start, middle, and end. - // */ - //public static Move SHOOT3_WAVE3 = new Move( - // 3, - // "SHOOT3_WAVE3", - // "40 basic bullets, with a 360 wave at the start, middle, and end.", - // new AISequence( - // Teleport().Wait(0.5f), - // AOE_360, - // Shoot3().Wait(0.1f).Times(20), - // AOE_360, - // Shoot3().Wait(0.1f).Times(20), - // AOE_360.Wait(0.5f) - // ) - //); - - //public static Move HEX_CURVE_INTRO = new Move( - // 4, - // "HEX_CURVE_INTRO", - // "Introduces the player to the hex curve attack", - // new AISequence( - // ShootHexCurve(true), - // AOE_360.Wait(2.5f), - // ShootHexCurve(false), - // AOE_360.Wait(2.5f), - // ShootHexCurve(true), - // AOE_360, - // ShootHexCurve(false).Wait(1f), - // AOE_360.Wait(1f), - // AOE_360.Wait(1.5f), - // Teleport().Wait(0.5f) - // ) - //); - - //public static AISequence BIG_HOMING_STRAFE = new AISequence( - // CameraMove(false, new Vector3(0, 17.5f, -35f)).Wait(1f), - // Teleport(NORTH_FAR).Wait(1f), - // ShootHomingStrafe(strafeAmount: 65).Times(10), - // Teleport(NORTH_FAR).Wait(1f), - // ShootHomingStrafe(strafeAmount: 15).Times(15), - // CameraMove(true).Wait(2f) - //); - - //public static AISequence DOUBLE_HEX_CURVE = new AISequence( - // Teleport(CENTER).Wait(1.5f), - // PlayerLock(true), - // ShootHexCurve(true), - // AOE_360.Wait(0.5f), - // ShootHexCurve(true, New(self).AngleOffset(30f)).Wait(0.5f), - // AOE_360.Wait(1f), - // AOE_360.Wait(1f), - // PlayerLock(false) - //); - //public static AISequence HOMING_STRAFE_WAVE_SHOOT = new Move( // 5.5f, // "HOMING_STRAFE_WAVE_SHOOT", @@ -107,74 +43,7 @@ public partial class AISequence // ShootHomingStrafe(strafeAmount: 15).Wait(0.01f).Times(15).Wait(0.3f), // This is hard; adding wait is reasonable // SHOOT_2_WAVES.Times(2) // ) - //); - - ///* - // * A really intricate pattern. 6 projectiles that explode into 6 more projectiles, - // * repeated twice to forme a lattice. Safe spot is a midpoint between any two of - // * the first projectiles, near the far edge of the arena. - // * - // * ** This might have changed due to the way ShootDeathHex was implemented. - // */ - //public static AISequence DEATH_HEX = new AISequence( - // 9, - // Teleport(CENTER).Wait(0.5f), - // ShootDeathHex(2f).Wait(1f), - // ShootDeathHex(1f).Wait(2f), - // ShootArc(skeleton: New(self).MaxTime(0.25f)).Wait(1f), - // ShootArc(skeleton: New(self).MaxTime(0.25f)).Wait(1f), - // ShootArc(skeleton: New(self).MaxTime(0.25f)).Wait(0.75f) - //); - - ///* - // * Fires six slow circles around the arena in a circular pattern. - // * Then repeats twice, with lines appearing on the left and right sides. - // */ - //public static AISequence WAVE_CIRCLE = new AISequence(5, - // Teleport(WEST_MED), - // SLOW_WAVE_CIRCLE.Times(6), - // SLOW_WAVE_CIRCLE.Times(3), - // ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), - // SLOW_WAVE_CIRCLE.Times(3), - // ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW), - // SLOW_WAVE_CIRCLE.Times(3), - // ShootLine(50, 75f, Vector3.left, Speed.MEDIUM_SLOW), - // SLOW_WAVE_CIRCLE.Times(3), - // ShootLine(50, 75f, Vector3.right, Speed.MEDIUM_SLOW) - //); - - //public static AISequence JUMP_ROPE_FAST = new AISequence( - // 4, - // CameraMove(false, new Vector3(0, 17.5f, -35)).Wait(1f), - // Teleport(WEST_FAR, 35), - // ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - // Teleport(EAST_FAR, 35), - // ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - // Teleport(WEST_FAR, 35), - // ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - // Teleport(EAST_FAR, 35), - // ShootLine(50, 100f, speed: Speed.SNIPE).Times(2), - // CameraMove(true) - //); - - //public static AISequence DOUBLE_HEX_CURVE_HARD = new AISequence( - // 10, - // Teleport(CENTER).Wait(1f), - // ShootHexCurve(true, New(self).AngleOffset(0f)).Wait(0.5f), - // ShootHexCurve(true, New(self).AngleOffset(30f)), - // SHOOT3_WAVE3, - // Teleport(CENTER), - // ShootHexCurve(false, New(self).AngleOffset(0f)), - // ShootHexCurve(false, New(self).AngleOffset(30f)), - // // This homing might be too hard; especially with this amount of 360s. - // Shoot3(New(self).Size(Size.MEDIUM).Homing()).Wait(0.1f).Times(10), - // AOE_360, - // Shoot3(New(self).Size(Size.MEDIUM).Homing()).Wait(0.1f).Times(5), - // AOE_360, - // Shoot3(New(self).Size(Size.MEDIUM).Homing()).Wait(0.1f).Times(5), - // AOE_360.Wait(0.5f), - // AOE_360.Wait(0.5f) - //); + //); //public static AISequence JUMP_ROPE_SLOW_CIRCLES = new AISequence(5.5f, // Teleport(WEST_FAR), diff --git a/Assets/Scripts/Boss Core/BossController.cs b/Assets/Scripts/Boss Core/BossController.cs index 92b21ae..917d748 100644 --- a/Assets/Scripts/Boss Core/BossController.cs +++ b/Assets/Scripts/Boss Core/BossController.cs @@ -29,8 +29,7 @@ public class BossController : MonoBehaviour // Event queue variables. This is how we schedule our attacks. private Queue queuedSequences; private bool paused; - private bool running = true; - private bool shouldCancelCurrent = false; + private bool running = true; #region Debugging code that should be refactored soon™ // Debug code. Used to set the routine from the inspector rather than changing code. @@ -38,7 +37,9 @@ private enum _Routine { Tutorial, //Main, Test, + TestLatest, //UnitTest + Unsorted, } [SerializeField] private _Routine Routine = _Routine.Tutorial; @@ -60,6 +61,8 @@ void Start() //AIPhase.Load(); Profiler.EndSample(); + + //AISequence.ShouldAllowInstantiation = true; switch (Routine) { case _Routine.Tutorial: @@ -68,6 +71,12 @@ void Start() case _Routine.Test: routine = new Routines.Test(); break; + case _Routine.TestLatest: + routine = new Routines.TestLatest(); + break; + case _Routine.Unsorted: + routine = new Routines.Unsorted(); + break; } //AISequence.ShouldAllowInstantiation = false; @@ -107,12 +116,11 @@ public void NextPhase() public void ResetBoss() { // Flush the execution engine - // TODO: this might need more work to flush current attack. running = false; StopAllCoroutines(); queuedSequences.Clear(); - // Reset the routine and restart it + // Reset the routine and restart it from the first phase routine.Reset(); // Restart the execution engine @@ -125,30 +133,60 @@ public void ResetBoss() private void Add(AISequence sequence) { // Debug mode provides additional information when executing an event. + // TODO: possibly move this into a static analysis done when loading in an AIPhase/AIRoutine. if (GameManager.Boss.DebugMode) { if (sequence == null) { Debug.LogError("Null AISequence added to queue."); return; - } + } + + // "glue" AISequences are special: AISequences followed by "Then" or "Wait" + // won't have descriptions, but can be identified by being direct instances + // of the "AISequence" class (vs. subclasses for every other move). + // + // These guys don't need to have a valid difficulty or description. + bool isGlueSequence = sequence.Name.Equals("AISequence"); + + // Warn about unnamed sequences. By default, this shouldn't be called; the standard name is valid. + if (sequence.Name == null) + { + Debug.LogWarning("Found AISequence without a name. Description: " + sequence.Description ?? "not provided."); + } - // Generate warning if there's a named sequence without a description. + // Warn if there's a named sequence without a description. // - // Note that "glue" AISequences are allowed; those that don't subclass AISequence - // don't need to provide a description. This includes subclassed AISequences that - // have additional Wait()s or Then()s called. - if (sequence.Description == null && !sequence.Name.Equals("AISequence")) + if (sequence.Description == null && !isGlueSequence) { Debug.LogWarning("Found AISequence with a name, but without a description. Name: " + sequence.Name); + } + + // Warn about default descriptions. + if (sequence.Description != null && sequence.Description.Equals("Your description here")) + { + Debug.LogWarning("Found AISequence with default description. Name: " + sequence.Name); } - // Generate warning if there's a sequence with too high a difficulty. + // Warn if there's a sequence with too high a difficulty. if (sequence.Difficulty >= 8f) { - Debug.LogWarning("Found AISequence \"" + sequence.Name + "\" with very high difficulty: " + sequence.Difficulty + ". "); + Debug.LogWarning("Found AISequence with very high difficulty (" + sequence.Difficulty + "). Name: " + sequence.Name); + } + + // Warn about default difficulty (-1). Glue sequences can ignore this. + if (Mathf.Abs(sequence.Difficulty - -1) < 0.01f && !isGlueSequence) + { + Debug.LogWarning("Found AISequence with default difficulty (-1). Name: " + sequence.Name); + } + + // Warn about invalid difficulty (<= 0). Glue sequences can ignore this. + if (sequence.Difficulty <= 0f && !isGlueSequence) + { + Debug.LogWarning("Found AISequence with invalid difficulty (<= 0). Name: " + sequence.Name); } - + + // If we (finally) get to the end and still have a valid sequence, then we print out what it does. Debug.Log("Added AISequence" + (sequence.Name.Equals("AISequence") ? " " : " \"" + sequence.Name + "\" ") + "to queue. Here's what it says it'll do: \"" + @@ -206,12 +244,6 @@ private IEnumerator ExecuteQueue() /// The sequence to be executed. private IEnumerator Execute(AISequence sequence) { - Debug.Log("Executing " + sequence.Name); - if (shouldCancelCurrent) - { - yield return null; - } - if (sequence.events != null) { for (int i = 0; i < sequence.events.Length; i++) diff --git a/Assets/Scripts/Boss Core/Moves/Test/Test.cs b/Assets/Scripts/Boss Core/Moves/Test/Test.cs deleted file mode 100644 index 9a431a7..0000000 --- a/Assets/Scripts/Boss Core/Moves/Test/Test.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -using AI; -using Moves.Basic; -using Projectiles; -using AOEs; -using BossCore; -using static BossController; - -namespace Moves.Test -{ - public class Test : AISequence - { - public Test() : base - ( - /* - new PlayerLock(true), - new AISequence(() => - { - List sequences = new List(); - - for (int angle = 0; angle < 72; angle += 6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - - for (int angle = 72; angle >= 0; angle -= 6) - { - sequences.Add(new ShootWall(angleOffset: angle).Wait(0.1f)); - } - return sequences.ToArray(); - }), - new PlayerLock(false) - */ - //For(6, i => new Shoot1(new Projectile().AngleOffset(i * 60)).Wait(0.25f)).Wait(0.5f) - new ShootArc(500, 0, 360, new Projectile { MaxTime = 2f }).Wait(0.05f) - ) - { - } - } -} From 6c0e64c9958bd160ba34e3d604cc14cd4c924593 Mon Sep 17 00:00:00 2001 From: George Aleksandrovich Date: Mon, 5 Nov 2018 16:06:21 -0600 Subject: [PATCH 17/33] Added tweak to homing projectile; added more unsorted moves --- Assets/Scenes/BossScene.unity | 4 +- Assets/Scripts/Boss Core/AI/AISequence.cs | 26 +++++++++ .../Scripts/Boss Core/AI/Moves/Test/Test.cs | 16 +---- .../Unsorted/Four_Way_Sweep_With_Homing.cs | 58 +++++++++++++++++++ .../Four_Way_Sweep_With_Homing.cs.meta | 11 ++++ .../AI/Moves/Unsorted/Shoot_Hex_Curve.cs | 2 +- .../Boss Core/AI/SequenceDictionary.cs | 37 ------------ .../Projectile/ProjectileComponent.cs | 4 +- .../Boss Core/Projectile/ProjectileHoming.cs | 20 ++++++- Assets/Scripts/User Input/Controller.cs | 2 + 10 files changed, 122 insertions(+), 58 deletions(-) create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs create mode 100644 Assets/Scripts/Boss Core/AI/Moves/Unsorted/Four_Way_Sweep_With_Homing.cs.meta diff --git a/Assets/Scenes/BossScene.unity b/Assets/Scenes/BossScene.unity index b528db3..7a4306e 100644 --- a/Assets/Scenes/BossScene.unity +++ b/Assets/Scenes/BossScene.unity @@ -7661,12 +7661,12 @@ Prefab: - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: Chill - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 114648287774763342, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} propertyPath: Routine - value: 0 + value: 2 objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f22ec206bc95d4d40953aa691a44ebd2, type: 2} diff --git a/Assets/Scripts/Boss Core/AI/AISequence.cs b/Assets/Scripts/Boss Core/AI/AISequence.cs index c582ff9..c8a9324 100644 --- a/Assets/Scripts/Boss Core/AI/AISequence.cs +++ b/Assets/Scripts/Boss Core/AI/AISequence.cs @@ -49,6 +49,32 @@ private static void CheckAllowInstantiation() /// ///