Health bar and player management refined

This commit is contained in:
djkellerman
2025-03-06 01:27:42 -05:00
parent 47314da759
commit bd3e57428f
18 changed files with 2070 additions and 213 deletions

View File

@@ -229,6 +229,9 @@ AnimatorStateMachine:
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: -6105423640591385822} m_State: {fileID: -6105423640591385822}
m_Position: {x: -90, y: 230, z: 0} m_Position: {x: -90, y: 230, z: 0}
- serializedVersion: 1
m_State: {fileID: 2419565110853745188}
m_Position: {x: -55, y: 295, z: 0}
m_ChildStateMachines: [] m_ChildStateMachines: []
m_AnyStateTransitions: m_AnyStateTransitions:
- {fileID: 5263795009836994554} - {fileID: 5263795009836994554}
@@ -413,6 +416,32 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1102 &2419565110853745188
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Die
m_Speed: 1
m_CycleOffset: 0
m_Transitions: []
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: f81637d914d3dde469fd4b25e1d67a76, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!1102 &2500419510660092995 --- !u!1102 &2500419510660092995
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6

1653
Assets/Animations/Die.anim Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: f81637d914d3dde469fd4b25e1d67a76
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,3 +1,4 @@
using System.Linq;
using UnityEngine; using UnityEngine;
using UnityEngine.InputSystem; using UnityEngine.InputSystem;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
@@ -6,7 +7,6 @@ using UnityEngine.UI;
public class HubManager : MonoBehaviour public class HubManager : MonoBehaviour
{ {
public static HubManager Instance; public static HubManager Instance;
public GameObject hubCamera; public GameObject hubCamera;
public GameObject gameButtonsParent; public GameObject gameButtonsParent;
@@ -52,7 +52,8 @@ public class HubManager : MonoBehaviour
{ {
UnloadGameScene(); UnloadGameScene();
ChangeGameButtonsInteractability(true); ChangeGameButtonsInteractability(true);
foreach (GameObject player in GameManager.players)
foreach (GameObject player in GameManager.players.ToList())
{ {
GameManager.players.Remove(player); GameManager.players.Remove(player);
Destroy(player); Destroy(player);

View File

@@ -10,7 +10,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 210773656378718009} - component: {fileID: 210773656378718009}
- component: {fileID: 210773656378718014} - component: {fileID: 210773656378718014}
m_Layer: 0 m_Layer: 7
m_Name: Death m_Name: Death
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -97,7 +97,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 210773656934484430} - component: {fileID: 210773656934484430}
- component: {fileID: 210773656934484428} - component: {fileID: 210773656934484428}
m_Layer: 0 m_Layer: 7
m_Name: Health m_Name: Health
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -184,21 +184,20 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 210773657359985456} - component: {fileID: 210773657359985456}
- component: {fileID: 7422290698914274434} - component: {fileID: 7422290698914274434}
m_Layer: 0 m_Layer: 7
m_Name: Healthbar m_Name: Healthbar
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 1
--- !u!4 &210773657359985456 --- !u!224 &210773657359985456
Transform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 210773657359985459} m_GameObject: {fileID: 210773657359985459}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
@@ -211,6 +210,11 @@ Transform:
- {fileID: 210773657761048651} - {fileID: 210773657761048651}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 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: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &7422290698914274434 --- !u!114 &7422290698914274434
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -231,6 +235,7 @@ MonoBehaviour:
deathVisual: {fileID: 210773656378718008} deathVisual: {fileID: 210773656378718008}
smoothSpeed: 0.1 smoothSpeed: 0.1
text: {fileID: 210773657480500664} text: {fileID: 210773657480500664}
player: {fileID: 0}
--- !u!1 &210773657480500666 --- !u!1 &210773657480500666
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -242,7 +247,7 @@ GameObject:
- component: {fileID: 210773657480500667} - component: {fileID: 210773657480500667}
- component: {fileID: 210773657480500665} - component: {fileID: 210773657480500665}
- component: {fileID: 210773657480500664} - component: {fileID: 210773657480500664}
m_Layer: 0 m_Layer: 7
m_Name: Text m_Name: Text
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -377,7 +382,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 210773657645469775} - component: {fileID: 210773657645469775}
- component: {fileID: 210773657645469772} - component: {fileID: 210773657645469772}
m_Layer: 0 m_Layer: 7
m_Name: Border m_Name: Border
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -466,7 +471,7 @@ GameObject:
- component: {fileID: 210773657761048654} - component: {fileID: 210773657761048654}
- component: {fileID: 210773657761048649} - component: {fileID: 210773657761048649}
- component: {fileID: 210773657761048648} - component: {fileID: 210773657761048648}
m_Layer: 0 m_Layer: 7
m_Name: Number m_Name: Number
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
@@ -566,7 +571,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 170974732944509535} - component: {fileID: 170974732944509535}
- component: {fileID: 8850558015437586293} - component: {fileID: 8850558015437586293}
m_Layer: 0 m_Layer: 7
m_Name: Actual m_Name: Actual
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}

