/// <summary> /// Sets a direction variable to all direction. /// </summary> protected void SetDirectionVariableToAll(LocatorHUD locator, DirectionVariable variable, object value) { for (int i = 0; i < (int)LocatorHUD.Direction.NumDirections; i++) { SetDirectionVariable(locator, (LocatorHUD.Direction)i, variable, value); } }
public void SetValue(DirectionVariable value) { Value = value.Value; if (value.OppositeValue != null) { OppositeValue = value.OppositeValue; } }
/// <summary> /// Displays the inspector for a direction variable. /// </summary> protected void DisplayVariableInspector(string displayName, LocatorHUD locator, LocatorHUD.Direction direction, DirectionVariable variable, Texture2D currentValue) { EditorGUILayout.BeginHorizontal(GUILayout.ExpandHeight(true), GUILayout.MinHeight(10)); Texture2D newValue = (Texture2D)EditorGUILayout.ObjectField(displayName, currentValue, typeof(Texture2D), false); if (newValue != currentValue) { SetDirectionVariable(locator, direction, variable, newValue); } if (GUILayout.Button("-->", GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true))) { SetDirectionVariableToAll(locator, variable, newValue); } EditorGUILayout.EndHorizontal(); }
/// <summary> /// Displays the inspector for a direction variable. /// </summary> protected void DisplayVariableInspector(string displayName, LocatorHUD locator, LocatorHUD.Direction direction, DirectionVariable variable, bool currentValue) { EditorGUILayout.BeginHorizontal(GUILayout.ExpandHeight(true), GUILayout.MinHeight(10)); bool newValue = EditorGUILayout.Toggle(displayName, currentValue); if (newValue != currentValue) { SetDirectionVariable(locator, direction, variable, newValue); } if (GUILayout.Button("-->", GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true))) { SetDirectionVariableToAll(locator, variable, newValue); } EditorGUILayout.EndHorizontal(); }
/// <summary> /// Обновляем доступные для движения направления /// </summary> private void UpdateAvailableDirection() { if (currentNode != null) { if (currentMoveDirection != currentWantedDirection.Value) { this.transform.localPosition = currentNode.transform.localPosition; } availableNodes.Clear(); if (goHome && currentNode.isHome) { node = new AvailableNode(currentNode.homeDirection, currentNode.homePosition.GetComponent <Node>()); availableNodes.Add(node); } else { for (int i = 0; i < currentNode.availableDirections.Value.Count; i++) { node = new AvailableNode(currentNode.availableDirections.Value[i], currentNode.neighboursPositions[i].GetComponent <Node>()); availableNodes.Add(node); } } } else if (currentMoveDirection != currentWantedDirection.Value || availableNodes.Count > 2) { DirectionVariable oppositeDirection = null; for (int i = availableNodes.Count - 1; i >= 0; i--) { if (availableNodes[i].node != targetNode) { availableNodes.Remove(availableNodes[i]); } else { oppositeDirection = availableNodes[i].direction.OppositeValue; } } node = new AvailableNode(oppositeDirection, previouseNode); availableNodes.Add(node); } }
/// <summary> /// Sets a direction variable to a specific direction. /// </summary> protected void SetDirectionVariable(LocatorHUD locator, LocatorHUD.Direction direction, DirectionVariable variable, object value) { int index = (int)direction; if (index < 0 || index >= (int)LocatorHUD.Direction.NumDirections) { return; } switch (variable) { case DirectionVariable.Rotation: locator.directionRotation[index] = (float)value; break; case DirectionVariable.BaseScale: locator.directionBaseScale[index] = (float)value; break; case DirectionVariable.Color: locator.directionColor[index] = (Color)value; break; case DirectionVariable.DistScalingEnabled: locator.directionDistScalingEnabled[index] = (bool)value; break; case DirectionVariable.DistScalingMinDistance: locator.directionDistScalingMinDistance[index] = (float)value; break; case DirectionVariable.DistScalingMaxDistance: locator.directionDistScalingMaxDistance[index] = (float)value; break; case DirectionVariable.DistScalingNearScale: locator.directionDistScalingNearScale[index] = (float)value; break; case DirectionVariable.DistScalingFarScale: locator.directionDistScalingFarScale[index] = (float)value; break; case DirectionVariable.Texture: locator.directionTexture[index] = (Texture2D)value; break; default: break; } EditorUtility.SetDirty(target); }
public AvailableNode(DirectionVariable direction, Node node) { this.direction = direction; this.node = node; }