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); } }
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); }); } } }
/// <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(); } }