public void Activate(ActivateableBehaviour activateable) { if (state != State.Activating) { activateTarget = activateable; } }
void Update() { if (Input.GetMouseButtonDown(0) && Input.mousePosition.y >= 50) { startMousePos = Input.mousePosition; startPos = Camera.main.ScreenToWorldPoint(new Vector3(startMousePos.x, startMousePos.y, -Camera.main.transform.position.z)); //FIX selectRect.SetActive(true); } if (Input.GetMouseButtonUp(0) && Input.mousePosition.y >= 50) { Vector2 pos = Input.mousePosition; Vector2 endPos = Camera.main.ScreenToWorldPoint(new Vector3(pos.x, pos.y, -Camera.main.transform.position.z)); selectRect.SetActive(false); UpdateSelected(startPos, endPos); } // Draw select rectangle if (selectRect.active) { RectTransform rt = selectRect.GetComponent <RectTransform>(); rt.localPosition = new Vector3(Mathf.Min(startMousePos.x, Input.mousePosition.x) - canvasWidth / 2, Mathf.Min(startMousePos.y, Input.mousePosition.y) - canvasHeight / 2, 0); rt.sizeDelta = new Vector2(Mathf.Abs(startMousePos.x - Input.mousePosition.x), Mathf.Abs(startMousePos.y - Input.mousePosition.y)); } if (Input.GetMouseButtonDown(1)) { var ray = Camera.main.ScreenPointToRay(Input.mousePosition); ActivateableBehaviour activateable = null; //if(Input.GetKey(KeyCode.LeftControl)) { RaycastHit2D rayHit2D = Physics2D.Raycast( ray.origin, ray.direction, Mathf.Infinity, LayerMask.GetMask("Activateable") ); Collider2D collider = rayHit2D.collider; if (collider != null) { activateable = collider.gameObject.GetComponent <ActivateableBehaviour>(); } //} RaycastHit rayCastHit = new RaycastHit(); if (Physics.Raycast(ray.origin, ray.direction, out rayCastHit)) { foreach (GameObject unitObject in selected) { Unit unit = unitObject.GetComponent <Unit>(); unit.Pathfind(rayCastHit.point); unit.Activate(activateable); } } } }
protected void Update() { if (state == State.Dead) { return; } Vector3 direction = agent.steeringTarget - agent.transform.position; if (direction.x <= 0) { spriteRenderer.flipX = false; } else { spriteRenderer.flipX = true; } if (activateTarget != null) { //Debug.Log($"{DistanceFromMe(activateTarget)} {activateWait} {Time.deltaTime}"); if (state == State.Activating) { if (activateWait <= 0) { activateTarget.Activate(this); state = State.Idle; agent.isStopped = false; activateTarget = null; } activateWait -= Time.deltaTime; } else { if (DistanceFromMe(activateTarget) < activateDistance) { state = State.Activating; activateWait = activateDelay; agent.isStopped = true; } } } }