Exemple #1
0
    public void OnEntityCreated(
        SpatialOSEntity entity,
        EntityGameObjectLinker linker)
    {
        if (!entity.HasComponent <Metadata.Component>())
        {
            return;
        }
        Metadata.Component metadata = entity.GetComponent <Metadata.Component>();
        bool isPlayer     = metadata.EntityType.Equals("Player");
        bool hasAuthority = PlayerLifecycleHelper.IsOwningWorker(entity.SpatialOSEntityId, _world);

        if (isPlayer && hasAuthority)
        {
            string     pathToPrefab     = $"Prefabs/{_workerType}/Authoratative/Player";
            Object     prefab           = Resources.Load(pathToPrefab);
            GameObject playerGameObject = (GameObject)Object.Instantiate(prefab);

            linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, playerGameObject);
        }
        else
        {
            _fallbackCreator.OnEntityCreated(entity, linker);
        }
    }
    private void CreatePlayer(SpatialOSEntity entity, EntityGameObjectLinker linker)
    {
        if (!entity.TryGetComponent <Metadata.Component>(out var metadata) ||
            !entity.TryGetComponent <Position.Component>(out var spatialOSPosition))
        {
            return;
        }

        bool   hasAuthority = PlayerLifecycleHelper.IsOwningWorker(entity.SpatialOSEntityId, world);
        string pathToPrefab;

        if (hasAuthority)
        {
            pathToPrefab = $"Prefabs/{workerType}/Authoritative/Player";
        }
        else
        {
            pathToPrefab = $"Prefabs/{workerType}/Non-Authoritative/Player";
        }

        var prefab   = Resources.Load <GameObject>(pathToPrefab);
        var position = spatialOSPosition.Coords.ToUnityVector() + workerOrigin;

        var playerGameObject = Object.Instantiate(prefab, position, Quaternion.identity);

        playerGameObject.name = $"{metadata.EntityType}(SpatialOS: {entity.SpatialOSEntityId}, Worker: {workerType})";

        linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, (GameObject)playerGameObject,
                                               componentsToAdd);
    }
Exemple #3
0
        public void IsOwningWorker_should_return_true_if_OwningWorker_component_has_my_worker_id()
        {
            connectionHandler.CreateEntity(1, GetOwnedEntity(worker.WorkerId));
            receiveSystem.Update();

            Assert.IsTrue(PlayerLifecycleHelper.IsOwningWorker(new EntityId(1), worker.World));
        }
Exemple #4
0
        public void IsOwningWorker_should_return_false_if_entity_isnt_owned_by_this_worker()
        {
            connectionHandler.CreateEntity(1, GetOwnedEntity("other-worker"));
            receiveSystem.Update();

            Assert.IsFalse(PlayerLifecycleHelper.IsOwningWorker(new EntityId(1), worker.World));
        }
