Esempio n. 1
0
    void Update()
    {
        if (OperationTile.Selected != null)
        {
            if (OperationTile.Selected != cursor_operation_tile)
            {
                if (OperationTile.Selected.Operation.Style.Cursor != null)
                {
                    OperationTile.Selected.Operation.Style.Cursor.Use();
                }

                cursor_operation_tile = OperationTile.Selected;
            }
        }
        else if (Cursor.Current != Cursor.Default)
        {
            Cursor.Default.Use();
            cursor_operation_tile = null;
        }

        if (this.IsModulusUpdate(60))
        {
            GraphUtility.ClearMetricTable();
        }
    }
Esempio n. 2
0
    public static OperationTile Create(Operation operation)
    {
        OperationTile operation_tile = GameObject.Instantiate(Scene.Main.Prefabs.OperationTile);

        operation_tile.Operation = operation;
        operation_tile.name      = operation.ToString() + " OperationTile";


        return(operation_tile);
    }
Esempio n. 3
0
    protected override void Update()
    {
        base.Update();

        if (Program == null)
        {
            return;
        }

        List <OperationTile>    operation_tiles = OperationTiles;
        IEnumerable <Operation> operations      = operation_tiles.Select(operation_tile => operation_tile.Operation);

        foreach (Operation operation in Program)
        {
            if (!operations.Contains(operation))
            {
                base.Add(OperationTile.Create(operation));
            }
        }

        foreach (OperationTile operation_tile in operation_tiles)
        {
            if (!Program.Contains(operation_tile.Operation))
            {
                base.Remove(operation_tile);
                GameObject.Destroy(operation_tile.gameObject);
            }
        }


        operation_tiles = OperationTiles;
        if (operation_tiles.Count == 0)
        {
            return;
        }

        foreach (Operation operation in Program)
        {
            operation_tiles.Find(operation_tile => operation_tile.Operation == operation)
            .transform.SetAsFirstSibling();
        }

        if (Unit.Program.Next != null)
        {
            OperationTile operation_tile = operation_tiles.Find(operation_tile_ =>
                                                                operation_tile_.Operation == Unit.Program.Next);
            if (operation_tile.IsBeingDragged)
            {
                return;
            }

            Vector3 target_position = arrow.transform.position
                                      .YChangedTo(operation_tile.transform.position.y);

            if (arrow.gameObject.activeSelf)
            {
                arrow.transform.position = Vector3.Lerp(arrow.transform.position,
                                                        target_position,
                                                        4 * Time.deltaTime);
            }
            else
            {
                arrow.transform.position = target_position;
            }

            arrow.gameObject.SetActive(true);
        }
        else
        {
            arrow.gameObject.SetActive(false);
        }


        OperationTile nearest_to_mouse = operation_tiles
                                         .MinElement(operation_tile => operation_tile.MouseDistance);
        bool highlight_nearest = nearest_to_mouse.MouseDistance < Screen.height / 20;

        foreach (OperationTile operation_tile in operation_tiles)
        {
            operation_tile.IsHighlighted = IsOpen &&
                                           highlight_nearest &&
                                           operation_tile == nearest_to_mouse;
        }
    }
