示例#1
0
        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;
            }
        }
示例#2
0
        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));
        }
示例#3
0
 public void Tick(Actor self)
 {
     history.Tick(self.CenterLocation - new PVecInt(0, move.Altitude) - Combat.GetTurretPosition(self, facing, contrailTurret));
 }