Beispiel #1
0
        public LevelGeometry()
        {
            _tunnelElementsQueue = new Queue <Tunnel>();

            // Get position.
            Vec3 firstTunnelPos = EntitySystem.Entity.ByName("TunnelSpawnPoint").Position;

            _lastTunnel       = Tunnel.Create(firstTunnelPos, 0);
            _lastTunnel.Speed = LevelGeometry.GlobalGeomSpeed;

            _tunnelElementsQueue.Enqueue(_lastTunnel);

            _rotatingRingOne = EntitySystem.Entity.ByName("ring_2");
            _rotatingRingTwo = EntitySystem.Entity.ByName("ring_3");
        }
Beispiel #2
0
        /// <summary>
        /// Handles spawning of new tunnel elements and despawning of tunnel elements that are out of view.
        /// </summary>
        public void UpdateGeometry()
        {
            // Get first tunnel in Queue without removing the tunnel from the Queue.
            Tunnel firstTunnel = _tunnelElementsQueue.Peek();

            if (firstTunnel.Position.y < 450)
            {
                // Remove the tunnel from the Queue.
                _tunnelElementsQueue.Dequeue();

                // Purge door with related geometry (Door, Lights, ...).
                firstTunnel.Purge();
            }

            Vector3 lastTunnelPos = _lastTunnel.Position;

            if (lastTunnelPos.y < 700)
            {
                // Spawn new tunnel with door.
                int newTunnelNumber = _lastTunnelNumber;

                // Ensure the next tunnel element is different from the previous one.
                while (newTunnelNumber == _lastTunnelNumber)
                {
                    newTunnelNumber = Random.Next(4);
                }

                _lastTunnelNumber = newTunnelNumber;
                _lastTunnel       = Tunnel.Create(new Vector3(lastTunnelPos.x, (lastTunnelPos.y + 100f), lastTunnelPos.z), newTunnelNumber);
                _lastTunnel.Speed = LevelGeometry.GlobalGeomSpeed;
                _tunnelElementsQueue.Enqueue(_lastTunnel);
            }

            // Update background satelite rings
            RotateSatelliteRings();
        }