diff --git a/PuzzleGameProject/Assets/Scenes/Level_0.unity b/PuzzleGameProject/Assets/Scenes/Level_0.unity index ac5c7e6..d139b1e 100644 --- a/PuzzleGameProject/Assets/Scenes/Level_0.unity +++ b/PuzzleGameProject/Assets/Scenes/Level_0.unity @@ -119,6 +119,142 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &46598853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 46598854} + - component: {fileID: 46598856} + - component: {fileID: 46598855} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &46598854 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 46598853} + 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: 895359723} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &46598855 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 46598853} + 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: Pass + 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: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + 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_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &46598856 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 46598853} + m_CullTransparentMesh: 1 --- !u!1001 &54550404 PrefabInstance: m_ObjectHideFlags: 0 @@ -376,6 +512,8 @@ MonoBehaviour: state: 0 rooms: {fileID: 1820284205} diceRoller: {fileID: 150116548} + passManager: {fileID: 895359724} + player: {fileID: 1476127625} --- !u!1 &150116543 GameObject: m_ObjectHideFlags: 0 @@ -390,7 +528,7 @@ GameObject: - component: {fileID: 150116545} - component: {fileID: 150116548} m_Layer: 5 - m_Name: Button + m_Name: RollButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -413,8 +551,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 346.17993, y: -216.5268} - m_SizeDelta: {x: 150.14, y: 30} + m_AnchoredPosition: {x: 383.71, y: -217} + m_SizeDelta: {x: 75.07, y: 30} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &150116545 MonoBehaviour: @@ -708,8 +846,10 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 925126052} + - {fileID: 1535239304} - {fileID: 150116544} + - {fileID: 895359723} + - {fileID: 925126052} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1100,6 +1240,141 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 1556923700715053098, guid: ca942b415faef4e1ca2ca32043893efd, type: 3} m_PrefabInstance: {fileID: 822843740} m_PrefabAsset: {fileID: 0} +--- !u!1 &895359722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 895359723} + - component: {fileID: 895359727} + - component: {fileID: 895359726} + - component: {fileID: 895359725} + - component: {fileID: 895359724} + m_Layer: 5 + m_Name: PassButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &895359723 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895359722} + 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: 46598854} + m_Father: {fileID: 281326036} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 308.63998, y: -217} + m_SizeDelta: {x: 75.06, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &895359724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895359722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 95487118287b4514fb9b9fb7018ae717, type: 3} + m_Name: + m_EditorClassIdentifier: + passButton: {fileID: 895359725} +--- !u!114 &895359725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895359722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 895359726} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &895359726 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895359722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, 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_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &895359727 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 895359722} + m_CullTransparentMesh: 1 --- !u!1 &925126051 GameObject: m_ObjectHideFlags: 0 @@ -1909,6 +2184,52 @@ Transform: m_CorrespondingSourceObject: {fileID: 9187907134033443523, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3} m_PrefabInstance: {fileID: 1488361738} m_PrefabAsset: {fileID: 0} +--- !u!1 &1476127624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1476127626} + - component: {fileID: 1476127625} + m_Layer: 0 + m_Name: Player + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1476127625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1476127624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 516f63f4d32b3614b92fb0535c742078, type: 3} + m_Name: + m_EditorClassIdentifier: + maxHealth: 20 + healthGameObject: {fileID: 1535239303} +--- !u!4 &1476127626 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1476127624} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1014.4642, y: 342.2176, z: 6.637133} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1488361738 PrefabInstance: m_ObjectHideFlags: 0 @@ -2067,6 +2388,142 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3} +--- !u!1 &1535239303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1535239304} + - component: {fileID: 1535239306} + - component: {fileID: 1535239305} + m_Layer: 5 + m_Name: Health + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1535239304 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535239303} + 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: 281326036} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 346.17993, y: -176.53} + m_SizeDelta: {x: 150.14, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1535239305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535239303} + 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: New Text + 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: 4278255360 + m_fontColor: {r: 0, g: 1, 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: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 4 + 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_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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 &1535239306 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1535239303} + m_CullTransparentMesh: 1 --- !u!1 &1544302703 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2435349004046080434, guid: 92d87e25cc40b3e448e62e8ba0328315, type: 3} @@ -2352,6 +2809,7 @@ SceneRoots: m_Roots: - {fileID: 59409728} - {fileID: 126339302} + - {fileID: 1476127626} - {fileID: 1820284206} - {fileID: 812815656} - {fileID: 281326036} diff --git a/PuzzleGameProject/Assets/Scripts/GameManager.cs b/PuzzleGameProject/Assets/Scripts/GameManager.cs index 9dcd006..520b4dd 100644 --- a/PuzzleGameProject/Assets/Scripts/GameManager.cs +++ b/PuzzleGameProject/Assets/Scripts/GameManager.cs @@ -14,17 +14,21 @@ public enum GameState } public class GameManager : MonoBehaviour { - [SerializeField] private GameState state; + [SerializeField] public GameState state; [SerializeField] private GameObject rooms; [SerializeField] private DiceRoller diceRoller; + [SerializeField] private PassManager passManager; + [SerializeField] private Player player; - private DicePair _dicePairOne = new DicePair(); - private DicePair _dicePairTwo = new DicePair(); + private DicePair _dicePairOne = new(); + private DicePair _dicePairTwo = new(); + public event EventHandler StateChanged; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { diceRoller.diceRolled += DiceRolled; + passManager.PassRequested += PassRequested; foreach (Transform roomTransform in rooms.transform) { roomTransform.gameObject.GetComponent().ValidRoomClicked += ValidRoomClicked; @@ -35,10 +39,15 @@ public class GameManager : MonoBehaviour } StartNewTurn(); } + + private void ChangeState(GameState stateToChangeTo) { + state = stateToChangeTo; + StateChanged?.Invoke(this, state); + } private void StartNewTurn() { - state = GameState.RollDice; + ChangeState(GameState.RollDice); diceRoller.Enable(); diceRoller.ResetDice(); _dicePairOne = new DicePair(); @@ -61,13 +70,12 @@ public class GameManager : MonoBehaviour room.SetRoomExplored(); if (state == GameState.PickRoomOne) { - state = GameState.PickDiceTwo; + ChangeState(GameState.PickDiceTwo); } else { StartNewTurn(); } - } void DieClicked(object sender, Die die) @@ -82,7 +90,7 @@ public class GameManager : MonoBehaviour if (_dicePairOne.AreBothDiceSelected()) { - state = GameState.PickRoomOne; + ChangeState(GameState.PickRoomOne); HighLightValidRoomsWithNumber(_dicePairOne); } } @@ -101,7 +109,7 @@ public class GameManager : MonoBehaviour if (_dicePairTwo.AreBothDiceSelected()) { - state = GameState.PickRoomTwo; + ChangeState(GameState.PickRoomTwo); HighLightValidRoomsWithNumber(_dicePairTwo); } } @@ -117,7 +125,7 @@ public class GameManager : MonoBehaviour { _dicePairOne.UnselectDie(die); UnhighLightRoomsAsOptions(); - state = GameState.PickDiceOne; + ChangeState(GameState.PickDiceOne); } break; case GameState.PickRoomTwo: @@ -125,12 +133,17 @@ public class GameManager : MonoBehaviour { _dicePairTwo.UnselectDie(die); UnhighLightRoomsAsOptions(); - state = GameState.PickDiceTwo; + ChangeState(GameState.PickDiceTwo); } break; } } + private void PassTurn() { + player.TakeDamage(1); + StartNewTurn(); + } + void HighLightValidRoomsWithNumber(DicePair pair) { foreach (Transform roomTransform in rooms.transform) @@ -156,7 +169,14 @@ public class GameManager : MonoBehaviour if (state == GameState.RollDice) { diceRoller.Disable(); - state = GameState.PickDiceOne; + ChangeState(GameState.PickDiceOne); + } + } + + private void PassRequested(object sender, EventArgs e) { + if (state is GameState.PickDiceOne or GameState.PickDiceTwo) + { + PassTurn(); } } } diff --git a/PuzzleGameProject/Assets/Scripts/PassManager.cs b/PuzzleGameProject/Assets/Scripts/PassManager.cs new file mode 100644 index 0000000..4666911 --- /dev/null +++ b/PuzzleGameProject/Assets/Scripts/PassManager.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Video; +using Button = UnityEngine.UI.Button; + +public class PassManager : MonoBehaviour +{ + [SerializeField] private Button passButton; + [SerializeField] private GameManager gameManager; + + public event EventHandler PassRequested; + + // Start is called once before the first execution of Update after the MonoBehaviour is created + void Start() + { + passButton.onClick.AddListener(OnPassClicked); + gameManager.StateChanged += OnGameStateChange; + } + + private void OnGameStateChange(object sender, GameState state) { + if (state == GameState.RollDice) + { + passButton.interactable = false; + } + else + { + passButton.interactable = true; + } + } + + private void OnPassClicked() + { + PassRequested?.Invoke(this, EventArgs.Empty); + } +} diff --git a/PuzzleGameProject/Assets/Scripts/PassManager.cs.meta b/PuzzleGameProject/Assets/Scripts/PassManager.cs.meta new file mode 100644 index 0000000..cdfdff3 --- /dev/null +++ b/PuzzleGameProject/Assets/Scripts/PassManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 95487118287b4514fb9b9fb7018ae717 \ No newline at end of file diff --git a/PuzzleGameProject/Assets/Scripts/Player.cs b/PuzzleGameProject/Assets/Scripts/Player.cs new file mode 100644 index 0000000..231fb7e --- /dev/null +++ b/PuzzleGameProject/Assets/Scripts/Player.cs @@ -0,0 +1,39 @@ +using System; +using Microsoft.Unity.VisualStudio.Editor; +using TMPro; +using UnityEngine; + +public class Player : MonoBehaviour +{ + [SerializeField] private int maxHealth; + [SerializeField] private GameObject healthGameObject; + private int _healthIndex = 0; + private readonly int[] _healthBar = {0, 0, -1, -2, -4, -6, -9, -12, -16, -20}; + + private void Start() { + UpdateGUI(); + } + + public void TakeDamage(int damage) + { + if (_healthIndex + damage < _healthBar.Length) + { + _healthIndex += damage; + UpdateGUI(); + } + } + + public void Heal(int healAmount) + { + if (_healthIndex - healAmount >= 0) + { + _healthIndex -= healAmount; + UpdateGUI(); + } + } + + private void UpdateGUI() + { + healthGameObject.GetComponent().text = _healthBar[_healthIndex].ToString(); + } +} diff --git a/PuzzleGameProject/Assets/Scripts/Player.cs.meta b/PuzzleGameProject/Assets/Scripts/Player.cs.meta new file mode 100644 index 0000000..edd3ced --- /dev/null +++ b/PuzzleGameProject/Assets/Scripts/Player.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 516f63f4d32b3614b92fb0535c742078 \ No newline at end of file