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