Beispiel #1
0
 private void OnGearChange(AKtankType.Gear oldGear, AKtankType.Gear newGear)
 {
     if (!firstTick && Health != 0)
     {
         bool   up        = Math.Abs(newGear.Number) > Math.Abs(oldGear.Number);
         string soundName = up ? Type.SoundGearUp : Type.SoundGearDown;
         SoundPlay3D(soundName, .7f, true);
     }
 }
Beispiel #2
0
        private void TickCurrentGear()
        {
            //currently gears used only for sounds

            if (currentGear == null)
            {
                return;
            }

            if (motorOn)
            {
                float speed = Math.Max(leftTrack.speed, rightTrack.speed);

                AKtankType.Gear newGear = null;

                if (speed < currentGear.SpeedRange.Minimum || speed > currentGear.SpeedRange.Maximum)
                {
                    //find new gear
                    newGear = Type.Gears.Find(delegate(AKtankType.Gear gear)
                    {
                        return(speed >= gear.SpeedRange.Minimum && speed <= gear.SpeedRange.Maximum);
                    });
                }

                if (newGear != null && currentGear != newGear)
                {
                    //change gear
                    AKtankType.Gear oldGear = currentGear;
                    OnGearChange(oldGear, newGear);
                    currentGear = newGear;
                }
            }
            else
            {
                if (currentGear.Number != 0)
                {
                    currentGear = Type.Gears.Find(delegate(AKtankType.Gear gear)
                    {
                        return(gear.Number == 0);
                    });
                }
            }
        }
Beispiel #3
0
        /// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary>
        protected override void OnPostCreate(bool loaded)
        {
            base.OnPostCreate(loaded);

            AddTimer();

            if (EntitySystemWorld.Instance.WorldSimulationType != WorldSimulationTypes.Editor)
            {
                if (PhysicsModel == null)
                {
                    Log.Error("AKtank: Physics model not exists.");
                    return;
                }

                chassisBody = PhysicsModel.GetBody("chassis");
                if (chassisBody == null)
                {
                    Log.Error("AKtank: \"chassis\" body not exists.");
                    return;
                }

                foreach (MapObjectAttachedObject attachedObject in AttachedObjects)
                {
                    if (attachedObject.Alias == "leftTrack")
                    {
                        leftTrack.trackHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }
                    if (attachedObject.Alias == "rightTrack")
                    {
                        rightTrack.trackHelpers.Add((MapObjectAttachedHelper)attachedObject);
                    }

                    if (attachedObject.Alias == "leftWheel")
                    {
                        Track.WheelObject wo = new Track.WheelObject();
                        wo.mesh = (MapObjectAttachedMesh)attachedObject;
                        float rad = wo.mesh.MeshObject.Bounds.GetRadius();
                        wo.circumference = 2 * MathFunctions.PI * rad;
                        leftTrack.wheels.Add(wo);
                    }
                    if (attachedObject.Alias == "rightWheel")
                    {
                        Track.WheelObject wo = new Track.WheelObject();
                        wo.mesh = (MapObjectAttachedMesh)attachedObject;
                        float rad = wo.mesh.MeshObject.Bounds.GetRadius();
                        wo.circumference = 2 * MathFunctions.PI * rad;
                        leftTrack.wheels.Add(wo);
                    }
                }

                if (leftTrack.trackHelpers.Count != 0)
                {
                    tracksPositionYOffset = Math.Abs(leftTrack.trackHelpers[0].PositionOffset.Y);
                }
            }

            //initialize currentGear
            currentGear = Type.Gears.Find(delegate(AKtankType.Gear gear)
            {
                return(gear.Number == 0);
            });

            //replace track materials
            if (EntitySystemWorld.Instance.WorldSimulationType != WorldSimulationTypes.Editor)
            {
                InitTracksAnimation();
            }
        }