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; } } }