void ResetQuery()
    {
        Debug.LogWarning("called reset");
        var query = Query.HasComponent <ClientConnection>().ReturnOnlyEntityIds();

        Debug.LogWarning("queryied");
        SpatialOS.Commands.SendQuery(StatusWriter, query)
        .OnSuccess(result => {
            Debug.LogWarning("Found " + result.EntityCount + " nearby entities with a health component");
            if (result.EntityCount < 1)
            {
                return;
            }
            Map <EntityId, Entity> resultMap = result.Entities;
            foreach (EntityId id in resultMap.Keys)
            {
                Entity entity = SpatialOS.GetLocalEntity(id);
                if (entity != null)
                {
                    Debug.LogWarning("entity found");

                    SpatialOS.Commands.SendCommand(StatusWriter, Status.Commands.GameWon.Descriptor, new Winner(PlayerDataReader.Data.name), id)
                    .OnSuccess(OnGameWinSuccess)
                    .OnFailure(OnGameWinFailure);


                    //StatusWriter.Send(new Status.Update().AddGameWon(new Win(gameObject.EntityId().ToString())));
                }
            }
        })
        .OnFailure(errorDetails => Debug.LogWarning("Query failed with error: " + errorDetails));
    }
Beispiel #2
0
 private void OnApplicationQuit()
 {
     if (SpatialOS.IsConnected)
     {
         SpatialOS.Disconnect();
     }
 }
Beispiel #3
0
        // Called when the Play button is pressed in Unity.
        public void Start()
        {
            Configuration.Networking.LinkProtocol      = NetworkConnectionType.Tcp;
            Configuration.Networking.TcpMultiplexLevel = 1;

            SpatialOS.ApplyConfiguration(Configuration);

            Time.fixedDeltaTime = 1.0f / SimulationSettings.FixedFramerate;

            // Distinguishes between when the Unity is running as a client or a server.
            switch (SpatialOS.Configuration.WorkerPlatform)
            {
            case WorkerPlatform.UnityWorker:
                Application.targetFrameRate = SimulationSettings.TargetServerFramerate;
                SpatialOS.OnDisconnected   += reason => Application.Quit();
                SpatialOS.Connect(gameObject);
                break;

            case WorkerPlatform.UnityClient:
                Application.targetFrameRate = SimulationSettings.TargetClientFramerate;
                SpatialOS.OnConnected      += CreatePlayer;
                SceneManager.LoadSceneAsync(BuildSettings.SplashScreenScene, LoadSceneMode.Additive);
                break;
            }

            // Enable communication with the SpatialOS layer of the simulation.
            SpatialOS.Connect(gameObject);
        }
        private void Start()
        {
            List <string> assetsToPreCache = new List <string> {
                SimulationSettings.PlayerPrefabName,
                SimulationSettings.NPCPrefabName,
                SimulationSettings.NPCWizardPrefabName,
                SimulationSettings.HQPrefabName,
                SimulationSettings.TreePrefabName,
                SimulationSettings.BarracksPrefabName,
                SimulationSettings.PlayerSpawnerPrefabName
            };

            SpatialOS.AssetsToPrecache = assetsToPreCache;

            SpatialOS.ApplyConfiguration(Configuration);

            Time.fixedDeltaTime = 1.0f / SimulationSettings.FixedFramerate;

            switch (SpatialOS.Configuration.WorkerPlatform)
            {
            case WorkerPlatform.UnityWorker:
                Application.targetFrameRate = SimulationSettings.TargetFramerateUnityWorker;
                SpatialOS.OnDisconnected   += reason => Application.Quit();
                SpatialOS.Connect(gameObject);
                break;

            case WorkerPlatform.UnityClient:
                SceneManager.LoadScene(SimulationSettings.SplashScreenScene, LoadSceneMode.Additive);
                Application.targetFrameRate = SimulationSettings.TargetFramerate;
                SpatialOS.OnConnected      += ClientPlayerSpawner.SpawnPlayer;
                break;
            }
        }
 private void ConnectionTimeout()
 {
     if (SpatialOS.IsConnected)
     {
         SpatialOS.Disconnect();
     }
     instance.NotReadyWarning.SetActive(true);
     EnableConnectButtons();
 }
 private void OnApplicationQuit()
 {
     if (SpatialOS.IsConnected)
     {
         SpatialOS.Commands.DeleteEntity(clientAuthorityCheck, gameObject.EntityId())
         .OnFailure(OnDeleteFailure);
         SpatialOS.Disconnect();
     }
 }