Esempio n. 4
0
    protected override void Update()
    {
        if (IsSecondaryInputNode && primary_input_node == null)
        {
            return;
        }

        base.Update();


        bool curved = false;

        if (IsOpen)
        {
            if (IsSelected)
            {
                if (Scene.Main.World.IsPointedAt())
                {
                    BezierLineController.EndPosition = Scene.Main.World.Asteroid.GetWorldPositionPointedAt();
                }
                else
                {
                    BezierLineController.EndPosition = Scene.Main.Camera.ScreenToWorldPoint(
                        Input.mousePosition.ZChangedTo(UIDepth));
                }
            }
            else if (VariableTile != null)
            {
                object value        = VariableTile.Variable.Read();
                bool   is_on_screen = false;
                if (value is Vector3)
                {
                    is_on_screen = (Scene.Main.Canvas.transform as RectTransform)
                                   .Contains(Scene.Main.Camera.WorldToScreenPoint((Vector3)value));
                }

                if (is_on_screen)
                {
                    BezierLineController.EndPosition = (Vector3)value;
                }
                else
                {
                    BezierLineController.EndPosition = Scene.Main.Camera.ScreenToWorldPoint(
                        VariableTile.transform.position.ZChangedTo(UIDepth));

                    curved = true;
                }
            }

            if (PipeFunctionSlot != null)
            {
                if (curved)
                {
                    PipeFunctionSlot.transform.position = Scene.Main.Camera.WorldToScreenPoint(
                        BezierLineController.GetPositionAlongPath(0.5f));
                }
                else
                {
                    Scene.Main.Camera.WorldToScreenPoint(BezierLineController.StartPosition).Lerped(
                        Scene.Main.Camera.WorldToScreenPoint(BezierLineController.EndPosition),
                        0.5f);
                }
            }
        }

        Vector3 start_position_in_screen_space =
            Scene.Main.Camera.WorldToScreenPoint(BezierLineController.StartPosition);
        Vector3 end_position_in_screen_space =
            Scene.Main.Camera.WorldToScreenPoint(BezierLineController.EndPosition);

        if (curved)
        {
            BezierLineController.ControlPosition0 = Scene.Main.Camera.ScreenToWorldPoint(
                new Vector3(end_position_in_screen_space.x,
                            start_position_in_screen_space.y,
                            (start_position_in_screen_space.z + end_position_in_screen_space.z) / 2));
        }
        else
        {
            BezierLineController.ControlPosition0 =
                BezierLineController.StartPosition.Lerped(BezierLineController.EndPosition, 0.5f);
        }


        if (!InputUtility.DidDragOccur &&
            IsSelected &&
            !OperationTile.IsPointedAt() &&
            !this.IsPointedAt() &&
            this.UseMouseLeftRelease())
        {
            if (Scene.Main.InputModule.ElementTouched != null)
            {
                VariableTile variable_tile = InputUtility.GetElementTouched <VariableTile>();
                Unit         unit          = InputUtility.GetElementTouched <Unit>();

                if (variable_tile != null)
                {
                    VariableName = variable_tile.Variable.Name;
                }
                else if (unit != null)
                {
                    VariableName = unit.Id;
                }
                else if (Scene.Main.World.IsPointedAt())
                {
                    VariableName = Scene.Main.World.MemorizePosition(
                        Scene.Main.World.Asteroid.GetWorldPositionPointedAt());
                }
            }

            IsSelected = false;
        }
    }
