Beispiel #1
0
 /// <summary>
 /// Fixeds the update.
 /// </summary>
 void FixedUpdate()
 {
     if (timer > spawnTime)
     {
         Destroy(transform.gameObject);
     }
     else
     {
         timer += Time.fixedDeltaTime;
         float angle = SpaceObjectDirection.GetAngle();
         int   allowedSpawns;
         if (spawnTime != 0f)
         {
             allowedSpawns = Mathf.RoundToInt(timer * staggeredSpawn / spawnTime) - totalSpawns;
         }
         else
         {
             allowedSpawns = staggeredSpawn;
         }
         // Spawn for all multispawns
         for (int i = 0; i < allowedSpawns; i++)
         {
             for (int j = 0; j < multiSpawn; j++)
             {
                 Spawn(j, angle);
             }
             totalSpawns += 1;
         }
     }
 }
Beispiel #2
0
    // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    // |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    // Use this for internal initialization
    void Awake()
    {
        // Make FixedUpdate select the next wave (or generate it)
        state = WaveState.Waiting;
        SpaceObjectDirection.SetAngle(initialAngle);
        SpaceObjectDirection.SetAngularSpeed(fullCircleRotationTime);
        SeededRandom.SetSeed(initialSeed);
        lastSpaceObjectContainer = this;
        waveIndex = Mathf.Min(waves.Length - 1, Global.startWave);
    }
Beispiel #3
0
    /// <summary>
    /// Spawns object(s).
    /// </summary>
    void MultiSpawn()
    {
        // Get base range
        float min = Mathf.Abs(maxAngleOfEntryOffset - minAngleOfEntryOffset) / 2f;
        float max = -min;

        // Get angular distance between object spawns
        float separation = Mathf.Abs(maxAngleOfEntryOffset - minAngleOfEntryOffset) + angularSeparation;

        // Get starting angle
        float baseAngle = angleOfEntry;

        switch (angleOfEntryType)
        {
        // AngleOfEntryType.FixedAngle not needed
        case AngleOfEntryType.WaveDirection:
            baseAngle = SpaceObjectDirection.GetAngle();
            break;

        case AngleOfEntryType.RandomAngle:
            baseAngle = SeededRandom.Range(0f, Mathf.PI * 2f);
            break;
        }

        baseAngle += (Mathf.Abs(minAngleOfEntryOffset) + max) * SeededRandom.Sign();
        float angle = baseAngle + SeededRandom.Range(min, max);

        // We have our start position
        Vector3 start = Screen.GetRadiusEdge(angle);

        if (angleOfEntryType == AngleOfEntryType.FixedPosition)
        {
            start = fixedPosition;
        }
        else if (angleOfEntryType == AngleOfEntryType.RandomPosition)
        {
            start = Screen.RandomPositionInView(4f);
        }

        // Decide on target
        Vector3 target          = DecideTarget(start);
        float   baseTargetAngle = GetTargetAngle(start, target);
        float   targetAngle     = SeededRandom.Range(minTargetOffset, maxTargetOffset) * SeededRandom.Sign() + baseTargetAngle;

        // Always spawn 1
        Spawn(start, targetAngle);

        // Loop through all spawns
        for (int i = 1; i < SeededRandom.Range(minMultiSpawns, maxMultiSpawns + 1); i++)
        {
            // Get positional modifier
            int modifier = (i + 1) / 2;
            if (i % 2 == 0)
            {
                modifier *= -1;
            }
            // Base angle for current spawn
            angle = (separation * modifier) + baseAngle + SeededRandom.Range(min, max);
            start = Screen.GetRadiusEdge(angle);

            // Do we need to pick another base angle?
            if (!parallel)
            {
                target          = DecideTarget(start);
                baseTargetAngle = GetTargetAngle(start, target);
            }

            targetAngle = SeededRandom.Range(minTargetOffset, maxTargetOffset) * SeededRandom.Sign() + baseTargetAngle;

            Spawn(start, targetAngle);
        }
    }