Beispiel #7
0
        private void ConnectionTimeout()
        {
            if (SpatialOS.IsConnected)
            {
                SpatialOS.Disconnect();
            }

            ConnectButton.interactable = true;
        }
 private void OnApplicationQuit()
 {
     if (SpatialOS.IsConnected)
     {
         Debug.Log("Bootstrap disconnecting from SpatialOS.");
         SpatialOS.OnConnected -= OnConnected;
         SpatialOS.Disconnect();
     }
 }
 private void ConnectionTimeout()
 {
     if (SpatialOS.IsConnected)
     {
         SpatialOS.Disconnect();
     }
     NotReadyWarning.SetActive(true);
     ConnectButton.interactable = true;
 }
Beispiel #10
0
        private void FetchAndCachePlatformBounds(EntityId entityId)
        {
            var PlatformBoundsComponent = SpatialOS.GetLocalEntityComponent <PlatformBounds>(entityId);

            if (PlatformBoundsComponent == null)
            {
                Debug.LogError("Unable to find platform bounds component for entity: " + entityId.Id);
            }
            _cachedPlatformBoundsData = PlatformBoundsComponent.Get().Value;
        }
 private void OnApplicationQuit()
 {
     if (SpatialOS.IsConnected)
     {
         if (SpatialOS.Configuration.EnginePlatform == EnginePlatform.Client)
         {
             ClientPlayerSpawner.DeletePlayer();
         }
         SpatialOS.Disconnect();
     }
 }
Beispiel #12
0
    void DroneMapPrune()
    {
        if (!ControllerWriter.Data.initialised)
        {
            return;
        }

        DeliveryInfo    deliveryInfo;
        List <EntityId> toPrune = new List <EntityId>();

        foreach (EntityId droneId in deliveriesMap.Keys)
        {
            if (deliveriesMap.TryGetValue(droneId, out deliveryInfo))
            {
                if (Time.time > deliveryInfo.latestCheckinTime)
                {
                    Debug.LogErrorFormat("Pruning Drone for taking too long. Drone {0} Delivered: {1}", droneId, deliveryInfo.returning);
                    toPrune.Add(droneId);

                    if (deliveryInfo.returning)
                    {
                        ++failedReturns;
                    }
                    else
                    {
                        ++failedDeliveries;
                        penalties += SimulationSettings.FailedDeliveryPenalty;
                    }
                }
            }
        }

        foreach (EntityId droneId in toPrune)
        {
            Improbable.Worker.IComponentData <Position> positionData = SpatialOS.GetLocalEntityComponent <Position>(droneId);
            if (positionData != null)
            {
                Coordinates coords = positionData.Get().Value.coords;
                coords.y = 0;
                DroneRetrieval(coords.ToUnityVector());
            }
            DestroyDrone(droneId);
        }

        MetricsWriter.Send(new ControllerMetrics.Update()
                           .SetFailedReturns(failedReturns)
                           .SetFailedDeliveries(failedDeliveries)
                           .SetPenalties(penalties)
                           .SetCosts(costs));

        UpdateDroneSlotsAndMap();
    }
