Exemple #1
0
    private bool[] m_col;                         // bei dem Objekt, bei dem es kollidiert --> true. daraus wird "m_CollisionRocketGround" auf true gesetzt

    // Use this for initialization
    void Start()
    {
        // ClacCollosion Array erstellen
        m_CalcCollision = new bool[m_StaticObjects.GetLength(0)];

        // m_col array erstellen
        m_col = new bool[m_StaticObjects.GetLength(0)];

        // Cuboid Array erstellen
        m_StaticCubes = new Cuboid[m_StaticObjects.GetLength(0)];

        // Material Rot für wenn Kollidiert
        m_Material = GetComponent <Renderer>().material;

        m_Movement         = 5f;
        m_MovementRotation = 0;

        // Eckpunkte des Bodens
        for (int i = 0; i < m_StaticObjects.GetLength(0); i++)
        {
            m_StaticCubes[i] = new Cuboid(CubeEckPosition.GetCubeVectorPosition(m_StaticObjects[i]));
        }
    }
Exemple #2
0
    // Update is called once per frame
    void Update()
    {
        // Wenn Fallgeschwindigkeit zu Hoch war beim Auftritt auf den Boden
        if (m_Crash)
        {
            return;
        }

        // Abfrage ob Taste gedrückt wurde
        if (Input.GetKey(KeyCode.Space))
        {
            // wenn Space gedrückt wurde
            // rise
            m_Fall += m_Thrust * m_Thrust;
        }
        else
        {
            // wenn Space nicht gedrückt wurde
            // fall
            // überprüfen ob Rakete auf dem Boden ist
            if (!m_CollisionRocketGround && !m_Crash)
            {
                m_Fall -= m_Gravity * m_Gravity;
            }
            else
            {
                m_Fall = 0;
            }
        }

        m_CollisionRocketGround = false;


        // Get position of Rocket
        m_VectorDLL = VectorUmwandeln(transform.position);

        // Rakete nach links und rechts bewegen
        if (Input.GetKey(KeyCode.A))
        {
            // X -
            m_VectorDLL.X -= m_Movement;
        }
        if (Input.GetKey(KeyCode.D))
        {
            // X +
            m_VectorDLL.X += m_Movement;
        }

        // Rakete rotieren
        if (Input.GetKey(KeyCode.Q))
        {
            // Y -
            m_MovementRotation += m_Movement / 90;
        }
        if (Input.GetKey(KeyCode.E))
        {
            // Y +
            m_MovementRotation += -(m_Movement / 90);
        }


        // cap rise speed
        if (m_Fall >= m_MaxRiseSpeed)
        {
            m_Fall = m_MaxRiseSpeed;
        }

        // Berechne die Fallgeschwindigkeit der Y-Achse hinzu
        m_VectorDLL.Y += m_Fall;


        // Eckpunkte der Rakete herausfinden + setzen
        m_CubeRocket = new Cuboid(CubeEckPosition.GetCubeVectorPosition(this.gameObject));


        // set bool whether to calculate collision or not
        for (int i = 0; i < m_CalcCollision.GetLength(0); i++)
        {
            Vector tempRocket        = VectorUmwandeln(this.transform.position);
            Vector tempStaticObjects =
                tempRocket -
                new Vector(
                    m_StaticObjects[i].transform.position.x,
                    m_StaticObjects[i].transform.position.y,
                    m_StaticObjects[i].transform.position.z)
            ;

            if ((tempRocket.X >= tempStaticObjects.X - 250f && tempRocket.X <= tempStaticObjects.X + 250) ||
                (tempRocket.Y >= tempStaticObjects.Y - 500f && tempRocket.Y <= tempStaticObjects.Y + 500))
            {
                m_CalcCollision[i] = true;
            }
            else
            {
                m_CalcCollision[i] = false;
            }
        }
        // check collision of static objects
        for (int i = 0; i < m_StaticObjects.GetLength(0); i++)
        {
            if (m_CalcCollision[i] == false)
            {
                continue;
            }

            m_col[i] = Collisions.CuboidInCuboid(m_CubeRocket, m_StaticCubes[i]);

            // Collision setzen
            if (m_col[i])
            {
                m_CollisionRocketGround = true;
            }
        }

        // wenn nichts kollidiert -> CollisionRocketGround = false
        bool tempVarForNothing = false;

        for (int i = 0; i < m_col.GetLength(0); i++)
        {
            if (m_col[i])
            {
                tempVarForNothing = true;
            }
        }
        if (tempVarForNothing = false)
        {
            m_CollisionRocketGround = false;
        }

        // überprüft ob die Rakete halbwegs gerade aufgekommen ist (+-10 Grad)
        if (m_CollisionRocketGround)
        {
            float checkRot = this.gameObject.transform.rotation.eulerAngles.z;
            checkRot %= 90f;
            if (checkRot < 80f && checkRot > 10f)
            {
                m_Crash = true;
            }
        }

        // fall check
        if (m_Fall <= m_FallCrashValue && m_CollisionRocketGround)
        {
            m_Crash = true;
        }

        // Position setzen
        if (!m_CollisionRocketGround)
        {
            // setze neue Position
            transform.position = VectorUmwandeln(m_VectorDLL);

            // setzt neue Rotation
            transform.localRotation = Quaternion.Euler(0, 0, transform.rotation.eulerAngles.z + m_MovementRotation);
        }

        // Wenn Rakete sanft landet
        else if (m_CollisionRocketGround && !m_Crash)
        {
            // setze neue Position falls leertaste gedrückt wurde
            if (Input.GetKey(KeyCode.Space))
            {
                transform.position = VectorUmwandeln(m_VectorDLL);
            }

            // setze rotationsgeschwindigkeit zurück
            m_MovementRotation = 0;
        }

        if (m_Crash)
        {
            m_Material.CopyPropertiesFromMaterial(m_Red);
            //m_Material = m_Red;
        }
    }