namespace ET { public class FarmlandDestroySystem : DestroySystem { public override void Destroy(Farmland self) { self.Parent.Parent.GetParent().RemoveFarmland(self); } } public class FarmlandAwakeSystem : AwakeSystem { public override void Awake(Farmland self) { self.Parent.Parent.GetParent().AddFarmland(self); } } public class FarmlandUpdateSystem: UpdateSystem { public override void Update(Farmland self) { } } [FriendClass(typeof(Farmland))] public static class FarmlandSystem { public static void FromMessage(this Farmland self, FarmlandProto farmlandProto) { self.Id = farmlandProto.id; self.SeedCfgId = farmlandProto.SeedCfgId; self.Duration = farmlandProto.duration; self.ExProduct = farmlandProto.exProduct; self.PlanSeedCfgId = farmlandProto.plantCfgId; self.FarmlandState = farmlandProto.farmlandState; } public static FarmlandProto ToMessage(this Farmland self) { FarmlandProto proto = new FarmlandProto(); proto.id = self.Id; proto.SeedCfgId = self.SeedCfgId; proto.duration = self.Duration; proto.exProduct = self.ExProduct; proto.plantCfgId = self.PlanSeedCfgId; proto.farmlandState = self.FarmlandState; return proto; } public static int Plant(this Farmland self, int cropId,int seedId) { if (self.FarmlandState != FarmlandState.FARMLAND_STATE_FREE) { return ErrorCode.ERR_FarmlandNotFree; } self.ConfigId = cropId; self.Duration = 0; self.SeedCfgId = seedId; self.PlanSeedCfgId = seedId; self.FarmlandState = FarmlandState.FARMLAND_STATE_GROW; self.ExProduct = 0; return ErrorCode.ERR_Success; } public static void Update(this Farmland self) { if (self.FarmlandState != FarmlandState.FARMLAND_STATE_GROW) { return; } self.Duration += 1; if (self.Duration >= self.Config.GrowthCycle) { self.FarmlandState = FarmlandState.FARMLAND_STATE_RIPE; } } public static int Harvest(this Farmland self) { if (self.FarmlandState != FarmlandState.FARMLAND_STATE_RIPE) { return ErrorCode.ERR_PlantNotRipe; } self.Duration = 0; self.SeedCfgId = 0; self.PlanSeedCfgId = 0; self.ExProduct = 0; self.FarmlandState = FarmlandState.FARMLAND_STATE_FREE; return ErrorCode.ERR_Success; } } }