View File

@@ -100,7 +100,7 @@ GameObject:
- component: {fileID: -5768905494704828194} - component: {fileID: -5768905494704828194}
m_Layer: 0 m_Layer: 0
m_Name: Player m_Name: Player
m_TagString: Player m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
@@ -411,3 +411,5 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
teleportPoint: {x: 0, y: 0} teleportPoint: {x: 0, y: 0}
teleportTag: Teleporter teleportTag: Teleporter
playerTag: Player
isPlatform: 1

View File

@@ -304,6 +304,133 @@ Transform:
m_CorrespondingSourceObject: {fileID: 5794044177371189323, guid: 5ce441c5fe33344a292ef80ef22aaffd, type: 3} m_CorrespondingSourceObject: {fileID: 5794044177371189323, guid: 5ce441c5fe33344a292ef80ef22aaffd, type: 3}
m_PrefabInstance: {fileID: 612903695} m_PrefabInstance: {fileID: 612903695}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
--- !u!1001 &646086199
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 1703536538}
m_Modifications:
- target: {fileID: 210773656378718008, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_Layer
value: 5
objectReference: {fileID: 0}
- target: {fileID: 210773656934484425, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_Layer
value: 5
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_AnchoredPosition.x
value: 9
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_AnchoredPosition.y
value: 11
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 210773657359985459, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_Name
value: Healthbar
objectReference: {fileID: 0}
- target: {fileID: 210773657359985459, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_Layer
value: 5
objectReference: {fileID: 0}
- target: {fileID: 210773657480500666, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_Layer
value: 5
objectReference: {fileID: 0}
- target: {fileID: 210773657645469774, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_Layer
value: 5
objectReference: {fileID: 0}
- target: {fileID: 210773657761048650, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_Layer
value: 5
objectReference: {fileID: 0}
- target: {fileID: 904379579236604940, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_Layer
value: 5
objectReference: {fileID: 0}
- target: {fileID: 1847290122477952015, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: m_PresetInfoIsWorld
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7422290698914274434, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
propertyPath: player
value:
objectReference: {fileID: 1375850422501237868, guid: 1fd31b88e5609482ab7e8ab16a932947, type: 3}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents:
- targetCorrespondingSourceObject: {fileID: 210773657359985459, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
insertIndex: -1
addedObject: {fileID: 646086201}
m_SourcePrefab: {fileID: 100100000, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
--- !u!1 &646086200 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 210773657359985459, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
m_PrefabInstance: {fileID: 646086199}
m_PrefabAsset: {fileID: 0}
--- !u!114 &646086201
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 646086200}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a80b536f823e50142b142b4e0b64ea97, type: 3}
m_Name:
m_EditorClassIdentifier:
healthBarPrefab: {fileID: 646086200}
--- !u!224 &646086202 stripped
RectTransform:
m_CorrespondingSourceObject: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3}
m_PrefabInstance: {fileID: 646086199}
m_PrefabAsset: {fileID: 0}
--- !u!1 &708097981 --- !u!1 &708097981
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -888,87 +1015,90 @@ PrefabInstance:
m_AddedGameObjects: [] m_AddedGameObjects: []
m_AddedComponents: [] m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: eea49ffcaef404cf0b373413357af83b, type: 3} m_SourcePrefab: {fileID: 100100000, guid: eea49ffcaef404cf0b373413357af83b, type: 3}
--- !u!1001 &1664848898 --- !u!1 &1703536534
PrefabInstance: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 m_CorrespondingSourceObject: {fileID: 0}
m_Modification: m_PrefabInstance: {fileID: 0}
serializedVersion: 3 m_PrefabAsset: {fileID: 0}
m_TransformParent: {fileID: 0} serializedVersion: 6
m_Modifications: m_Component:
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} - component: {fileID: 1703536538}
propertyPath: m_LocalScale.x - component: {fileID: 1703536537}
value: 10.396 - component: {fileID: 1703536536}
objectReference: {fileID: 0} m_Layer: 5
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_Name: HealthCanvas
propertyPath: m_LocalScale.y m_TagString: Untagged
value: 10.396 m_Icon: {fileID: 0}
objectReference: {fileID: 0} m_NavMeshLayer: 0
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_StaticEditorFlags: 0
propertyPath: m_LocalScale.z m_IsActive: 1
value: 10.396 --- !u!114 &1703536536
objectReference: {fileID: 0} MonoBehaviour:
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_ObjectHideFlags: 0
propertyPath: m_LocalPosition.x m_CorrespondingSourceObject: {fileID: 0}
value: -12.83 m_PrefabInstance: {fileID: 0}
objectReference: {fileID: 0} m_PrefabAsset: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_GameObject: {fileID: 1703536534}
propertyPath: m_LocalPosition.y m_Enabled: 1
value: 3.96 m_EditorHideFlags: 0
objectReference: {fileID: 0} m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_Name:
propertyPath: m_LocalPosition.z m_EditorClassIdentifier:
value: 0 m_UiScaleMode: 1
objectReference: {fileID: 0} m_ReferencePixelsPerUnit: 100
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_ScaleFactor: 1
propertyPath: m_LocalRotation.w m_ReferenceResolution: {x: 1920, y: 1080}
value: 1 m_ScreenMatchMode: 0
objectReference: {fileID: 0} m_MatchWidthOrHeight: 0
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_PhysicalUnit: 3
propertyPath: m_LocalRotation.x m_FallbackScreenDPI: 96
value: 0 m_DefaultSpriteDPI: 96
objectReference: {fileID: 0} m_DynamicPixelsPerUnit: 1
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_PresetInfoIsWorld: 0
propertyPath: m_LocalRotation.y --- !u!223 &1703536537
value: 0 Canvas:
objectReference: {fileID: 0} m_ObjectHideFlags: 0
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_CorrespondingSourceObject: {fileID: 0}
propertyPath: m_LocalRotation.z m_PrefabInstance: {fileID: 0}
value: 0 m_PrefabAsset: {fileID: 0}
objectReference: {fileID: 0} m_GameObject: {fileID: 1703536534}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_Enabled: 1
propertyPath: m_LocalEulerAnglesHint.x serializedVersion: 3
value: 0 m_RenderMode: 0
objectReference: {fileID: 0} m_Camera: {fileID: 0}
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_PlaneDistance: 100
propertyPath: m_LocalEulerAnglesHint.y m_PixelPerfect: 0
value: 0 m_ReceivesEvents: 1
objectReference: {fileID: 0} m_OverrideSorting: 0
- target: {fileID: 210773657359985456, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_OverridePixelPerfect: 0
propertyPath: m_LocalEulerAnglesHint.z m_SortingBucketNormalizedSize: 0
value: 0 m_VertexColorAlwaysGammaSpace: 0
objectReference: {fileID: 0} m_AdditionalShaderChannelsFlag: 0
- target: {fileID: 210773657359985459, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_UpdateRectTransformForStandalone: 0
propertyPath: m_Name m_SortingLayerID: 0
value: Healthbar m_SortingOrder: 10000
objectReference: {fileID: 0} m_TargetDisplay: 0
- target: {fileID: 210773657480500664, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} --- !u!224 &1703536538
propertyPath: m_fontAsset RectTransform:
value: m_ObjectHideFlags: 0
objectReference: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_CorrespondingSourceObject: {fileID: 0}
- target: {fileID: 210773657480500664, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_PrefabInstance: {fileID: 0}
propertyPath: m_sharedMaterial m_PrefabAsset: {fileID: 0}
value: m_GameObject: {fileID: 1703536534}
objectReference: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- target: {fileID: 210773657480500664, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_LocalPosition: {x: 0, y: 0, z: 0}
propertyPath: 'm_ActiveFontFeatures.Array.data[0]' m_LocalScale: {x: 0, y: 0, z: 0}
value: 1801810542 m_ConstrainProportionsScale: 0
objectReference: {fileID: 0} m_Children:
m_RemovedComponents: [] - {fileID: 646086202}
m_RemovedGameObjects: [] m_Father: {fileID: 0}
m_AddedGameObjects: [] m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AddedComponents: [] m_AnchorMin: {x: 0, y: 0}
m_SourcePrefab: {fileID: 100100000, guid: e2f1088617eeb46c79bf9d357f913fc4, type: 3} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!1 &1758254987 --- !u!1 &1758254987
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -4619,6 +4749,7 @@ SceneRoots:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_Roots: m_Roots:
- {fileID: 8682934954266721942} - {fileID: 8682934954266721942}
- {fileID: 1703536538}
- {fileID: 1758254989} - {fileID: 1758254989}
- {fileID: 1335742587} - {fileID: 1335742587}
- {fileID: 2119246465} - {fileID: 2119246465}
@@ -4627,4 +4758,3 @@ SceneRoots:
- {fileID: 421411299} - {fileID: 421411299}
- {fileID: 708097985} - {fileID: 708097985}
- {fileID: 854334845} - {fileID: 854334845}
- {fileID: 1664848898}

View File

@@ -24,7 +24,6 @@ public class AnimationPlayer : MonoBehaviour
{ {
animator.SetInteger("state", (int)state); animator.SetInteger("state", (int)state);
transform.localScale = new Vector3(Mathf.Sign(backwards ? -1 : 1) * Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z); transform.localScale = new Vector3(Mathf.Sign(backwards ? -1 : 1) * Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);
animator.SetBool("block", block); animator.SetBool("block", block);
} }

View File

@@ -1,3 +1,5 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))] [RequireComponent(typeof(Rigidbody2D))]
@@ -8,19 +10,13 @@ public class Damageable : MonoBehaviour
public float force = 50f; public float force = 50f;
public float damage = 0f; public float damage = 0f;
public float maxDamage = 1000f; public float maxDamage = 1000f;
public HealthBar healthBar;
private GameManager gameManager; private GameManager gameManager;
private Animator animator;
private void Start() private void Start()
{ {
gameManager = GameManager.Instance; gameManager = GameManager.Instance;
animator = GetComponent<Animator>();
if (healthBar != null)
{
healthBar.SetMaxHealth(maxDamage);
healthBar.SetHealth(maxDamage - damage);
}
} }
private void OnTriggerEnter2D(Collider2D collision) private void OnTriggerEnter2D(Collider2D collision)
@@ -55,10 +51,6 @@ public class Damageable : MonoBehaviour
} }
damage += actualForce; damage += actualForce;
damage = Mathf.Clamp(damage, 0f, maxDamage); damage = Mathf.Clamp(damage, 0f, maxDamage);
if (healthBar != null)
{
healthBar.SetHealth(maxDamage - damage);
}
if (damage >= maxDamage) if (damage >= maxDamage)
{ {
Die(); Die();
@@ -70,10 +62,6 @@ public class Damageable : MonoBehaviour
GetComponent<Rigidbody2D>().AddForce(((transform.position - damageSource.transform.position).normalized + Vector3.up * 2) * force, ForceMode2D.Force); GetComponent<Rigidbody2D>().AddForce(((transform.position - damageSource.transform.position).normalized + Vector3.up * 2) * force, ForceMode2D.Force);
damage += force; damage += force;
damage = Mathf.Clamp(damage, 0f, maxDamage); damage = Mathf.Clamp(damage, 0f, maxDamage);
if (healthBar != null)
{
healthBar.SetHealth(maxDamage - damage);
}
if (damage >= maxDamage) if (damage >= maxDamage)
{ {
Die(); Die();
@@ -82,12 +70,18 @@ public class Damageable : MonoBehaviour
private void Die() private void Die()
{ {
Debug.Log($"{name}: MAKE THIS WORK.");
if (gameManager != null) if (gameManager != null)
{ {
gameManager.PlayerDied(gameObject); //add death animation trigger animator.SetTrigger("Die");
StartCoroutine(HandleDeath());
} }
}
private IEnumerator HandleDeath()
{
yield return new WaitForSeconds(animator.GetCurrentAnimatorStateInfo(0).length);
gameManager.PlayerDied(gameObject);
} }
public void Respawn() public void Respawn()
@@ -96,6 +90,7 @@ public class Damageable : MonoBehaviour
if (TryGetComponent<Rigidbody2D>(out var rb)) if (TryGetComponent<Rigidbody2D>(out var rb))
{ {
rb.linearVelocity = Vector2.zero; rb.linearVelocity = Vector2.zero;
rb.angularVelocity = 0f;
} }
if (TryGetComponent<Damageable>(out var damageable)) if (TryGetComponent<Damageable>(out var damageable))
{ {
@@ -106,10 +101,5 @@ public class Damageable : MonoBehaviour
public void ResetDamage() public void ResetDamage()
{ {
damage = 0f; damage = 0f;
if (healthBar != null)
{
healthBar.SetHealth(maxDamage);
}
//transform.localScale = Vector3.one;
} }
} }

View File

@@ -6,6 +6,10 @@ public class GameManager : MonoBehaviour
public static GameManager Instance { get; private set; } public static GameManager Instance { get; private set; }
public int maxLives = 3; public int maxLives = 3;
public int currentLives; public int currentLives;
public delegate void GameEvent();
public event GameEvent StartGameEvent;
public event GameEvent EndGameEvent;
public static List<GameObject> players = new List<GameObject>();
private void Awake() private void Awake()
{ {
@@ -26,21 +30,31 @@ public class GameManager : MonoBehaviour
public void StartGame() public void StartGame()
{ {
StartGameEvent?.Invoke();
print("Starting game with mode: " + gameMode + " and map: " + map); print("Starting game with mode: " + gameMode + " and map: " + map);
if (gameMode == GameMode.freeForAll) if (gameMode == GameMode.freeForAll)
{ {
currentLives = maxLives; currentLives = maxLives;
StartFreeForAll(); foreach (GameObject player in players)
{
player.transform.position = spawnPosition;
}
} }
if (gameMode == GameMode.keepAway) if (gameMode == GameMode.keepAway)
{ {
currentLives = 1; currentLives = 1;
StartKeepAway(); foreach (GameObject player in players)
{
player.transform.position = spawnPosition;
}
} }
if (gameMode == GameMode.obstacleCourse) if (gameMode == GameMode.obstacleCourse)
{ {
currentLives = 1; currentLives = 1;
StartObstacleCourse(); foreach (GameObject player in players)
{
player.transform.position = spawnPosition;
}
} }
} }
@@ -51,38 +65,10 @@ public class GameManager : MonoBehaviour
obstacleCourse obstacleCourse
} }
public static GameMode gameMode = GameMode.freeForAll; public static GameMode gameMode = GameMode.freeForAll; // loads a default gamemode as a safety net
public static string map = "Platformer With Headroom"; // loads a default map as a safety net
public static string map = "Platformer With Headroom"; //called for in PlayerManager and should be changed to load from here instead
public static List<GameObject> players = new List<GameObject>();
public Vector2 spawnPosition; public Vector2 spawnPosition;
private void StartFreeForAll()
{
foreach (GameObject player in players)
{
player.transform.position = spawnPosition;
}
}
private void StartKeepAway()
{
foreach (GameObject player in players)
{
player.transform.position = spawnPosition;
}
}
private void StartObstacleCourse()
{
foreach (GameObject player in players)
{
player.transform.position = spawnPosition;
}
}
public void PlayerDied(GameObject player) public void PlayerDied(GameObject player)
{ {
if (gameMode == GameMode.freeForAll) if (gameMode == GameMode.freeForAll)
@@ -119,7 +105,8 @@ public class GameManager : MonoBehaviour
private void GameOver(GameObject player) private void GameOver(GameObject player)
{ {
// Disable player controls and show game over screen // Add game over screen
player.SetActive(false); player.SetActive(false);
EndGameEvent?.Invoke();
} }
} }

View File

@@ -1,24 +0,0 @@
using UnityEngine;
using UnityEngine.UI;
public class HealthBar : MonoBehaviour
{
public Slider slider;
public void SetMaxHealth(float health)
{
if (slider != null)
{
slider.maxValue = health;
slider.value = health;
}
}
public void SetHealth(float health)
{
if (slider != null)
{
slider.value = health;
}
}
}

View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 15c35eadf0afb0e42a41e4d6f5350554

View File

@@ -0,0 +1,56 @@
using System.Collections.Generic;
using UnityEngine;
public class HealthBarManager : MonoBehaviour
{
public GameObject healthBarPrefab;
private Dictionary<GameObject, GameObject> playerHealthBars = new Dictionary<GameObject, GameObject>();
void Start()
{
GameManager.Instance.StartGameEvent += OnGameStart;
GameManager.Instance.EndGameEvent += OnGameEnd;
}
void OnDestroy()
{
GameManager.Instance.StartGameEvent -= OnGameStart;
GameManager.Instance.EndGameEvent -= OnGameEnd;
}
void Update()
{
foreach (var kvp in playerHealthBars)
{
GameObject player = kvp.Key;
GameObject healthBar = kvp.Value;
Vector3 screenPosition = Camera.main.WorldToScreenPoint(player.transform.position);
screenPosition.y += 15;
Vector3 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
healthBar.transform.position = worldPosition;
healthBar.transform.rotation = Quaternion.identity;
}
}
private void OnGameStart()
{
foreach (GameObject player in GameManager.players)
{
if (!playerHealthBars.ContainsKey(player))
{
GameObject healthBar = Instantiate(healthBarPrefab);
healthBar.GetComponent<TerribleHealthBarScript>().SetPlayer(player);
playerHealthBars[player] = healthBar;
}
}
}
private void OnGameEnd()
{
foreach (var kvp in playerHealthBars)
{
Destroy(kvp.Value);
}
playerHealthBars.Clear();
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a80b536f823e50142b142b4e0b64ea97

View File

@@ -5,15 +5,12 @@ using UnityEngine.InputSystem;
public class PlayerManager : MonoBehaviour public class PlayerManager : MonoBehaviour
{ {
public static PlayerManager Instance; public static PlayerManager Instance;
public List<PlayerJoinCard> cards; public List<PlayerJoinCard> cards;
[SerializeField] private InputActionAsset playerActions; [SerializeField] private InputActionAsset playerActions;
public List<Color> playerColors; public List<Color> playerColors;
public GameObject playerSelect; public GameObject playerSelect;
private bool gameStarted = false; private bool gameStarted = false;
private bool isStartPressed = false;
private void Awake() private void Awake()
{ {
@@ -34,17 +31,12 @@ public class PlayerManager : MonoBehaviour
Destroy(playerInput.gameObject); Destroy(playerInput.gameObject);
return; return;
} }
Debug.Log("Player joined"); Debug.Log("Player joined");
DontDestroyOnLoad(playerInput.gameObject); DontDestroyOnLoad(playerInput.gameObject);
PlayerJoinCard card = PlayerCardCreator.Instance.CreateCard(); PlayerJoinCard card = PlayerCardCreator.Instance.CreateCard();
card.playerNumber = GameManager.players.Count + 1; card.playerNumber = GameManager.players.Count + 1;
cards.Add(card); cards.Add(card);
GameManager.players.Add(playerInput.gameObject); GameManager.players.Add(playerInput.gameObject);
Colorize(GameManager.players.Count - 1); Colorize(GameManager.players.Count - 1);
} }
@@ -63,26 +55,33 @@ public class PlayerManager : MonoBehaviour
} }
else else
{ {
Debug.Log("A PlayerManager already exists.");
Destroy(this.gameObject); Destroy(this.gameObject);
} }
} }
public void StartGame() public void StartGame()
{ {
gameStarted = true; if (GameManager.players.Count == 0)
Debug.Log("Game started"); {
HubManager.Instance.LoadScene(GameManager.map); return;
}
if (isStartPressed)
{
gameStarted = true;
HubManager.Instance.LoadScene(GameManager.map);
}
else
{
isStartPressed = true;
}
} }
private void Colorize(int index) private void Colorize(int index)
{ {
GameObject player = GameManager.players[index]; GameObject player = GameManager.players[index];
Color color = playerColors[(GameManager.players.Count - 1) % playerColors.Count]; Color color = playerColors[(GameManager.players.Count - 1) % playerColors.Count];
float tint = Mathf.Floor((GameManager.players.Count - 1) / playerColors.Count); float tint = Mathf.Floor((GameManager.players.Count - 1) / playerColors.Count);
color = (color + color + Color.white * tint) / (tint + 2); color = (color + color + Color.white * tint) / (tint + 2);
ApplyColor(player, color); ApplyColor(player, color);
ApplyColor(cards[GameManager.players.IndexOf(player)].playerPreview, color); ApplyColor(cards[GameManager.players.IndexOf(player)].playerPreview, color);
} }
@@ -101,4 +100,4 @@ public class PlayerManager : MonoBehaviour
} }
} }
} }
} }