Esempio n. 5
0
    void Update()
    {
        input_line.enabled        = false;
        input_circle.Line.enabled = false;

        output_line.enabled        = false;
        output_circle.Line.enabled = false;

        waste_line.enabled        = false;
        waste_circle.Line.enabled = false;

        if (!Unit.IsSelected)
        {
            return;
        }

        Vector3       normal_displacment     = new Vector3(0, Height, 0);
        OperationTile operation_tile_touched = InputUtility.GetElementTouched <OperationTile>();


        //Load site visualization
        HasLoadSite has_load_site = null;

        if (OperationTileNode.Selected != null &&
            OperationTileNode.Selected.OperationTile.Operation is HasLoadSite)
        {
            has_load_site = OperationTileNode.Selected.OperationTile.Operation as HasLoadSite;
        }

        else if (operation_tile_touched != null &&
                 operation_tile_touched.Operation is HasLoadSite &&
                 operation_tile_touched.Operation is Task &&
                 (operation_tile_touched.Operation as Task).Target != null)
        {
            has_load_site = operation_tile_touched.Operation as HasLoadSite;
        }

        else if (Unit.HasComponent <HasLoadSite>())
        {
            has_load_site = Unit.GetComponent <HasLoadSite>();
        }

        if (has_load_site != null && has_load_site.HasLoadSite)
        {
            Vector3 start_position = has_load_site.LoadSite + normal_displacment;
            Vector3 end_position   = Unit.Physical.Position + normal_displacment;
            Vector3 displacement   = end_position - start_position;

            if (has_load_site.LoadSite.Distance(Unit.Physical.Position) >= has_load_site.LoadSiteRadius)
            {
                input_line.enabled = true;

                if (displacement.magnitude > (has_load_site.LoadSiteRadius + Unit.Physical.Size * Mathf.Sqrt(2)))
                {
                    input_line.SetPosition(0, start_position + displacement.normalized *
                                           has_load_site.LoadSiteRadius);
                    input_line.SetPosition(1, end_position - displacement.normalized * Unit.Physical.Size * Mathf.Sqrt(2));
                }
                else
                {
                    input_line.SetPosition(0, start_position + displacement.normalized * has_load_site.LoadSiteRadius);
                    input_line.SetPosition(1, input_line.GetPosition(0) + displacement.normalized * 0.1f);
                }
            }

            input_circle.Line.enabled       = true;
            input_circle.transform.position = start_position;
            input_circle.Radius             = has_load_site.LoadSiteRadius;
        }


        //Unload site visualization
        HasUnloadSite has_unload_site = null;

        if (OperationTileNode.Selected != null &&
            OperationTileNode.Selected.OperationTile.Operation is HasUnloadSite)
        {
            has_unload_site = OperationTileNode.Selected.OperationTile.Operation as HasUnloadSite;
        }

        else if (operation_tile_touched != null &&
                 operation_tile_touched.Operation is HasUnloadSite &&
                 operation_tile_touched.Operation is Task &&
                 (operation_tile_touched.Operation as Task).Target != null)
        {
            has_unload_site = operation_tile_touched.Operation as HasUnloadSite;
        }

        else if (Unit.HasComponent <HasUnloadSite>())
        {
            has_unload_site = Unit.GetComponent <HasUnloadSite>();
        }

        if (has_unload_site != null && has_unload_site.HasUnloadSite)
        {
            SurfaceDeposit deposit = Scene.Main.World.Asteroid.Surface
                                     .GetNearestOverlappingDeposit(has_unload_site.UnloadSite) as SurfaceDeposit;

            Vector3 start_position = Unit.Physical.Position + normal_displacment;
            Vector3 end_position   = has_unload_site.UnloadSite + normal_displacment;
            Vector3 displacement   = end_position - start_position;

            output_line.enabled = true;
            output_line.SetPosition(0, start_position + displacement.normalized * Mathf.Sqrt(2) * Unit.Physical.Size);
            output_line.SetPosition(1, end_position);

            if (deposit != null)
            {
                if (deposit.transform.position.Distance(Unit.Physical.Position) >= deposit.Extent)
                {
                    end_position = deposit.transform.position + normal_displacment;
                    output_line.SetPosition(1, end_position - displacement.normalized * (deposit.Extent + 1));

                    if ((output_line.GetPosition(1) - output_line.GetPosition(0)).Dot(displacement.normalized) < 2)
                    {
                        output_line.SetPosition(0, output_line.GetPosition(1) - displacement.normalized * 2);
                    }
                }
                else
                {
                    output_line.enabled = false;
                }

                output_circle.Line.enabled       = true;
                output_circle.transform.position = deposit.transform.position + normal_displacment;
                output_circle.Radius             = deposit.Extent;
            }
        }


        SelectWasteSiteOperation select_waste_site_operation = null;
        Waster waster = null;

        if (OperationTileNode.Selected != null &&
            OperationTileNode.Selected.OperationTile.Operation is SelectWasteSiteOperation)
        {
            select_waste_site_operation = OperationTileNode.Selected.OperationTile
                                          .Operation as SelectWasteSiteOperation;
        }

        else if (operation_tile_touched != null &&
                 operation_tile_touched.Operation is SelectWasteSiteOperation &&
                 (operation_tile_touched.Operation as SelectWasteSiteOperation).Input.IsConnected(Unit))
        {
            select_waste_site_operation = (operation_tile_touched.Operation as SelectWasteSiteOperation);
        }

        else if (Unit.HasComponent <Waster>())
        {
            waster = Unit.GetComponent <Waster>();

            if (waster.WasteNot)
            {
                waster = null;
            }
        }

        if (waster != null || select_waste_site_operation != null)
        {
            Vector3 waste_site;
            if (waster != null)
            {
                waste_site = waster.WasteSite;
            }
            else if (select_waste_site_operation.Input.IsConnected(Unit))
            {
                waste_site = select_waste_site_operation.Input.Read <Vector3>(Unit);
            }
            else
            {
                waste_site = Scene.Main.World.Asteroid.GetWorldPositionPointedAt();
            }

            SurfaceDeposit deposit = Scene.Main.World.Asteroid.Surface
                                     .GetNearestOverlappingDeposit(waste_site) as SurfaceDeposit;

            Vector3 start_position = Unit.Physical.Position + normal_displacment;
            Vector3 end_position   = waste_site + normal_displacment;
            Vector3 displacement   = end_position - start_position;

            waste_line.enabled = true;
            waste_line.SetPosition(0, start_position + displacement.normalized * Mathf.Sqrt(2) * Unit.Physical.Size);
            waste_line.SetPosition(1, end_position);

            if (deposit != null)
            {
                if (deposit.transform.position.Distance(Unit.Physical.Position) >= deposit.Extent)
                {
                    end_position = deposit.transform.position + normal_displacment;
                    waste_line.SetPosition(1, end_position - displacement.normalized * (deposit.Extent + 1));

                    if ((waste_line.GetPosition(1) - waste_line.GetPosition(0)).Dot(displacement.normalized) < 2)
                    {
                        waste_line.SetPosition(0, waste_line.GetPosition(1) - displacement.normalized * 2);
                    }
                }
                else
                {
                    waste_line.enabled = false;
                }

                waste_circle.Line.enabled       = true;
                waste_circle.transform.position = deposit.transform.position + normal_displacment;
                waste_circle.Radius             = deposit.Extent;
            }
        }
    }
    protected override void Update()
    {
        base.Update();

        BezierLineController.ControlPosition0 = Scene.Main.Camera.ScreenToWorldPoint(
            new Vector3(transform.position.x + stretch_distance * Scene.Main.Style.Scale,
                        transform.position.y,
                        UIDepth));

        arrow.SetActive(false);
        arrow.transform.rotation =
            Quaternion.LookRotation(arrow.transform.position - Scene.Main.Camera.transform.position,
                                    Scene.Main.Camera.transform.up);

        if (IsOpen)
        {
            Vector3 screen_space_end_position = Vector3.zero;

            if (IsSelected)
            {
                screen_space_end_position = Input.mousePosition.ZChangedTo(UIDepth);
            }
            else if (GotoOperationTile != null)
            {
                screen_space_end_position =
                    GotoOperationTile.GotoAttachPosition.transform.position.ZChangedTo(UIDepth);
            }

            BezierLineController.EndPosition = Scene.Main.Camera.ScreenToWorldPoint(screen_space_end_position);
            arrow.transform.position         = BezierLineController.EndPosition;

            BezierLineController.ControlPosition1 = Scene.Main.Camera.ScreenToWorldPoint(
                new Vector3(screen_space_end_position.x + stretch_distance * Scene.Main.Style.Scale,
                            screen_space_end_position.y,
                            UIDepth));
        }

        arrow.gameObject.SetActive(IsOpen && IsLineValid);


        if (!InputUtility.DidDragOccur && IsSelected && !OperationTile.IsPointedAt() && this.UseMouseLeftRelease())
        {
            if (Scene.Main.InputModule.ElementTouched != null)
            {
                OperationTile operation_tile = InputUtility.GetElementTouched <OperationTile>();

                if (operation_tile != null && !operation_tile.IsInOperationMenu)
                {
                    GotoOperationTile = operation_tile;
                }
                else
                {
                    GotoOperationTile = null;
                }
            }
            else
            {
                GotoOperationTile = null;
            }

            IsSelected = false;
        }
    }