using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// can be inherited by MonoBehaviours in order to be added to the level manager /// public abstract class LevelObject : MonoBehaviour, ILevelObject { public Vector3 Position { get => transform.position; protected set => transform.position = value; } public string Name { get => name; protected set => name = value; } public bool IsCollidable { get { var collider = GetComponent(); return collider && !collider.isTrigger; } } void Awake() { if (LevelManager.Instance.Has(obj => obj.Equals(this))) return; LevelManager.Instance.Add(this); } void OnDestroy() { LevelManager.Instance.Remove(this); } public virtual void LevelStart() { } public virtual void LevelDestroy() { } public virtual void LevelUpdate() { } public virtual bool Equals(ILevelObject other) { return other is LevelObject otherObject && otherObject.Name == Name && otherObject.Position == Position; } public virtual Dictionary ToDictionary() { return new Dictionary() { {nameof(Name), Name }, {nameof(Position), new float[]{Position.x, Position.y, Position.z } }, {nameof(ILevelObject.ObjectType), nameof(ILevelObject.ObjectType.Prefab) } }; } public virtual void LoadDictionary(Dictionary dict) { Name = dict[nameof(Name)].ToString(); Position = dict[nameof(Position)].ToVector3(); } public void RemoveFromLevel() { //checks if go is still in scene before removing it if (!this) return; Destroy(gameObject); } }