View File

@@ -21,4 +21,4 @@ public class RespawnOnTriggerEnter : MonoBehaviour
GetComponent<Damageable>().Respawn(); GetComponent<Damageable>().Respawn();
} }
} }
} }

View File

@@ -21,45 +21,64 @@ public class TerribleHealthBarScript : MonoBehaviour
private Vector3 targetPosition; private Vector3 targetPosition;
private Color targetActualColor; private Color targetActualColor;
private Damageable player; public GameObject player;
void Start() void Start()
{ {
if (player == null)
{
return;
}
healthScript = player.GetComponent<Damageable>(); healthScript = player.GetComponent<Damageable>();
initialScale = healthVisual.transform.localScale; if (healthScript == null)
initialPosition = healthVisual.transform.position; {
targetScale = initialScale; return;
targetPosition = initialPosition; }
targetActualColor = actualHealthVisual.GetComponent<SpriteRenderer>().color; Initialize();
} }
void Update() void Update()
{ {
if (healthScript.gameObject.transform.localScale.x <= 0f) if (player == null || healthScript == null)
{ {
transform.localScale = new Vector3(-1 * Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z); return;
} }
else
{
transform.localScale = new Vector3(1 * Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);
}//
float healthRatio = (healthScript.maxDamage - healthScript.damage) / healthScript.maxDamage; float healthRatio = (healthScript.maxDamage - healthScript.damage) / healthScript.maxDamage;
targetActualColor = Color.Lerp(fullDeathColor, fullHealthColor, healthRatio); targetActualColor = Color.Lerp(fullDeathColor, fullHealthColor, healthRatio);
targetScale = new Vector3(Mathf.Lerp(0, 1, healthRatio) * initialScale.x, healthVisual.transform.localScale.y, healthVisual.transform.localScale.z); targetScale = new Vector3(Mathf.Lerp(0, 1, healthRatio) * initialScale.x, healthVisual.transform.localScale.y, healthVisual.transform.localScale.z);
targetPosition = new Vector3(Mathf.Lerp(-0.5f, 0, healthRatio), healthVisual.transform.localPosition.y, healthVisual.transform.localPosition.z); targetPosition = new Vector3(Mathf.Lerp(-0.5f, 0, healthRatio), healthVisual.transform.localPosition.y, healthVisual.transform.localPosition.z);
text.text = (healthScript.maxDamage - healthScript.damage).ToString() + "/" + healthScript.maxDamage.ToString(); text.text = (healthScript.maxDamage - healthScript.damage).ToString() + "/" + healthScript.maxDamage.ToString();
actualHealthVisual.transform.localScale = targetScale; actualHealthVisual.transform.localScale = targetScale;
actualHealthVisual.transform.localPosition = targetPosition; actualHealthVisual.transform.localPosition = targetPosition;
healthVisual.transform.localScale = Vector3.Lerp(healthVisual.transform.localScale, targetScale, smoothSpeed); healthVisual.transform.localScale = Vector3.Lerp(healthVisual.transform.localScale, targetScale, smoothSpeed);
healthVisual.transform.localPosition = Vector3.Lerp(healthVisual.transform.localPosition, targetPosition, smoothSpeed); healthVisual.transform.localPosition = Vector3.Lerp(healthVisual.transform.localPosition, targetPosition, smoothSpeed);
actualHealthVisual.GetComponent<SpriteRenderer>().color = Color.Lerp(actualHealthVisual.GetComponent<SpriteRenderer>().color, targetActualColor, smoothSpeed); actualHealthVisual.GetComponent<SpriteRenderer>().color = Color.Lerp(actualHealthVisual.GetComponent<SpriteRenderer>().color, targetActualColor, smoothSpeed);
deathVisual.GetComponent<SpriteRenderer>().color = Color.Lerp(deathVisual.GetComponent<SpriteRenderer>().color, targetActualColor * 0.5f, smoothSpeed); deathVisual.GetComponent<SpriteRenderer>().color = Color.Lerp(deathVisual.GetComponent<SpriteRenderer>().color, targetActualColor * 0.5f, smoothSpeed);
healthVisual.GetComponent<SpriteRenderer>().color = subtractionColor; healthVisual.GetComponent<SpriteRenderer>().color = subtractionColor;
} }
public void SetPlayer(GameObject player)
{
this.player = player;
if (this.player == null)
{
return;
}
healthScript = player.GetComponent<Damageable>();
if (healthScript == null)
{
return;
}
Initialize();
}
private void Initialize()
{
initialScale = healthVisual.transform.localScale;
initialPosition = healthVisual.transform.position;
targetScale = initialScale;
targetPosition = initialPosition;
targetActualColor = actualHealthVisual.GetComponent<SpriteRenderer>().color;
}
} }

View File

@@ -18,7 +18,7 @@ TagManager:
- Water - Water
- UI - UI
- Platformer Ground - Platformer Ground
- - HealthBar
- -
- -
- -
@@ -68,5 +68,8 @@ TagManager:
- name: Ground - name: Ground
uniqueID: 1556569731 uniqueID: 1556569731
locked: 0 locked: 0
- name: HealthBar
uniqueID: 1570397069
locked: 0
m_RenderingLayers: m_RenderingLayers:
- Default - Default