From 5c9d120ada7fa59e42801a19558b8d9840298732 Mon Sep 17 00:00:00 2001 From: JonnyTheKing-3 Date: Fri, 7 Apr 2023 16:26:20 -0700 Subject: [PATCH 01/10] SuperJump Script --- .../Combat/Actions/EarthWallBlockAction.cs | 50 +++++++++++++++ .../Actions/EarthWallBlockAction.cs.meta | 11 ++++ .../Combat/Actions/SuperJumpAction.cs | 61 +++++++++++++++++++ .../Combat/Actions/SuperJumpAction.cs.meta | 11 ++++ ProjectSettings/ProjectSettings.asset | 4 +- 5 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs create mode 100644 Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs.meta create mode 100644 Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs create mode 100644 Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs.meta diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs new file mode 100644 index 00000000..a1f68b68 --- /dev/null +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs @@ -0,0 +1,50 @@ +using ImGuiNET; +using System; +using System.Collections; +using UnityEngine; + +namespace Application.Gameplay.Combat +{ + [Serializable] + public class EarthWallBlockAction : BattleAction, IDebugImGui + { + [SerializeField] + private int apCost = 2; + public override string Name => "Earth Wall Block"; + public override string Description => "Place a wall of earth down that can be sent towards enemies if hit"; + + [SerializeField] + + //Getting the position in front of the monster. In PrepTick, we'll use it. + private Vector3 EarthWallTarget; + //_PrefabSpawnPosition = user.transform.position; //Need to find out how to get position of monster + protected override IEnumerator Execute() + { + Debug.Log("Executing debugging action..."); + + if (User.TryGetComponent(out ActionPointTracker apTracker)) + apTracker.remainingActionPoints -= apCost; + + yield return null; + Debug.Log("Done!"); + } + + public override void PrepEnter() + { + //Getting the position forward to the monster to place Earth Wall there. + _PrefabSpawnPosition += Vector3.forward * Time.deltaTime; + + //Need to adjust later in to match EarthWall placement so that it's always forward of wherever the monster is facing + } + + public override bool PrepTick(){ + //Spawn prefab at _PrefabSpawnPosition + return true; + } + + public void RenderImGui() + { + // if (ImGui.Button("Lock in demo action")); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs.meta b/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs.meta new file mode 100644 index 00000000..714205f8 --- /dev/null +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62661caee6d204b4c84944b68b59405f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs new file mode 100644 index 00000000..1e87e254 --- /dev/null +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs @@ -0,0 +1,61 @@ +using Application.Core; +using Application.Core.Abstraction; +using Application.Gameplay.Combat; +using Application.Gameplay.Combat.Actions; +using ImGuiNET; +using System; +using System.Collections; +using UnityEngine; + + // Remember to use namespace +public class SuperJumpAction : BattleAction, IDebugImGui +{ + [SerializeField] + private int apCost = 4; + public override string Name => "Super Jump Anywhere"; + public override string Description => "Jumps across the stage with ease"; + + private Vector3 LandingSpot; + private AimSystem _aimSystem = new AimSystem(); + +protected override IEnumerator Execute() + { + Debug.Log("Executing debugging action..."); + + if (User.TryGetComponent(out ActionPointTracker apTracker)) + apTracker.TrySpend(apCost); + Debug.Log("Points were spent"); + + //Calculating the jump + var launchVelocity = ProjectileMotion.GetLaunchVelocity(User.transform.position, LandingSpot); + PhysicsComponent physics = User.GetComponent(); + + //Jumping + physics.Velocity = launchVelocity; + + Debug.Log("Jumped to spot!"); + yield return null; + Debug.Log("Done!"); + } + + public override void PrepEnter() + { + base.PrepTick(); + _aimSystem.Initialize(); + } + + public override void PrepTick() + { + LandingSpot = _aimSystem.Update().point; + IsPrepFinished |= Input.GetKeyDown(KeyCode.Mouse0); + } + + public override void PrepExit() + { + base.PrepExit(); + } + public void RenderImGui() + { + ImGui.Text($"Position: {LandingSpot}"); + } + } diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs.meta b/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs.meta new file mode 100644 index 00000000..6d6b5cd8 --- /dev/null +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97e2a85513c891d42b159f8e8f27fb63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 9b6c22a9..2cdedfa8 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -17,7 +17,7 @@ PlayerSettings: defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} - m_ShowUnitySplashScreen: 0 + m_ShowUnitySplashScreen: 1 m_ShowUnitySplashLogo: 1 m_SplashScreenOverlayOpacity: 1 m_SplashScreenAnimation: 1 @@ -594,7 +594,7 @@ PlayerSettings: webGLThreadsSupport: 0 webGLDecompressionFallback: 0 scriptingDefineSymbols: - 1: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72;IMGUI_FEATURE_CUSTOM_ASSERT;IMGUI_FEATURE_FREETYPE + 1: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 7: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 13: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 14: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 From c24f5c6a57af367064fe66a678fb3861b44037e0 Mon Sep 17 00:00:00 2001 From: JonnyTheKing-3 Date: Fri, 7 Apr 2023 20:02:38 -0700 Subject: [PATCH 02/10] Updated Jump Script with a few things Added indicator for mouse --- .../Gameplay/Combat/Actions/EarthWallBlockAction.cs | 9 +++++---- .../Gameplay/Combat/Actions/SuperJumpAction.cs | 11 +++++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs index a1f68b68..ac78fa89 100644 --- a/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/EarthWallBlockAction.cs @@ -1,3 +1,5 @@ +using Application.Core; +using Application.Gameplay.Combat.Actions; using ImGuiNET; using System; using System.Collections; @@ -23,7 +25,7 @@ protected override IEnumerator Execute() Debug.Log("Executing debugging action..."); if (User.TryGetComponent(out ActionPointTracker apTracker)) - apTracker.remainingActionPoints -= apCost; + // apTracker.remainingActionPoints -= apCost; yield return null; Debug.Log("Done!"); @@ -32,14 +34,13 @@ protected override IEnumerator Execute() public override void PrepEnter() { //Getting the position forward to the monster to place Earth Wall there. - _PrefabSpawnPosition += Vector3.forward * Time.deltaTime; + // _PrefabSpawnPosition += Vector3.forward * Time.deltaTime; //Need to adjust later in to match EarthWall placement so that it's always forward of wherever the monster is facing } - public override bool PrepTick(){ + public override void PrepTick(){ //Spawn prefab at _PrefabSpawnPosition - return true; } public void RenderImGui() diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs index 1e87e254..a02249cc 100644 --- a/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs @@ -2,12 +2,12 @@ using Application.Core.Abstraction; using Application.Gameplay.Combat; using Application.Gameplay.Combat.Actions; +using Application.Gameplay.Combat.UI.Indicators; using ImGuiNET; using System; using System.Collections; using UnityEngine; - // Remember to use namespace public class SuperJumpAction : BattleAction, IDebugImGui { [SerializeField] @@ -17,6 +17,7 @@ public class SuperJumpAction : BattleAction, IDebugImGui private Vector3 LandingSpot; private AimSystem _aimSystem = new AimSystem(); + private IPooledObject _indicator; protected override IEnumerator Execute() { @@ -25,13 +26,16 @@ protected override IEnumerator Execute() if (User.TryGetComponent(out ActionPointTracker apTracker)) apTracker.TrySpend(apCost); Debug.Log("Points were spent"); - + Debug.Log(User.name); //Calculating the jump var launchVelocity = ProjectileMotion.GetLaunchVelocity(User.transform.position, LandingSpot); + Debug.Log(launchVelocity); PhysicsComponent physics = User.GetComponent(); + // User.transform.position = LandingSpot; //Jumping physics.Velocity = launchVelocity; + Debug.Log(launchVelocity); Debug.Log("Jumped to spot!"); yield return null; @@ -42,17 +46,20 @@ public override void PrepEnter() { base.PrepTick(); _aimSystem.Initialize(); + _indicator = Services.IndicatorFactory.Borrow(); } public override void PrepTick() { LandingSpot = _aimSystem.Update().point; + _indicator.Instance.transform.position = LandingSpot; IsPrepFinished |= Input.GetKeyDown(KeyCode.Mouse0); } public override void PrepExit() { base.PrepExit(); + _indicator.Dispose(); } public void RenderImGui() { From c4ecab4878372dbb7adfe69cdac37b80c16f3f3c Mon Sep 17 00:00:00 2001 From: JonnyTheKing-3 Date: Fri, 28 Apr 2023 17:39:23 -0700 Subject: [PATCH 03/10] WindPush script Most of it was completed according to the GitHub description, Damage dealt has not been applied though. Still needs to be tested --- .../Gameplay/Combat/Actions/WindPush.cs | 56 +++++++++++++++++++ .../Gameplay/Combat/Actions/WindPush.cs.meta | 11 ++++ ProjectSettings/ProjectSettings.asset | 2 +- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs create mode 100644 Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs.meta diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs new file mode 100644 index 00000000..c7b7cfc4 --- /dev/null +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs @@ -0,0 +1,56 @@ +using Application.Core; +using Application.Core.Abstraction; +using Application.Gameplay.Combat; +using Application.Gameplay.Combat.Actions; +using Application.Gameplay.Combat.UI.Indicators; +using ImGuiNET; +using System; +using System.Collections; +using UnityEngine; +/// +/// An action that pushes monsters in a certain direction. +/// + +public class WindPush : BattleAction +{ + + private Vector3 direction; + private AimSystem _aimSystem = new AimSystem(); + + private IPooledObject _indicator; + + + public override string Name => throw new NotImplementedException(); + public override string Description => throw new NotImplementedException(); + + protected override IEnumerator Execute() + { + throw new NotImplementedException(); + PhysicsComponent[] Components = UnityEngine.Object.FindObjectsOfType(); + + foreach (PhysicsComponent james in Components) + { + james.Velocity = (direction - User.transform.position).normalized; + } + } + + public override void PrepEnter() + { + base.PrepTick(); + _aimSystem.Initialize(); + _indicator = Services.IndicatorFactory.Borrow(); + } + public override void PrepTick() + { + direction = _aimSystem.Update().point; + _indicator.Instance.transform.position = direction; + IsPrepFinished |= Input.GetKeyDown(KeyCode.Mouse0); + } + + public override void PrepExit() + { + base.PrepExit(); + _indicator.Dispose(); + } +} + diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs.meta b/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs.meta new file mode 100644 index 00000000..fad327a3 --- /dev/null +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40cfea266428c0046b7db7f039a7921d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 42266793..2cdedfa8 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -594,7 +594,7 @@ PlayerSettings: webGLThreadsSupport: 0 webGLDecompressionFallback: 0 scriptingDefineSymbols: - 1: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72;IMGUI_FEATURE_CUSTOM_ASSERT;IMGUI_FEATURE_FREETYPE + 1: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 7: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 13: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 14: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 From 0dceb21f4b5ee2f22476de5d19b4b85f3db387b8 Mon Sep 17 00:00:00 2001 From: Daniel Walls Date: Wed, 24 May 2023 17:40:43 -0700 Subject: [PATCH 04/10] meta files + player action --- .../Graphics/Monsters/Aquanaut/Aquanaut.meta | 8 + .../Monsters/Aquanaut/Aquanaut/Aquanaut.png | Bin 0 -> 33129 bytes .../Aquanaut/Aquanaut/Aquanaut.png.meta | 733 ++++++++++++++++++ .../Aquanaut/Aquanaut/Aquanaut_Attack.anim | 92 +++ .../Aquanaut/Aquanaut_Attack.anim.meta | 8 + .../Aquanaut/Aquanaut/Aquanaut_Death.anim | 86 ++ .../Aquanaut/Aquanaut_Death.anim.meta | 8 + .../Aquanaut/Aquanaut/Aquanaut_Idle.anim | 86 ++ .../Aquanaut/Aquanaut/Aquanaut_Idle.anim.meta | 8 + .../Aquanaut/Aquanaut/Aquanaut_Walk.anim | 86 ++ .../Aquanaut/Aquanaut/Aquanaut_Walk.anim.meta | 8 + Assets/Settings/Monster Data/Player.asset | 4 +- ProjectSettings/ProjectSettings.asset | 2 +- 13 files changed, 1127 insertions(+), 2 deletions(-) create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut.meta create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut.png create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut.png.meta create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Attack.anim create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Attack.anim.meta create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Death.anim create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Death.anim.meta create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Idle.anim create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Idle.anim.meta create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Walk.anim create mode 100644 Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Walk.anim.meta diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut.meta b/Assets/Graphics/Monsters/Aquanaut/Aquanaut.meta new file mode 100644 index 00000000..b713a65e --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eec993fedf8f3d841b561b605ef44f1c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut.png b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut.png new file mode 100644 index 0000000000000000000000000000000000000000..ec80abd7864b6acfa95d3c4c916dd776522b834c GIT binary patch literal 33129 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 literal 0 HcmV?d00001 diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut.png.meta b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut.png.meta new file mode 100644 index 00000000..23ecbe2f --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut.png.meta @@ -0,0 +1,733 @@ +fileFormatVersion: 2 +guid: 2eec515302f32fc40b758dcf455c7ce3 +TextureImporter: + internalIDToNameTable: + - first: + 213: 1151520238677491351 + second: Aquanaut00 + - first: + 213: 5819232864830835210 + second: Aquanaut01 + - first: + 213: 3555982865328588899 + second: Aquanaut02 + - first: + 213: -1150820546125151134 + second: Aquanaut03 + - first: + 213: -2239862809864533877 + second: Aquanaut04 + - first: + 213: -9119491933627913304 + second: Aquanaut05 + - first: + 213: -7522092180147971799 + second: Aquanaut06 + - first: + 213: 7622436845710738024 + second: Aquanaut07 + - first: + 213: 2882162787463798322 + second: Aquanaut08 + - first: + 213: -3650294661103336841 + second: Aquanaut09 + - first: + 213: -5953007531213141276 + second: Aquanaut10 + - first: + 213: -6645296091880213151 + second: Aquanaut11 + - first: + 213: -6305641341195565895 + second: Aquanaut12 + - first: + 213: -6500412676481290302 + second: Aquanaut13 + - first: + 213: -4936104697726652037 + second: Aquanaut14 + - first: + 213: -4435357272204431221 + second: Aquanaut15 + - first: + 213: -2697644830252543390 + second: Aquanaut16 + - first: + 213: -112226897831389429 + second: Aquanaut17 + - first: + 213: -5633930298222443975 + second: Aquanaut18 + - first: + 213: -9131066247057055193 + second: Aquanaut19 + - first: + 213: -7535962304602935659 + second: Aquanaut20 + - first: + 213: 947507275206764846 + second: Aquanaut21 + - first: + 213: -3018771262590601609 + second: Aquanaut22 + - first: + 213: -6104516835409987428 + second: Aquanaut23 + - first: + 213: -4010944541980561005 + second: Aquanaut24 + - first: + 213: -7161961146793823837 + second: Aquanaut25 + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 16 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: Aquanaut00 + rect: + serializedVersion: 2 + x: 1 + y: 356 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 79e7b0a5e850bff00800000000000000 + internalID: 1151520238677491351 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut01 + rect: + serializedVersion: 2 + x: 83 + y: 356 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a0a458d757112c050800000000000000 + internalID: 5819232864830835210 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut02 + rect: + serializedVersion: 2 + x: 165 + y: 356 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 368494b5393695130800000000000000 + internalID: 3555982865328588899 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut03 + rect: + serializedVersion: 2 + x: 247 + y: 356 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2644df38fc67700f0800000000000000 + internalID: -1150820546125151134 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut04 + rect: + serializedVersion: 2 + x: 329 + y: 356 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b888a6844a86ae0e0800000000000000 + internalID: -2239862809864533877 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut05 + rect: + serializedVersion: 2 + x: 1 + y: 285 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8ab611c476e017180800000000000000 + internalID: -9119491933627913304 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut06 + rect: + serializedVersion: 2 + x: 83 + y: 285 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 929598214092c9790800000000000000 + internalID: -7522092180147971799 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut07 + rect: + serializedVersion: 2 + x: 165 + y: 285 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 862007ffce558c960800000000000000 + internalID: 7622436845710738024 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut08 + rect: + serializedVersion: 2 + x: 247 + y: 285 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 23e11abe8cf7ff720800000000000000 + internalID: 2882162787463798322 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut09 + rect: + serializedVersion: 2 + x: 329 + y: 285 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7724e67885c875dc0800000000000000 + internalID: -3650294661103336841 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut10 + rect: + serializedVersion: 2 + x: 1 + y: 214 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4eac0d4d03ba26da0800000000000000 + internalID: -5953007531213141276 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut11 + rect: + serializedVersion: 2 + x: 83 + y: 214 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 1653038a96a27c3a0800000000000000 + internalID: -6645296091880213151 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut12 + rect: + serializedVersion: 2 + x: 165 + y: 214 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 9b44501eb9cdd78a0800000000000000 + internalID: -6305641341195565895 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut13 + rect: + serializedVersion: 2 + x: 247 + y: 214 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2cfe2e48c15e9c5a0800000000000000 + internalID: -6500412676481290302 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut14 + rect: + serializedVersion: 2 + x: 329 + y: 214 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b71bdd51eee6f7bb0800000000000000 + internalID: -4936104697726652037 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut15 + rect: + serializedVersion: 2 + x: 1 + y: 143 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b803f4a7f027272c0800000000000000 + internalID: -4435357272204431221 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut16 + rect: + serializedVersion: 2 + x: 83 + y: 143 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 262d0a2d15a009ad0800000000000000 + internalID: -2697644830252543390 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut17 + rect: + serializedVersion: 2 + x: 165 + y: 143 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: b0714842b3a417ef0800000000000000 + internalID: -112226897831389429 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut18 + rect: + serializedVersion: 2 + x: 247 + y: 143 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 932042d5e3240d1b0800000000000000 + internalID: -5633930298222443975 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut19 + rect: + serializedVersion: 2 + x: 329 + y: 143 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 722ea9370afe74180800000000000000 + internalID: -9131066247057055193 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut20 + rect: + serializedVersion: 2 + x: 1 + y: 72 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 59e68611632ea6790800000000000000 + internalID: -7535962304602935659 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut21 + rect: + serializedVersion: 2 + x: 83 + y: 72 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e292cc0c8d8362d00800000000000000 + internalID: 947507275206764846 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut22 + rect: + serializedVersion: 2 + x: 165 + y: 72 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 7763123e78b2b16d0800000000000000 + internalID: -3018771262590601609 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut23 + rect: + serializedVersion: 2 + x: 247 + y: 72 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c98fef30846684ba0800000000000000 + internalID: -6104516835409987428 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut24 + rect: + serializedVersion: 2 + x: 329 + y: 72 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 391f471a0334658c0800000000000000 + internalID: -4010944541980561005 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: Aquanaut25 + rect: + serializedVersion: 2 + x: 1 + y: 1 + width: 80 + height: 69 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 3a1743e584a9b9c90800000000000000 + internalID: -7161961146793823837 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Attack.anim b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Attack.anim new file mode 100644 index 00000000..eb871c7f --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Attack.anim @@ -0,0 +1,92 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Aquanaut_Attack + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: -6305641341195565895, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.1 + value: {fileID: -6500412676481290302, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.2 + value: {fileID: -4936104697726652037, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.3 + value: {fileID: -4435357272204431221, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.4 + value: {fileID: -2697644830252543390, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.5 + value: {fileID: -112226897831389429, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.6 + value: {fileID: -5633930298222443975, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.70000005 + value: {fileID: -9131066247057055193, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.76000005 + value: {fileID: -9131066247057055193, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 25 + m_WrapMode: 1 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: -6305641341195565895, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -6500412676481290302, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -4936104697726652037, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -4435357272204431221, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -2697644830252543390, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -112226897831389429, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -5633930298222443975, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -9131066247057055193, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -9131066247057055193, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.8000001 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Attack.anim.meta b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Attack.anim.meta new file mode 100644 index 00000000..50767ceb --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Attack.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4234fb703076c264f9f9e1216d9f26ae +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Death.anim b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Death.anim new file mode 100644 index 00000000..4759aac3 --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Death.anim @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Aquanaut_Death + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: -7535962304602935659, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.08 + value: {fileID: 947507275206764846, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.16 + value: {fileID: -3018771262590601609, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.24 + value: {fileID: -6104516835409987428, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.32 + value: {fileID: -4010944541980561005, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.4 + value: {fileID: -7161961146793823837, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.44000003 + value: {fileID: -7161961146793823837, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 25 + m_WrapMode: 1 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: -7535962304602935659, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: 947507275206764846, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -3018771262590601609, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -6104516835409987428, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -4010944541980561005, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -7161961146793823837, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -7161961146793823837, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.48000002 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Death.anim.meta b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Death.anim.meta new file mode 100644 index 00000000..c7978513 --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Death.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be0921aa18233ee43b4bf8b600b34af9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Idle.anim b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Idle.anim new file mode 100644 index 00000000..b5db5810 --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Idle.anim @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Aquanaut_Idle + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 1151520238677491351, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.125 + value: {fileID: 5819232864830835210, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.25 + value: {fileID: 3555982865328588899, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.375 + value: {fileID: -1150820546125151134, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.5 + value: {fileID: -2239862809864533877, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.625 + value: {fileID: -9119491933627913304, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.71 + value: {fileID: -9119491933627913304, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 25 + m_WrapMode: 2 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: 1151520238677491351, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: 5819232864830835210, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: 3555982865328588899, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -1150820546125151134, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -2239862809864533877, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -9119491933627913304, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -9119491933627913304, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.75 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Idle.anim.meta b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Idle.anim.meta new file mode 100644 index 00000000..bfe32667 --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Idle.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49f6eb0919f6e0c41b2004d450c92867 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Walk.anim b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Walk.anim new file mode 100644 index 00000000..d52b386e --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Walk.anim @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Aquanaut_Walk + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: -7522092180147971799, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.111 + value: {fileID: 7622436845710738024, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.222 + value: {fileID: 2882162787463798322, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.333 + value: {fileID: -3650294661103336841, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.444 + value: {fileID: -5953007531213141276, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.555 + value: {fileID: -6645296091880213151, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - time: 0.626 + value: {fileID: -6645296091880213151, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + m_SampleRate: 25 + m_WrapMode: 2 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: -7522092180147971799, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: 7622436845710738024, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: 2882162787463798322, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -3650294661103336841, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -5953007531213141276, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -6645296091880213151, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + - {fileID: -6645296091880213151, guid: 2eec515302f32fc40b758dcf455c7ce3, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.666 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Walk.anim.meta b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Walk.anim.meta new file mode 100644 index 00000000..b9b60998 --- /dev/null +++ b/Assets/Graphics/Monsters/Aquanaut/Aquanaut/Aquanaut_Walk.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c83af7bc4cf8450458f57911adb23653 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Monster Data/Player.asset b/Assets/Settings/Monster Data/Player.asset index e8056df6..0a4e9032 100644 --- a/Assets/Settings/Monster Data/Player.asset +++ b/Assets/Settings/Monster Data/Player.asset @@ -49,4 +49,6 @@ MonoBehaviour: projectileTime: 1 apCost: 1 00000003: - type: {class: , ns: , asm: } + type: {class: SuperJumpAction, ns: , asm: Application} + data: + apCost: 1 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 2cdedfa8..42266793 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -594,7 +594,7 @@ PlayerSettings: webGLThreadsSupport: 0 webGLDecompressionFallback: 0 scriptingDefineSymbols: - 1: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 + 1: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72;IMGUI_FEATURE_CUSTOM_ASSERT;IMGUI_FEATURE_FREETYPE 7: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 13: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 14: RealtimeCSG;RealtimeCSG_1;RealtimeCSG_1_5;RealtimeCSG_1_5_72 From 778e0bcab6d834024da557d81633223cf7e4ca27 Mon Sep 17 00:00:00 2001 From: Daniel Walls Date: Mon, 5 Jun 2023 18:39:01 -0700 Subject: [PATCH 05/10] style changes --- .../Gameplay/Combat/Actions/MoveAction.cs | 12 +- .../Combat/Actions/PrefabSpawningAction.cs | 13 +- .../Combat/Actions/SuperJumpAction.cs | 113 +++++++------- .../Gameplay/Combat/Actions/WindPush.cs | 115 ++++++++------ .../Combat/States/Round/MoveSelection.cs | 8 +- Assets/Settings/Monster Data/Player.asset | 141 +++++++++++++++++- 6 files changed, 282 insertions(+), 120 deletions(-) diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/MoveAction.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/MoveAction.cs index b915ebec..7b6b9cad 100644 --- a/Assets/Scripts/Application/Gameplay/Combat/Actions/MoveAction.cs +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/MoveAction.cs @@ -1,6 +1,4 @@ -using Application.Gameplay.Combat.UI; - -namespace Application.Gameplay.Combat.Actions +namespace Application.Gameplay.Combat.Actions { using System; using System.Collections; @@ -8,6 +6,7 @@ namespace Application.Gameplay.Combat.Actions using Core.Utility; using ImGuiNET; using Newtonsoft.Json; + using UI; using UI.Indicators; using UnityEngine; using UnityEngine.AI; @@ -33,6 +32,7 @@ public class MoveAction : BattleAction, IDebugImGui private NavMeshPath _path; private AimSystem _aimSystem = new AimSystem(); private ActionPointTracker _actionPointTracker; + private ActionPointTrackerUI _tracker; /// public override string Name => "Move"; @@ -45,13 +45,11 @@ public class MoveAction : BattleAction, IDebugImGui private int PointCost => (int)Mathf.Ceil(_distance * actionPointsPerUnit); - private ActionPointTrackerUI _tracker; - /// public override void PrepEnter() { base.PrepEnter(); - _tracker = UnityEngine.Object.FindObjectOfType(includeInactive:true); + _tracker = UnityEngine.Object.FindObjectOfType(includeInactive: true); _tracker.gameObject.SetActive(true); _pathIndicator = Services.IndicatorFactory.Borrow(); _path ??= new NavMeshPath(); @@ -73,7 +71,7 @@ public override void PrepTick() bool canAfford = _actionPointTracker.CanAfford(PointCost); - IsPrepFinished |= canAfford && Input.GetKeyDown(KeyCode.Mouse0) && canAfford; + IsPrepFinished |= canAfford && Input.GetKeyDown(KeyCode.Mouse0); _pathIndicator.Instance.IsValid = canAfford; } else diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/PrefabSpawningAction.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/PrefabSpawningAction.cs index deaf5aac..ebd69b8f 100644 --- a/Assets/Scripts/Application/Gameplay/Combat/Actions/PrefabSpawningAction.cs +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/PrefabSpawningAction.cs @@ -1,6 +1,4 @@ -using UnityEngine.AddressableAssets; - -namespace Application.Gameplay.Combat.Actions +namespace Application.Gameplay.Combat.Actions { using System; using System.Collections; @@ -8,6 +6,7 @@ namespace Application.Gameplay.Combat.Actions using Newtonsoft.Json; using UI.Indicators; using UnityEngine; + using UnityEngine.AddressableAssets; /// /// Copy and paste this file to quickly get started with a new BattleAction. @@ -16,6 +15,8 @@ namespace Application.Gameplay.Combat.Actions [JsonObject(MemberSerialization.OptIn)] public class PrefabSpawningAction : BattleAction { + private readonly AimSystem _aimSystem = new AimSystem(); + [SerializeField] [JsonProperty] private string name; @@ -41,7 +42,7 @@ public class PrefabSpawningAction : BattleAction private float waitTime = 1; private IPooledObject _indicator; - private AimSystem _aimSystem = new AimSystem(); + private Vector3 _targetPosition; /// public override string Name => name; @@ -52,8 +53,6 @@ public class PrefabSpawningAction : BattleAction /// public override int Cost => apCost; - private Vector3 _targetPosition; - /// public override void PrepEnter() { @@ -84,7 +83,7 @@ protected override IEnumerator Execute() { // Put execution logic here. ActionTracker.Spend(apCost); - var instance = prefabAsset.InstantiateAsync(_targetPosition, Quaternion.identity) .WaitForCompletion(); + var instance = prefabAsset.InstantiateAsync(_targetPosition, Quaternion.identity).WaitForCompletion(); using IDisposable disposable = Controller.TemporaryFollow(instance.transform); yield return new WaitForSeconds(waitTime); } diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs index 0b9a8d2c..f2e63708 100644 --- a/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/SuperJumpAction.cs @@ -1,67 +1,66 @@ -using Application.Core; -using Application.Core.Abstraction; -using Application.Gameplay.Combat; -using Application.Gameplay.Combat.Actions; -using Application.Gameplay.Combat.UI.Indicators; -using ImGuiNET; -using System; -using System.Collections; -using UnityEngine; - -public class SuperJumpAction : BattleAction, IDebugImGui +namespace Application.Gameplay.Combat.Actions { - [SerializeField] - private int apCost = 4; - public override string Name => "Super Jump Anywhere"; - public override string Description => "Jumps across the stage with ease"; - public override int Cost => apCost; - - private Vector3 LandingSpot; - private AimSystem _aimSystem = new AimSystem(); - private IPooledObject _indicator; + using System; + using System.Collections; + using Core; + using Core.Abstraction; + using UI.Indicators; + using UnityEngine; - protected override IEnumerator Execute() + /// + /// An action that launches the user to a desired position in the world. + /// + [Serializable] + public class SuperJumpAction : BattleAction { - Debug.Log("Executing debugging action..."); - ActionTracker.Spend(apCost); - Debug.Log("Points were spent"); - Debug.Log(User.name); - //Calculating the jump - var launchVelocity = ProjectileMotion.GetLaunchVelocity(User.transform.position, LandingSpot); - Debug.Log(launchVelocity); - PhysicsComponent physics = User.GetComponent(); - // User.transform.position = LandingSpot; + private readonly AimSystem _aimSystem = new AimSystem(); - //Jumping - physics.Velocity = launchVelocity; - Debug.Log(launchVelocity); + [SerializeField] + private int apCost = 4; - Debug.Log("Jumped to spot!"); - yield return null; - Debug.Log("Done!"); - } + private Vector3 _landingSpot; + private IPooledObject _indicator; - public override void PrepEnter() - { - base.PrepTick(); - _aimSystem.Initialize(); - _indicator = Services.IndicatorFactory.Borrow(); - } + /// + public override string Name => "Super Jump Anywhere"; - public override void PrepTick() - { - LandingSpot = _aimSystem.Update().point; - _indicator.Instance.transform.position = LandingSpot; - IsPrepFinished |= Input.GetKeyDown(KeyCode.Mouse0); - } + /// + public override string Description => "Jumps across the stage with ease"; - public override void PrepExit() - { - base.PrepExit(); - _indicator.Dispose(); - } - public void RenderImGui() - { - ImGui.Text($"Position: {LandingSpot}"); + /// + public override int Cost => apCost; + + /// + public override void PrepEnter() + { + base.PrepTick(); + _aimSystem.Initialize(); + _indicator = Services.IndicatorFactory.Borrow(); + } + + /// + public override void PrepTick() + { + _landingSpot = _aimSystem.Update().point; + _indicator.Instance.transform.position = _landingSpot; + IsPrepFinished |= Input.GetKeyDown(KeyCode.Mouse0); + } + + /// + public override void PrepExit() + { + base.PrepExit(); + _indicator.Dispose(); + } + + /// + protected override IEnumerator Execute() + { + ActionTracker.Spend(apCost); + var launchVelocity = ProjectileMotion.GetLaunchVelocity(User.transform.position, _landingSpot); + PhysicsComponent physics = User.GetComponent(); + physics.Velocity = launchVelocity; + yield return new WaitForSeconds(1); + } } } diff --git a/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs b/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs index 003038dd..16171dfc 100644 --- a/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs +++ b/Assets/Scripts/Application/Gameplay/Combat/Actions/WindPush.cs @@ -1,56 +1,83 @@ -using Application.Core; -using Application.Core.Abstraction; -using Application.Gameplay.Combat; -using Application.Gameplay.Combat.Actions; -using Application.Gameplay.Combat.UI.Indicators; -using ImGuiNET; -using System; -using System.Collections; -using UnityEngine; - -/// -/// An action that pushes monsters in a certain direction. -/// -public class WindPush : BattleAction +namespace Application.Gameplay.Combat.Actions { - [SerializeField] private int apCost; + using System; + using System.Collections; + using Core; + using Core.Abstraction; + using UI.Indicators; + using UnityEngine; + using Object = UnityEngine.Object; - private Vector3 direction; - private AimSystem _aimSystem = new AimSystem(); + /// + /// An action that pushes monsters in a certain direction. + /// + [Serializable] + public class WindPush : BattleAction + { + private readonly AimSystem _aimSystem = new AimSystem(); - private IPooledObject _indicator; + [SerializeField] + private int cost; + [SerializeField] + private float duration = 1; - public override string Name => "Wind Push"; - public override string Description => "Push with wind."; - public override int Cost => apCost; + [SerializeField] + private float strength = 5; - protected override IEnumerator Execute() - { - PhysicsComponent[] Components = UnityEngine.Object.FindObjectsOfType(); + private Vector3 _direction; - foreach (PhysicsComponent james in Components) - james.Velocity = (direction - User.transform.position).normalized; + private IPooledObject _indicator; - yield return new WaitForSeconds(1); - } + /// + public override string Name => "Wind Push"; - public override void PrepEnter() - { - base.PrepTick(); - _aimSystem.Initialize(); - _indicator = Services.IndicatorFactory.Borrow(); - } - public override void PrepTick() - { - direction = _aimSystem.Update().point; - _indicator.Instance.transform.position = direction; - IsPrepFinished |= Input.GetKeyDown(KeyCode.Mouse0); - } + /// + public override string Description => "Push with wind."; - public override void PrepExit() - { - base.PrepExit(); - _indicator.Dispose(); + /// + public override int Cost => cost; + + /// + public override void PrepEnter() + { + base.PrepTick(); + _aimSystem.Initialize(); + _indicator = Services.IndicatorFactory.Borrow(); + } + + /// + public override void PrepTick() + { + _direction = _aimSystem.Update().point; + _indicator.Instance.transform.position = _direction; + IsPrepFinished |= Input.GetKeyDown(KeyCode.Mouse0); + } + + /// + public override void PrepExit() + { + base.PrepExit(); + _indicator.Dispose(); + } + + /// + protected override IEnumerator Execute() + { + PhysicsComponent[] physicsComponents = Object.FindObjectsOfType(); + float elapsed = 0; + Vector3 pushDirection = (_direction - User.transform.position).normalized; + + while (elapsed < duration) + { + foreach (PhysicsComponent component in physicsComponents) + { + component.Velocity += pushDirection * strength; + } + + elapsed += Time.deltaTime; + yield return null; + } + } } } diff --git a/Assets/Scripts/Application/Gameplay/Combat/States/Round/MoveSelection.cs b/Assets/Scripts/Application/Gameplay/Combat/States/Round/MoveSelection.cs index bf27e83e..c7e5bf1c 100644 --- a/Assets/Scripts/Application/Gameplay/Combat/States/Round/MoveSelection.cs +++ b/Assets/Scripts/Application/Gameplay/Combat/States/Round/MoveSelection.cs @@ -1,13 +1,11 @@ -using UnityEngine.UIElements; -using Button = UnityEngine.UI.Button; - -namespace Application.Gameplay.Combat.States.Round +namespace Application.Gameplay.Combat.States.Round { using System; using Actions; using UI; using UniRx; using UnityEngine; + using Button = UnityEngine.UI.Button; /// /// The combat round state where the player is choosing what move a monster should perform. @@ -46,7 +44,9 @@ public override void OnEnter() SelectedAction = selectedActionSet.Actions[0]; foreach (MoveUI move in selectionUI.Moves) + { move.GetComponent