Exemple #1
0
        void OnTriggerEnter(Collider collider)
        {
            if (collider.gameObject.layer == UnityLayerManager.GetLayerIndex(EUnityLayerName.VehicleTrigger))
            {
                _collidedTriggerCount++;

                var vehicle = VehicleEntityUtility.GetVehicleFromChildCollider(collider);
                if (vehicle != null)
                {
                    SetCollisionState(vehicle, EVehicleCollisionState.Enter);

                    var collisionTime = MyGameTime.time;
                    if (collisionTime - _lastCollisionTime > 0.34f)
                    {
                        var damage = CalcPlayerCollisionDamage(vehicle);
                        if (DamageEnabled && damage > 0.0f)
                        {
                            var sourcePlayer = vehicle.hasOwnerId ? AllContext.player.GetEntityWithEntityKey(vehicle.ownerId.Value) : null;
                            VehicleDamageUtility.DoPlayerDamage(AllContext, sourcePlayer, _playerEntity, damage);
                        }
                        _lastCollisionTime = collisionTime;
                    }
                }
            }
        }
Exemple #2
0
 void OnTriggerStay(Collider collider)
 {
     if (collider.gameObject.layer == UnityLayerManager.GetLayerIndex(EUnityLayerName.VehicleTrigger))
     {
         var vehicle = VehicleEntityUtility.GetVehicleFromChildCollider(collider);
         if (vehicle != null)
         {
             SetCollisionState(vehicle, EVehicleCollisionState.Stay);
         }
     }
 }
Exemple #3
0
        void OnTriggerExit(Collider collider)
        {
            if (collider.gameObject.layer == UnityLayerManager.GetLayerIndex(EUnityLayerName.VehicleTrigger))
            {
                _collidedTriggerCount--;

                if (_collidedTriggerCount <= 0)
                {
                    var vehicle = VehicleEntityUtility.GetVehicleFromChildCollider(collider);
                    if (vehicle != null)
                    {
                        SetCollisionState(vehicle, EVehicleCollisionState.None);
                    }

                    _collidedTriggerCount = 0;
                }
            }
        }
Exemple #4
0
        private void SetRideOffPosition(PlayerEntity playerEntity, VehicleEntity vehicle)
        {
            //set the player ride-off position
            var seat = VehicleEntityUtility.GetVehicleSeat(playerEntity);

            if (vehicle.IsRideOffFromLeft(seat))
            {
                if (RideOffFromLeft(playerEntity, vehicle))
                {
                    return;
                }

                if (RideOffFromRight(playerEntity, vehicle))
                {
                    return;
                }
            }
            else
            {
                if (RideOffFromRight(playerEntity, vehicle))
                {
                    return;
                }

                if (RideOffFromLeft(playerEntity, vehicle))
                {
                    return;
                }
            }

            //if the player can not ride off from left or right, try to ride off from back or front
            if (RideOffFromBack(playerEntity, vehicle))
            {
                return;
            }

            if (RideOffFromFront(playerEntity, vehicle))
            {
                return;
            }

            //almost never happen, the vehicle is stuck, and the player has to ride off from the top of the vehicle.
            RideOffFromTop(playerEntity, vehicle);
        }
Exemple #5
0
        private bool RideOffFromDirection(PlayerEntity playerEntity, VehicleEntity vehicleEntity, Vector3 direction)
        {
            Vector3 position;
            bool    resolved = true;

            if (SharedConfig.IsServer)
            {
                position = playerEntity.moveUpdate.VehicleRideOffOffset;
            }
            else
            {
                var radius = playerEntity.characterContoller.Value.radius;
                resolved = VehicleEntityUtility.GetRideOffPosition(playerEntity, vehicleEntity, direction, out position, 0.3f, radius * 3);
                playerEntity.moveUpdate.VehicleRideOffOffset = position;
            }

            playerEntity.RootGo().transform.position = position;
            playerEntity.position.Value = position;
            return(resolved);
        }
Exemple #6
0
        private void ChangeSeatOnVehicle(PlayerEntity playerEntity, int seatIndex)
        {
            if (!playerEntity.IsOnVehicle())
            {
                return;
            }

            var vehicleComp = playerEntity.controlledVehicle;
            var vehicle     = _vehicleContext.GetEntityWithEntityKey(vehicleComp.EntityKey);

            if (vehicle == null)
            {
                return;
            }

            var seat = GetSeatIdFromCmdSeatIndex(vehicle, seatIndex);

            if (seat < 0)
            {
                return;
            }

            if (vehicle.IsOnVehicleSeat(playerEntity, seat))
            {
                return;
            }


            if (!vehicle.ChangeSeatOnVehicle(playerEntity, seat))
            {
                return;
            }

            var originSeat = VehicleEntityUtility.GetVehicleSeat(playerEntity);

            CheckAndRemoveOwnerId(vehicle, originSeat);
            CheckAndAddOwnerId(vehicle, playerEntity);

            playerEntity.DriveStart(_contexts, seat, vehicle.vehicleAssetInfo.PostureId);
        }
Exemple #7
0
        private void RideOffVehicle(PlayerEntity playerEntity)
        {
            if (playerEntity.IsOnVehicle())
            {
                var vehicle = _vehicleContext.GetEntityWithEntityKey(playerEntity.controlledVehicle.EntityKey);
                if (vehicle == null)
                {
                    return;
                }

                var seat = VehicleEntityUtility.GetVehicleSeat(playerEntity);
                CheckAndRemoveOwnerId(vehicle, seat);
                vehicle.RemovePassager(playerEntity);
                SetRideOffPosition(playerEntity, vehicle);
                //Logger.ErrorFormat("PosAfterRideOff_{0} : {1},{2},{3}", playerEntity.userCmd.Latest.Seq,
                //    playerEntity.position.Value.x, playerEntity.position.Value.y, playerEntity.position.Value.z);
                AddRideOffVelocity(playerEntity, vehicle);
                SetPositionInterpolateMode(playerEntity);
            }

            playerEntity.controlledVehicle.RideOff(_currentTime.CurrentTime);
            playerEntity.SetCharacterStateWithVehicle(_contexts, _vehicleContext);
        }