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