riversong code showcase
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
using System.Collections.Generic;
|
||||
using Sirenix.OdinInspector;
|
||||
using UnityEngine;
|
||||
|
||||
namespace DanieleMarotta.RiversongCodeShowcase
|
||||
{
|
||||
public class BuildingStorageVisualization : MonoBehaviour
|
||||
{
|
||||
[PropertySpace(SpaceAfter = 20)]
|
||||
[SerializeField]
|
||||
private List<Transform> _slots;
|
||||
|
||||
[VerticalGroup("Arrange Slots/Controls")]
|
||||
[LabelText("Min")]
|
||||
[SerializeField]
|
||||
private Vector2 _boundsMin;
|
||||
|
||||
[VerticalGroup("Arrange Slots/Controls")]
|
||||
[LabelText("Max")]
|
||||
[SerializeField]
|
||||
private Vector2 _boundsMax;
|
||||
|
||||
[VerticalGroup("Arrange Slots/Controls")]
|
||||
[SerializeField]
|
||||
private int _columns = 4;
|
||||
|
||||
public int SlotCount => _slots.Count;
|
||||
|
||||
public Transform GetSlot(int slot)
|
||||
{
|
||||
return _slots[slot];
|
||||
}
|
||||
|
||||
public void SetProductVisualization(int slotIndex, GameObject productVisualization)
|
||||
{
|
||||
productVisualization.transform.SetParent(GetSlot(slotIndex));
|
||||
productVisualization.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity);
|
||||
}
|
||||
|
||||
public bool TryGetProductVisualization(int slotIndex, out GameObject productVisualization)
|
||||
{
|
||||
var slot = GetSlot(slotIndex);
|
||||
productVisualization = slot.childCount > 0 ? slot.GetChild(0).gameObject : null;
|
||||
return productVisualization;
|
||||
}
|
||||
|
||||
[HorizontalGroup("Arrange Slots", 200)]
|
||||
[Button(ButtonSizes.Large)]
|
||||
[GUIColor("cyan")]
|
||||
private void ArrangeSlots()
|
||||
{
|
||||
var rows = Mathf.CeilToInt((float)_slots.Count / _columns);
|
||||
|
||||
var w = _boundsMax.x - _boundsMin.x;
|
||||
var h = _boundsMax.y - _boundsMin.y;
|
||||
|
||||
var spacing = new Vector2(w, h) / new Vector2(_columns, rows);
|
||||
|
||||
for (var i = 0; i < _slots.Count; i++)
|
||||
{
|
||||
var slot = _slots[i];
|
||||
|
||||
var row = i / _columns;
|
||||
var column = i % _columns;
|
||||
|
||||
var p = slot.position;
|
||||
|
||||
p.x = _boundsMin.x + (0.5f + column) * spacing.x;
|
||||
p.z = _boundsMin.y + (0.5f + row) * spacing.y;
|
||||
|
||||
slot.position = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user