Snapshot of the existing Unity 6 language-learning word game before any refactoring. Adds Unity .gitignore and .gitattributes. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
202 lines
No EOL
7.4 KiB
C#
202 lines
No EOL
7.4 KiB
C#
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);
|
|
});
|
|
}
|
|
}
|
|
} |