Ejemplo n.º 1
0
        public virtual Task <bool> SetRotationAsync(Quaternion rotation)
        {
            async UniTask <bool> RotationTask()
            {
                if (!ValidationHelper.IsValid(rotation))
                {
                    return(false);
                }

                await UniTask.SwitchToMainThread();

                var unityRotation = rotation.ToUnityQuaternion();

                if (m_Rigidbody != null)
                {
                    m_Rigidbody.rotation = unityRotation;
                }
                else
                {
                    m_Transform.rotation = unityRotation;
                }

                return(true);
            }

            return(RotationTask().AsTask());
        }
Ejemplo n.º 2
0
 public static UnityEngine.Quaternion SystemQuaternionToUnity(System.Numerics.Quaternion quaternion)
 {
     return(quaternion.ToUnityQuaternion());
 }
Ejemplo n.º 3
0
        public Task <IVehicle?> SpawnVehicleAsync(Vector3 position, Quaternion rotation, string vehicleAssetId, IVehicleState?state = null)
        {
            async UniTask <IVehicle?> SpawnVehicleTask()
            {
                await UniTask.SwitchToMainThread();

                if (!ushort.TryParse(vehicleAssetId, out var parsedVehicleId))
                {
                    throw new Exception($"Invalid vehicle id: {vehicleAssetId}");
                }

                if (Assets.find(EAssetType.VEHICLE, parsedVehicleId) is not VehicleAsset vehicleAsset)
                {
                    return(null);
                }

                UnturnedVehicle?vehicle = null;

                if (state is UnturnedVehicleState && state.StateData?.Length > 0)
                {
                    ReadState(state.StateData, out _ /* id doesn't require i guess? */, out var skinId, out var mythicId,
                              out var roadPosition, out var fuel, out var health, out var batteryCharge,
                              out var owner, out var group, out var locked, out byte[][] turrets,
                              out _, out var tireAliveMask, out var items);

                    var iVehicle = VehicleManager.SpawnVehicleV3(vehicleAsset, skinId, mythicId, roadPosition,
                                                                 position.ToUnityVector(), rotation.ToUnityQuaternion(), false, false, false,
                                                                 false, fuel, health, batteryCharge, owner, group, locked, turrets, tireAliveMask);

                    if (iVehicle != null)
                    {
                        vehicle = new UnturnedVehicle(iVehicle);

                        if (items != null)
                        {
                            foreach (var item in items)
                            {
                                iVehicle.trunkItems.loadItem(item.x, item.y, item.rot, item.item);
                            }
                        }
                    }
                }
                else
                {
                    var iVehicle = VehicleManager.spawnVehicleV2(parsedVehicleId, position.ToUnityVector(),
                                                                 Quaternion.Identity.ToUnityQuaternion());
                    if (iVehicle != null)
                    {
                        vehicle = new UnturnedVehicle(iVehicle);
                    }
                }

                return(vehicle);
            }

            return(SpawnVehicleTask().AsTask());
        }