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); } } }
public static VariableTile Create(Variable variable) { VariableTile variable_tile = GameObject.Instantiate(Scene.Main.Prefabs.VariableTile); variable_tile.Variable = variable; return(variable_tile); }
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); }
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; } }