public virtual void Pickup(InteriorPlayer holder) { isHeld = true; this.holder = holder; UnsecureItem(); }
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>(); }
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(); }
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++; } }
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); } } } }
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(); }
public virtual void Drop() { isHeld = false; this.holder = null; }
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]); } } }