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();
        }
Exemple #2
0
        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]);
                }
            }
        }
Exemple #4
0
        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;
        }
Exemple #6
0
        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);
            }
        }
Exemple #9
0
        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);
        }
Exemple #13
0
        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);
        }