// Update is called once per frame
    public override void FixedUpdate()
    {
        float deltaTime = Time.fixedDeltaTime;

        AddForce(ForceGenerator3D.GenerateForce_Gravity(Mass, m_Gravity, Vector3.up));
        if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.E))
        {
            AddThrust(deltaTime, new Vector3(-m_ThrusterDistFromCenter, 0));
        }
        if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.E))
        {
            AddThrust(deltaTime, new Vector3(m_ThrusterDistFromCenter, 0));
        }
        if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.E))
        {
            AddThrust(deltaTime, new Vector3(0, 0, m_ThrusterDistFromCenter));
        }
        if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.E))
        {
            AddThrust(deltaTime, new Vector3(0, 0, -m_ThrusterDistFromCenter));
        }
        if (m_LastContact != null)
        {
            HandleJustCollided(deltaTime);
            m_LastContact = null;
        }

        if (Vector3.Dot(transform.up, Vector3.up) < 0 && m_LastContact == null)
        {
            m_UpsidedownSinceContact = true;
        }

        base.FixedUpdate();
    }
    public override void OnCollision(HullCollision3D coll)
    {
        float angle = Mathf.Acos(Vector3.Dot(transform.up, Vector3.up));

        if (angle < m_MaxAngleOnLand && m_Velocity.magnitude < m_MaxSpeedOnLand)
        {
            if (LunarLanderGameManager.m_Instance != null && m_UpsidedownSinceContact)
            {
                LunarLanderGameManager.m_Instance.m_Score++;
            }
        }
        else
        {
            LunarLanderGameManager.m_Instance.ResetPlayer();
        }
        m_Fuel = m_StartFuel;
        m_UpsidedownSinceContact = false;
    }
Esempio n. 3
0
 public virtual void FixedUpdate()
 {
     for (int i = 0; i < mPhysicsObjects.Count; i++)
     {
         for (int j = i + 1; j < mPhysicsObjects.Count; j++)
         {
             Transform maxParentA = mPhysicsObjects[i].transform;
             while (maxParentA.parent != null)
             {
                 maxParentA = maxParentA.parent;
             }
             Transform maxParentB = mPhysicsObjects[i + 1].transform;
             while (maxParentB.parent != null)
             {
                 maxParentB = maxParentA.parent;
             }
             if (maxParentA != maxParentB)
             {
                 //bool coll = mPhysicsObjects[i].detectCollision(mPhysicsObjects[j]);
                 HullCollision3D collision = mPhysicsObjects[i].DetectCollision(mPhysicsObjects[j]);
                 if (collision != null)
                 {
                     if (collision.a is LunarLander3DController)
                     {
                         (collision.a as LunarLander3DController).m_LastContact = collision;
                     }
                     if (collision.b is LunarLander3DController)
                     {
                         (collision.b as LunarLander3DController).m_LastContact = collision;
                     }
                     if (!(collision.a.m_IsTrigger || collision.b.m_IsTrigger))
                     {
                         collision.a.OnCollision(collision); //info is still valid before resolved called
                     }
                     collision.b.OnCollision(collision);
                     collision.Resolve(Time.fixedDeltaTime);
                 }
             }
         }
     }
 }
Esempio n. 4
0
 public override void OnCollision(HullCollision3D coll)
 {
 }
Esempio n. 5
0
 public override void OnCollision(HullCollision3D coll)
 {
     base.OnCollision(coll);
     LunarLanderGameManager.m_Instance.ResetPlayer();
 }
Esempio n. 6
0
 public abstract void OnCollision(HullCollision3D coll);