private void GetStateFromDynamicData(VehicleEntity vehicle, ShipInternState state) { var data = (ShipDynamicDataComponent)vehicle.GetDynamicData(); state.Flag = data.Flag; state.IsAccelerated = data.IsAccelerated; state.SteerInput = data.SteerInput; state.ThrottleInput = data.ThrottleInput; state.Position = data.Position.ShiftedVector3(); state.Rotation = data.Rotation; state.IsSleeping = data.IsSleeping; state.LinearVelocity = data.LinearVelocity; state.AngularVelocity = data.AngularVelocity; var indexArray = VehicleIndexHelper.GetRudderIndexArray(); for (int i = 0; i < indexArray.Length; ++i) { var index = indexArray[i]; if (ShipEntityUtility.HasRudder(vehicle, index)) { state.RudderStates[i] = GetRudderState(ShipEntityUtility.GetRudder(vehicle, index)); } } data.Clear(); }
public void BuildVehicleGUIInfo(VehicleEntity vehicle, int index, StringBuilder infoBuilder) { var controller = GetController(vehicle); var linearVelocity = controller.Velocity; infoBuilder.Length = 0; infoBuilder.Append("id:"); infoBuilder.Append(index); infoBuilder.Append("/Hp:"); infoBuilder.Append(vehicle.carGameData.Hp); infoBuilder.Append("/F:"); infoBuilder.Append(vehicle.carGameData.RemainingFuel); infoBuilder.Append("/V:"); infoBuilder.Append(linearVelocity.magnitude.ToString("f1")); infoBuilder.Append("/P:"); infoBuilder.Append(vehicle.position.Value.ToString("f1")); infoBuilder.Append("/M:"); infoBuilder.Append((linearVelocity.magnitude * controller.cachedRigidbody.mass).ToString("f1")); var indexArray = VehicleIndexHelper.GetWheelIndexArray(); for (int i = 0; i < indexArray.Length; ++i) { infoBuilder.Append("/W"); infoBuilder.Append(i + 1); infoBuilder.Append(":"); infoBuilder.Append(vehicle.carGameData.GetWheelHp(indexArray[i])); } }
public void SyncToComponent(VehicleEntity vehicle) { var state = GetCurrentState(vehicle); var data = vehicle.shipDynamicData; data.Flag = (int)VehicleFlag.LocalSet; data.IsAccelerated = state.IsAccelerated; data.SteerInput = state.RudderInput; data.ThrottleInput = state.ThrottleInput; data.Position = state.Position.ShiftedToFixedVector3(); data.Rotation = state.Rotation; data.IsSleeping = state.IsSleeping; data.LinearVelocity = state.BodyState.LinearVelocity; data.AngularVelocity = state.BodyState.AngularVelocity; var indexArray = VehicleIndexHelper.GetRudderIndexArray(); var rudderCount = GetController(vehicle).rudders.Count; for (int i = 0; i < rudderCount; ++i) { var index = indexArray[i]; if (ShipEntityUtility.HasRudder(vehicle, index)) { SetShipRudderState(vehicle, index, state.RudderStates[i]); } } }
public virtual void SetFrom(VehicleEntity vehicle) { var comp = (CarDynamicDataComponent)vehicle.GetDynamicData(); Flag = comp.Flag; IsHornOn = comp.IsHornOn; HandbrakeInput = comp.HandbrakeInput; IsAccelerated = comp.IsAccelerated; SteerInput = comp.SteerInput; ThrottleInput = comp.ThrottleInput; Position = comp.Position; Rotation = comp.Rotation; LinearVelocity = comp.LinearVelocity; AngularVelocity = comp.AngularVelocity; IsSleeping = comp.IsSleeping; var indexArray = VehicleIndexHelper.GetWheelIndexArray(); for (int i = 0; i < indexArray.Length; ++i) { var index = indexArray[i]; if (WheelEntityUtility.HasWheel(vehicle, index)) { GetWheelState(WheelEntityUtility.GetWheel(vehicle, index), Wheels[i]); } } }
private void SetRudderBroken(VehicleEntity vehicle, VehiclePartIndex index) { var controller = vehicle.GetController <AdvancedShipController>(); var controllerIndex = VehicleIndexHelper.ToVehicleControllerRudderIndex(index); controller.rudders[controllerIndex].IsBroken = true; }
public virtual void FromStateToComponent(VehicleAbstractState state, VehicleEntity vehicle) { var comp = vehicle.GetDynamicData(); comp.Flag = (int)VehicleFlag.LocalSet; comp.IsAccelerated = state.IsAccelerated; comp.SteerInput = state.SteerInput; comp.ThrottleInput = state.ThrottleInput; comp.Position = state.BodyState.Position; comp.Rotation = state.BodyState.Rotation; comp.LinearVelocity = state.BodyState.LinearVelocity; comp.AngularVelocity = state.BodyState.AngularVelocity; comp.IsSleeping = state.BodyState.IsSleeping; var wheelCount = state.WheelStates.Length; var indexArray = VehicleIndexHelper.GetWheelIndexArray(); AssertUtility.Assert(wheelCount <= indexArray.Length); for (int i = 0; i < wheelCount; ++i) { var index = indexArray[i]; if (WheelEntityUtility.HasWheel(vehicle, index)) { SetWheel(vehicle, index, state.WheelStates[i]); } } }
private void UpdateWheels() { var wheelIndexArray = VehicleIndexHelper.GetWheelIndexArray(); foreach (var index in wheelIndexArray) { UpdateWheelStateByIndex(index); } }
private void UpdateSeats() { var seatIndexArray = VehicleIndexHelper.GetSeatIndexArray(); foreach (var index in seatIndexArray) { UpdateSeatStateByIndex(index); } }
public static VehicleUiWheelIndex GetUiWheelIndex(VehicleEntity vehicle, VehiclePartIndex index) { if (HasWheel(vehicle, index)) { var controller = GetController(vehicle); var controllerIndex = VehicleIndexHelper.ToVehicleControllerWheelIndex(index); return(controller.GetWheelUiIndex(controllerIndex)); } return(VehicleUiWheelIndex.None); }
public static void PlayWheelExplosion(VehicleEntity vehicle, VehiclePartIndex index) { //disable wheel mesh render EnableWheelRender(vehicle, index, false); //play explosion effect var go = vehicle.gameObject; var controllerIndex = VehicleIndexHelper.ToVehicleControllerWheelIndex(index); var effect = go.UnityObjWrapper.Value.GetComponent <VehicleEventEffect>(); effect.WheelExplosion(controllerIndex); }
protected override void OnBodyBroken(VehicleEntity vehicle) { var comp = vehicle.vehicleBrokenFlag; var indexArray = VehicleIndexHelper.GetRudderIndexArray(); foreach (var index in indexArray) { if (comp.IsVehiclePartBroken(index) && !comp.IsVehiclePartColliderBroken(index)) { SetRudderBroken(vehicle, index); } } }
public static VehiclePartIndex GetPartIndexByName(VehicleEntity vehicle, string goName) { var config = GetShipConfig(vehicle); var indexArray = VehicleIndexHelper.GetRudderIndexArray(); for (int i = 0; i < config.rudderHitBoxNames.Length; ++i) { if (config.rudderHitBoxNames[i].Equals(goName)) { return(indexArray[config.rudderHitBoxIndices[i]]); } } return(VehiclePartIndex.Body); }
public static VehiclePartIndex GetPartIndexByName(VehicleEntity vehicle, string goName) { var config = GetCarConfig(vehicle); var indexArray = VehicleIndexHelper.GetWheelIndexArray(); for (int i = 0; i < config.wheelHitBoxNames.Length; ++i) { var hitBoxNames = config.wheelHitBoxNames[i]; if (goName.Equals(hitBoxNames.OuterHitBoxName) || goName.Equals(hitBoxNames.InnerHitBoxName)) { return(indexArray[config.wheelHitBoxIndices[i]]); } } return(VehiclePartIndex.Body); }
public static void EnableWheelRender(VehicleEntity vehicle, VehiclePartIndex index, bool enabled) { var go = vehicle.gameObject; var controllerIndex = VehicleIndexHelper.ToVehicleControllerWheelIndex(index); var controller = go.UnityObjWrapper.Value.GetComponent <VehicleAbstractController>(); var rendererRoot = controller.GetTireMeshRenderRoot(controllerIndex); if (rendererRoot == null) { var meshRender = controller.GetTireMeshRender(controllerIndex); if (meshRender != null && meshRender.enabled != enabled) { meshRender.enabled = enabled; } } else if (rendererRoot.gameObject.activeSelf != enabled) { rendererRoot.gameObject.SetActive(enabled); } }
private void SetWheelBroken(VehicleEntity vehicle, VehiclePartIndex index) { AssertUtility.Assert(index != VehiclePartIndex.Body); var controller = vehicle.GetController <VehicleAbstractController>(); var controllerIndex = VehicleIndexHelper.ToVehicleControllerWheelIndex(index); controller.SetWheelBroken(controllerIndex); if (!controller.IsKinematic) { var config = controller.GetComponent <VehicleConfig>(); var impulse = config.wheelExplosionImpulse; if (impulse > 0) { var force = controller.transform.up * impulse * controller.cachedRigidbody.mass; vehicle.AddImpulseAtPosition(force, controller.GetWheel(controllerIndex).wheelTransform.position); } } vehicle.vehicleBrokenFlag.SetVehiclePartColliderBroken(index); }
private void DoExplosionDamangeToVehicle(VehicleEntity explodedVehicle, Collider collider, Vector3 explosionCenter) { var vehicle = VehicleEntityUtility.GetVehicleFromChildCollider(collider); if (vehicle == null || vehicle == explodedVehicle || _processedEntities.Contains(vehicle)) { return; } _processedEntities.Add(vehicle); var damage = CalcExplosionDamageToObject(explodedVehicle, vehicle, explosionCenter); var gameData = vehicle.GetGameData(); var indexArray = VehicleIndexHelper.GetAllPartIndexArray(); foreach (var index in indexArray) { gameData.DecreaseHp(index, damage); } //Debug.LogFormat("explosion damange vehicle id {0} damage {1}", vehicle.entityKey.Value.EntityId, damage); _logger.InfoFormat("explosion damange vehicle id {0} damage {1}", vehicle.entityKey.Value.EntityId, damage); }