From d39579375063f90aef07e7a4ed15f294e31681b2 Mon Sep 17 00:00:00 2001 From: tiendat3699 <96950844+tiendat3699@users.noreply.github.com> Date: Tue, 16 Apr 2024 10:57:02 +0700 Subject: [PATCH] tweak: update mini game --- Assets/GadGame/Prefab/MainFlow.prefab | 14 +- Assets/GadGame/Prefab/MiniGame/Bomb.prefab | 3 +- Assets/GadGame/Prefab/MiniGame/Item 1.prefab | 3 +- Assets/GadGame/Prefab/MiniGame/Item 2.prefab | 3 +- Assets/GadGame/Prefab/MiniGame/Item 3.prefab | 3 +- Assets/GadGame/SO/SceneFlowConfig.meta | 8 + .../Scene Flow Config.asset | 0 .../Scene Flow Config.asset.meta | 0 Assets/GadGame/Scenes/Scene 5.unity | 290 +++++++++++++++++- .../SceneReferencePropertyDrawer.cs | 2 +- Assets/GadGame/Scripts/Editor/Window.meta | 3 + .../Editor/Window/SceneFlowConfigWindow.cs | 21 ++ .../Window/SceneFlowConfigWindow.cs.meta | 3 + Assets/GadGame/Scripts/MiniGame/Bomb.cs | 17 +- Assets/GadGame/Scripts/MiniGame/Item.cs | 14 + .../Scripts/MiniGame/MiniGameController.cs | 19 +- Assets/GadGame/Scripts/SO/SceneFlowConfig.cs | 35 +++ .../Scripts/State/GameState/EndGameState.cs | 4 +- Assets/GadGame/Scripts/Utils.cs | 3 +- 19 files changed, 419 insertions(+), 26 deletions(-) create mode 100644 Assets/GadGame/SO/SceneFlowConfig.meta rename Assets/GadGame/SO/{ => SceneFlowConfig}/Scene Flow Config.asset (100%) rename Assets/GadGame/SO/{ => SceneFlowConfig}/Scene Flow Config.asset.meta (100%) create mode 100644 Assets/GadGame/Scripts/Editor/Window.meta create mode 100644 Assets/GadGame/Scripts/Editor/Window/SceneFlowConfigWindow.cs create mode 100644 Assets/GadGame/Scripts/Editor/Window/SceneFlowConfigWindow.cs.meta diff --git a/Assets/GadGame/Prefab/MainFlow.prefab b/Assets/GadGame/Prefab/MainFlow.prefab index 98a4f43..c1e54ff 100644 --- a/Assets/GadGame/Prefab/MainFlow.prefab +++ b/Assets/GadGame/Prefab/MainFlow.prefab @@ -45,11 +45,11 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _availableStates: - - GadGame.State.IdleState - - GadGame.State.PassByState - - GadGame.State.ViewedState - - GadGame.State.EngageState - - GadGame.State.PlayGameState - - GadGame.State.RewardState - - GadGame.State.CTAState + - GadGame.State.MainFlowState.IdleState + - GadGame.State.MainFlowState.PassByState + - GadGame.State.MainFlowState.ViewedState + - GadGame.State.MainFlowState.EngageState + - GadGame.State.MainFlowState.PlayGameState + - GadGame.State.MainFlowState.RewardState + - GadGame.State.MainFlowState.CTAState SceneFlowConfig: {fileID: 11400000, guid: 191a17431b0adcb48aea29fa675b8c5a, type: 2} diff --git a/Assets/GadGame/Prefab/MiniGame/Bomb.prefab b/Assets/GadGame/Prefab/MiniGame/Bomb.prefab index b855df7..fb646b3 100644 --- a/Assets/GadGame/Prefab/MiniGame/Bomb.prefab +++ b/Assets/GadGame/Prefab/MiniGame/Bomb.prefab @@ -100,6 +100,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _reduceScore: 5 + _rb: {fileID: 9129339961973675669} --- !u!70 &4999977869840881797 CapsuleCollider2D: m_ObjectHideFlags: 0 @@ -150,7 +151,7 @@ Rigidbody2D: m_Mass: 1 m_LinearDrag: 0 m_AngularDrag: 0.05 - m_GravityScale: 1 + m_GravityScale: 0.5 m_Material: {fileID: 0} m_IncludeLayers: serializedVersion: 2 diff --git a/Assets/GadGame/Prefab/MiniGame/Item 1.prefab b/Assets/GadGame/Prefab/MiniGame/Item 1.prefab index 02b70c1..16848db 100644 --- a/Assets/GadGame/Prefab/MiniGame/Item 1.prefab +++ b/Assets/GadGame/Prefab/MiniGame/Item 1.prefab @@ -100,6 +100,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _score: 1 + _rb: {fileID: 4046803137051237507} --- !u!58 &5776257884050738555 CircleCollider2D: m_ObjectHideFlags: 0 @@ -150,7 +151,7 @@ Rigidbody2D: m_Mass: 1 m_LinearDrag: 0 m_AngularDrag: 0.05 - m_GravityScale: 1 + m_GravityScale: 0.5 m_Material: {fileID: 0} m_IncludeLayers: serializedVersion: 2 diff --git a/Assets/GadGame/Prefab/MiniGame/Item 2.prefab b/Assets/GadGame/Prefab/MiniGame/Item 2.prefab index 395e56c..d0f86ec 100644 --- a/Assets/GadGame/Prefab/MiniGame/Item 2.prefab +++ b/Assets/GadGame/Prefab/MiniGame/Item 2.prefab @@ -100,6 +100,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _score: 1 + _rb: {fileID: 841339715954061179} --- !u!58 &5531060527493243633 CircleCollider2D: m_ObjectHideFlags: 0 @@ -150,7 +151,7 @@ Rigidbody2D: m_Mass: 1 m_LinearDrag: 0 m_AngularDrag: 0.05 - m_GravityScale: 1 + m_GravityScale: 0.5 m_Material: {fileID: 0} m_IncludeLayers: serializedVersion: 2 diff --git a/Assets/GadGame/Prefab/MiniGame/Item 3.prefab b/Assets/GadGame/Prefab/MiniGame/Item 3.prefab index 6413af8..ba08dca 100644 --- a/Assets/GadGame/Prefab/MiniGame/Item 3.prefab +++ b/Assets/GadGame/Prefab/MiniGame/Item 3.prefab @@ -100,6 +100,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _score: 1 + _rb: {fileID: 2588217058180321427} --- !u!58 &2940210712796906454 CircleCollider2D: m_ObjectHideFlags: 0 @@ -150,7 +151,7 @@ Rigidbody2D: m_Mass: 1 m_LinearDrag: 0 m_AngularDrag: 0.05 - m_GravityScale: 1 + m_GravityScale: 0.5 m_Material: {fileID: 0} m_IncludeLayers: serializedVersion: 2 diff --git a/Assets/GadGame/SO/SceneFlowConfig.meta b/Assets/GadGame/SO/SceneFlowConfig.meta new file mode 100644 index 0000000..8e8f9f4 --- /dev/null +++ b/Assets/GadGame/SO/SceneFlowConfig.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9882dd2ece9fe5644aa0e5c95294cd09 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GadGame/SO/Scene Flow Config.asset b/Assets/GadGame/SO/SceneFlowConfig/Scene Flow Config.asset similarity index 100% rename from Assets/GadGame/SO/Scene Flow Config.asset rename to Assets/GadGame/SO/SceneFlowConfig/Scene Flow Config.asset diff --git a/Assets/GadGame/SO/Scene Flow Config.asset.meta b/Assets/GadGame/SO/SceneFlowConfig/Scene Flow Config.asset.meta similarity index 100% rename from Assets/GadGame/SO/Scene Flow Config.asset.meta rename to Assets/GadGame/SO/SceneFlowConfig/Scene Flow Config.asset.meta diff --git a/Assets/GadGame/Scenes/Scene 5.unity b/Assets/GadGame/Scenes/Scene 5.unity index cf90878..a5a3ab5 100644 --- a/Assets/GadGame/Scenes/Scene 5.unity +++ b/Assets/GadGame/Scenes/Scene 5.unity @@ -123,6 +123,141 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &169808668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 169808669} + - component: {fileID: 169808671} + - component: {fileID: 169808670} + m_Layer: 5 + m_Name: ScoreLable + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &169808669 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169808668} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1901652403} + m_Father: {fileID: 1939570967} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: -100} + m_SizeDelta: {x: 350, y: 50} + m_Pivot: {x: 0, y: 1} +--- !u!114 &169808670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169808668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Score:' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 100 + m_fontSizeBase: 100 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 20, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &169808671 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169808668} + m_CullTransparentMesh: 1 --- !u!1 &408830255 GameObject: m_ObjectHideFlags: 0 @@ -296,7 +431,7 @@ GameObject: - component: {fileID: 1230716511} - component: {fileID: 1230716510} m_Layer: 5 - m_Name: Text (TMP) + m_Name: Time m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -356,7 +491,7 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 1 - m_HorizontalAlignment: 2 + m_HorizontalAlignment: 4 m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 @@ -385,7 +520,7 @@ MonoBehaviour: m_VertexBufferAutoSizeReduction: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 0, w: 0} + m_margin: {x: 0, y: 0, z: 20, w: 0} m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 m_hasFontAssetChanged: 0 @@ -413,11 +548,11 @@ RectTransform: m_Children: [] m_Father: {fileID: 1939570967} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 1} - m_AnchorMax: {x: 0.5, y: 1} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: -100} m_SizeDelta: {x: 200, y: 50} - m_Pivot: {x: 0.5, y: 1} + m_Pivot: {x: 1, y: 1} --- !u!1 &1254852289 GameObject: m_ObjectHideFlags: 0 @@ -822,6 +957,140 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1901652402 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1901652403} + - component: {fileID: 1901652405} + - component: {fileID: 1901652404} + m_Layer: 5 + m_Name: Score + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1901652403 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901652402} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 169808669} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 50} + m_Pivot: {x: 0, y: 0.5} +--- !u!114 &1901652404 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901652402} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 0 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 100 + m_fontSizeBase: 100 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1901652405 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1901652402} + m_CullTransparentMesh: 1 --- !u!1 &1939570963 GameObject: m_ObjectHideFlags: 0 @@ -917,6 +1186,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1230716512} + - {fileID: 169808669} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -973,11 +1243,10 @@ MonoBehaviour: - GadGame.State.GameState.ResumeGameState - GadGame.State.GameState.PlayingGameState - GadGame.State.GameState.EndGameState - GameTime: 20 + GameTime: 60 _basket: {fileID: 1254852291} - _time: {fileID: 1230716510} _lerp: 10 - _spawnTime: 1 + _spawnTime: 0.5 _bombChange: 0.2 _spawnArea: serializedVersion: 2 @@ -985,6 +1254,9 @@ MonoBehaviour: y: 7 width: 4.5 height: 1 + _gravityScaleRange: {x: 0.1, y: 0.5} + _time: {fileID: 1230716510} + _score: {fileID: 1901652404} _itemPools: - _source: {fileID: 343037395040712443, guid: 48f83ca60bcd97e47a2dbf1abb66b320, type: 3} _defaultCapacity: 10 diff --git a/Assets/GadGame/Scripts/Editor/PropertyDrawers/SceneReferencePropertyDrawer.cs b/Assets/GadGame/Scripts/Editor/PropertyDrawers/SceneReferencePropertyDrawer.cs index 3b96f3b..db162ad 100644 --- a/Assets/GadGame/Scripts/Editor/PropertyDrawers/SceneReferencePropertyDrawer.cs +++ b/Assets/GadGame/Scripts/Editor/PropertyDrawers/SceneReferencePropertyDrawer.cs @@ -3,7 +3,7 @@ using System.Linq; using UnityEditor; using UnityEngine; -namespace GadGame.Scripts.Editor.PropertyDrawers +namespace GadGame.Editor.PropertyDrawers { [UnityEditor.CustomPropertyDrawer(typeof(SceneReference))] public class SceneReferencePropertyDrawer : UnityEditor.PropertyDrawer diff --git a/Assets/GadGame/Scripts/Editor/Window.meta b/Assets/GadGame/Scripts/Editor/Window.meta new file mode 100644 index 0000000..2e35af5 --- /dev/null +++ b/Assets/GadGame/Scripts/Editor/Window.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d757e373f723438491928461135dda26 +timeCreated: 1713237666 \ No newline at end of file diff --git a/Assets/GadGame/Scripts/Editor/Window/SceneFlowConfigWindow.cs b/Assets/GadGame/Scripts/Editor/Window/SceneFlowConfigWindow.cs new file mode 100644 index 0000000..aecc6bb --- /dev/null +++ b/Assets/GadGame/Scripts/Editor/Window/SceneFlowConfigWindow.cs @@ -0,0 +1,21 @@ +using GadGame.SO; +using Sirenix.OdinInspector.Editor; +using Sirenix.Utilities; +using Sirenix.Utilities.Editor; +using UnityEditor; +using UnityEngine; + +namespace GadGame.Editor.Window +{ + public class SceneFlowConfigWindow : OdinEditorWindow + { + [MenuItem("Game Config/Scene Flow")] + private static void ShowWindow() + { + var window = InspectObject(SceneFlowConfig.GetOrCreateSettings()); + window.position = GUIHelper.GetEditorWindowRect().AlignCenter(600, 200); + window.maxSize = new Vector2(600, 200); + window.minSize = new Vector2(600, 200); + } + } +} \ No newline at end of file diff --git a/Assets/GadGame/Scripts/Editor/Window/SceneFlowConfigWindow.cs.meta b/Assets/GadGame/Scripts/Editor/Window/SceneFlowConfigWindow.cs.meta new file mode 100644 index 0000000..158fbf8 --- /dev/null +++ b/Assets/GadGame/Scripts/Editor/Window/SceneFlowConfigWindow.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f03a2ecf0b284191a9db4b3935036b57 +timeCreated: 1713237691 \ No newline at end of file diff --git a/Assets/GadGame/Scripts/MiniGame/Bomb.cs b/Assets/GadGame/Scripts/MiniGame/Bomb.cs index c551b43..f48a368 100644 --- a/Assets/GadGame/Scripts/MiniGame/Bomb.cs +++ b/Assets/GadGame/Scripts/MiniGame/Bomb.cs @@ -1,3 +1,4 @@ +using System; using GadGame.Manager; using Pools.Runtime; using UnityEngine; @@ -7,7 +8,21 @@ namespace GadGame.MiniGame public class Bomb : MonoBehaviour, ICollect { [SerializeField] private int _reduceScore; - + [SerializeField] private Rigidbody2D _rb; + + public void Init(float gravityScale = 1) + { + _rb.gravityScale = gravityScale; + } + + private void FixedUpdate() + { + if (_rb.position.y <= -10) + { + this.Release(); + } + } + public void Collect() { GameManager.Instance.UpdateScore(-_reduceScore); diff --git a/Assets/GadGame/Scripts/MiniGame/Item.cs b/Assets/GadGame/Scripts/MiniGame/Item.cs index 3079889..03029e8 100644 --- a/Assets/GadGame/Scripts/MiniGame/Item.cs +++ b/Assets/GadGame/Scripts/MiniGame/Item.cs @@ -7,6 +7,20 @@ namespace GadGame.MiniGame public class Item : MonoBehaviour, ICollect { [SerializeField] private int _score; + [SerializeField] private Rigidbody2D _rb; + + public void Init(float gravityScale = 1) + { + _rb.gravityScale = gravityScale; + } + + private void LateUpdate() + { + if (_rb.position.y <= -10) + { + this.Release(); + } + } public void Collect() { diff --git a/Assets/GadGame/Scripts/MiniGame/MiniGameController.cs b/Assets/GadGame/Scripts/MiniGame/MiniGameController.cs index 69933c3..e1bd60d 100644 --- a/Assets/GadGame/Scripts/MiniGame/MiniGameController.cs +++ b/Assets/GadGame/Scripts/MiniGame/MiniGameController.cs @@ -2,6 +2,7 @@ using GadGame.Manager; using GadGame.State; using GadGame.State.GameState; using Pools.Runtime; +using Sirenix.OdinInspector; using TMPro; using UnityEngine; @@ -9,15 +10,20 @@ namespace GadGame.MiniGame { public class MiniGameController : StateRunner { + [Header("Stats")] public int GameTime; - [SerializeField] private Transform _basket; - [SerializeField] private TextMeshProUGUI _time; [SerializeField] private float _lerp; [SerializeField] private float _spawnTime; [SerializeField, Range(0,1)] private float _bombChange; [SerializeField] private Rect _spawnArea; + [SerializeField, MinMaxSlider(0, 2, true)] private Vector2 _gravityScaleRange; + [Header("UI")] + [SerializeField] private TextMeshProUGUI _time; + [SerializeField] private TextMeshProUGUI _score; + + [Header("Pool")] [SerializeField] private Pool[] _itemPools; [SerializeField] private Pool[] _bombPools; @@ -30,6 +36,7 @@ namespace GadGame.MiniGame _gameManager = GameManager.Instance; _gameManager.OnPause += Pause; _gameManager.OnResume += Resume; + _gameManager.OnScoreUpdate += OnScoreUpdate; _camera = Camera.main; SetState(); _time.text = GameTime.ToString(); @@ -41,17 +48,20 @@ namespace GadGame.MiniGame if (_spawnTimer >= _spawnTime) { _spawnTimer = 0; + var gravity = Random.Range(_gravityScaleRange.x, _gravityScaleRange.y); var bombChance = Random.value; if (bombChance <= _bombChange) { var random = Random.Range(0, _bombPools.Length); var bomb = _bombPools[random].Get(); + bomb.Init(gravity); bomb.transform.position = _spawnArea.RandomPointInside(); } else { var random = Random.Range(0, _itemPools.Length); var item = _itemPools[random].Get(); + item.Init(gravity); item.transform.position = _spawnArea.RandomPointInside(); } } @@ -91,6 +101,11 @@ namespace GadGame.MiniGame { SetState(); } + + private void OnScoreUpdate(int score) + { + _score.text = score.ToString(); + } private void OnDrawGizmos() { diff --git a/Assets/GadGame/Scripts/SO/SceneFlowConfig.cs b/Assets/GadGame/Scripts/SO/SceneFlowConfig.cs index fa74f37..34bf8ac 100644 --- a/Assets/GadGame/Scripts/SO/SceneFlowConfig.cs +++ b/Assets/GadGame/Scripts/SO/SceneFlowConfig.cs @@ -1,3 +1,5 @@ +using System.IO; +using UnityEditor; using UnityEngine; namespace GadGame.SO @@ -12,5 +14,38 @@ namespace GadGame.SO public SceneReference GameScene; public SceneReference RewardScene; public SceneReference CTAScene; + + +#if UNITY_EDITOR + public static SceneFlowConfig FindSettings() + { + var guids = AssetDatabase.FindAssets($"t:{nameof(SceneFlowConfig)}"); + if (guids.Length > 1) Debug.LogWarning("Found multiple settings files, using the first."); + + switch (guids.Length) + { + case 0: + return null; + default: + var path = AssetDatabase.GUIDToAssetPath(guids[0]); + return AssetDatabase.LoadAssetAtPath(path); + } + } + + public static SceneFlowConfig GetOrCreateSettings() + { + var settings = FindSettings(); + if (settings == null) + { + settings = CreateInstance(); + string path = "Assets/_Game/SO/SceneFlowConfig"; + if (!Directory.Exists(path)) Directory.CreateDirectory(path); + AssetDatabase.CreateAsset(settings, $"{path}/Scene Flow Config.asset"); + AssetDatabase.SaveAssets(); + } + + return settings; + } +#endif } } \ No newline at end of file diff --git a/Assets/GadGame/Scripts/State/GameState/EndGameState.cs b/Assets/GadGame/Scripts/State/GameState/EndGameState.cs index bcb13f3..2810f5e 100644 --- a/Assets/GadGame/Scripts/State/GameState/EndGameState.cs +++ b/Assets/GadGame/Scripts/State/GameState/EndGameState.cs @@ -1,3 +1,4 @@ +using Cysharp.Threading.Tasks; using GadGame.Manager; using GadGame.MiniGame; using UnityEngine; @@ -6,9 +7,10 @@ namespace GadGame.State.GameState { public class EndGameState : State { - public override void Enter() + public override async void Enter() { Debug.Log("End Game"); + await UniTask.Delay(3000); GameManager.Instance.EndGame(); } diff --git a/Assets/GadGame/Scripts/Utils.cs b/Assets/GadGame/Scripts/Utils.cs index 2e25091..096a6a4 100644 --- a/Assets/GadGame/Scripts/Utils.cs +++ b/Assets/GadGame/Scripts/Utils.cs @@ -7,7 +7,8 @@ namespace GadGame public static Vector2 RandomPointInside(this Rect rect) { var rectSize = rect.size; - return rect.position + new Vector2(Random.Range(0, rectSize.x), Random.Range(0, rectSize.y)); + var bottomLeft = rect.position + new Vector2(-rect.width / 2, -rect.height / 2); + return bottomLeft + new Vector2(Random.Range(0, rectSize.x), Random.Range(0, rectSize.y)); } } } \ No newline at end of file