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; } } } }
void OnTriggerStay(Collider collider) { if (collider.gameObject.layer == UnityLayerManager.GetLayerIndex(EUnityLayerName.VehicleTrigger)) { var vehicle = VehicleEntityUtility.GetVehicleFromChildCollider(collider); if (vehicle != null) { SetCollisionState(vehicle, EVehicleCollisionState.Stay); } } }
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; } } }
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); }
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); }
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); }
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); }