private GameObject SpawnChain(SpawnItemType spawnItemType, List <GameObject> spawnPositions = null) { _spawnChainId++; if (_spawnChainId >= 20) { _spawnChainId = 0; } int spawnChainAmount = Random.Range(5, 12); _spawnChainAmount[_spawnChainId] = spawnChainAmount; _spawnChainCount[_spawnChainId] = 0; CurrentSpawnChain _currentSpawnChain = new CurrentSpawnChain(); _currentSpawnChain.amountLeft = spawnChainAmount; _currentSpawnChain.spawnItemType = spawnItemType; _currentSpawnChain.spawnItemGameObject = GetRandomSpawnPositionGameObject(spawnPositions); _currentSpawnChain.spawnItemUpGameObject = GetSpawnPositionUpGameObject(_currentSpawnChain.spawnItemGameObject); _currentSpawnChain.spawnItemDownGameObject = GetSpawnPositionDownGameObject(_currentSpawnChain.spawnItemGameObject); //_currentSpawnChain.spawnOrder = CreateRandomSpawnOrderForChain(spawnChainAmount); _currentSpawnChain.amountTotal = spawnChainAmount; SequenceSpawnChain(_currentSpawnChain); return(_currentSpawnChain.spawnItemGameObject); }
private void SequenceSpawnChain(CurrentSpawnChain _currentSpawnChain) { int amount = _currentSpawnChain.amountTotal; Sequence _spawnChainNextSequence = DOTween.Sequence(); for (int i = 0; i < amount; i++) { int j = i; bool isLastInChain = (amount - 1) == j ? true : false; GameObject spawnItemGameObject = GetSpawnItemGameObject(_currentSpawnChain.spawnItemType.name); gameObject.transform.DOKill(); GameObject _chainSpawnItemGameObject = _currentSpawnChain.spawnItemGameObject; SpawnObject(spawnItemGameObject, _chainSpawnItemGameObject); spawnItemGameObject.GetComponent <SpriteRenderer>().enabled = true; spawnItemGameObject.GetComponent <BoxCollider2D>().enabled = true; spawnItemGameObject.SendMessage("SetIsLastInChain", isLastInChain, SendMessageOptions.DontRequireReceiver); HellSpawn.SpawnMovingParameters spawnMovingParameters = new HellSpawn.SpawnMovingParameters(); spawnMovingParameters.flyTime = GetFlyTime(spawnItemGameObject); spawnMovingParameters.hellSpawnSpeed = GetHellSpawnTimeScale(); Tween _chainItemTween = spawnItemGameObject.GetComponent <HellSpawn>(). GetMovingTween(spawnMovingParameters, false, true); _spawnChainNextSequence.Insert(_spawnChainTime * j, _chainItemTween); //_spawnChainNextSequence.InsertCallback(_spawnChainTime * j, () => SpawnChainNext(_currentSpawnChain, _spawnChainNextSequence)); //_spawnChainNextSequence.AppendInterval(_spawnChainTime); } //_spawnChainNextSequence.SetLoops(_currentSpawnChain.amountTotal); _spawnChainNextSequence.SetId(SPAWN_CHAIN_SEQUENCE); _spawnChainNextSequence.timeScale = GetHellSpawnTimeScale(); //_spawnChainNextSequence.SetRecyclable(true); }
private void SpawnChainNext(CurrentSpawnChain _currentSpawnChain, Sequence spawnChainSequence) { bool isLastInChain = (spawnChainSequence.Loops() - 1) == spawnChainSequence.CompletedLoops() ? true : false; HellSpawn.SpawnMovingParameters spawnMovingParameters = new HellSpawn.SpawnMovingParameters(); spawnMovingParameters.flyTime = GetFlyTime(_currentSpawnChain.spawnItemGameObject); spawnMovingParameters.hellSpawnSpeed = GetHellSpawnTimeScale(); _currentSpawnChain.spawnMovingParameters = spawnMovingParameters; GameObject spawnItemGameObject = GetSpawnItemGameObject(_currentSpawnChain.spawnItemType.name); //detect position for item in chain /* * GameObject _chainSpawnItemGameObject = null; * switch (_currentSpawnChain.spawnOrder[spawnChainSequence.CompletedLoops()]) { * case "main": * _chainSpawnItemGameObject = _currentSpawnChain.spawnItemGameObject; * break; * case "up": * _chainSpawnItemGameObject = _currentSpawnChain.spawnItemUpGameObject; * break; * case "down": * _chainSpawnItemGameObject = _currentSpawnChain.spawnItemDownGameObject; * break; * } * if (_chainSpawnItemGameObject == null) { * _chainSpawnItemGameObject = _currentSpawnChain.spawnItemGameObject; * } */ GameObject _chainSpawnItemGameObject = _currentSpawnChain.spawnItemGameObject; SpawnObjectAndStartMoving(spawnItemGameObject, _chainSpawnItemGameObject, _currentSpawnChain.spawnMovingParameters); spawnItemGameObject.SendMessage("SetIsLastInChain", isLastInChain, SendMessageOptions.DontRequireReceiver); _currentSpawnChain.amountLeft--; }