Esempio n. 1
0
        public virtual void TrailTick()
        {
            if (AMAMod.settings.AllowProjectileTrail)
            {
                if (!Trailers.NullOrEmpty())
                {
                    foreach (TrailerProjectileExtension trailer in Trailers)
                    {
                        if (ticksToImpact % trailer.trailerMoteInterval == 0 && (trailer.trailWhenLanded))
                        {
                            for (int ii = 0; ii < trailer.motesThrown; ii++)
                            {
                                //    Trail1Thrower.ThrowSmokeTrail(__instance.Position.ToVector3Shifted(), trailer.trailMoteSize, __instance.Map, trailer.trailMoteDef);

                                //    TrailThrower.ThrowSmokeTrail(__instance.DrawPos, trailer.trailMoteSize * DistanceCoveredFraction(___origin, ___destination, ___ticksToImpact, __instance.def.projectile.SpeedTilesPerTick), __instance.Map, trailer.trailMoteDef, __instance);
                                Color?DC = null;
                                if (trailer.useGraphicColor)
                                {
                                    DC = this.DrawColor;
                                }
                                else
                                if (trailer.useGraphicColorTwo)
                                {
                                    DC = this.DrawColorTwo;
                                }
                                TrailThrower.ThrowSprayTrail(this.DrawPos, this.Map, origin, destination, trailer.trailMoteDef, trailer.trailMoteSize, 240, this.def.projectile.SpeedTilesPerTick, DC);
                            }
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        public static void ThrowSprayTrail(Vector3 loc, Map map, Vector3 origin, Vector3 destination, string defname = null, float size = 1.5f, int rotationRate = 240, float projectieSpeed = 0, Color?color = null)
        {
            if (map == null)
            {
                return;
            }
            if (!loc.InBounds(map))
            {
                return;
            }
            if (!GenView.ShouldSpawnMotesAt(loc, map))
            {
                return;
            }
            float forward = 0f;

            if ((destination - origin).MagnitudeHorizontalSquared() > 0.001f)
            {
                forward = (destination - origin).AngleFlat();
            }
            float backward = 0f;

            if ((origin - destination).MagnitudeHorizontalSquared() > 0.001f)
            {
                backward = (origin - destination).AngleFlat();
            }
            TrailThrower.ThrowSprayTrail(loc, map, forward, backward, defname, size, rotationRate, projectieSpeed, color);
        }
Esempio n. 3
0
        public override void Tick()
        {
            base.Tick();

            this.realPosition = new Vector2(base.ExactPosition.x, base.ExactPosition.z);
            distancetotravel  = launcher.Position.DistanceTo(usedTarget.Cell);
            distancetraveled  = launcher.Position.DistanceTo(this.Position);
            traveled          = (distancetraveled / distancetotravel);
            pos = this.Position;
            checked
            {
                this.age++;
                this.TicksforAppearence--;
                bool flag = this.TicksforAppearence == 0 && base.Map != null;
                if (flag)
                {
                    if (pos != IntVec3.Invalid)
                    {
                        TrailThrower.ThrowSprayTrail(DrawPos, Map, origin, destination, null, 1.5f * traveled, 240, def.projectile.SpeedTilesPerTick);
                        if (pos != this.Position)
                        {
                            Rand.PushState();
                            if (Rand.Chance(0.75f * traveled))
                            {
                                TrySpread();
                            }
                            Rand.PopState();
                        }
                    }
                    Rand.PushState();
                    if (Rand.Chance(0.75f * traveled))
                    {
                        if (traveled > 0.5f)
                        {
                            if (Rand.Chance(0.25f * traveled))
                            {
                                Ignite();
                            }
                        }
                    }
                    Rand.PopState();
                    this.TicksforAppearence = 6;
                }
            }
        }
Esempio n. 4
0
        public override void Tick()
        {
            base.Tick();
            if (assignedTarget != null)
            {
                if (assignedTarget.Position != this.DestinationCell)
                {
                    //    Log.Message("Target moved");
                    this.destination = assignedTarget.Position.ToVector3Shifted();
                    //    this.ticksToImpact = UpdateTicksToImpact;
                }
            }
            if (delay > 0)
            {
                delay--;
            }
            else
            {
                this.ticksToImpact--;
                if (this.ticksToImpact == 15)
                {
                    this.HitRoof();
                }
                //    this.ticksToImpact-= (int)CurrentSpeed;
            }
            if (!this.ExactPosition.InBounds(base.Map))
            {
                this.ticksToImpact++;
                base.Position = this.ExactPosition.ToIntVec3();
                this.Destroy(DestroyMode.Vanish);
            }
            else
            {
                base.Position = this.ExactPosition.ToIntVec3();
                if (!Trailers.NullOrEmpty())
                {
                    foreach (TrailerProjectileExtension trailer in Trailers)
                    {
                        if (ticksToImpact % trailer.trailerMoteInterval == 0)
                        {
                            for (int ii = 0; ii < trailer.motesThrown; ii++)
                            {
                                //    Trail1Thrower.ThrowSmokeTrail(__instance.Position.ToVector3Shifted(), trailer.trailMoteSize, __instance.Map, trailer.trailMoteDef);

                                //    TrailThrower.ThrowSmokeTrail(__instance.DrawPos, trailer.trailMoteSize * DistanceCoveredFraction(___origin, ___destination, ___ticksToImpact, __instance.def.projectile.SpeedTilesPerTick), __instance.Map, trailer.trailMoteDef, __instance);
                                Color?DC = null;
                                if (trailer.useGraphicColor)
                                {
                                    DC = flyingThing.DrawColor;
                                }
                                else
                                if (trailer.useGraphicColorTwo)
                                {
                                    DC = flyingThing.DrawColorTwo;
                                }
                                TrailThrower.ThrowSprayTrail(this.DrawPos, this.Map, origin, destination, trailer.trailMoteDef, trailer.trailMoteSize, 240, this.def.projectile.SpeedTilesPerTick, DC);
                            }
                        }
                    }
                }
                bool flag4 = this.ticksToImpact <= 0;
                bool flag5 = flag4;
                if (flag5)
                {
                    bool flag6 = this.DestinationCell.InBounds(base.Map);
                    bool flag7 = flag6;
                    if (flag7)
                    {
                        base.Position = this.DestinationCell;
                    }
                    this.ImpactSomething();
                }
            }
        }