Example #1
0
    public override void OrderOrderableTarget(OrderableTarget target, WorkTarget workTarget)
    {
        if (m_orderableTarget != null)
        {
            m_orderableTarget.LeaveWorkTarget(m_workTarget, this);
        }

        m_orderableTarget = target;
        m_orderableTarget.ClaimWorkTarget(workTarget);
        m_workTarget = workTarget;
        m_moveTarget = workTarget.pos;
        SwitchState(CuboState.MOVING_TO_WORK);
    }
Example #2
0
    public override void OrderGround(Vector3 location)
    {
        if (m_orderableTarget != null)
        {
            m_orderableTarget.LeaveWorkTarget(m_workTarget, this);
            m_workTarget      = null;
            m_orderableTarget = null;
        }

        location.y   = 1f;
        m_moveTarget = location;
        SwitchState(CuboState.MOVING_TO_EMPTY);
    }
Example #3
0
 public virtual void OrderOrderableTarget(OrderableTarget target, WorkTarget workTarget)
 {
 }
Example #4
0
    private void UpdateOrders()
    {
        if (!Input.GetButtonDown("Order"))
        {
            return;
        }

        if (Selection.GetSelected().Count == 0)
        {
            return;
        }

        Ray        mouseToWorldRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hitInfo;

        if (Physics.Raycast(mouseToWorldRay, out hitInfo, 1000f, orderLayerMask, QueryTriggerInteraction.Ignore))
        {
            //Debug.DrawLine( Camera.main.transform.position, hitInfo.point, Color.red, 3f );
            //DebugExtension.DebugPoint( hitInfo.point, 3f, 3f );
            string layer = LayerMask.LayerToName(hitInfo.collider.gameObject.layer);
            switch (layer)
            {
            case "Ground":
                List <Selectable> moveableUnits = new List <Selectable>();
                foreach (Selectable selectable in Selection.GetSelected())
                {
                    if (selectable.canMove)
                    {
                        moveableUnits.Add(selectable);
                    }
                }
                if (moveableUnits.Count == 0)
                {
                    break;
                }

                Vector3 groundedPoint = hitInfo.point;
                groundedPoint.y = 1f;
                GameObject orderUI = (GameObject)Instantiate(moveOrderUIPrefab, groundedPoint + Vector3.up * 0.01f, Quaternion.LookRotation(Vector3.down));

                foreach (KeyValuePair <Selectable, Vector3> order in CalculateFormationMovementPoints(moveableUnits, groundedPoint))
                {
                    order.Key.OrderGround(order.Value);
                }

                break;

            case "OrderableCollision":
                OrderableTarget target = hitInfo.collider.gameObject.GetComponentInChildren <OrderableTarget>();

                List <Selectable> workingUnits = new List <Selectable>();
                foreach (Selectable selectable in Selection.GetSelected())
                {
                    CuboController cubo = selectable.GetComponent <CuboController>();
                    if (selectable.canMove && (cubo == null || cubo.GetOrderableTarget() != target))
                    {
                        workingUnits.Add(selectable);
                    }
                }
                if (workingUnits.Count == 0)
                {
                    break;
                }

                List <WorkTarget> workTargets = target.GetOpenWorkTargets();

                if (target.GetComponent <NegaCube>() != null)
                {
                    foreach (Selectable unit in workingUnits)
                    {
                        unit.OrderOrderableTarget(target, target.GetOpenWorkTargets()[0]);
                    }
                }

                foreach (KeyValuePair <Selectable, WorkTarget> kvp in CalculateMovementPointsForOrderable(workingUnits, workTargets))
                {
                    kvp.Key.OrderOrderableTarget(target, kvp.Value);
                }
                break;

            /*case "Enemy":
             *      GameObject enemy = hitInfo.collider.gameObject.GetComponentInParent<EnemyBehaviour>().gameObject;
             *      if ( enemy == null )
             *              break;
             *
             *      List<Selectable> targetingUnits = new List<Selectable>();
             *      foreach( Selectable selectable in Selection.GetSelected() )
             *      {
             *              if ( selectable.canTargetEnemies )
             *                      selectable.OrderTargetEnemy( enemy );
             *      }
             *
             *      break;*/
            default:
                Debug.LogWarning("Unknown order raycast hit. Layer: " + layer);
                break;
            }
        }
    }