From 0512201ce0b956f0e033c7431b835b7f380f153d Mon Sep 17 00:00:00 2001 From: David Hackbarth Date: Tue, 23 Jun 2026 18:33:11 +0200 Subject: [PATCH] Added lots of examples for editor customization --- .../Assets/Prefabs/HealthBar.prefab | 160 +++++++++++++++++- .../Assets/Prefabs/Player.prefab | 16 +- .../Assets/Scenes/SampleScene.unity | 139 +++++++-------- .../Assets/ScriptableObjects.meta | 8 + .../CharacterAttributes.meta | 8 + .../CharacterAttributes/HeavyOrc.asset | 18 ++ .../CharacterAttributes/HeavyOrc.asset.meta | 8 + .../CharacterAttributes/Hero.asset | 18 ++ .../CharacterAttributes/Hero.asset.meta | 8 + .../CharacterAttributes/Knight.asset | 18 ++ .../CharacterAttributes/Knight.asset.meta | 8 + .../CharacterAttributes/Orc.asset | 18 ++ .../CharacterAttributes/Orc.asset.meta | 8 + .../CharacterAttributes/Troll.asset | 18 ++ .../CharacterAttributes/Troll.asset.meta | 8 + .../Assets/ScriptableObjects/Events.meta | 8 + .../Events/EventBroker.asset | 14 ++ .../Events/EventBroker.asset.meta | 8 + .../Assets/ScriptableObjects/Values.meta | 8 + .../Values/CurrentHealth.asset | 15 ++ .../Values/CurrentHealth.asset.meta | 8 + .../ScriptableObjects/Values/MaxHealth.asset | 15 ++ .../Values/MaxHealth.asset.meta | 8 + .../Assets/Scripts/Attributes.meta | 3 + .../Assets/Scripts/Attributes/Editor.meta | 3 + .../Editor/RequiredAttributeDrawer.cs | 35 ++++ .../Editor/RequiredAttributeDrawer.cs.meta | 3 + .../Scripts/Attributes/RequiredAttribute.cs | 11 ++ .../Attributes/RequiredAttribute.cs.meta | 3 + EditorCustomization/Assets/Scripts/Data.meta | 3 + .../Assets/Scripts/Data/Ability.cs | 11 ++ .../Assets/Scripts/Data/Ability.cs.meta | 3 + .../Scripts/Data/CharacterAttributes.cs | 13 ++ .../Scripts/Data/CharacterAttributes.cs.meta | 3 + .../Assets/Scripts/Data/Editor.meta | 3 + .../Scripts/Data/Editor/AbilityDrawer.cs | 38 +++++ .../Scripts/Data/Editor/AbilityDrawer.cs.meta | 3 + .../Data/Editor/CharacterAttributesDrawer.cs | 30 ++++ .../Editor/CharacterAttributesDrawer.cs.meta | 3 + .../Data/Editor/CharacterAttributesEditor.cs | 21 +++ .../Editor/CharacterAttributesEditor.cs.meta | 3 + .../Data/Editor/CharacterAttributesWindow.cs | 96 +++++++++++ .../Editor/CharacterAttributesWindow.cs.meta | 3 + .../Assets/Scripts/Data/FloatValue.cs | 10 ++ .../Assets/Scripts/Data/FloatValue.cs.meta | 3 + .../Assets/Scripts/Events.meta | 3 + .../Assets/Scripts/Events/Editor.meta | 3 + .../Events/Editor/EventBrokerEditor.cs | 21 +++ .../Events/Editor/EventBrokerEditor.cs.meta | 3 + .../Assets/Scripts/Events/EventBroker.cs | 13 ++ .../Assets/Scripts/Events/EventBroker.cs.meta | 3 + .../Assets/Scripts/Player.meta | 3 + .../Assets/Scripts/Player/PlayerController.cs | 49 ++++++ .../{ => Player}/PlayerController.cs.meta | 0 .../Assets/Scripts/PlayerController.cs | 31 ---- EditorCustomization/Assets/Scripts/UI.meta | 3 + .../Assets/Scripts/UI/HealthBar.cs | 52 ++++++ .../Assets/Scripts/UI/HealthBar.cs.meta | 3 + 58 files changed, 920 insertions(+), 116 deletions(-) create mode 100644 EditorCustomization/Assets/ScriptableObjects.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/HeavyOrc.asset create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/HeavyOrc.asset.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Hero.asset create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Hero.asset.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Knight.asset create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Knight.asset.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Orc.asset create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Orc.asset.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Troll.asset create mode 100644 EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Troll.asset.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/Events.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/Events/EventBroker.asset create mode 100644 EditorCustomization/Assets/ScriptableObjects/Events/EventBroker.asset.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/Values.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/Values/CurrentHealth.asset create mode 100644 EditorCustomization/Assets/ScriptableObjects/Values/CurrentHealth.asset.meta create mode 100644 EditorCustomization/Assets/ScriptableObjects/Values/MaxHealth.asset create mode 100644 EditorCustomization/Assets/ScriptableObjects/Values/MaxHealth.asset.meta create mode 100644 EditorCustomization/Assets/Scripts/Attributes.meta create mode 100644 EditorCustomization/Assets/Scripts/Attributes/Editor.meta create mode 100644 EditorCustomization/Assets/Scripts/Attributes/Editor/RequiredAttributeDrawer.cs create mode 100644 EditorCustomization/Assets/Scripts/Attributes/Editor/RequiredAttributeDrawer.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Attributes/RequiredAttribute.cs create mode 100644 EditorCustomization/Assets/Scripts/Attributes/RequiredAttribute.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Data.meta create mode 100644 EditorCustomization/Assets/Scripts/Data/Ability.cs create mode 100644 EditorCustomization/Assets/Scripts/Data/Ability.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Data/CharacterAttributes.cs create mode 100644 EditorCustomization/Assets/Scripts/Data/CharacterAttributes.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor.meta create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor/AbilityDrawer.cs create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor/AbilityDrawer.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesDrawer.cs create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesDrawer.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesEditor.cs create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesEditor.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesWindow.cs create mode 100644 EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesWindow.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Data/FloatValue.cs create mode 100644 EditorCustomization/Assets/Scripts/Data/FloatValue.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Events.meta create mode 100644 EditorCustomization/Assets/Scripts/Events/Editor.meta create mode 100644 EditorCustomization/Assets/Scripts/Events/Editor/EventBrokerEditor.cs create mode 100644 EditorCustomization/Assets/Scripts/Events/Editor/EventBrokerEditor.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Events/EventBroker.cs create mode 100644 EditorCustomization/Assets/Scripts/Events/EventBroker.cs.meta create mode 100644 EditorCustomization/Assets/Scripts/Player.meta create mode 100644 EditorCustomization/Assets/Scripts/Player/PlayerController.cs rename EditorCustomization/Assets/Scripts/{ => Player}/PlayerController.cs.meta (100%) delete mode 100644 EditorCustomization/Assets/Scripts/PlayerController.cs create mode 100644 EditorCustomization/Assets/Scripts/UI.meta create mode 100644 EditorCustomization/Assets/Scripts/UI/HealthBar.cs create mode 100644 EditorCustomization/Assets/Scripts/UI/HealthBar.cs.meta diff --git a/EditorCustomization/Assets/Prefabs/HealthBar.prefab b/EditorCustomization/Assets/Prefabs/HealthBar.prefab index 023df5f..1bdbec3 100644 --- a/EditorCustomization/Assets/Prefabs/HealthBar.prefab +++ b/EditorCustomization/Assets/Prefabs/HealthBar.prefab @@ -1,5 +1,142 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &269854784225261030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 755255642672769916} + - component: {fileID: 2228697218851437297} + - component: {fileID: 3065416413902700698} + m_Layer: 5 + m_Name: DeadMessage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &755255642672769916 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 269854784225261030} + 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: 5969081416407912556} + 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: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2228697218851437297 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 269854784225261030} + m_CullTransparentMesh: 1 +--- !u!114 &3065416413902700698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 269854784225261030} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + 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: Dead + 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: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 31.3 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 17 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 8192 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + 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!1 &828612461749225481 GameObject: m_ObjectHideFlags: 0 @@ -31,6 +168,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 8398907280277716531} + - {fileID: 755255642672769916} m_Father: {fileID: 7072266447349178485} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} @@ -278,14 +416,14 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Sprite: {fileID: 21300000, guid: e3cc3bf28e4b3480d96788a24c343552, type: 3} m_Type: 3 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 0 m_FillAmount: 1 m_FillClockwise: 1 - m_FillOrigin: 1 + m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 --- !u!1 &7725325710485131526 @@ -299,6 +437,7 @@ GameObject: - component: {fileID: 7072266447349178485} - component: {fileID: 4769054629970349065} - component: {fileID: 5934645046861820108} + - component: {fileID: 2306433496064254094} m_Layer: 5 m_Name: HealthBar m_TagString: Untagged @@ -365,3 +504,20 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2306433496064254094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7725325710485131526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7d9616fe18084f1bb99a58e30eea20e1, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::UI.HealthBar + eventBroker: {fileID: 11400000, guid: d3d201ac03d9744bc85390aa5b74aef5, type: 2} + maxHealth: {fileID: 11400000, guid: b61e2bd6ca6d247fb8577ae9c094f1ae, type: 2} + currentHealth: {fileID: 11400000, guid: 0b05fcf292ed04876a6376d1ef94f0da, type: 2} + fillingImage: {fileID: 2810982769414486938} + deadMessageText: {fileID: 3065416413902700698} diff --git a/EditorCustomization/Assets/Prefabs/Player.prefab b/EditorCustomization/Assets/Prefabs/Player.prefab index 8338c86..044246f 100644 --- a/EditorCustomization/Assets/Prefabs/Player.prefab +++ b/EditorCustomization/Assets/Prefabs/Player.prefab @@ -153,7 +153,19 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: af490b7ae815401291d83fe0b6e6a4b7, type: 3} m_Name: m_EditorClassIdentifier: Assembly-CSharp::DefaultNamespace.PlayerController + eventBroker: {fileID: 11400000, guid: d3d201ac03d9744bc85390aa5b74aef5, type: 2} speed: 5 rotationSpeed: 60 - maxHealth: 100 - healthBarFillingImage: {fileID: 0} + maxHealth: {fileID: 11400000, guid: b61e2bd6ca6d247fb8577ae9c094f1ae, type: 2} + currentHealth: {fileID: 11400000, guid: 0b05fcf292ed04876a6376d1ef94f0da, type: 2} + characterAttributes: {fileID: 11400000, guid: 3ddd1f71d925a48a788bd41e2abb3103, type: 2} + ability: + Name: + Value: 0 + abilities: + - Name: Speed + Value: 0 + - Name: Strength + Value: 0 + - Name: Inteligence + Value: 0 diff --git a/EditorCustomization/Assets/Scenes/SampleScene.unity b/EditorCustomization/Assets/Scenes/SampleScene.unity index 24d2f61..bc04edc 100644 --- a/EditorCustomization/Assets/Scenes/SampleScene.unity +++ b/EditorCustomization/Assets/Scenes/SampleScene.unity @@ -383,17 +383,6 @@ MonoBehaviour: m_ShadowLayerMask: 1 m_RenderingLayers: 1 m_ShadowRenderingLayers: 1 ---- !u!114 &669832977 stripped -MonoBehaviour: - m_CorrespondingSourceObject: {fileID: 2810982769414486938, guid: 9c9a21089189c459b9c6ea1b32152dc4, type: 3} - m_PrefabInstance: {fileID: 7071613369498931541} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image --- !u!1 &832575517 GameObject: m_ObjectHideFlags: 0 @@ -545,6 +534,63 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0, y: 0} +--- !u!1001 &892205134 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 3828686756138395984, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_Name + value: Player + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalPosition.x + value: 160 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalPosition.y + value: 544.5 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} --- !u!224 &949329152 stripped RectTransform: m_CorrespondingSourceObject: {fileID: 7072266447349178485, guid: 9c9a21089189c459b9c6ea1b32152dc4, type: 3} @@ -750,14 +796,6 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 884244192} m_Modifications: - - target: {fileID: 2810982769414486938, guid: 9c9a21089189c459b9c6ea1b32152dc4, type: 3} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: e3cc3bf28e4b3480d96788a24c343552, type: 3} - - target: {fileID: 2810982769414486938, guid: 9c9a21089189c459b9c6ea1b32152dc4, type: 3} - propertyPath: m_FillAmount - value: 1 - objectReference: {fileID: 0} - target: {fileID: 7072266447349178485, guid: 9c9a21089189c459b9c6ea1b32152dc4, type: 3} propertyPath: m_Pivot.x value: 0 @@ -847,67 +885,6 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 9c9a21089189c459b9c6ea1b32152dc4, type: 3} ---- !u!1001 &8263333300151463791 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 2288145426711396226, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: healthBarFillingImage - value: - objectReference: {fileID: 669832977} - - target: {fileID: 3828686756138395984, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_Name - value: Player - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalPosition.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 6873632029419311933, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 4cce8d77e06e0444ba83c136705ec39e, type: 3} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -915,7 +892,7 @@ SceneRoots: - {fileID: 330585546} - {fileID: 410087041} - {fileID: 832575519} - - {fileID: 8263333300151463791} + - {fileID: 892205134} - {fileID: 2038460497} - {fileID: 884244192} - {fileID: 1362584173} diff --git a/EditorCustomization/Assets/ScriptableObjects.meta b/EditorCustomization/Assets/ScriptableObjects.meta new file mode 100644 index 0000000..7007997 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 951a34700e94a4e97828b2571f5b6de8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes.meta b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes.meta new file mode 100644 index 0000000..5a45d18 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36f69ac19e40842a8a901d8ee76781b2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/HeavyOrc.asset b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/HeavyOrc.asset new file mode 100644 index 0000000..f6f1731 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/HeavyOrc.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f21d365f6b74c6eae7bc9c0431c2695, type: 3} + m_Name: HeavyOrc + m_EditorClassIdentifier: Assembly-CSharp::Data.CharacterAttributes + Name: Heavy Orc + Health: 0 + Strength: 0 + Dexterity: 0 diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/HeavyOrc.asset.meta b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/HeavyOrc.asset.meta new file mode 100644 index 0000000..0c168a3 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/HeavyOrc.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef57c4dc3648642f68d9f10dccf294bd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Hero.asset b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Hero.asset new file mode 100644 index 0000000..35b422c --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Hero.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f21d365f6b74c6eae7bc9c0431c2695, type: 3} + m_Name: Hero + m_EditorClassIdentifier: Assembly-CSharp::Data.CharacterAttributes + Name: Hero + Health: 0 + Strength: 0 + Dexterity: 0 diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Hero.asset.meta b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Hero.asset.meta new file mode 100644 index 0000000..92de981 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Hero.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ddd1f71d925a48a788bd41e2abb3103 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Knight.asset b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Knight.asset new file mode 100644 index 0000000..da67f54 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Knight.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f21d365f6b74c6eae7bc9c0431c2695, type: 3} + m_Name: Knight + m_EditorClassIdentifier: Assembly-CSharp::Data.CharacterAttributes + Name: Knight + Health: 200 + Strength: 2 + Dexterity: 20 diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Knight.asset.meta b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Knight.asset.meta new file mode 100644 index 0000000..208c219 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Knight.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f038e5bf799be46b4b0319a8a1a487f7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Orc.asset b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Orc.asset new file mode 100644 index 0000000..019bc68 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Orc.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f21d365f6b74c6eae7bc9c0431c2695, type: 3} + m_Name: Orc + m_EditorClassIdentifier: Assembly-CSharp::Data.CharacterAttributes + Name: Orc + Health: 100 + Strength: 5 + Dexterity: 10 diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Orc.asset.meta b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Orc.asset.meta new file mode 100644 index 0000000..2856d49 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Orc.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f04083efc2fa447af84a18919707da0f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Troll.asset b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Troll.asset new file mode 100644 index 0000000..e2cbcc8 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Troll.asset @@ -0,0 +1,18 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f21d365f6b74c6eae7bc9c0431c2695, type: 3} + m_Name: Troll + m_EditorClassIdentifier: Assembly-CSharp::Data.CharacterAttributes + Name: Troll + Health: 50 + Strength: 2 + Dexterity: 20 diff --git a/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Troll.asset.meta b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Troll.asset.meta new file mode 100644 index 0000000..a87d0fa --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/CharacterAttributes/Troll.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8a5e9650053a474eabab7ea6b1b933c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/Events.meta b/EditorCustomization/Assets/ScriptableObjects/Events.meta new file mode 100644 index 0000000..c26376d --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e8e7f08d636d478aa93d9e21f4cbbda +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/Events/EventBroker.asset b/EditorCustomization/Assets/ScriptableObjects/Events/EventBroker.asset new file mode 100644 index 0000000..7046292 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/Events/EventBroker.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7c8e9a4f877141c4b1f3e248fcef8803, type: 3} + m_Name: EventBroker + m_EditorClassIdentifier: Assembly-CSharp::Events.EventBroker diff --git a/EditorCustomization/Assets/ScriptableObjects/Events/EventBroker.asset.meta b/EditorCustomization/Assets/ScriptableObjects/Events/EventBroker.asset.meta new file mode 100644 index 0000000..64e7e29 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/Events/EventBroker.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3d201ac03d9744bc85390aa5b74aef5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/Values.meta b/EditorCustomization/Assets/ScriptableObjects/Values.meta new file mode 100644 index 0000000..c23086c --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/Values.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca7ec574d13d143059fb6a748e11cee8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/Values/CurrentHealth.asset b/EditorCustomization/Assets/ScriptableObjects/Values/CurrentHealth.asset new file mode 100644 index 0000000..f3fdaa7 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/Values/CurrentHealth.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e94c4e9b6648485ca46c67afaab715ac, type: 3} + m_Name: CurrentHealth + m_EditorClassIdentifier: Assembly-CSharp::Data.FloatValue + Value: 100 diff --git a/EditorCustomization/Assets/ScriptableObjects/Values/CurrentHealth.asset.meta b/EditorCustomization/Assets/ScriptableObjects/Values/CurrentHealth.asset.meta new file mode 100644 index 0000000..0aa4db9 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/Values/CurrentHealth.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b05fcf292ed04876a6376d1ef94f0da +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/ScriptableObjects/Values/MaxHealth.asset b/EditorCustomization/Assets/ScriptableObjects/Values/MaxHealth.asset new file mode 100644 index 0000000..7a96ee2 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/Values/MaxHealth.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e94c4e9b6648485ca46c67afaab715ac, type: 3} + m_Name: MaxHealth + m_EditorClassIdentifier: Assembly-CSharp::Data.FloatValue + Value: 100 diff --git a/EditorCustomization/Assets/ScriptableObjects/Values/MaxHealth.asset.meta b/EditorCustomization/Assets/ScriptableObjects/Values/MaxHealth.asset.meta new file mode 100644 index 0000000..eba6782 --- /dev/null +++ b/EditorCustomization/Assets/ScriptableObjects/Values/MaxHealth.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b61e2bd6ca6d247fb8577ae9c094f1ae +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/EditorCustomization/Assets/Scripts/Attributes.meta b/EditorCustomization/Assets/Scripts/Attributes.meta new file mode 100644 index 0000000..2597b6f --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Attributes.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3584f915c56743079c64ff8e5a01d40c +timeCreated: 1782226871 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Attributes/Editor.meta b/EditorCustomization/Assets/Scripts/Attributes/Editor.meta new file mode 100644 index 0000000..ea8dacd --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Attributes/Editor.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d54ab03c1c0c44d791dc4924077e6721 +timeCreated: 1782227128 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Attributes/Editor/RequiredAttributeDrawer.cs b/EditorCustomization/Assets/Scripts/Attributes/Editor/RequiredAttributeDrawer.cs new file mode 100644 index 0000000..204a2f6 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Attributes/Editor/RequiredAttributeDrawer.cs @@ -0,0 +1,35 @@ +using UnityEditor; +using UnityEngine; + +namespace Attributes.Editor +{ + [CustomPropertyDrawer(typeof(RequiredAttribute))] + public class RequiredAttributeDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + bool isNull = property.objectReferenceValue == null; + + if (isNull) position.height = EditorGUIUtility.singleLineHeight; + + // draw property itself + EditorGUI.PropertyField(position, property, label); + + // draw error if property is null + if (!isNull) return; + + position.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + position.height += 10.0f; + EditorGUI.HelpBox(position, "Property has to be set!", MessageType.Error); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + if (property.objectReferenceValue == null) + { + return EditorGUIUtility.singleLineHeight * 2 + EditorGUIUtility.standardVerticalSpacing + 10.0f; + } + return EditorGUIUtility.singleLineHeight; + } + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Attributes/Editor/RequiredAttributeDrawer.cs.meta b/EditorCustomization/Assets/Scripts/Attributes/Editor/RequiredAttributeDrawer.cs.meta new file mode 100644 index 0000000..852cb3c --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Attributes/Editor/RequiredAttributeDrawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6e50e9fdc60c4539822a5697fb9ca70f +timeCreated: 1782227142 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Attributes/RequiredAttribute.cs b/EditorCustomization/Assets/Scripts/Attributes/RequiredAttribute.cs new file mode 100644 index 0000000..d2fc224 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Attributes/RequiredAttribute.cs @@ -0,0 +1,11 @@ +using System; +using UnityEngine; + +namespace Attributes +{ + [AttributeUsage(AttributeTargets.Field)] + public class RequiredAttribute : PropertyAttribute + { + + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Attributes/RequiredAttribute.cs.meta b/EditorCustomization/Assets/Scripts/Attributes/RequiredAttribute.cs.meta new file mode 100644 index 0000000..b9c8b11 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Attributes/RequiredAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 24b0639b8cb74a8199a77a007236bce1 +timeCreated: 1782226882 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data.meta b/EditorCustomization/Assets/Scripts/Data.meta new file mode 100644 index 0000000..e560ff1 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 998a8db57ee2457188c2c9885f46354b +timeCreated: 1782224148 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Ability.cs b/EditorCustomization/Assets/Scripts/Data/Ability.cs new file mode 100644 index 0000000..a01c3fc --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Ability.cs @@ -0,0 +1,11 @@ +using System; + +namespace Data +{ + [Serializable] + public class Ability + { + public string Name; + public float Value; + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Ability.cs.meta b/EditorCustomization/Assets/Scripts/Data/Ability.cs.meta new file mode 100644 index 0000000..dde8141 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Ability.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aa5b1ad84d0e43608052c6a8eaf2168f +timeCreated: 1782228009 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/CharacterAttributes.cs b/EditorCustomization/Assets/Scripts/Data/CharacterAttributes.cs new file mode 100644 index 0000000..ff82e62 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/CharacterAttributes.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace Data +{ + [CreateAssetMenu(fileName = "CharacterAttributes", menuName = "Data/Character Attribute", order = 0)] + public class CharacterAttributes : ScriptableObject + { + public string Name; + public int Health; + public int Strength; + public int Dexterity; + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/CharacterAttributes.cs.meta b/EditorCustomization/Assets/Scripts/Data/CharacterAttributes.cs.meta new file mode 100644 index 0000000..4e2da9c --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/CharacterAttributes.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4f21d365f6b74c6eae7bc9c0431c2695 +timeCreated: 1782229191 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor.meta b/EditorCustomization/Assets/Scripts/Data/Editor.meta new file mode 100644 index 0000000..923c804 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ab00c23a3d5e424285496daaa587c857 +timeCreated: 1782228299 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor/AbilityDrawer.cs b/EditorCustomization/Assets/Scripts/Data/Editor/AbilityDrawer.cs new file mode 100644 index 0000000..0c60986 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor/AbilityDrawer.cs @@ -0,0 +1,38 @@ +using UnityEditor; +using UnityEngine; + +namespace Data.Editor +{ + [CustomPropertyDrawer(typeof(Ability))] + public class AbilityDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + position = EditorGUI.PrefixLabel(position, label); + + // everything in one line + float totalWidth = position.width; + position.width = totalWidth * 0.75f; + EditorGUI.PropertyField(position, property.FindPropertyRelative("Name"), GUIContent.none); + + position.x += position.width + totalWidth * 0.05f; + position.width = totalWidth * 0.2f; + EditorGUI.PropertyField(position, property.FindPropertyRelative("Value"), GUIContent.none); + + // below each other without foldout + // position.height = EditorGUIUtility.singleLineHeight; + // EditorGUI.PropertyField(position, property.FindPropertyRelative("Name"), GUIContent.none); + // + // position.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + // EditorGUI.PropertyField(position, property.FindPropertyRelative("Value"), GUIContent.none); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.singleLineHeight; // draw everything in one line + + // draw properties below each other without foldout + // return EditorGUIUtility.singleLineHeight * 2 + EditorGUIUtility.standardVerticalSpacing; + } + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor/AbilityDrawer.cs.meta b/EditorCustomization/Assets/Scripts/Data/Editor/AbilityDrawer.cs.meta new file mode 100644 index 0000000..199a1a6 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor/AbilityDrawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cc96966d439940cab8ee55f1803af147 +timeCreated: 1782228309 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesDrawer.cs b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesDrawer.cs new file mode 100644 index 0000000..34c47a7 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesDrawer.cs @@ -0,0 +1,30 @@ +using UnityEditor; +using UnityEngine; + +namespace Data.Editor +{ + [CustomPropertyDrawer(typeof(CharacterAttributes))] + public class CharacterAttributesDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + bool isNull = property.objectReferenceValue == null; + + position = EditorGUI.PrefixLabel(position, label); + + if (!isNull) position.width *= 0.75f; + EditorGUI.PropertyField(position, property, GUIContent.none); + + if (isNull) return; + + position.x += position.width; + position.width *= 0.3333333f; + if (GUI.Button(position, "Open")) + { + CharacterAttributesWindow window = EditorWindow.GetWindow(); + window.CharacterAttributesToEdit = property.objectReferenceValue as CharacterAttributes; + window.Show(); + } + } + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesDrawer.cs.meta b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesDrawer.cs.meta new file mode 100644 index 0000000..085943b --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesDrawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d56ef7d56a2f46f7af43982d7c693996 +timeCreated: 1782231785 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesEditor.cs b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesEditor.cs new file mode 100644 index 0000000..b9e69fe --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesEditor.cs @@ -0,0 +1,21 @@ +using UnityEditor; +using UnityEngine; + +namespace Data.Editor +{ + [CustomEditor(typeof(CharacterAttributes))] + public class CharacterAttributesEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + if (GUILayout.Button("Open Character Attributes Window")) + { + CharacterAttributesWindow window = (CharacterAttributesWindow)EditorWindow.GetWindow(typeof(CharacterAttributesWindow)); + window.CharacterAttributesToEdit = target as CharacterAttributes; + window.Show(); + } + } + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesEditor.cs.meta b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesEditor.cs.meta new file mode 100644 index 0000000..79c11c0 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 29b2341a96d04825a2dcc97cdce1f640 +timeCreated: 1782232217 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesWindow.cs b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesWindow.cs new file mode 100644 index 0000000..7fbbfe8 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesWindow.cs @@ -0,0 +1,96 @@ +using UnityEditor; +using UnityEditor.VersionControl; +using UnityEngine; + +namespace Data.Editor +{ + public class CharacterAttributesWindow : EditorWindow + { + public CharacterAttributes CharacterAttributesToEdit; + + // for an overview about the shortcuts + // https://docs.unity3d.com/6000.4/Documentation/ScriptReference/MenuItem.html + [MenuItem("Tools/Character Attributes #%&c")] + private static void ShowWindow() + { + CharacterAttributesWindow window = GetWindow(); + window.titleContent = new GUIContent("Character Attributes"); + window.Show(); + } + + private void OnGUI() + { + // EditorGUILayout.BeginHorizontal(); + // + // EditorGUILayout.LabelField("Label", EditorStyles.boldLabel, GUILayout.Width(100)); + // EditorGUILayout.LabelField("Second Label", GUILayout.ExpandWidth(true)); + // + // EditorGUILayout.BeginVertical(); + // + // EditorGUILayout.LabelField("Another Label"); + // EditorGUILayout.LabelField("Another Label"); + // EditorGUILayout.LabelField("Another Label"); + // EditorGUILayout.LabelField("Another Label"); + // EditorGUILayout.TextField("Textfield"); + // + // EditorGUILayout.EndVertical(); + // + // EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginVertical(); + + EditorGUILayout.LabelField("Character Attributes", EditorStyles.boldLabel); + + // show all project-wide character attribute assets + GUID[] characterAttributeGUIDs = AssetDatabase.FindAssetGUIDs("t:CharacterAttributes"); + foreach (GUID characterAttributeGUID in characterAttributeGUIDs) + { + CharacterAttributes characterAttributes = + AssetDatabase.LoadAssetByGUID(characterAttributeGUID); + + if (characterAttributes == null) continue; + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(characterAttributes.Name); + + if (GUILayout.Button("Edit")) CharacterAttributesToEdit = characterAttributes; + + EditorGUILayout.EndHorizontal(); + } + + if (CharacterAttributesToEdit != null) + { + EditorGUILayout.Separator(); + + SerializedObject serializedObject = new SerializedObject(CharacterAttributesToEdit); + + // whenever a serialized object is used, update and apply properties + serializedObject.Update(); + + // here you can change the serialized object + EditorGUILayout.PropertyField(serializedObject.FindProperty("Name")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("Health")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("Strength")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("Dexterity")); + + serializedObject.ApplyModifiedProperties(); + } + + EditorGUILayout.Separator(); + + if (GUILayout.Button("Create")) + { + CharacterAttributes characterAttributes = CreateInstance(); + string path = EditorUtility.SaveFilePanelInProject("Save Character Attributes", "New Character Attributes", "asset", "Save Character Attributes", "Assets/CharacterAttributes.asset"); + if (!string.IsNullOrEmpty(path)) + { + CharacterAttributesToEdit = characterAttributes; + AssetDatabase.CreateAsset(characterAttributes, path); + AssetDatabase.SaveAssets(); // always call this to be sure that the new assets is being saved + } + } + + EditorGUILayout.EndVertical(); + } + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesWindow.cs.meta b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesWindow.cs.meta new file mode 100644 index 0000000..cf20823 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/Editor/CharacterAttributesWindow.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 91c41f34951643a4bfd4a2b3efa4e2d6 +timeCreated: 1782229380 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/FloatValue.cs b/EditorCustomization/Assets/Scripts/Data/FloatValue.cs new file mode 100644 index 0000000..b863af5 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/FloatValue.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace Data +{ + [CreateAssetMenu(fileName = "FloatValue", menuName = "Data/Values/Float", order = 0)] + public class FloatValue : ScriptableObject + { + public float Value; + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Data/FloatValue.cs.meta b/EditorCustomization/Assets/Scripts/Data/FloatValue.cs.meta new file mode 100644 index 0000000..d0e4468 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Data/FloatValue.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e94c4e9b6648485ca46c67afaab715ac +timeCreated: 1782224168 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Events.meta b/EditorCustomization/Assets/Scripts/Events.meta new file mode 100644 index 0000000..12e927f --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Events.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 04cd260b7b7b4433beec3903ba437de4 +timeCreated: 1782225082 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Events/Editor.meta b/EditorCustomization/Assets/Scripts/Events/Editor.meta new file mode 100644 index 0000000..09382c6 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Events/Editor.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 94ea6f71efde4bd4ae34bde539c2c68c +timeCreated: 1782225959 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Events/Editor/EventBrokerEditor.cs b/EditorCustomization/Assets/Scripts/Events/Editor/EventBrokerEditor.cs new file mode 100644 index 0000000..ed8aca0 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Events/Editor/EventBrokerEditor.cs @@ -0,0 +1,21 @@ +using UnityEditor; +using UnityEngine; + +namespace Events.Editor +{ + [CustomEditor(typeof(EventBroker))] + public class EventBrokerEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + if (!EditorApplication.isPlaying) return; + + if (GUILayout.Button("Player Died")) + { + (target as EventBroker)?.RaisePlayerDied(); + } + } + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Events/Editor/EventBrokerEditor.cs.meta b/EditorCustomization/Assets/Scripts/Events/Editor/EventBrokerEditor.cs.meta new file mode 100644 index 0000000..7162add --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Events/Editor/EventBrokerEditor.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea036d9930184985a5a989eeb914e5fe +timeCreated: 1782226034 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Events/EventBroker.cs b/EditorCustomization/Assets/Scripts/Events/EventBroker.cs new file mode 100644 index 0000000..07520de --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Events/EventBroker.cs @@ -0,0 +1,13 @@ +using System; +using UnityEngine; + +namespace Events +{ + [CreateAssetMenu(fileName = "EventBroker", menuName = "Events/Event Broker")] + public class EventBroker : ScriptableObject + { + public event Action PlayerDied; + + public void RaisePlayerDied() => PlayerDied?.Invoke(); + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Events/EventBroker.cs.meta b/EditorCustomization/Assets/Scripts/Events/EventBroker.cs.meta new file mode 100644 index 0000000..9e169e0 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Events/EventBroker.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7c8e9a4f877141c4b1f3e248fcef8803 +timeCreated: 1782225093 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Player.meta b/EditorCustomization/Assets/Scripts/Player.meta new file mode 100644 index 0000000..7b9bec4 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Player.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b3597a6e4b534b9baf57981a436382ba +timeCreated: 1782224267 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/Player/PlayerController.cs b/EditorCustomization/Assets/Scripts/Player/PlayerController.cs new file mode 100644 index 0000000..03bb31e --- /dev/null +++ b/EditorCustomization/Assets/Scripts/Player/PlayerController.cs @@ -0,0 +1,49 @@ +using Attributes; +using Data; +using Events; +using UnityEngine; + +namespace Player +{ + [RequireComponent(typeof(CharacterController))] + public class PlayerController : MonoBehaviour + { + [Header("Events")] + [SerializeField, Required] private EventBroker eventBroker; + + [Header("Movement")] + [SerializeField] private float speed = 5f; + [SerializeField] private float rotationSpeed = 60f; + + [Header("Values")] + // [SerializeField] private float maxHealth = 100f; + [SerializeField, Required] private FloatValue maxHealth; + [SerializeField, Required] private FloatValue currentHealth; + [SerializeField] private CharacterAttributes characterAttributes; + + // [Header("References")] + // [SerializeField] private Image healthBarFillingImage; + + [Header("Abilities")] + [SerializeField] private Ability ability; + [SerializeField] private Ability[] abilities; + + + // private float _currentHealth; + + private void Awake() + { + // _currentHealth = maxHealth; + + // set health + currentHealth.Value = maxHealth.Value; + } + + private void Update() + { + // healthBarFillingImage.fillAmount = _currentHealth / maxHealth; + + if (currentHealth.Value <= 0.0f) eventBroker.RaisePlayerDied(); + } + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/PlayerController.cs.meta b/EditorCustomization/Assets/Scripts/Player/PlayerController.cs.meta similarity index 100% rename from EditorCustomization/Assets/Scripts/PlayerController.cs.meta rename to EditorCustomization/Assets/Scripts/Player/PlayerController.cs.meta diff --git a/EditorCustomization/Assets/Scripts/PlayerController.cs b/EditorCustomization/Assets/Scripts/PlayerController.cs deleted file mode 100644 index e883b57..0000000 --- a/EditorCustomization/Assets/Scripts/PlayerController.cs +++ /dev/null @@ -1,31 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -namespace DefaultNamespace -{ - [RequireComponent(typeof(CharacterController))] - public class PlayerController : MonoBehaviour - { - [Header("Movement")] - [SerializeField] private float speed = 5f; - [SerializeField] private float rotationSpeed = 60f; - - [Header("Values")] - [SerializeField] private float maxHealth = 100f; - - [Header("References")] - [SerializeField] private Image healthBarFillingImage; - - private float _currentHealth; - - private void Awake() - { - _currentHealth = maxHealth; - } - - private void Update() - { - healthBarFillingImage.fillAmount = _currentHealth / maxHealth; - } - } -} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/UI.meta b/EditorCustomization/Assets/Scripts/UI.meta new file mode 100644 index 0000000..103ba5a --- /dev/null +++ b/EditorCustomization/Assets/Scripts/UI.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4c22ee53ed204a81a5a83315733d1656 +timeCreated: 1782224277 \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/UI/HealthBar.cs b/EditorCustomization/Assets/Scripts/UI/HealthBar.cs new file mode 100644 index 0000000..ff2f248 --- /dev/null +++ b/EditorCustomization/Assets/Scripts/UI/HealthBar.cs @@ -0,0 +1,52 @@ +using Data; +using Events; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +namespace UI +{ + public class HealthBar : MonoBehaviour + { + [Header("Events")] + [SerializeField] private EventBroker eventBroker; + + [Header("Values")] + [SerializeField] private FloatValue maxHealth; + [SerializeField] private FloatValue currentHealth; + + [Header("References")] + [SerializeField] private Image fillingImage; + [SerializeField] private TextMeshProUGUI deadMessageText; + + private void Awake() + { + fillingImage.type = Image.Type.Filled; + fillingImage.fillMethod = Image.FillMethod.Horizontal; + fillingImage.fillOrigin = 0; + deadMessageText.gameObject.SetActive(false); + } + + private void OnEnable() + { + eventBroker.PlayerDied += OnPlayerDied; + } + + private void OnDisable() + { + eventBroker.PlayerDied -= OnPlayerDied; + } + + private void Update() + { + fillingImage.fillAmount = currentHealth.Value / maxHealth.Value; + } + + private void OnPlayerDied() + { + fillingImage.fillAmount = 0.0f; + currentHealth.Value = 0.0f; + deadMessageText.gameObject.SetActive(true); + } + } +} \ No newline at end of file diff --git a/EditorCustomization/Assets/Scripts/UI/HealthBar.cs.meta b/EditorCustomization/Assets/Scripts/UI/HealthBar.cs.meta new file mode 100644 index 0000000..2387eaa --- /dev/null +++ b/EditorCustomization/Assets/Scripts/UI/HealthBar.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7d9616fe18084f1bb99a58e30eea20e1 +timeCreated: 1782224286 \ No newline at end of file