Example #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);
    }
    private void CreateHealer(SpatialOSEntity entity, EntityGameObjectLinker linker)
    {
        if (!entity.TryGetComponent <Metadata.Component>(out var metadata) ||
            !entity.TryGetComponent <Position.Component>(out var spatialOSPosition))
        {
            return;
        }

        var prefabName = metadata.EntityType;
        var position   = spatialOSPosition.Coords.ToUnityVector() + workerOrigin;

        var pathToPrefab = $"Prefabs/{workerType}/Healer";

        var prefab = Resources.Load <GameObject>(pathToPrefab);

        var rotation = prefab.GetComponent <Transform>().rotation;

        if (prefab == null)
        {
            return;
        }

        var gameObject = Object.Instantiate(prefab, position, rotation);

        gameObject.name = $"{prefab.name}(SpatialOS: {entity.SpatialOSEntityId}, Worker: {workerType})";

        linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, gameObject);
    }
Example #4
0
        private GameObject NewGameObjectFromPrefab(GameObject prefab, SpatialOSEntity entity, Worker worker,
                                                   Vector3 pos = default(Vector3), Quaternion rot = default(Quaternion))
        {
            var go = Object.Instantiate(prefab, pos, rot);

            go.name = GetGameObjectName(prefab, entity, worker);
            gameObjectsCreated.Add(entity.SpatialOSEntityId, go);
            return(go);
        }
Example #5
0
            public void OnEntityCreated(string entityType, SpatialOSEntity entity, EntityGameObjectLinker linker)
            {
                var gameObject = new GameObject();

                gameObject.transform.position = Vector3.one;
                gameObject.transform.rotation = Quaternion.identity;
                gameObject.name = $"TestObject(SpatialOS: {entity.SpatialOSEntityId}, Worker: {workerType})";

                entityIdToGameObject.Add(entity.SpatialOSEntityId, gameObject);
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, gameObject);
            }
        public void OnEntityCreated(string entityType, SpatialOSEntity entity, EntityGameObjectLinker linker)
        {
            switch (entityType)
            {
            case PlayerEntityType:
                CreatePlayerGameObject(entity, linker);
                break;

            default:
                fallback.OnEntityCreated(entityType, entity, linker);
                break;
            }
        }
        private void CreatePlayerGameObject(SpatialOSEntity entity, EntityGameObjectLinker linker)
        {
            var owningWorker   = entity.GetComponent <OwningWorker.Component>();
            var serverPosition = entity.GetComponent <ServerMovement.Component>();

            var position = serverPosition.Latest.Position.ToVector3() + workerOrigin;

            var prefab     = owningWorker.WorkerId == workerId ? cachedAuthPlayer : cachedNonAuthPlayer;
            var gameObject = Object.Instantiate(prefab, position, Quaternion.identity);

            gameObjectsCreated.Add(entity.SpatialOSEntityId, gameObject);
            gameObject.name = $"{prefab.name}(SpatialOS {entity.SpatialOSEntityId}, Worker: {workerType})";
            linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, gameObject, componentsToAdd);
        }
        public void OnEntityCreated(SpatialOSEntity entity, EntityGameObjectLinker linker)
        {
            if (!entity.TryGetComponent <Metadata.Component>(out var metadata))
            {
                return;
            }

            if (metadata.EntityType == PlayerEntityType)
            {
                CreatePlayerGameObject(entity, linker);
                return;
            }

            fallback.OnEntityCreated(entity, linker);
        }
    public void OnEntityCreated(SpatialOSEntity entity, EntityGameObjectLinker linker)
    {
        if (!entity.HasComponent <Metadata.Component>())
        {
            return;
        }

        var prefabName = entity.GetComponent <Metadata.Component>().EntityType;

        if (prefabName.Equals(PlayerMetadata))
        {
            var clientInput = entity.GetComponent <PlayerInput.Component>();
            if (entity.GetComponent <EntityAcl.Component>().ComponentWriteAcl
                .TryGetValue(clientInput.ComponentId, out var clientMovementWrite))
            {
                var authority = false;
                foreach (var attributeSet in clientMovementWrite.AttributeSet)
                {
                    if (attributeSet.Attribute.Contains(workerIdAttribute))
                    {
                        authority = true;
                    }
                }

                var positionComp = entity.GetComponent <Position.Component>();
                var position     = positionComp.Coords.ToUnityVector();

                var prefab     = authority ? cachedAuthPlayer : cachedNonAuthPlayer;
                var gameObject = UnityEngine.Object.Instantiate(prefab, position, Quaternion.identity);

                gameObject.name = GetGameObjectName(prefab, entity, worker);

                Type[] componentsToAdd =
                {
                    typeof(UnityEngine.Transform),
                    typeof(Rigidbody),
                    typeof(MeshRenderer)
                };
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, gameObject, componentsToAdd);
                return;
            }
        }

        fallback.OnEntityCreated(entity, linker);
    }
