public void UnregisterObject(SaveableBehaviour obj) { if (_currentObjects.ContainsKey(obj.GlobalId)) { _currentObjects.Remove(obj.GlobalId); } Debug.Log(obj.name + " was unregistered with id " + obj.GlobalId); }
public void RegisterObject(SaveableBehaviour obj) { obj.Init(_objectCount++); if (!_currentObjects.ContainsKey(obj.GlobalId)) { _currentObjects.Add(obj.GlobalId, obj); } Debug.Log(obj.name + " was registered with id " + obj.GlobalId); }
public void OnTimeScrolled(int time) { // Восстанавливаем состояние на данное время if (_timeline.Length < time || _timeline[time] == null || time == _timeTick) { return; } Dictionary <int, object> selectedFrame = _timeline[time]; // Сначала удалим ненужные объекты foreach (int key in _currentObjects.Keys.ToList()) // Маленький лайфхак, чтобы не нарваться на эксепшн о попытке изменения коллекции в foreach { if (!selectedFrame.ContainsKey(key)) { Destroy(_currentObjects[key].gameObject); _currentObjects.Remove(key); } } foreach (KeyValuePair <int, object> kvp in selectedFrame) { if (!_currentObjects.ContainsKey(kvp.Key)) { SaveableBehaviour b = null; switch (SaveableBehaviour.DefineType(kvp.Value)) { case ObjectType.Goblin: if (_enemyManager != null) { b = _enemyManager.SpawnEnemy(Vector3.zero); } break; case ObjectType.Cannon: // Напомню, пушка в динамике не создаётся. break; case ObjectType.Bullet: // На данный момент тут отсутствует что-то типа BulletSpawnera, поэтому приходится создавать вручную // Но в теории можно, например, обращаться к скрипту типа CannonBehaviour и дёргать // у него метод CreateBullet, который вернёт gameObject пули GameObject go = GameObject.Instantiate(_bulletPrefab); b = go.GetComponent <SaveableBehaviour>(); break; default: Debug.LogError("Saved data for id " + kvp.Key + "can't be defined!"); break; } if (b != null) { b.GlobalId = kvp.Key; _currentObjects.Add(kvp.Key, b); } } } // Сделаем сначала SetState foreach (KeyValuePair <int, SaveableBehaviour> pair in _currentObjects) { pair.Value.SetState(selectedFrame[pair.Key]); } // Ииии LateSetState foreach (SaveableBehaviour behaviour in _currentObjects.Values) { behaviour.LateSetState(); } _timeTick = time; }