Beispiel #13
0
        public void AttackPlayer(EntityId playerEntityId)
        {
            EntityId playerId = gameObject.EntityId();
            EntityId killerId = SpatialOS.GetLocalEntityComponent <PlayerCreation>(new EntityId(1)).Get().Value.killerId;

//			long playerEntityIdCopy = playerEntityId.Id;

            SpatialOS.Commands.SendCommand(HealthWriter, Health.Commands.TakeDamage.Descriptor, new DamageRequest(1000), playerEntityId)
            .OnSuccess(response => {
                if (playerId != killerId && playerEntityId != killerId)
                {
                    HealthWriter.Send(new Health.Update().SetCurrentHealth(-10));
                }
            })
            .OnFailure(OnDamageRequestFailure);
        }
        private void Start()
        {
            SpatialOS.ApplyConfiguration(Configuration);

            Application.targetFrameRate = SimulationSettings.TargetFramerate;
            Time.fixedDeltaTime         = 1.0f / SimulationSettings.FixedFramerate;

            switch (SpatialOS.Configuration.EnginePlatform)
            {
            case EnginePlatform.FSim:
                SpatialOS.OnDisconnected += reason => Application.Quit();
                break;

            case EnginePlatform.Client:
                SpatialOS.OnConnected += ClientPlayerSpawner.SpawnPlayer;
                break;
            }
            SpatialOS.Connect(gameObject);
        }
        public void Start()
        {
            SpatialOS.ApplyConfiguration(Configuration);

            Time.fixedDeltaTime = 1.0f / SimulationSettings.FixedFramerate;

            switch (SpatialOS.Configuration.WorkerPlatform)
            {
            case WorkerPlatform.UnityWorker:
                Application.targetFrameRate = SimulationSettings.TargetServerFramerate;
                SpatialOS.OnDisconnected   += reason => Application.Quit();
                SpatialOS.Connect(gameObject);
                break;

            case WorkerPlatform.UnityClient:
                Application.targetFrameRate = SimulationSettings.TargetClientFramerate;
                SpatialOS.OnConnected      += CreatePlayer;
                break;
            }
        }
Beispiel #16
0
        // Called when the Play button is pressed in Unity.
//        public void Start()
//        {
//            SpatialOS.ApplyConfiguration(Configuration);
//
//            Time.fixedDeltaTime = 1.0f / SimulationSettings.FixedFramerate;
//
//            // Distinguishes between when the Unity is running as a client or a server.
//            switch (SpatialOS.Configuration.WorkerPlatform)
//            {
//                case WorkerPlatform.UnityWorker:
//                    Application.targetFrameRate = SimulationSettings.TargetServerFramerate;
//                    SpatialOS.OnDisconnected += reason => Application.Quit();
//                    break;
//                case WorkerPlatform.UnityClient:
//                    Application.targetFrameRate = SimulationSettings.TargetClientFramerate;
//                    SpatialOS.OnConnected += CreatePlayer;
//                    break;
//            }
//
//            // Enable communication with the SpatialOS layer of the simulation.
////            SpatialOS.Connect(gameObject);
//        }

        public void Start()
        {
            SpatialOS.ApplyConfiguration(Configuration);
            //
            Time.fixedDeltaTime = 1.0f / SimulationSettings.FixedFramerate;
            switch (SpatialOS.Configuration.WorkerPlatform)
            {
            case WorkerPlatform.UnityWorker:
                Application.targetFrameRate = SimulationSettings.TargetServerFramerate;
                SpatialOS.OnDisconnected   += reason => Application.Quit();
                SpatialOS.Connect(gameObject);
                break;

            case WorkerPlatform.UnityClient:
                Application.targetFrameRate = SimulationSettings.TargetClientFramerate;
                SpatialOS.OnConnected      += CreatePlayer;
                SpatialOS.OnDisconnected   += reason => HandlePlayerDisconnect();
                SceneManager.LoadSceneAsync(BuildSettings.SplashScreenScene, LoadSceneMode.Additive);
                break;
            }
        }
