private void OnAddElement(ReorderableList list) { CustomRuleTile.TilingRule rule = new CustomRuleTile.TilingRule(); rule.m_Output = CustomRuleTile.TilingRule.OutputSprite.Single; rule.m_Sprites[0] = tile.m_DefaultSprite; rule.m_ColliderType = tile.m_DefaultColliderType; tile.m_TilingRules.Add(rule); }
protected static void RuleInspectorOnGUI(Rect rect, CustomRuleTile.TilingRule tilingRule) { float y = rect.yMin; EditorGUI.BeginChangeCheck(); GUI.Label(new Rect(rect.xMin, y, k_LabelWidth, k_SingleLineHeight), "Rule"); tilingRule.m_RuleTransform = (CustomRuleTile.TilingRule.Transform)EditorGUI.EnumPopup(new Rect(rect.xMin + k_LabelWidth, y, rect.width - k_LabelWidth, k_SingleLineHeight), tilingRule.m_RuleTransform); y += k_SingleLineHeight; GUI.Label(new Rect(rect.xMin, y, k_LabelWidth, k_SingleLineHeight), "Collider"); tilingRule.m_ColliderType = (Tile.ColliderType)EditorGUI.EnumPopup(new Rect(rect.xMin + k_LabelWidth, y, rect.width - k_LabelWidth, k_SingleLineHeight), tilingRule.m_ColliderType); y += k_SingleLineHeight; GUI.Label(new Rect(rect.xMin, y, k_LabelWidth, k_SingleLineHeight), "Output"); tilingRule.m_Output = (CustomRuleTile.TilingRule.OutputSprite)EditorGUI.EnumPopup(new Rect(rect.xMin + k_LabelWidth, y, rect.width - k_LabelWidth, k_SingleLineHeight), tilingRule.m_Output); y += k_SingleLineHeight; if (tilingRule.m_Output == CustomRuleTile.TilingRule.OutputSprite.Animation) { GUI.Label(new Rect(rect.xMin, y, k_LabelWidth, k_SingleLineHeight), "Speed"); tilingRule.m_AnimationSpeed = EditorGUI.FloatField(new Rect(rect.xMin + k_LabelWidth, y, rect.width - k_LabelWidth, k_SingleLineHeight), tilingRule.m_AnimationSpeed); y += k_SingleLineHeight; } if (tilingRule.m_Output == CustomRuleTile.TilingRule.OutputSprite.Random) { GUI.Label(new Rect(rect.xMin, y, k_LabelWidth, k_SingleLineHeight), "Noise"); tilingRule.m_PerlinScale = EditorGUI.Slider(new Rect(rect.xMin + k_LabelWidth, y, rect.width - k_LabelWidth, k_SingleLineHeight), tilingRule.m_PerlinScale, 0.001f, 0.999f); y += k_SingleLineHeight; GUI.Label(new Rect(rect.xMin, y, k_LabelWidth, k_SingleLineHeight), "Shuffle"); tilingRule.m_RandomTransform = (CustomRuleTile.TilingRule.Transform)EditorGUI.EnumPopup(new Rect(rect.xMin + k_LabelWidth, y, rect.width - k_LabelWidth, k_SingleLineHeight), tilingRule.m_RandomTransform); y += k_SingleLineHeight; } if (tilingRule.m_Output != CustomRuleTile.TilingRule.OutputSprite.Single) { GUI.Label(new Rect(rect.xMin, y, k_LabelWidth, k_SingleLineHeight), "Size"); EditorGUI.BeginChangeCheck(); int newLength = EditorGUI.DelayedIntField(new Rect(rect.xMin + k_LabelWidth, y, rect.width - k_LabelWidth, k_SingleLineHeight), tilingRule.m_Sprites.Length); if (EditorGUI.EndChangeCheck()) { Array.Resize(ref tilingRule.m_Sprites, Math.Max(newLength, 1)); } y += k_SingleLineHeight; for (int i = 0; i < tilingRule.m_Sprites.Length; i++) { tilingRule.m_Sprites[i] = EditorGUI.ObjectField(new Rect(rect.xMin + k_LabelWidth, y, rect.width - k_LabelWidth, k_SingleLineHeight), tilingRule.m_Sprites[i], typeof(Sprite), false) as Sprite; y += k_SingleLineHeight; } } }
protected void OnDrawElement(Rect rect, int index, bool isactive, bool isfocused) { CustomRuleTile.TilingRule rule = tile.m_TilingRules[index]; float yPos = rect.yMin + 2f; float height = rect.height - k_PaddingBetweenRules; float matrixWidth = k_DefaultElementHeight; Rect inspectorRect = new Rect(rect.xMin, yPos, rect.width - matrixWidth * 2f - 20f, height); Rect matrixRect = new Rect(rect.xMax - matrixWidth * 2f - 10f, yPos, matrixWidth, k_DefaultElementHeight); Rect spriteRect = new Rect(rect.xMax - matrixWidth - 5f, yPos, matrixWidth, k_DefaultElementHeight); EditorGUI.BeginChangeCheck(); RuleInspectorOnGUI(inspectorRect, rule); RuleMatrixOnGUI(matrixRect, rule); SpriteOnGUI(spriteRect, rule); if (EditorGUI.EndChangeCheck()) { SaveTile(); } }
protected void SpriteOnGUI(Rect rect, CustomRuleTile.TilingRule tilingRule) { tilingRule.m_Sprites[0] = EditorGUI.ObjectField(new Rect(rect.xMax - rect.height, rect.yMin, rect.height, rect.height), tilingRule.m_Sprites[0], typeof(Sprite), false) as Sprite; }
public MenuItemData(CustomRuleTile.TilingRule mRule, CustomRuleTile.TilingRule.Transform mNewValue) { this.m_Rule = mRule; this.m_NewValue = mNewValue; }
protected static void RuleMatrixOnGUI(Rect rect, CustomRuleTile.TilingRule tilingRule) { Handles.color = EditorGUIUtility.isProSkin ? new Color(1f, 1f, 1f, 0.2f) : new Color(0f, 0f, 0f, 0.2f); int index = 0; float w = rect.width / 3f; float h = rect.height / 3f; for (int y = 0; y <= 3; y++) { float top = rect.yMin + y * h; Handles.DrawLine(new Vector3(rect.xMin, top), new Vector3(rect.xMax, top)); } for (int x = 0; x <= 3; x++) { float left = rect.xMin + x * w; Handles.DrawLine(new Vector3(left, rect.yMin), new Vector3(left, rect.yMax)); } Handles.color = Color.white; for (int y = 0; y <= 2; y++) { for (int x = 0; x <= 2; x++) { Rect r = new Rect(rect.xMin + x * w, rect.yMin + y * h, w - 1, h - 1); if (x != 1 || y != 1) { switch (tilingRule.m_Neighbors[index]) { case CustomRuleTile.TilingRule.Neighbor.This: GUI.DrawTexture(r, arrows[y * 3 + x]); break; case CustomRuleTile.TilingRule.Neighbor.NotThis: GUI.DrawTexture(r, arrows[9]); break; } if (Event.current.type == EventType.MouseDown && r.Contains(Event.current.mousePosition)) { int change = 1; if (Event.current.button == 1) { change = -1; } tilingRule.m_Neighbors[index] = (CustomRuleTile.TilingRule.Neighbor)(((int)tilingRule.m_Neighbors[index] + change) % 3); GUI.changed = true; Event.current.Use(); } index++; } else { switch (tilingRule.m_RuleTransform) { case CustomRuleTile.TilingRule.Transform.Rotated: GUI.DrawTexture(r, autoTransforms[0]); break; case CustomRuleTile.TilingRule.Transform.MirrorX: GUI.DrawTexture(r, autoTransforms[1]); break; case CustomRuleTile.TilingRule.Transform.MirrorY: GUI.DrawTexture(r, autoTransforms[2]); break; } if (Event.current.type == EventType.MouseDown && r.Contains(Event.current.mousePosition)) { tilingRule.m_RuleTransform = (CustomRuleTile.TilingRule.Transform)(((int)tilingRule.m_RuleTransform + 1) % 4); GUI.changed = true; Event.current.Use(); } } } } }