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); }
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)); }
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)); }
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); } }
public void IsOwningWorker_should_return_false_if_entity_does_not_exist() { Assert.IsFalse(PlayerLifecycleHelper.IsOwningWorker(new EntityId(10), worker.World)); }