예제 #1
0
 public void Activate(ActivateableBehaviour activateable)
 {
     if (state != State.Activating)
     {
         activateTarget = activateable;
     }
 }
예제 #2
0
    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);
                }
            }
        }
    }
예제 #3
0
    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;
                }
            }
        }
    }