コード例 #1
0
    public virtual void Pickup(InteriorPlayer holder)
    {
        isHeld      = true;
        this.holder = holder;

        UnsecureItem();
    }
コード例 #2
0
    private void Awake()
    {
        InteriorManager.interiorManager = this;

        occupiedDebrisLocations     = new GameObject[interiorLayout.DebrisLocations.Length];
        occupiedSteamLocations      = new GameObject[interiorLayout.SteamVentLocations.Length];
        occupiedHullBreachLocations = new GameObject[interiorLayout.HullBreachLocations.Length];

        if (interiorPlayer == null)
        {
            interiorPlayer = GameObject.FindObjectOfType <InteriorPlayer>();
        }
        if (interiorCamera == null)
        {
            interiorCamera = GameObject.Find("InteriorCamera");
        }
        if (interiorCameraQuad == null)
        {
            interiorCameraQuad = GameObject.Find("InteriorCameraQuad");
        }
        if (interiorShipMap == null)
        {
            interiorShipMap = GameObject.Find("ShipInteriorMap");
        }

        GameObject exteriorShipObj = GameObject.Find("ExteriorShip");

        if (exteriorShip == null && exteriorShipObj != null)
        {
            exteriorShip = exteriorShipObj.GetComponent <ExteriorShip>();
        }

        aSource = GetComponent <AudioSource>();
    }
コード例 #3
0
    private void Start()
    {
        if (scoreText == null)
        {
            scoreText = GameObject.Find("Score Text").GetComponent <TextMeshProUGUI>();
        }

        if (exteriorPlayer == null)
        {
            exteriorPlayer = GameObject.FindObjectOfType <ExteriorShip>();
        }
        exteriorPlayer.shipHitEvent.AddListener(PlayerShipHit);
        // todo subscrib to events

        if (interiorPlayer == null)
        {
            interiorPlayer = GameObject.FindObjectOfType <InteriorPlayer>();
        }
        // todo subscrib to events

        ExteriorManager exteriorManager = GameObject.FindObjectOfType <ExteriorManager>();

        if (exteriorManager != null)
        {
            exteriorManager.GetSpawnManager().EnemyBlownUpEvent.AddListener(OnEnemyBlownUp);
        }
        else
        {
            Debug.Log("ScoreManager: Unable to find game object with type 'ExteriorManager' to add events listeners to");
        }

        UpdatePastMissionsScore();

        UpdateScoreText();
    }
コード例 #4
0
ファイル: SteamVent.cs プロジェクト: mike1072/GGJ2020
    private void Update()
    {
        Transform t = transform;

        Vector2 center = t.position + t.up * distance / 2f;

        Debug.DrawLine(t.position, t.position + (t.up * distance));
        Debug.DrawLine(center, center + (Vector2)(t.right * spread / 2f));
        Collider2D[] hitColliders = Physics2D.OverlapCapsuleAll(center, new Vector2(spread, distance), CapsuleDirection2D.Vertical, 0); //OverlapCircleAll(transform.position, targetingRadius);

        Vector2 dir = ((t.position + (t.up * distance)) - t.position).normalized;

        //Debug.Log("pos = " + t.position.ToString() + " up *dist = " + (t.up * distance).ToString() + " normalized dir = " + dir.ToString());

        int i = 0;

        while (i < hitColliders.Length)
        {
            //don't extinguish past wall
            bool           hitWall = false;
            RaycastHit2D[] hit     = Physics2D.LinecastAll(t.position, hitColliders[i].transform.position);
            for (int j = 0; j < hit.Length; j++)
            {
                if (hit[j].transform.tag == "Wall" || hit[j].transform.tag == "Debris")
                {
                    hitWall = true;
                    break;
                }
            }

            if (!hitWall)
            {
                if (hitColliders[i].tag == "Player")
                {
                    InteriorPlayer p = hitColliders[i].GetComponent <InteriorPlayer>();

                    float pDist = ((Vector2)hitColliders[i].transform.position - (Vector2)t.position).magnitude;
                    if (pDist < distance / 0.6f)
                    {
                        p.DropItem();
                    }
                    // TODO: Scale push with how close they're to the vent
                    p.PushInDir(dir, push);
                }
                else
                {
                    Pushable p = hitColliders[i].GetComponent <Pushable>();
                    if (p != null)
                    {
                        float pDist = ((Vector2)hitColliders[i].transform.position - (Vector2)t.position).magnitude;
                        // TODO: Scale push with how close they're to the vent
                        p.PushInDir(dir, push);
                    }
                }
            }
            i++;
        }
    }
