public override void SimulationStep(ushort vehicleID, ref Vehicle vehicleData, ref Vehicle.Frame frameData, ushort leaderID, ref Vehicle leaderData, int lodPhysics) { if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { var speedData = CarSpeedData.Of(vehicleID); if (speedData.SpeedMultiplier == 0 || speedData.CurrentPath != vehicleData.m_path) { speedData.CurrentPath = vehicleData.m_path; speedData.SetRandomSpeedMultiplier(0.7f, 1.15f); } m_info.ApplySpeedMultiplier(CarSpeedData.Of(vehicleID)); } base.SimulationStep(vehicleID, ref vehicleData, ref frameData, leaderID, ref leaderData, lodPhysics); if ((vehicleData.m_flags & Vehicle.Flags.Stopped) != 0 && this.CanLeave(vehicleID, ref vehicleData)) { vehicleData.m_flags &= ~Vehicle.Flags.Stopped; vehicleData.m_flags |= Vehicle.Flags.Leaving; } if ((vehicleData.m_flags & (Vehicle.Flags.TransferToSource | Vehicle.Flags.GoingBack)) == Vehicle.Flags.TransferToSource && this.ShouldReturnToSource(vehicleID, ref vehicleData)) { this.SetTarget(vehicleID, ref vehicleData, 0); } if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { m_info.RestoreVehicleSpeed(CarSpeedData.Of(vehicleID)); } }
public override void SimulationStep(ushort vehicleID, ref Vehicle vehicleData, ref Vehicle.Frame frameData, ushort leaderID, ref Vehicle leaderData, int lodPhysics) { if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { var speedData = CarSpeedData.Of(vehicleID); if (speedData.SpeedMultiplier == 0 || speedData.CurrentPath != vehicleData.m_path) { speedData.CurrentPath = vehicleData.m_path; speedData.SetRandomSpeedMultiplier(0.6f, 1.4f); } m_info.ApplySpeedMultiplier(CarSpeedData.Of(vehicleID)); } if ((vehicleData.m_flags & Vehicle.Flags.Stopped) != 0) { vehicleData.m_waitCounter += 1; if (this.CanLeave(vehicleID, ref vehicleData)) { vehicleData.m_flags &= ~Vehicle.Flags.Stopped; vehicleData.m_waitCounter = 0; } } base.SimulationStep(vehicleID, ref vehicleData, ref frameData, leaderID, ref leaderData, lodPhysics); if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { m_info.RestoreVehicleSpeed(CarSpeedData.Of(vehicleID)); } }
public static CarSpeedData Of(ushort vehicleID) { if (sm_speedData[vehicleID] == null) { sm_speedData[vehicleID] = new CarSpeedData(); } return(sm_speedData[vehicleID]); }
public override void SimulationStep(ushort vehicleID, ref Vehicle vehicleData, ref Vehicle.Frame frameData, ushort leaderID, ref Vehicle leaderData, int lodPhysics) { if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { var speedData = CarSpeedData.Of(vehicleID); if (speedData.SpeedMultiplier == 0 || speedData.CurrentPath != vehicleData.m_path) { speedData.CurrentPath = vehicleData.m_path; speedData.SetRandomSpeedMultiplier(0.75f, 0.95f); } m_info.ApplySpeedMultiplier(CarSpeedData.Of(vehicleID)); } if ((vehicleData.m_flags & Vehicle.Flags.TransferToSource) != 0) { var self = (GarbageTruckAI)((object)this); if ((int)vehicleData.m_transferSize < self.m_cargoCapacity) { this.TryCollectGarbage(vehicleID, ref vehicleData, ref frameData); } if ((int)vehicleData.m_transferSize >= self.m_cargoCapacity && (vehicleData.m_flags & Vehicle.Flags.GoingBack) == 0 && vehicleData.m_targetBuilding != 0) { this.SetTarget(vehicleID, ref vehicleData, 0); } } base.SimulationStep(vehicleID, ref vehicleData, ref frameData, leaderID, ref leaderData, lodPhysics); if ((vehicleData.m_flags & Vehicle.Flags.Arriving) != 0 && vehicleData.m_targetBuilding != 0 && (vehicleData.m_flags & (Vehicle.Flags.WaitingPath | Vehicle.Flags.GoingBack | Vehicle.Flags.WaitingTarget)) == 0) { this.ArriveAtTarget(vehicleID, ref vehicleData); } if ((vehicleData.m_flags & (Vehicle.Flags.TransferToSource | Vehicle.Flags.GoingBack)) == Vehicle.Flags.TransferToSource && this.ShouldReturnToSource(vehicleID, ref vehicleData)) { this.SetTarget(vehicleID, ref vehicleData, 0); } if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { m_info.RestoreVehicleSpeed(CarSpeedData.Of(vehicleID)); } }
public override void SimulationStep(ushort vehicleID, ref Vehicle data, Vector3 physicsLodRefPos) { if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { var speedData = CarSpeedData.Of(vehicleID); if (speedData.SpeedMultiplier == 0 || speedData.CurrentPath != data.m_path) { speedData.CurrentPath = data.m_path; speedData.SetRandomSpeedMultiplier(0.7f, 1.1f); } m_info.ApplySpeedMultiplier(CarSpeedData.Of(vehicleID)); } if (((data.m_flags & Vehicle.Flags.Congestion) != 0) && ((TrafficMod.Options & OptionsManager.ModOptions.NoDespawn) != OptionsManager.ModOptions.NoDespawn)) { Singleton <VehicleManager> .instance.ReleaseVehicle(vehicleID); } else { if ((data.m_flags & Vehicle.Flags.WaitingTarget) != 0 && (data.m_waitCounter += 1) > 20) { this.RemoveOffers(vehicleID, ref data); data.m_flags &= ~Vehicle.Flags.WaitingTarget; data.m_flags |= Vehicle.Flags.GoingBack; data.m_waitCounter = 0; if (!this.StartPathFind(vehicleID, ref data)) { data.Unspawn(vehicleID); } } base.SimulationStep(vehicleID, ref data, physicsLodRefPos); } if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { m_info.RestoreVehicleSpeed(CarSpeedData.Of(vehicleID)); } }
public override void SimulationStep(ushort vehicleID, ref Vehicle vehicleData, ref Vehicle.Frame frameData, ushort leaderID, ref Vehicle leaderData, int lodPhysics) { if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { var speedData = CarSpeedData.Of(vehicleID); if (speedData.SpeedMultiplier == 0 || speedData.CurrentPath != vehicleData.m_path) { speedData.CurrentPath = vehicleData.m_path; if ((vehicleData.m_flags & Vehicle.Flags.Emergency2) == Vehicle.Flags.Emergency2) { speedData.SetRandomSpeedMultiplier(1f, 1.75f); } else { speedData.SetRandomSpeedMultiplier(0.7f, 1.1f); } } m_info.ApplySpeedMultiplier(CarSpeedData.Of(vehicleID)); } if (this.m_info.m_class.m_level >= ItemClass.Level.Level4) { base.SimulationStep(vehicleID, ref vehicleData, ref frameData, leaderID, ref leaderData, lodPhysics); if ((vehicleData.m_flags & Vehicle.Flags.Stopped) != 0 && this.CanLeave(vehicleID, ref vehicleData)) { vehicleData.m_flags &= ~Vehicle.Flags.Stopped; vehicleData.m_flags |= Vehicle.Flags.Leaving; } if ((vehicleData.m_flags & Vehicle.Flags.GoingBack) == 0 && this.ShouldReturnToSource(vehicleID, ref vehicleData)) { this.SetTarget(vehicleID, ref vehicleData, 0); } } else { frameData.m_blinkState = (((vehicleData.m_flags & Vehicle.Flags.Emergency2) == 0) ? 0f : 10f); this.TryCollectCrime(vehicleID, ref vehicleData, ref frameData); base.SimulationStep(vehicleID, ref vehicleData, ref frameData, leaderID, ref leaderData, lodPhysics); if ((vehicleData.m_flags & Vehicle.Flags.Stopped) != 0) { if (this.CanLeave(vehicleID, ref vehicleData)) { vehicleData.m_flags &= ~Vehicle.Flags.Stopped; vehicleData.m_flags |= Vehicle.Flags.Leaving; } } else if ((vehicleData.m_flags & Vehicle.Flags.Arriving) != 0 && vehicleData.m_targetBuilding != 0 && (vehicleData.m_flags & (Vehicle.Flags.Emergency2 | Vehicle.Flags.WaitingPath | Vehicle.Flags.GoingBack | Vehicle.Flags.WaitingTarget)) == 0) { this.ArriveAtTarget(vehicleID, ref vehicleData); } if ((vehicleData.m_flags & Vehicle.Flags.GoingBack) == 0 && this.ShouldReturnToSource(vehicleID, ref vehicleData)) { this.SetTarget(vehicleID, ref vehicleData, 0); } } if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { m_info.RestoreVehicleSpeed(CarSpeedData.Of(vehicleID)); } }
public override void SimulationStep(ushort vehicleID, ref Vehicle vehicleData, ref Vehicle.Frame frameData, ushort leaderID, ref Vehicle leaderData, int lodPhysics) { if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { var speedData = CarSpeedData.Of(vehicleID); if (speedData.SpeedMultiplier == 0 || speedData.CurrentPath != vehicleData.m_path) { speedData.CurrentPath = vehicleData.m_path; if ((vehicleData.m_flags & Vehicle.Flags.Emergency2) == Vehicle.Flags.Emergency2) { speedData.SetRandomSpeedMultiplier(1f, 1.75f); } else { speedData.SetRandomSpeedMultiplier(0.65f, 1f); } } m_info.ApplySpeedMultiplier(CarSpeedData.Of(vehicleID)); } frameData.m_blinkState = (((vehicleData.m_flags & (Vehicle.Flags.Emergency1 | Vehicle.Flags.Emergency2)) == 0) ? 0f : 10f); base.SimulationStep(vehicleID, ref vehicleData, ref frameData, leaderID, ref leaderData, lodPhysics); bool flag = false; if (vehicleData.m_targetBuilding != 0) { BuildingManager instance = Singleton <BuildingManager> .instance; Vector3 a = instance.m_buildings.m_buffer[(int)vehicleData.m_targetBuilding].CalculateSidewalkPosition(); flag = ((a - frameData.m_position).sqrMagnitude < 4096f); bool flag2 = (vehicleData.m_flags & Vehicle.Flags.Stopped) != 0 || frameData.m_velocity.sqrMagnitude < 0.0100000007f; if (flag && (vehicleData.m_flags & Vehicle.Flags.Emergency2) != 0) { vehicleData.m_flags = ((vehicleData.m_flags & ~Vehicle.Flags.Emergency2) | Vehicle.Flags.Emergency1); } if (flag && flag2) { if (vehicleData.m_blockCounter > 8) { vehicleData.m_blockCounter = 8; } if (vehicleData.m_blockCounter == 8 && (vehicleData.m_flags & Vehicle.Flags.Stopped) == 0) { this.ArriveAtTarget(leaderID, ref leaderData); } if (this.ExtinguishFire(vehicleID, ref vehicleData, vehicleData.m_targetBuilding, ref Singleton <BuildingManager> .instance.m_buildings.m_buffer[(int)vehicleData.m_targetBuilding])) { this.SetTarget(vehicleID, ref vehicleData, 0); } } else if (instance.m_buildings.m_buffer[(int)vehicleData.m_targetBuilding].m_fireIntensity == 0) { this.SetTarget(vehicleID, ref vehicleData, 0); } } if ((vehicleData.m_flags & Vehicle.Flags.Stopped) != 0 && !flag && this.CanLeave(vehicleID, ref vehicleData)) { vehicleData.m_flags &= ~Vehicle.Flags.Stopped; vehicleData.m_flags |= Vehicle.Flags.Leaving; } if ((vehicleData.m_flags & Vehicle.Flags.GoingBack) == 0) { if (this.ShouldReturnToSource(vehicleID, ref vehicleData)) { this.SetTarget(vehicleID, ref vehicleData, 0); } } else if ((ulong)(Singleton <SimulationManager> .instance.m_currentFrameIndex >> 4 & 15u) == (ulong)((long)(vehicleID & 15)) && !this.ShouldReturnToSource(vehicleID, ref vehicleData)) { TransferManager.TransferOffer offer = default(TransferManager.TransferOffer); offer.Priority = 3; offer.Vehicle = vehicleID; offer.Position = frameData.m_position; offer.Amount = 1; offer.Active = true; Singleton <TransferManager> .instance.AddIncomingOffer((TransferManager.TransferReason) vehicleData.m_transferType, offer); } if ((TrafficMod.Options & OptionsManager.ModOptions.UseRealisticSpeeds) == OptionsManager.ModOptions.UseRealisticSpeeds) { m_info.RestoreVehicleSpeed(CarSpeedData.Of(vehicleID)); } }