private float GetRLElementHeight(int ruleIndex) { ScriptedTile.Rule rule = scriptedTile.rules[ruleIndex]; BoundsInt neighborsMatrixBounds = GetNeighborsMatrixBounds(rule.GetNeighborsMatrixBoundsBySelectedNeighbors()); float heightByTileDataComponent = 0f; float sumOfFieldPaddingTop; float sumOfheightOfAllSpritesFields; switch (rule.spriteOutputType) { case ScriptedTile.RuleTileData.SpriteOutputType.Single: heightByTileDataComponent = ReorderableListGUIDefaults.ElementHeight + ReorderableListGUIDefaults.ElementPaddingHeight + ReorderableListGUIDefaults.FieldPaddingTop * 3; break; case ScriptedTile.RuleTileData.SpriteOutputType.Random: // Iniciar com 6 Fields. sumOfFieldPaddingTop = ReorderableListGUIDefaults.FieldPaddingTop * 6; for (int i = 0; i < rule.tileSprites.Length; i++) { sumOfFieldPaddingTop += ReorderableListGUIDefaults.FieldPaddingTop; } sumOfheightOfAllSpritesFields = ReorderableListGUIDefaults.FieldHeight * (rule.tileSprites.Length + 3); heightByTileDataComponent = sumOfFieldPaddingTop + sumOfheightOfAllSpritesFields + ReorderableListGUIDefaults.ElementHeight + ReorderableListGUIDefaults.ElementPaddingHeight; break; case ScriptedTile.RuleTileData.SpriteOutputType.Animation: // Iniciar com 5 Fields. sumOfFieldPaddingTop = ReorderableListGUIDefaults.FieldPaddingTop * 5; for (int i = 0; i < rule.tileSprites.Length; i++) { sumOfFieldPaddingTop += ReorderableListGUIDefaults.FieldPaddingTop; } sumOfheightOfAllSpritesFields = ReorderableListGUIDefaults.FieldHeight * (rule.tileSprites.Length + 2); heightByTileDataComponent = sumOfFieldPaddingTop + sumOfheightOfAllSpritesFields + ReorderableListGUIDefaults.ElementHeight + ReorderableListGUIDefaults.ElementPaddingHeight; break; } float neighborsMatrixGUIHeight = TransformNeighborsMatrixBoundsToGUI(neighborsMatrixBounds).y + 10f; // Qual componente tem a maior altura? TileDataComponent ou NeighborMatrixBounds. return(Mathf.Max(heightByTileDataComponent, neighborsMatrixGUIHeight)); }
private void OnDrawRLElement(Rect elementRectangle, int ruleIndex, bool isActive, bool isFocused) { ScriptedTile.Rule rule = scriptedTile.rules[ruleIndex]; float elementGUITop = elementRectangle.yMin; float elementGUIRight = elementRectangle.xMax; float elementGUILeft = elementRectangle.xMin; BoundsInt neighborsMatrixBounds = GetNeighborsMatrixBounds(rule.GetNeighborsMatrixBoundsBySelectedNeighbors()); Vector2 neighborsMatrixGUI = TransformNeighborsMatrixBoundsToGUI(neighborsMatrixBounds); float neighborsMatrixGUIWidth = neighborsMatrixGUI.x; float neighborsMatrixGUIHeight = neighborsMatrixGUI.y; #region SpriteComponent Rectangle. float spriteComponentPositionX = elementGUIRight - ReorderableListGUIDefaults.ComponentWidth; float spriteComponentPositionY = elementGUITop + ReorderableListGUIDefaults.FieldPaddingTop * 2; float spriteComponentWidth = ReorderableListGUIDefaults.ComponentWidth; float spriteComponentHeight = ReorderableListGUIDefaults.ElementHeight; // Separar o espaço deste componente dentro do element do ReorderableList. Rect spriteComponentRectangle = new Rect( spriteComponentPositionX, spriteComponentPositionY, spriteComponentWidth, spriteComponentHeight ); #endregion #region NeighborsMatrixComponent Rectangle. float neighborsMatrixComponentPositionX = elementGUIRight - neighborsMatrixGUIWidth - spriteComponentWidth - 10f; float neighborsMatrixComponentPositionY = elementGUITop + ReorderableListGUIDefaults.FieldPaddingTop * 2; float neighborsMatrixComponentWidth = neighborsMatrixGUIWidth; float neighborsMatrixComponentHeight = neighborsMatrixGUIHeight; // Separar o espaço deste componente dentro do element do ReorderableList. Rect neighborsMatrixComponentRectangle = new Rect( neighborsMatrixComponentPositionX, neighborsMatrixComponentPositionY, neighborsMatrixComponentWidth, neighborsMatrixComponentHeight ); #endregion #region TileDataComponent Rectangle. float tileDataComponentPositionX = elementGUILeft; float tileDataComponentPositionY = elementGUITop + ReorderableListGUIDefaults.FieldPaddingTop; float tileDataComponentWidth = elementRectangle.width - neighborsMatrixGUIWidth - spriteComponentRectangle.width - 20f; float tileDataComponentHeight = elementRectangle.height - ReorderableListGUIDefaults.ElementPaddingHeight; // Separar o espaço deste componente dentro do element do ReorderableList. Rect tileDataComponentRectangle = new Rect( tileDataComponentPositionX, tileDataComponentPositionY, tileDataComponentWidth, tileDataComponentHeight ); #endregion DrawTileDataComponent(tileDataComponentRectangle, rule); DrawNeighborsMatrixComponent(neighborsMatrixComponentRectangle, neighborsMatrixBounds, scriptedTile, rule); DrawSpriteComponent(spriteComponentRectangle, rule); }