using System.Collections.Generic; namespace Superlazy { public interface IUnit { SLEntity Entity { get; } SLEntity Message(string message, SLEntity context); } public class Unit : IUnit { public SLEntity Entity { get; } public IZone Zone { get; } public SLEntity Player => Zone.Player; internal List startComponents; internal SortedList> components; internal Dictionary>> componentMessages; public Unit(SLEntity entity, IZone zone) { Entity = entity; Zone = zone; } public void AddComponent() where T : UnitComponent { AddComponent(typeof(T).Name, typeof(T).Name, SLEntity.Empty); } public void AddComponent(string key, SLEntity context) where T : UnitComponent { AddComponent(key, typeof(T).Name, context); } public void AddComponent(string component) { AddComponent(component, component, SLEntity.Empty); } public void AddComponent(string key, string component, SLEntity context) { UnitHandler.AddComponent(this, key, component, context); } public void RemoveComponent() where T : UnitComponent { RemoveComponent(typeof(T).Name); } public void RemoveComponent(string component) { if (Entity["Components"][component] == false) return; Entity["Components"][component]["End"] = true; } public SLEntity Message(string message, SLEntity context) { if (context) { context = context.Override(); } else { context = SLEntity.Empty; // TODO: 전달할때 빈거 전달한게 메모리가 아깝다면 최적화가 필요 } context["Message"] = message; UnitHandler.Message(message, this, context); return context; } public SLEntity DispatchMessage(string message, SLEntity context, SLEntity component) { if (context) { context = context.Override(); } else { context = SLEntity.Empty; // TODO: 전달할때 빈거 전달한게 메모리가 아깝다면 최적화가 필요 } context["Message"] = message; return UnitHandler.DispatchMessage(message, component["Component"], this, component, context); } } }