namespace ET { public class CabinDestroySystem : DestroySystem { public override void Destroy(Cabin self) { Unit unit = self.Parent.Parent.GetParent(); unit.RemoveGrandChild(self.Id); // 需要清理所管理的农田的指向 foreach (long farmlandId in self.FarmlandIds) { var farmland = unit.GetGrandChild(farmlandId); if (farmland != null) { farmland.SetCabinId(0); } } // 农民变空闲 if (self.PeopleId > 0) { var peopleComp = unit.GetComponent(); var people = peopleComp.GetChild(self.PeopleId); people.SetBehaveType(ConstBehaveType.BEHAVE_IDLE); self.PeopleId = 0; } } } [FriendClass(typeof(Cabin))] public static class CabinSystem { public static void FromMessage(this Cabin self, CabinProto proto) { self.Id = proto.Id; self.PeopleId = proto.PeopleId; self.FarmlandIds = proto.FarmlandIds; } public static CabinProto ToMessage(this Cabin self) { var proto = new CabinProto(); proto.Id = self.Id; proto.PeopleId = self.PeopleId; proto.FarmlandIds = self.FarmlandIds; return proto; } public static void PeoplePrepare(this Cabin self,long peopleId) { self.PeopleId = peopleId; } public static bool PeopleArrive(this Cabin self,long peopleId) { if (self.PeopleId != peopleId) { return false; } self.ResidentState = 1; return true; } public static void PeopleLeave(this Cabin self) { self.ResidentState = 0; self.PeopleId = 0; } public static bool AddFarmland(this Cabin self,long farmlandId) { if (self.FarmlandIds.Contains(farmlandId)) { return false; } self.FarmlandIds.Add(farmlandId); return true; } public static void RemoveFarmland(this Cabin self, long farmlandId) { if (self.FarmlandIds.Contains(farmlandId)) { self.FarmlandIds.Remove(farmlandId); } } public static int GetRange(this Cabin self) { return 20; } } }