Beispiel #17
0
        private void Start()
        {
            SpatialOS.ApplyConfiguration(Configuration);

            Time.fixedDeltaTime = 1.0f / SimulationSettings.FixedFramerate;

            // Distinguishes between when the Unity is running as a client or a server.
            switch (SpatialOS.Configuration.WorkerPlatform)
            {
            case WorkerPlatform.UnityWorker:
                Application.targetFrameRate = SimulationSettings.TargetServerFramerate;
                SpatialOS.OnDisconnected   += reason => Application.Quit();
                break;

            case WorkerPlatform.UnityClient:
                Application.targetFrameRate = SimulationSettings.TargetClientFramerate;
                SpatialOS.OnConnected      += OnSpatialOsConnection;
                break;
            }

            SpatialOS.Connect(gameObject);
        }
Beispiel #18
0
    public void Start()
    {
        SpatialOS.ApplyConfiguration(Configuration);

        switch (SpatialOS.Configuration.EnginePlatform)
        {
        case EnginePlatform.FSim:
            SpatialOS.OnDisconnected += reason => Application.Quit();

            var targetFramerate = 120;
            var fixedFramerate  = 20;

            Application.targetFrameRate = targetFramerate;
            Time.fixedDeltaTime         = 1.0f / fixedFramerate;
            break;

        case EnginePlatform.Client:
            SpatialOS.OnConnected += OnConnected;
            break;
        }

        SpatialOS.Connect(gameObject);
    }
        private void OnEnable()
        {
            SpatialOS.ApplyConfiguration(Configuration);

            Application.targetFrameRate = _targetFramerate;
            switch (SpatialOS.Configuration.EnginePlatform)
            {
            case EnginePlatform.FSim:
            {
                Time.fixedDeltaTime       = 1.0f / _fixedFramerate;
                SpatialOS.OnDisconnected += reason => Application.Quit();
                break;
            }

            case EnginePlatform.Client:
            {
                SpatialOS.OnConnected += OnConnected;
                break;
            }
            }

            SpatialOS.Connect(this.gameObject);
        }
        // Called when the Play button is pressed in Unity.
        public void Start()
        {
            SceneManager.LoadScene(BuildSettings.SplashScreenScene, LoadSceneMode.Additive);

            SpatialOS.ApplyConfiguration(Configuration);

            Time.fixedDeltaTime = 1.0f / SimulationSettings.FixedFramerate;

            // Distinguishes between when the Unity is running as a client or a server.
            switch (SpatialOS.Configuration.WorkerPlatform)
            {
            case WorkerPlatform.UnityWorker:
                Application.targetFrameRate = SimulationSettings.TargetServerFramerate;
                SpatialOS.OnDisconnected   += reason => Application.Quit();
                SpatialOS.Connect(gameObject);
                break;

            case WorkerPlatform.UnityClient:
                Application.targetFrameRate = SimulationSettings.TargetClientFramerate;
                SpatialOS.OnConnected      += CreatePlayer;
                break;
            }
        }
        private bool SetOnPlatform(EntityId entityId)
        {
            var metaComponent = SpatialOS.GetLocalEntityComponent <Metadata>(entityId);

            if (metaComponent == null)
            {
                Debug.Log("Local entities not available, no metadata component...");
                return(false);
            }
            else
            {
                Debug.Log("Got platform metadata component!");

                string platformType = metaComponent.Get().Value.entityType;
                if (platformType == SimulationSettings.IslandTagName)
                {
                    _currentPlatform = new OnIsland
                    {
                        IslandId = entityId,
                    };
                }
                else if (platformType == SimulationSettings.ShipTagName)
                {
                    _currentPlatform = new OnShip
                    {
                        ShipId  = entityId,
                        IsPilot = false,
                    };
                }
                else
                {
                    throw new Exception("Invalid component state, platform neither island nor ship");
                }

                return(true);
            }
        }
 public void AttemptToConnectSpectatorClient()
 {
     playerCreationType = PlayerType.SPECTATORPLAYER;
     SpatialOS.Connect(gameObject);
 }
 public void AttemptToConnectVrClient()
 {
     playerCreationType = PlayerType.VRPLAYER;
     SpatialOS.Connect(gameObject);
 }
