Example #1
0
    protected override void Update()
    {
        base.Update();

        if (VariableSource == null)
        {
            return;
        }

        IEnumerable <Variable> variables = VariableTiles.Select(variable_tile => variable_tile.Variable);

        foreach (Variable variable in VariableSource.Variables)
        {
            if (!variables.Contains(variable))
            {
                Add(VariableTile.Create(variable));
            }
        }

        foreach (VariableTile variable_tile in VariableTiles)
        {
            if (!VariableSource.Variables.Contains(variable_tile.Variable))
            {
                Remove(variable_tile);
                GameObject.Destroy(variable_tile.gameObject);
            }
        }
    }
Example #2
0
    public static VariableTile Create(Variable variable)
    {
        VariableTile variable_tile = GameObject.Instantiate(Scene.Main.Prefabs.VariableTile);

        variable_tile.Variable = variable;

        return(variable_tile);
    }
Example #3
0
    public static VariableTile Find(string name)
    {
        System.Predicate <Tile> match = tile => (tile as VariableTile).Variable.Name == name;

        VariableTile variable_tile = Scene.Main.UnitInterface.VariableDrawer.Tiles.Find(match) as VariableTile;

        if (variable_tile != null)
        {
            return(variable_tile);
        }

        return(Scene.Main.WorldInterface.VariableDrawer.Tiles.Find(match) as VariableTile);
    }
Example #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;
        }
    }