starOfWords/Assets/Scripts/3.5/Prefabs/ModSelectManager.cs

202 lines
7.4 KiB
C#
Raw Normal View History

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;
[System.Serializable]
public class ModData
{
public Sprite modSprite;
public string sceneName;
}
public class ModSelectManager : MonoBehaviour
{
[Header("━━━ MODLAR ━━━━━━━━━━━━━━━━━━━━━━━━━━━━")]
public ModData[] mods;
[Header("━━━ KART BOYUTLARI ━━━━━━━━━━━━━━━━━━━━")]
public float cardWidth = 900f;
public float cardHeight = 500f;
public float spacing = 40f;
[Header("━━━ PLAY BUTTON ━━━━━━━━━━━━━━━━━━━━━━━")]
public string playButtonText = "PLAY";
public float playButtonWidth = 400f;
public float playButtonHeight = 100f;
void Start()
{
Canvas canvas = FindAnyObjectByType<Canvas>();
if (canvas == null)
{
GameObject canvasObj = new GameObject("Canvas");
canvas = canvasObj.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
CanvasScaler scaler = canvasObj.AddComponent<CanvasScaler>();
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1080, 1920);
scaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
scaler.matchWidthOrHeight = 0.5f;
canvasObj.AddComponent<GraphicRaycaster>();
}
GameObject oldScroll = GameObject.Find("ModScrollView");
if (oldScroll != null)
Destroy(oldScroll);
GameObject scrollObj = new GameObject("ModScrollView");
scrollObj.transform.SetParent(canvas.transform, false);
RectTransform scrollRect = scrollObj.AddComponent<RectTransform>();
scrollRect.anchorMin = Vector2.zero;
scrollRect.anchorMax = Vector2.one;
scrollRect.offsetMin = Vector2.zero;
scrollRect.offsetMax = Vector2.zero;
ScrollRect scroll = scrollObj.AddComponent<ScrollRect>();
scroll.horizontal = false;
scroll.vertical = true;
scroll.movementType = ScrollRect.MovementType.Elastic;
scroll.elasticity = 0.12f;
scroll.inertia = true;
scroll.decelerationRate = 0.135f;
scroll.scrollSensitivity = 30f;
GameObject viewportObj = new GameObject("Viewport");
viewportObj.transform.SetParent(scrollObj.transform, false);
RectTransform viewportRect = viewportObj.AddComponent<RectTransform>();
viewportRect.anchorMin = Vector2.zero;
viewportRect.anchorMax = Vector2.one;
viewportRect.offsetMin = Vector2.zero;
viewportRect.offsetMax = Vector2.zero;
Image viewportImage = viewportObj.AddComponent<Image>();
viewportImage.color = new Color(0f, 0f, 0f, 0f);
Mask mask = viewportObj.AddComponent<Mask>();
mask.showMaskGraphic = false;
GameObject contentObj = new GameObject("Content");
contentObj.transform.SetParent(viewportObj.transform, false);
RectTransform contentRect = contentObj.AddComponent<RectTransform>();
contentRect.anchorMin = new Vector2(0f, 1f);
contentRect.anchorMax = new Vector2(1f, 1f);
contentRect.pivot = new Vector2(0.5f, 1f);
contentRect.anchoredPosition = Vector2.zero;
contentRect.sizeDelta = Vector2.zero;
VerticalLayoutGroup vlg = contentObj.AddComponent<VerticalLayoutGroup>();
vlg.spacing = spacing;
vlg.padding = new RectOffset(50, 50, 50, 50);
vlg.childAlignment = TextAnchor.UpperCenter;
vlg.childControlWidth = false;
vlg.childControlHeight = false;
vlg.childForceExpandWidth = false;
vlg.childForceExpandHeight = false;
ContentSizeFitter csf = contentObj.AddComponent<ContentSizeFitter>();
csf.verticalFit = ContentSizeFitter.FitMode.PreferredSize;
csf.horizontalFit = ContentSizeFitter.FitMode.Unconstrained;
scroll.viewport = viewportRect;
scroll.content = contentRect;
if (mods == null || mods.Length == 0)
{
Debug.LogWarning("ModSelectManager: mods listesi boş.");
return;
}
foreach (ModData mod in mods)
{
if (mod == null)
continue;
GameObject card = new GameObject("ModCard");
card.transform.SetParent(contentObj.transform, false);
RectTransform cardRect = card.AddComponent<RectTransform>();
cardRect.sizeDelta = new Vector2(cardWidth, cardHeight);
LayoutElement cardLayout = card.AddComponent<LayoutElement>();
cardLayout.preferredWidth = cardWidth;
cardLayout.preferredHeight = cardHeight;
cardLayout.minWidth = cardWidth;
cardLayout.minHeight = cardHeight;
cardLayout.flexibleWidth = 0f;
cardLayout.flexibleHeight = 0f;
Image cardImg = card.AddComponent<Image>();
cardImg.color = new Color(0.1f, 0.1f, 0.2f, 1f);
GameObject imgObj = new GameObject("ModImage");
imgObj.transform.SetParent(card.transform, false);
RectTransform imgRect = imgObj.AddComponent<RectTransform>();
imgRect.anchorMin = Vector2.zero;
imgRect.anchorMax = Vector2.one;
imgRect.offsetMin = new Vector2(0f, 120f);
imgRect.offsetMax = Vector2.zero;
Image modImg = imgObj.AddComponent<Image>();
if (mod.modSprite != null)
modImg.sprite = mod.modSprite;
modImg.preserveAspect = true;
modImg.raycastTarget = false;
GameObject btnObj = new GameObject("PlayButton");
btnObj.transform.SetParent(card.transform, false);
RectTransform btnRect = btnObj.AddComponent<RectTransform>();
btnRect.anchorMin = new Vector2(0.5f, 0f);
btnRect.anchorMax = new Vector2(0.5f, 0f);
btnRect.pivot = new Vector2(0.5f, 0f);
btnRect.sizeDelta = new Vector2(playButtonWidth, playButtonHeight);
btnRect.anchoredPosition = new Vector2(0f, 10f);
Image btnImg = btnObj.AddComponent<Image>();
btnImg.color = new Color(0.1f, 0.7f, 0.2f, 1f);
Button btn = btnObj.AddComponent<Button>();
GameObject txtObj = new GameObject("Text");
txtObj.transform.SetParent(btnObj.transform, false);
RectTransform txtRect = txtObj.AddComponent<RectTransform>();
txtRect.anchorMin = Vector2.zero;
txtRect.anchorMax = Vector2.one;
txtRect.offsetMin = Vector2.zero;
txtRect.offsetMax = Vector2.zero;
TextMeshProUGUI tmp = txtObj.AddComponent<TextMeshProUGUI>();
tmp.text = playButtonText;
tmp.fontSize = 50f;
tmp.alignment = TextAlignmentOptions.Center;
tmp.color = Color.white;
tmp.raycastTarget = false;
string sceneName = mod.sceneName;
btn.onClick.RemoveAllListeners();
btn.onClick.AddListener(() =>
{
if (string.IsNullOrWhiteSpace(sceneName))
{
Debug.LogWarning("ModSelectManager: sceneName boş.");
return;
}
SceneManager.LoadScene(sceneName);
});
}
}
}