コード例 #5
0
    private void OnCollisionEnter2D(Collision2D collision)
    {
        Vector2 dir;

        if (collision.gameObject.tag == "Player")
        {
            InteriorPlayer p = collision.gameObject.GetComponent <InteriorPlayer>();
            p.DropItem();

            dir = (transform.position - p.transform.position).normalized;

            ExteriorManager.exteriorManager.GetSpawnManager().JettisonObject(collision.gameObject, dir);
        }
        else
        {
            Pushable p = collision.gameObject.GetComponent <Pushable>();
            if (p != null)
            {
                PickupItem pi = collision.gameObject.GetComponent <PickupItem>();
                if (pi == null)
                {
                    pi = collision.gameObject.GetComponentInChildren <PickupItem>();
                }
                if (pi == null && collision.gameObject.transform.parent != null)
                {
                    pi = collision.gameObject.transform.parent.GetComponent <PickupItem>();
                }

                if (pi != null && pi.IsHeld) // don't jettison held items. Wait until the player is jettisoned haha!
                {
                    heldItemsTouching.Add(pi);
                }
                else
                {
                    dir = (transform.position - p.transform.position).normalized;
                    ExteriorManager.exteriorManager.GetSpawnManager().JettisonObject(collision.gameObject, dir);
                }
            }
        }
    }
コード例 #6
0
    private void Start()
    {
        if (scoreText == null)
        {
            scoreText = GameObject.Find("Score Text").GetComponent <TextMeshProUGUI>();
        }

        if (exteriorPlayer == null)
        {
            exteriorPlayer = GameObject.FindObjectOfType <Ship>();
        }
        exteriorPlayer.shipHitEvent.AddListener(PlayerShipHit);
        // todo subscrib to events

        if (interiorPlayer == null)
        {
            interiorPlayer = GameObject.FindObjectOfType <InteriorPlayer>();
        }
        // todo subscrib to events

        UpdatePastMissionsScore();

        UpdateScoreText();
    }
コード例 #7
0
 public virtual void Drop()
 {
     isHeld      = false;
     this.holder = null;
 }
コード例 #8
0
    private void Update()
    {
        Transform t = transform;

        Vector2 center = t.position + t.up * distance / 2f;

        Debug.DrawLine(t.position, t.position + (t.up * distance));
        Debug.DrawLine(center, center + (Vector2)(t.right * spread / 2f));
        Collider2D[] hitColliders = Physics2D.OverlapCapsuleAll(center, new Vector2(spread, distance), CapsuleDirection2D.Vertical, 0); //OverlapCircleAll(transform.position, targetingRadius);

        Vector2 breachDir = (t.position - (t.position + (t.up * distance))).normalized;

        int i = 0;

        while (i < hitColliders.Length)
        {
            //don't extinguish past wall
            bool           hitWall = false;
            RaycastHit2D[] hit     = Physics2D.LinecastAll(t.position, hitColliders[i].transform.position);
            for (int j = 0; j < hit.Length; j++)
            {
                if (hit[j].transform.tag == "Wall" || hit[j].transform.tag == "Debris")
                {
                    hitWall = true;
                    break;
                }
            }

            if (!hitWall)
            {
                if (hitColliders[i].tag == "Player")
                {
                    InteriorPlayer p   = hitColliders[i].GetComponent <InteriorPlayer>();
                    Vector3        dir = (t.position - hitColliders[i].transform.position).normalized;
                    // TODO: Scale push with how close they're to the vent
                    p.PushInDir(dir, push);
                }
                else
                {
                    Pushable p = hitColliders[i].GetComponent <Pushable>();
                    if (p != null)
                    {
                        Vector3 dir = (t.position - hitColliders[i].transform.position).normalized;
                        // TODO: Scale push with how close they're to the vent
                        p.PushInDir(dir, push);
                    }
                }
            }
            i++;
        }

        for (int j = 0; j < heldItemsTouching.Count; j++)
        {
            if (!heldItemsTouching[j].IsHeld)
            {
                Vector3 dir = (transform.position - heldItemsTouching[j].transform.position).normalized;

                GameObject jObj = heldItemsTouching[j].gameObject;
                if (jObj.transform.parent != null && jObj.transform.parent.GetComponent <Pushable>() != null)
                {
                    jObj = jObj.transform.parent.gameObject;
                }

                ExteriorManager.exteriorManager.GetSpawnManager().JettisonObject(jObj, dir);

                heldItemsTouching.Remove(heldItemsTouching[j]);
            }
        }
    }