// il parametro init serve per capire se è il primo checkbuffer che inizializza la lista per inizializzare il // timeSequence in base alla prima ES void checkBuffer(bool init = false) { for (int i = spawnBuffer.Count; i < bufferSize; i++) { ESInfo info = new ESInfo(); info.positioning = getRandomPositioning(); info.movetype = getRandomMoveType(); info.timeToCenter = getRandomTimeToCenter(); info.count = getRandomBurst(); info.verse = getRandomVerse(); if (init) { init = false; // da fare solo per la prima ES timeSequence = info.timeToCenter; } //setto quando dovrà spawnare info.spawnTime = timeSequence - info.timeToCenter; //calcolo l'offset e lo aggiungo alla sequenza temporale per il calcolo del momento di spawn della prossima es timeSequence += spawnOffset.Evaluate(timeSinceGameStart) + (info.count - 1) * burstOffset; spawnBuffer.Add(info); } }
void spawn(ESInfo info) { EnergyShape[] esList = null; //posizionamento switch (info.positioning) { case Positioning.Standard: esList = standard(info.count); break; case Positioning.Parallel: esList = parallel(info.count); break; case Positioning.Perpendicular: esList = perpendicular(info.count); break; } //comportamento for (int i = 0; i < esList.Length; i++) { EnergyShape es = esList[i]; es.moveType = info.movetype; es.timeToCenter = info.timeToCenter; es.isFast = info.timeToCenter == timeToCenter.fast ? true : false; es.spiralAngularSpeed = es.spiralAngularSpeed * info.verse; // verse è 1 o -1 quindi determina il verso di rotazione es.Prepare(); //reinizializza l'ES nel caso sia stata riutilizzata dal pool } }