using System.Collections.Generic; using Kitchen; using KitchenData; using KitchenLib.Customs; using KitchenLib.Utils; using Pets.Enums; using Pets.Interfaces; using Pets.Patches; using Pets.Views; using TMPro; using UnityEngine; using UnityEngine.AI; using UnityEngine.VFX; namespace Pets.Customs.Types { public class Pet : GameDataObject, IHasPrefab { protected override void InitialiseDefaults() { Properties = new List(); } GameObject IHasPrefab.Prefab => Prefab; public GameObject Prefab; public GameObject IconPrefab; public ViewType ViewType; public PetState DefaultState = PetState.Follow; public List Properties; public override void SetupForGame() { base.SetupForGame(); LocalViewRouter_Patch.registeredPetViews.Add(ViewType, Prefab); PetView view = Prefab.AddComponent(); view.agent = Prefab.GetComponentInChildren(); view.animator = Prefab.GetComponentInChildren(); view.vfx = Prefab.GetComponentInChildren(); view.Colliders = new List(Prefab.GetComponentsInChildren()); TextMeshPro tmp = Prefab.GetComponentInChildren(); if (tmp != null) { tmp.transform.parent.gameObject.AddComponent(); view.label = tmp; } foreach (Transform transform in Prefab.transform) { if (transform.name != "Error") continue; view.warningIcon = transform.gameObject; break; } } } public abstract class CustomPet : CustomGameDataObject { public virtual GameObject Prefab { get; protected set; } public virtual GameObject IconPrefab { get; protected set; } public virtual PetState DefaultState { get; protected set; } = PetState.Follow; public virtual List Properties { get; protected set; } = new List(); public override void Convert(GameData gameData, out GameDataObject gameDataObject) { Pet result = ScriptableObject.CreateInstance(); result.ID = ID; result.Prefab = Prefab; result.IconPrefab = IconPrefab; result.ViewType = (ViewType)VariousUtils.GetID(UniqueNameID); result.Properties = Properties; result.DefaultState = DefaultState; gameDataObject = result; } } }