Codex script (unity)
A downloadable game
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class CodexMenu_FullscreenAllInOne : MonoBehaviour
{
// Internal state
private GameObject canvasGO;
private GameObject backgroundPanel;
private GameObject page1;
private GameObject page2;
// Page1 UI refs
private InputField nameInput;
private Button applyNameBtn;
private Text nameDisplay;
private Button giveMoneyBtn;
private Text moneyDisplay;
// Page2 UI refs
private Button giveEverythingBtn;
private Text feedbackText;
// Page switching
private Button nextPageBtn;
private Button prevPageBtn;
// Data
private string playerName = "Player";
private long money = 0;
private const long ONE_TRILLION = 1_000_000_000_000L;
// GiveEverything lists (editable in inspector if desired)
public List<string> itemsToGive = new List<string>() { "item_sword", "item_shield" };
public List<string> unlocks = new List<string>() { "level_2", "skin_red" };
void Start()
{
BuildCanvasAndUI();
SwitchToPage(1);
UpdateNameUI();
UpdateMoneyUI();
}
void Update()
{
// Accept Escape to toggle visibility of the whole menu
if (Input.GetKeyDown(KeyCode.Escape))
{
bool on = canvasGO.activeSelf;
canvasGO.SetActive(!on);
// If turning on, ensure event system exists/select default
if (!on) TrySelectDefault();
}
}
// ----------------------------
// UI Construction
// ----------------------------
void BuildCanvasAndUI()
{
// 1) Ensure EventSystem exists
if (FindObjectOfType<EventSystem>() == null)
{
GameObject es = new GameObject("EventSystem", typeof(EventSystem), typeof(StandaloneInputModule));
DontDestroyOnLoad(es);
}
// 2) Canvas root
canvasGO = new GameObject("CodexMenu_Canvas");
Canvas canvas = canvasGO.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvasGO.AddComponent<CanvasScaler>();
canvasGO.AddComponent<GraphicRaycaster>();
DontDestroyOnLoad(canvasGO);
// 3) Background full-screen panel (black)
backgroundPanel = CreateUIObject("Background", canvasGO.transform);
Image bgImage = backgroundPanel.AddComponent<Image>();
bgImage.color = Color.black;
RectTransform bgRT = backgroundPanel.GetComponent<RectTransform>();
StretchToParent(bgRT);
// 4) Header Title
GameObject title = CreateUIObject("Title", backgroundPanel.transform);
Text titleText = AddText(title.transform, "CODEX MENU", 36, TextAnchor.UpperCenter);
RectTransform titleRT = title.GetComponent<RectTransform>();
titleRT.anchorMin = new Vector2(0.0f, 0.92f);
titleRT.anchorMax = new Vector2(1.0f, 1.0f);
titleRT.offsetMin = new Vector2(0, 0);
titleRT.offsetMax = new Vector2(0, -4);
titleText.color = Color.red;
// 5) Page containers
page1 = CreateUIObject("Page1", backgroundPanel.transform);
RectTransform p1RT = page1.GetComponent<RectTransform>();
p1RT.anchorMin = new Vector2(0.05f, 0.1f);
p1RT.anchorMax = new Vector2(0.95f, 0.88f);
p1RT.offsetMin = Vector2.zero;
p1RT.offsetMax = Vector2.zero;
page2 = CreateUIObject("Page2", backgroundPanel.transform);
RectTransform p2RT = page2.GetComponent<RectTransform>();
p2RT.anchorMin = p1RT.anchorMin;
p2RT.anchorMax = p1RT.anchorMax;
p2RT.offsetMin = Vector2.zero;
p2RT.offsetMax = Vector2.zero;
// 6) Page navigation (Next / Prev)
nextPageBtn = CreateButton("NextPage", backgroundPanel.transform, "Page 2 →");
RectTransform nbRT = nextPageBtn.GetComponent<RectTransform>();
nbRT.anchorMin = new Vector2(0.75f, 0.02f);
nbRT.anchorMax = new Vector2(0.95f, 0.08f);
nbRT.offsetMin = Vector2.zero;
nbRT.offsetMax = Vector2.zero;
nextPageBtn.onClick.AddListener(() => SwitchToPage(2));
TintButtonText(nextPageBtn);
prevPageBtn = CreateButton("PrevPage", backgroundPanel.transform, "← Page 1");
RectTransform pbRT = prevPageBtn.GetComponent<RectTransform>();
pbRT.anchorMin = new Vector2(0.05f, 0.02f);
pbRT.anchorMax = new Vector2(0.25f, 0.08f);
pbRT.offsetMin = Vector2.zero;
pbRT.offsetMax = Vector2.zero;
prevPageBtn.onClick.AddListener(() => SwitchToPage(1));
TintButtonText(prevPageBtn);
// 7) PAGE 1 contents: Name & Money
float y = 0.7f;
nameInput = CreateInputField(page1.transform, "Enter New Name...", out RectTransform nRT);
nRT.anchorMin = new Vector2(0.05f, y);
nRT.anchorMax = new Vector2(0.95f, y + 0.12f);
nRT.offsetMin = Vector2.zero;
nRT.offsetMax = Vector2.zero;
nameInput.onEndEdit.AddListener((s) => { if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) ApplyNameFromInput(); /* fallback */ });
applyNameBtn = CreateButton("ApplyNameBtn", page1.transform, "Apply Name");
RectTransform abRT = applyNameBtn.GetComponent<RectTransform>();
abRT.anchorMin = new Vector2(0.30f, y - 0.08f);
abRT.anchorMax = new Vector2(0.70f, y - 0.02f);
abRT.offsetMin = Vector2.zero;
abRT.offsetMax = Vector2.zero;
applyNameBtn.onClick.AddListener(ApplyNameFromInput);
TintButtonText(applyNameBtn);
nameDisplay = CreateText(page1.transform, "Name: " + playerName, 24, TextAnchor.MiddleLeft);
RectTransform ndRT = nameDisplay.GetComponent<RectTransform>();
ndRT.anchorMin = new Vector2(0.05f, y - 0.20f);
ndRT.anchorMax = new Vector2(0.95f, y - 0.10f);
ndRT.offsetMin = Vector2.zero;
ndRT.offsetMax = Vector2.zero;
nameDisplay.color = Color.red;
// Money controls
giveMoneyBtn = CreateButton("GiveMoneyBtn", page1.transform, "Give 1T Money");
RectTransform gmRT = giveMoneyBtn.GetComponent<RectTransform>();
gmRT.anchorMin = new Vector2(0.05f, 0.15f);
gmRT.anchorMax = new Vector2(0.45f, 0.25f);
gmRT.offsetMin = Vector2.zero;
gmRT.offsetMax = Vector2.zero;
giveMoneyBtn.onClick.AddListener(GiveOneTrillion);
TintButtonText(giveMoneyBtn);
moneyDisplay = CreateText(page1.transform, "Money: 0", 24, TextAnchor.MiddleLeft);
RectTransform mdRT = moneyDisplay.GetComponent<RectTransform>();
mdRT.anchorMin = new Vector2(0.55f, 0.15f);
mdRT.anchorMax = new Vector2(0.95f, 0.25f);
mdRT.offsetMin = Vector2.zero;
mdRT.offsetMax = Vector2.zero;
moneyDisplay.color = Color.red;
// 8) PAGE 2 contents: Give Everything + feedback
giveEverythingBtn = CreateButton("GiveEverythingBtn", page2.transform, "Give EVERYTHING");
RectTransform geRT = giveEverythingBtn.GetComponent<RectTransform>();
geRT.anchorMin = new Vector2(0.25f, 0.55f);
geRT.anchorMax = new Vector2(0.75f, 0.67f);
geRT.offsetMin = Vector2.zero;
geRT.offsetMax = Vector2.zero;
giveEverythingBtn.onClick.AddListener(GiveEverything);
TintButtonText(giveEverythingBtn);
feedbackText = CreateText(page2.transform, "Feedback: Ready", 22, TextAnchor.MiddleCenter);
RectTransform ftRT = feedbackText.GetComponent<RectTransform>();
ftRT.anchorMin = new Vector2(0.05f, 0.10f);
ftRT.anchorMax = new Vector2(0.95f, 0.30f);
ftRT.offsetMin = Vector2.zero;
ftRT.offsetMax = Vector2.zero;
feedbackText.color = Color.red;
// Set page2 inactive initially
page2.SetActive(false);
// Apply red tint to other text/buttons
ApplyRedThemeRecursive(backgroundPanel.transform);
}
// ----------------------------
// UI Helpers
// ----------------------------
GameObject CreateUIObject(string name, Transform parent)
{
GameObject go = new GameObject(name);
go.transform.SetParent(parent, false);
RectTransform rt = go.AddComponent<RectTransform>();
rt.sizeDelta = Vector2.zero;
return go;
}
void StretchToParent(RectTransform rt)
{
rt.anchorMin = Vector2.zero;
rt.anchorMax = Vector2.one;
rt.offsetMin = Vector2.zero;
rt.offsetMax = Vector2.zero;
}
Text AddText(Transform parent, string text, int fontSize = 24, TextAnchor anchor = TextAnchor.MiddleCenter)
{
GameObject go = CreateUIObject("Text", parent);
Text t = go.AddComponent<Text>();
t.text = text;
t.fontSize = fontSize;
t.alignment = anchor;
t.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
RectTransform rt = go.GetComponent<RectTransform>();
rt.sizeDelta = new Vector2(200, 40);
return t;
}
Text CreateText(Transform parent, string text, int fontSize, TextAnchor anchor)
{
Text t = AddText(parent, text, fontSize, anchor);
return t;
}
Button CreateButton(string name, Transform parent, string label)
{
GameObject btnGO = CreateUIObject(name, parent);
Image img = btnGO.AddComponent<Image>();
img.color = new Color(0.12f, 0.12f, 0.12f, 0.95f); // dark button
Button b = btnGO.AddComponent<Button>();
RectTransform rt = btnGO.GetComponent<RectTransform>();
rt.sizeDelta = new Vector2(200, 40);
GameObject lbl = CreateUIObject("Label", btnGO.transform);
Text t = lbl.AddComponent<Text>();
t.text = label;
t.alignment = TextAnchor.MiddleCenter;
t.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
t.fontSize = 20;
RectTransform lrt = lbl.GetComponent<RectTransform>();
StretchToParent(lrt);
return b;
}
InputField CreateInputField(Transform parent, string placeholderText, out RectTransform rect)
{
GameObject fieldGO = CreateUIObject("InputField", parent);
Image bg = fieldGO.AddComponent<Image>();
bg.color = new Color(0.0f, 0.0f, 0.0f, 0.6f);
RectTransform rt = fieldGO.GetComponent<RectTransform>();
rt.sizeDelta = new Vector2(400, 40);
InputField input = fieldGO.AddComponent<InputField>();
// Text component
GameObject textGO = CreateUIObject("Text", fieldGO.transform);
Text txt = textGO.AddComponent<Text>();
txt.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
txt.fontSize = 20;
txt.alignment = TextAnchor.MiddleLeft;
txt.color = Color.red;
RectTransform tRT = textGO.GetComponent<RectTransform>();
StretchToParent(tRT);
input.textComponent = txt;
// Placeholder
GameObject phGO = CreateUIObject("Placeholder", fieldGO.transform);
Text ph = phGO.AddComponent<Text>();
ph.text = placeholderText;
ph.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
ph.fontSize = 18;
ph.color = new Color(1f, 0.75f, 0.75f, 0.6f);
ph.alignment = TextAnchor.MiddleLeft;
RectTransform phRT = phGO.GetComponent<RectTransform>();
StretchToParent(phRT);
input.placeholder = ph;
rect = rt;
return input;
}
void TintButtonText(Button b)
{
if (b == null) return;
Text t = b.GetComponentInChildren<Text>();
if (t != null) t.color = Color.red;
}
void ApplyRedThemeRecursive(Transform root)
{
Text[] texts = root.GetComponentsInChildren<Text>(true);
foreach (var t in texts)
t.color = Color.red;
Image[] imgs = root.GetComponentsInChildren<Image>(true);
foreach (var i in imgs)
{
// keep main background black, darken other UI images
if (i.gameObject == backgroundPanel) continue;
if (i.gameObject.name.Contains("Label")) continue;
i.color = new Color(0.08f, 0.08f, 0.08f, 0.95f);
}
}
// ----------------------------
// Menu Actions
// ----------------------------
void ApplyNameFromInput()
{
if (nameInput == null) return;
string candidate = nameInput.text != null ? nameInput.text.Trim() : "";
if (string.IsNullOrEmpty(candidate)) return;
playerName = candidate;
UpdateNameUI();
}
void UpdateNameUI()
{
if (nameDisplay != null)
nameDisplay.text = "Name: " + playerName;
}
void GiveOneTrillion()
{
money += ONE_TRILLION;
UpdateMoneyUI();
}
void UpdateMoneyUI()
{
if (moneyDisplay != null)
moneyDisplay.text = "Money: " + money.ToString("N0");
}
void GiveEverything()
{
// Big money boost
money += ONE_TRILLION * 10;
UpdateMoneyUI();
// Simulate granting items/unlocks (these are debug logs; replace with your game's calls)
foreach (var id in itemsToGive)
Debug.Log("[Codex] Granted item: " + id);
foreach (var u in unlocks)
Debug.Log("[Codex] Unlocked: " + u);
if (feedbackText != null)
feedbackText.text = "Gave EVERYTHING!";
}
// ----------------------------
// Helpers
// ----------------------------
void SwitchToPage(int pageNumber)
{
if (page1 != null) page1.SetActive(pageNumber == 1);
if (page2 != null) page2.SetActive(pageNumber == 2);
}
void TrySelectDefault()
{
// Try to select default UI element for keyboard navigation
if (nameInput != null)
{
nameInput.ActivateInputField();
}
}
}
| Status | Released |
| Author | 007n7makesapks |
Leave a comment
Log in with itch.io to leave a comment.