Example #10
0
        public void OnEntityCreated(SpatialOSEntity entity, EntityGameObjectLinker linker)
        {
            if (!entity.HasComponent <Metadata.Component>())
            {
                return;
            }

            var isPlayer = entity.GetComponent <Metadata.Component>().EntityType == playerEntityType;

            if (isPlayer)
            {
                var go = NewGameObjectFromPrefab(cachedAuthPlayerPrefab, entity, worker);
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, go, componentsToAdd);
            }
            else
            {
                fallback.OnEntityCreated(entity, linker);
            }
        }
        private void CreatePlayerGameObject(SpatialOSEntity entity, EntityGameObjectLinker linker)
        {
            if (!entity.TryGetComponent <OwningWorker.Component>(out var owningWorker))
            {
                throw new InvalidOperationException("Player entity does not have the OwningWorker component");
            }

            Debug.Log("UNCOMMENT!");
            //var serverPosition = entity.GetComponent<ServerMovement.Component>();
            //var position = serverPosition.Latest.Position.ToVector3() + workerOrigin;
            var position = workerOrigin;

            var prefab     = owningWorker.WorkerId == workerId ? cachedAuthPlayer : cachedNonAuthPlayer;
            var gameObject = UnityEngine.Object.Instantiate(prefab, position, Quaternion.identity);

            gameObjectsCreated.Add(entity.SpatialOSEntityId, gameObject);
            gameObject.name = $"{prefab.name}(SpatialOS {entity.SpatialOSEntityId}, Worker: {workerType})";
            linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, gameObject, componentsToAdd);
        }
    public void OnEntityCreated(SpatialOSEntity entity, EntityGameObjectLinker linker)
    {
        if (!entity.HasComponent <Metadata.Component>())
        {
            return;
        }

        var prefabName = entity.GetComponent <Metadata.Component>().EntityType;

        if (prefabName.Equals(PlayerMetadata))
        {
            var clientMovement = entity.GetComponent <ClientMovement.Component>();
            if (entity.GetComponent <EntityAcl.Component>().ComponentWriteAcl
                .TryGetValue(clientMovement.ComponentId, out var clientMovementWrite))
            {
                var authority = false;
                foreach (var attributeSet in clientMovementWrite.AttributeSet)
                {
                    if (attributeSet.Attribute.Contains(workerIdAttribute))
                    {
                        authority = true;
                    }
                }

                var serverPosition = entity.GetComponent <ServerMovement.Component>();
                var position       = serverPosition.Latest.Position.ToVector3() + worker.Origin;

                var prefab     = authority ? cachedAuthPlayer : cachedNonAuthPlayer;
                var gameObject = Object.Instantiate(prefab, position, Quaternion.identity);

                gameObjectsCreated.Add(entity.SpatialOSEntityId, gameObject);
                gameObject.name = GetGameObjectName(prefab, entity, worker);
                linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, gameObject, componentsToAdd);
                return;
            }
        }

        fallback.OnEntityCreated(entity, linker);
    }
    public void OnEntityCreated(string entityType, SpatialOSEntity entity, EntityGameObjectLinker linker)
    {
        if (!entity.HasComponent <Metadata.Component>())
        {
            return;
        }

        switch (entity.GetComponent <Metadata.Component>().EntityType)
        {
        case "Player":
            CreatePlayer(entity, linker);
            break;

        case "Healer":
            CreateHealer(entity, linker);
            break;

        default:
            fallbackCreator.OnEntityCreated(entity.GetComponent <Metadata.Component>().EntityType, entity, linker);
            break;
        }
    }
Example #14
0
        public void OnEntityCreated(SpatialOSEntity entity, EntityGameObjectLinker linker)
        {
            if (!entity.HasComponent <Metadata.Component>())
            {
                return;
            }

            var prefabName = entity.GetComponent <Metadata.Component>().EntityType;

            if (prefabName.Equals(PlayerMetadata))
            {
                var clientMovement = entity.GetComponent <Position.Component>();
                if (entity.GetComponent <EntityAcl.Component>().ComponentWriteAcl
                    .TryGetValue(clientMovement.ComponentId, out var clientMovementWrite))
                {
                    var authority = false;
                    foreach (var attributeSet in clientMovementWrite.AttributeSet)
                    {
                        if (attributeSet.Attribute.Contains(_workerIdAttribute))
                        {
                            authority = true;
                        }
                    }

                    var serverPosition = entity.GetComponent <Position.Component>();
                    var position       = serverPosition.Coords.ToUnityVector() + _worker.Origin;

                    var prefab     = authority ? _authPlayerPrefab : _nonAuthPlayerPrefab;
                    var gameObject = Object.Instantiate(prefab, position, Quaternion.identity);

                    _gameObjectsCreated.Add(entity.SpatialOSEntityId, gameObject);
                    gameObject.name = GetGameObjectName(prefab, entity, _worker);
                    linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, gameObject, typeof(Transform));
                    return;
                }
            }

            _fallback.OnEntityCreated(entity, linker);
        }
Example #15
0
    public void OnEntityCreated(SpatialOSEntity entity, EntityGameObjectLinker linker)
    {
        if (!entity.HasComponent <Metadata.Component>())
        {
            return;
        }
        Metadata.Component metadata = entity.GetComponent <Metadata.Component>();
        bool isCube = metadata.EntityType.Equals("Cube");

        // TODO: check if it is a Cube
        if (isCube)
        {
            string     pathToPrefab   = $"Prefabs/{_workerType}/Common/Player";
            Object     prefab         = Resources.Load(pathToPrefab);
            GameObject cubeGameObject = (GameObject)Object.Instantiate(prefab);

            linker.LinkGameObjectToSpatialOSEntity(entity.SpatialOSEntityId, cubeGameObject);
        }
        else
        {
            _fallbackCreator.OnEntityCreated(entity, linker);
        }
    }
Example #16
0
 public void OnEntityCreated(SpatialOSEntity entity, EntityGameObjectLinker linker)
 {
     throw new System.NotImplementedException();
 }
Example #17
0
 public void OnEntityCreated(string entityType, SpatialOSEntity entity, EntityGameObjectLinker linker)
 {
     throw new NotImplementedException();
 }
        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);
            }
        }
Example #19
0
 private static string GetGameObjectName(GameObject prefab, SpatialOSEntity entity, Worker worker)
 {
     return(string.Format("{0}(SpatialOS {1}, Worker: {2})", prefab.name, entity.SpatialOSEntityId, worker.WorkerType));
 }