public void Execute() { int newestTickNumber = snapshotBuffer.GetNewestTickNumber(); if (newestTickNumber == lastShowedTickNumber) { return; } lastShowedTickNumber = newestTickNumber; SnapshotWithLastInputId newestGameState = snapshotBuffer.GetNewestSnapshot(); HashSet <ushort> needDelete = new HashSet <ushort>(dictionary.Keys); foreach (var pair in newestGameState.transforms) { ushort entityId = pair.Key; var viewTransform = pair.Value; Vector3 position = viewTransform.GetPosition(); Quaternion rotation = Quaternion.AngleAxis(viewTransform.Angle, Vector3.up); if (!vectorValidator.TryValidate(position)) { log.Debug("Проблема позиции"); continue; } needDelete.Remove(entityId); //Такой обьект уже есть на сцене if (dictionary.TryGetValue(entityId, out var gameObject)) { //Обновить gameObject.transform.position = position; gameObject.transform.rotation = rotation; } else { //Создать GameObject prefab = clientPrefabsStorage.GetPrefab(viewTransform.viewTypeEnum); GameObject go = physicsSpawner.Spawn(prefab, position, rotation); dictionary.Add(entityId, go); } } //Удалить лишние объекты foreach (ushort entityId in needDelete) { Object.Destroy(dictionary[entityId]); } }
public void Spawn(ServerGameEntity entity) { ViewTypeEnum viewType = entity.viewType.value; Vector3 spawnPosition = entity.spawnTransform.position; Quaternion spawnRotation = entity.spawnTransform.rotation; GameObject prefab = prefabStorage.GetPrefab(viewType); GameObject go = physicsSpawner.Spawn(prefab, spawnPosition, spawnRotation); go.Link(entity); entity.AddTransform(go.transform); Rigidbody rigidbody = go.GetComponent <Rigidbody>(); entity.AddRigidbody(rigidbody); entity.AddView(go); //todo не забыть убрать компонент // entity.RemoveSpawnTransform(); }
public void Spawn(ServerGameEntity entity) { ViewTypeEnum viewType = entity.viewType.value; Vector3 spawnPosition = entity.spawnTransform.position; Quaternion spawnRotation = entity.spawnTransform.rotation; GameObject prefab = prefabStorage.GetPrefab(viewType); GameObject go = physicsSpawner.Spawn(prefab, spawnPosition, spawnRotation); go.layer = playersLayerNumber; go.Link(entity); entity.AddView(go); entity.AddTransform(go.transform); Rigidbody rigidbody = go.GetComponent <Rigidbody>(); entity.AddRigidbody(rigidbody); shootingPointsHelper.AddShootingPoints(go, entity); Collider[] colliders = go.GetComponents <Collider>(); entity.AddWarshipColliders(colliders); }