Beispiel #24
0
 // Called when pressing Connect from the splash screen.
 public void ConnectToClient()
 {
     Debug.LogWarning("Connect to client");
     SpatialOS.Connect(gameObject);
 }
Beispiel #25
0
 public void ConnectToClient()
 {
     SpatialOS.Connect(gameObject);
 }
Beispiel #26
0
        private void ApplySwarmMechanics()
        {
            int   groupSize  = 0;
            float groupSpeed = 0.0f;


            //Goal's current position (from SwarmGoal entity)
            Vector3 goalPos = Vector3.zero;

            //Vectors that need to be calculated
            //Vector that points towards the center of the flock
            Vector3 vCenter = Vector3.zero;

            //Vector that avoids other fish
            Vector3 vAvoid = Vector3.zero;

            //Setup query to find all other boids within a radius
            var query = Query.And(
                Query.HasComponent <FishParameters>(),
                Query.InSphere(transform.position.x, transform.position.y, transform.position.z, neighborDistance)
                ).ReturnOnlyEntityIds();


            SpatialOS.Commands.SendQuery(WorldTransformWriter, query, result => {
                if (result.StatusCode != StatusCode.Success)
                {
                    Debug.LogError("Query for nearby fish failed with error: " + result.ErrorMessage);
                    return;
                }

                //Debug.Log("Found " + result.Response.Count + " nearby entities");
                if (result.Response.Count < 1)
                {
                    return;                      //No fish in range
                }
                Map <EntityId, Entity> resultMap = result.Response.Value.Entities;

                foreach (var item in resultMap)
                {
                    EntityId idRef = item.Key;

                    /*if (idRef.Id == numFish)  //i.e. == goal
                     *      continue;
                     */


                    //GameObject otherFish = SpatialOS.Universe.Get(idRef).UnderlyingGameObject; // this works also
                    Vector3 otherFishPos = SpatialOS.GetLocalEntityComponent <WorldTransform>(idRef).Get().Value.position.ToVector3();
                    float otherSpeed     = SpatialOS.GetLocalEntityComponent <WorldTransform>(idRef).Get().Value.speed;

                    vCenter            += otherFishPos;
                    float otherDistance = Vector3.Distance(this.transform.position, otherFishPos);

                    if (otherDistance <= collisionDistance)
                    {
                        vAvoid -= this.transform.position - otherFishPos;
                    }

                    groupSpeed += otherSpeed;

                    groupSize++;
                }


                if (groupSize > 0)
                {
                    //EntityId id = new EntityId (1003);
                    if (goalObj == null)
                    {
                        Debug.LogError("Goal OBJ missing!");
                        return;
                    }

                    goalPos = goalObj.transform.position;

                    vCenter = (vCenter / groupSize) + (goalPos - this.transform.position);
                    speed   = groupSpeed / groupSize;

                    Debug.Log("Fish #" + gameObject.EntityId().Id + " : Goal Pos : " + goalPos + " Center " + vCenter + " GroupSize: " + groupSize + " Speed: " + speed);


                    //Clamp max speed, in case it spirals out of control
                    speed = Mathf.Clamp(speed, 0.0f, maxSpeed);

                    //Set it's orientation
                    //Relative Position (or direction) = Target position (i.e. vCenter - vAvoid) minus current position
                    //example : https://docs.unity3d.com/ScriptReference/Quaternion.LookRotation.html
                    //Vector3 direction = (vCenter + vAvoid) - this.transform.position;
                    Vector3 direction = (vCenter - vAvoid) - this.transform.position;


                    //Slowly turn in that direction
                    transform.rotation = Quaternion.Slerp(this.transform.rotation,
                                                          Quaternion.LookRotation(direction),
                                                          angularSpeed * Time.deltaTime);
                }
            });
        }