public ConyardChronoReturn(ActorInitializer init, ConyardChronoReturnInfo info) { this.info = info; self = init.Self; health = self.Trait <Health>(); wsb = self.TraitsImplementing <WithSpriteBody>().Single(w => w.Info.Name == info.Body); faction = init.GetValue <FactionInit, string>(self.Owner.Faction.InternalName); var returnInit = init.GetOrDefault <ChronoshiftReturnInit>(); if (returnInit != null) { returnTicks = returnInit.Ticks; duration = returnInit.Duration; origin = returnInit.Origin; // Defer to the end of tick as the lazy value may reference an actor that hasn't been created yet if (returnInit.Chronosphere != null) { init.World.AddFrameEndTask(w => chronosphere = returnInit.Chronosphere.Actor(init.World).Value); } } }
public ConyardChronoReturn(ActorInitializer init, ConyardChronoReturnInfo info) { this.info = info; self = init.Self; health = self.Trait <Health>(); wsb = self.TraitsImplementing <WithSpriteBody>().Single(w => w.Info.Name == info.Body); faction = init.Contains <FactionInit>() ? init.Get <FactionInit, string>() : self.Owner.Faction.InternalName; if (init.Contains <ChronoshiftReturnInit>()) { returnTicks = init.Get <ChronoshiftReturnInit, int>(); } if (init.Contains <ChronoshiftDurationInit>()) { duration = init.Get <ChronoshiftDurationInit, int>(); } if (init.Contains <ChronoshiftOriginInit>()) { origin = init.Get <ChronoshiftOriginInit, CPos>(); } if (init.Contains <ChronoshiftChronosphereInit>()) { chronosphere = init.Get <ChronoshiftChronosphereInit, Actor>(); } }