diff --git a/Assets/Prefabs/Hero.prefab b/Assets/Prefabs/Hero.prefab index 9a662fd..9bc0de0 100644 --- a/Assets/Prefabs/Hero.prefab +++ b/Assets/Prefabs/Hero.prefab @@ -31,7 +31,7 @@ Transform: m_Children: - {fileID: 4157508313357080045} m_Father: {fileID: 0} - m_RootOrder: 2 + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &7347972816793018538 MonoBehaviour: @@ -45,11 +45,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 583304b24f3e6394f9e4d49747e22193, type: 3} m_Name: m_EditorClassIdentifier: - Name: - Class: {fileID: 0} - Level: 0 - XP: 0 - Attrs: {fileID: 0} + name: + class_: {fileID: 0} + level: 0 + xp: 0 + attrs: {fileID: 0} + _party: {fileID: 11400000, guid: c9a46588e6ec04d4d91bb80fdffd7869, type: 2} --- !u!1 &4632618406133265053 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scriptables/HeroParty.asset b/Assets/Scriptables/HeroParty.asset new file mode 100644 index 0000000..c4217c1 --- /dev/null +++ b/Assets/Scriptables/HeroParty.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: f0603cf6e7f1d884e89c3eb6a478a96c, type: 3} + m_Name: HeroParty + m_EditorClassIdentifier: + unitList: [] diff --git a/Assets/Scriptables/HeroParty.asset.meta b/Assets/Scriptables/HeroParty.asset.meta new file mode 100644 index 0000000..e108458 --- /dev/null +++ b/Assets/Scriptables/HeroParty.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9a46588e6ec04d4d91bb80fdffd7869 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/HeroPartySO.cs b/Assets/Scripts/HeroPartySO.cs new file mode 100644 index 0000000..9017a62 --- /dev/null +++ b/Assets/Scripts/HeroPartySO.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using UnityEngine; + +[CreateAssetMenu(fileName = "HeroParty", menuName = "Hero Party")] +public class HeroPartySO : ScriptableObject +{ + [SerializeField] + private List unitList = new List(); + public ReadOnlyCollection UnitList => unitList.AsReadOnly(); + + public void Add(HeroUnit unit) { unitList.Add(unit); } + public void Remove(HeroUnit unit) { unitList.Remove(unit); } + public int Count => unitList.Count; +} diff --git a/Assets/Scripts/HeroPartySO.cs.meta b/Assets/Scripts/HeroPartySO.cs.meta new file mode 100644 index 0000000..3898e62 --- /dev/null +++ b/Assets/Scripts/HeroPartySO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0603cf6e7f1d884e89c3eb6a478a96c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/HeroUnit.cs b/Assets/Scripts/HeroUnit.cs index 293ea78..273a2e3 100644 --- a/Assets/Scripts/HeroUnit.cs +++ b/Assets/Scripts/HeroUnit.cs @@ -1,6 +1,10 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.Assertions; + +using System.Runtime.CompilerServices; +[assembly: InternalsVisibleTo("TestsPlaymode")] /// /// Component that makes a duder a duder. @@ -13,4 +17,17 @@ public class HeroUnit : MonoBehaviour [SerializeField] private long level; [SerializeField] private long xp; [SerializeField] private HeroAttributesSO attrs; + [SerializeField] private HeroPartySO _party; + internal HeroPartySO party => _party; + + private void OnEnable() + { + Assert.IsNotNull(_party); + _party.Add(this); + } + + private void OnDisable() + { + _party.Remove(this); + } } diff --git a/Assets/TestsPlaymode.meta b/Assets/TestsPlaymode.meta new file mode 100644 index 0000000..cf17503 --- /dev/null +++ b/Assets/TestsPlaymode.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 761a28b9566afe848955bfe8200ff125 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestsPlaymode/HeroPartyTest.cs b/Assets/TestsPlaymode/HeroPartyTest.cs new file mode 100644 index 0000000..05effaa --- /dev/null +++ b/Assets/TestsPlaymode/HeroPartyTest.cs @@ -0,0 +1,23 @@ +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; +using UnityEditor; +using UnityEngine; +using UnityEngine.TestTools; + +public class HeroPartyTest +{ + [UnityTest] + public IEnumerator HeroPartyGetsAllTheHeroes() + { + var prefab = AssetDatabase.LoadAssetAtPath("Assets/Prefabs/Hero.prefab"); + Assert.IsNotNull(prefab); + var instance = Object.Instantiate(prefab); + var hero = instance.GetComponent(); + yield return null; + Assert.AreEqual(1, hero.party.Count); + Object.Destroy(instance); + yield return null; + Assert.IsEmpty(hero.party.UnitList); + } +} diff --git a/Assets/TestsPlaymode/HeroPartyTest.cs.meta b/Assets/TestsPlaymode/HeroPartyTest.cs.meta new file mode 100644 index 0000000..020ccb9 --- /dev/null +++ b/Assets/TestsPlaymode/HeroPartyTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12e575ff764956245a428c77cced4e48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TestsPlaymode/TestsPlaymode.asmdef b/Assets/TestsPlaymode/TestsPlaymode.asmdef new file mode 100644 index 0000000..ff95e3f --- /dev/null +++ b/Assets/TestsPlaymode/TestsPlaymode.asmdef @@ -0,0 +1,22 @@ +{ + "name": "TestsPlaymode", + "rootNamespace": "", + "references": [ + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "IdleSurvivors" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/TestsPlaymode/TestsPlaymode.asmdef.meta b/Assets/TestsPlaymode/TestsPlaymode.asmdef.meta new file mode 100644 index 0000000..2f5420f --- /dev/null +++ b/Assets/TestsPlaymode/TestsPlaymode.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da0ac170c269d9342b202cf3000da737 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/SceneTemplateSettings.json b/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 0000000..5e97f83 --- /dev/null +++ b/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,121 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicMaterial", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "defaultInstantiationMode": 0 + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "defaultInstantiationMode": 1 + }, + "newSceneOverride": 0 +} \ No newline at end of file