public void Tick(Actor self) { if (--ticks <= 0) { var move = self.Trait <IMove>(); if (move.Altitude > 0 && self.GetDamageState() >= DamageState.Heavy) { var facing = self.Trait <IFacing>(); var altitude = new int2(0, move.Altitude); position = (self.CenterLocation - Combat.GetTurretPosition(self, facing, smokeTurret)).ToInt2(); if (self.World.LocalShroud.IsVisible(Util.CellContaining(position))) { self.World.AddFrameEndTask( w => w.Add(new Smoke(w, position - altitude, "smokey"))); } } ticks = interval; } }
public ThrowsParticle(ActorInitializer init, ThrowsParticleInfo info) { var self = init.self; var ifacing = self.Trait <IFacing>(); var ru = self.Trait <RenderUnit>(); alt = 0; facing = Turreted.GetInitialTurretFacing(init, 0); pos = Combat.GetTurretPosition(self, ifacing, new Turret(info.Offset)).ToFloat2(); v = Game.CosmeticRandom.Gauss2D(1) * info.Spread.RelOffset(); dfacing = Game.CosmeticRandom.Gauss1D(2) * info.ROT; va = info.Speed; var anim = new Animation(ru.GetImage(self), () => (int)facing); anim.PlayRepeating(info.Anim); ru.anims.Add(info.AnimKey, new AnimationWithOffset( anim, () => pos - new float2(0, alt), null)); }
public void Tick(Actor self) { history.Tick(self.CenterLocation - new PVecInt(0, move.Altitude) - Combat.GetTurretPosition(self, facing, contrailTurret)); }