Exemple #5
0
        public void IsOwningWorker_should_return_false_if_entity_doesnt_have_OwningWorker_component()
        {
            connectionHandler.CreateEntity(1, new EntityTemplate());
            receiveSystem.Update();

            Assert.IsFalse(PlayerLifecycleHelper.IsOwningWorker(new EntityId(1), worker.World));
        }
        public void OnEntityCreated(SpatialOSEntity entity, EntityGameObjectLinker linker)
        {
            if (!entity.HasComponent <Metadata.Component>())
            {
                return;
            }

            var metadata      = entity.GetComponent <Metadata.Component>();
            var isPlayer      = metadata.EntityType == "Player";                                   // 玩家
            var isTree        = metadata.EntityType == SimulationSettings.TreePrefabName;          // 树
            var isDinoBrachio = metadata.EntityType == SimulationSettings.Dino_Brachio_PrefabName; // Dino Brachiosaurus
            var isDinoTRex    = metadata.EntityType == SimulationSettings.Dino_TRex_PrefabName;    // Dino T-Rex
            var isEgg         = metadata.EntityType == SimulationSettings.Egg_PrefabName;          // Dino Eggs
            var hasAuthority  = PlayerLifecycleHelper.IsOwningWorker(entity.SpatialOSEntityId, _world);

            if (isPlayer && hasAuthority)
            {
                var pathPrefab       = $"Prefabs/{_WorkerType}/Authoritative/Player";
                var prefab           = Resources.Load(pathPrefab);
                var playerGameObject = UnityEngine.Object.Instantiate(prefab, AnimalManager.Instance.Roots[(int)AnimalManager.ANIMAL_TYPE.PLAYER]);
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, (GameObject)playerGameObject);
                //Debug.Log("EntityGameObjectCreator OnEntityCreated - A Player GameObject created!");
            }
            else if (isTree)
            {
                var pathPrefab       = $"Prefabs/{_WorkerType}/" + SimulationSettings.TreePrefabName;
                var prefab           = Resources.Load(pathPrefab);
                var entityGameObject = UnityEngine.Object.Instantiate(prefab, AnimalManager.Instance.Roots[(int)AnimalManager.ANIMAL_TYPE.TREE]);
                entityGameObject.name = SimulationSettings.TreePrefabName + "Client (ID:" + entity.SpatialOSEntityId + ", Worker: " + _WorkerType + ")";
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, (GameObject)entityGameObject);
                //Debug.Log("EntityGameObjectCreator OnEntityCreated - A tree GameObject created");
            }
            else if (isDinoBrachio)
            {
                var pathPrefab       = $"Prefabs/{_WorkerType}/" + SimulationSettings.Dino_Brachio_PrefabName;
                var prefab           = Resources.Load(pathPrefab);
                var entityGameObject = UnityEngine.Object.Instantiate(prefab, AnimalManager.Instance.Roots[(int)AnimalManager.ANIMAL_TYPE.BRACHIO]) as GameObject;
                entityGameObject.name = SimulationSettings.Dino_Brachio_PrefabName + "Client (ID:" + entity.SpatialOSEntityId + ", Worker: " + _WorkerType + ")";
                entityGameObject.transform.position = new Vector3(0, -100, 0);
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, (GameObject)entityGameObject);
                //Debug.Log("EntityGameObjectCreator OnEntityCreated - A Dinosauer Brachiosaurus GameObject created<"+entity.SpatialOSEntityId+">");
            }
            else if (isDinoTRex)
            {
                var pathPrefab       = $"Prefabs/{_WorkerType}/" + SimulationSettings.Dino_TRex_PrefabName;
                var prefab           = Resources.Load(pathPrefab);
                var entityGameObject = UnityEngine.Object.Instantiate(prefab, AnimalManager.Instance.Roots[(int)AnimalManager.ANIMAL_TYPE.TREX]) as GameObject;
                entityGameObject.name = SimulationSettings.Dino_TRex_PrefabName + "Client (ID:" + entity.SpatialOSEntityId + ", Worker: " + _WorkerType + ")";
                entityGameObject.transform.position = new Vector3(0, -100, 0);
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, (GameObject)entityGameObject);
                //Debug.Log("EntityGameObjectCreator OnEntityCreated - A Dinosauer T-Rex GameObject created<"+entity.SpatialOSEntityId+">");
            }
            else if (isEgg)
            {
                var pathPrefab       = $"Prefabs/{_WorkerType}/" + SimulationSettings.Egg_PrefabName;
                var prefab           = Resources.Load(pathPrefab);
                var entityGameObject = UnityEngine.Object.Instantiate(prefab, AnimalManager.Instance.Roots[(int)AnimalManager.ANIMAL_TYPE.EGG]) as GameObject;
                entityGameObject.name = SimulationSettings.Egg_PrefabName + "Client (ID:" + entity.SpatialOSEntityId + ", Worker: " + _WorkerType + ")";
                entityGameObject.transform.position = new Vector3(0, -100, 0);
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, (GameObject)entityGameObject);
                //Debug.Log("EntityGameObjectCreator OnEntityCreated - An Egg GameObject created");
            }
            else
            {
                _fallbackCreator.OnEntityCreated(entity, linker);
            }
        }
Exemple #7
0
 public void IsOwningWorker_should_return_false_if_entity_does_not_exist()
 {
     Assert.IsFalse(PlayerLifecycleHelper.IsOwningWorker(new EntityId(10), worker.World));
 }