party #15

Merged
zephyr merged 4 commits from party into main 2023-08-07 11:34:42 -05:00
12 changed files with 266 additions and 6 deletions

View File

@ -31,7 +31,7 @@ Transform:
m_Children: m_Children:
- {fileID: 4157508313357080045} - {fileID: 4157508313357080045}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 2 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7347972816793018538 --- !u!114 &7347972816793018538
MonoBehaviour: MonoBehaviour:
@ -45,11 +45,12 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 583304b24f3e6394f9e4d49747e22193, type: 3} m_Script: {fileID: 11500000, guid: 583304b24f3e6394f9e4d49747e22193, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
Name: name:
Class: {fileID: 0} class_: {fileID: 0}
Level: 0 level: 0
XP: 0 xp: 0
Attrs: {fileID: 0} attrs: {fileID: 0}
_party: {fileID: 11400000, guid: c9a46588e6ec04d4d91bb80fdffd7869, type: 2}
--- !u!1 &4632618406133265053 --- !u!1 &4632618406133265053
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

15
Assets/Scriptables/HeroParty.asset generated Normal file
View File

@ -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: []

8
Assets/Scriptables/HeroParty.asset.meta generated Normal file
View File

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

View File

@ -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<HeroUnit> unitList = new List<HeroUnit>();
public ReadOnlyCollection<HeroUnit> UnitList => unitList.AsReadOnly();
public void Add(HeroUnit unit) { unitList.Add(unit); }
public void Remove(HeroUnit unit) { unitList.Remove(unit); }
public int Count => unitList.Count;
}

11
Assets/Scripts/HeroPartySO.cs.meta generated Normal file
View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: f0603cf6e7f1d884e89c3eb6a478a96c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,6 +1,10 @@
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.Assertions;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("TestsPlaymode")]
/// <summary> /// <summary>
/// Component that makes a duder a duder. /// Component that makes a duder a duder.
@ -13,4 +17,17 @@ public class HeroUnit : MonoBehaviour
[SerializeField] private long level; [SerializeField] private long level;
[SerializeField] private long xp; [SerializeField] private long xp;
[SerializeField] private HeroAttributesSO attrs; [SerializeField] private HeroAttributesSO attrs;
[SerializeField] private HeroPartySO _party;
internal HeroPartySO party => _party;
private void OnEnable()
zephyr marked this conversation as resolved
Review

I think its clearer to make these types of notes into assertions. Assert.IsNotNull(party) or something like it.

I think its clearer to make these types of notes into assertions. `Assert.IsNotNull(party)` or something like it.
{
Assert.IsNotNull(_party);
_party.Add(this);
}
private void OnDisable()
{
_party.Remove(this);
}
zephyr marked this conversation as resolved
Review

Should use a property instead of a getter

Should use a property instead of a getter
} }

8
Assets/TestsPlaymode.meta generated Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 761a28b9566afe848955bfe8200ff125
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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<GameObject>("Assets/Prefabs/Hero.prefab");
Assert.IsNotNull(prefab);
var instance = Object.Instantiate(prefab);
var hero = instance.GetComponent<HeroUnit>();
yield return null;
Assert.AreEqual(1, hero.party.Count);
Object.Destroy(instance);
yield return null;
Assert.IsEmpty(hero.party.UnitList);
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 12e575ff764956245a428c77cced4e48
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: da0ac170c269d9342b202cf3000da737
AssemblyDefinitionImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -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": "<default_scene_template_dependencies>",
"defaultInstantiationMode": 1
},
"newSceneOverride": 0
}