Initial commit

This commit is contained in:
Lncvrt committed 2026-10-13 21:14:39 -07:00
commit 53ef868e68
5764 files changed
+464615

No files matched your search

+121
View File
@@ -0,0 +1,121 @@
using UnityEngine;
using UnityEngine.InputSystem;
public class CameraHandler : MonoBehaviour
{
bool isDragging = false;
Vector2 pointerDownPos;
bool pointerDown = false;
float prevPinchDistance = -1;
Vector3 dragWorldStart;
void Update()
{
HandleCameraMovement();
HandleZoom();
}
void HandleCameraMovement()
{
Vector2 inputPos = Vector2.zero;
bool pressed = false;
if (Application.isMobilePlatform && Touchscreen.current != null)
{
var touch = Touchscreen.current.primaryTouch;
if (touch.press.isPressed)
{
inputPos = touch.position.ReadValue();
pressed = true;
}
}
else if (Mouse.current != null)
{
if (Mouse.current.leftButton.isPressed)
{
inputPos = Mouse.current.position.ReadValue();
pressed = true;
}
}
if (!pressed)
{
pointerDown = false;
isDragging = false;
return;
}
Camera cam = Camera.main;
if (!pointerDown)
{
pointerDown = true;
pointerDownPos = inputPos;
dragWorldStart = cam.ScreenToWorldPoint(
new Vector3(inputPos.x, inputPos.y, -cam.transform.position.z)
);
return;
}
if (!isDragging)
{
if (Vector2.Distance(inputPos, pointerDownPos) < 5f)
return;
isDragging = true;
}
Vector3 currentWorld = cam.ScreenToWorldPoint(
new Vector3(inputPos.x, inputPos.y, -cam.transform.position.z)
);
Vector3 movement = dragWorldStart - currentWorld;
cam.transform.position += movement;
}
void HandleZoom()
{
if (Application.isMobilePlatform && Touchscreen.current != null)
{
var touches = Touchscreen.current.touches;
if (touches.Count >= 2)
{
Vector2 pos1 = touches[0].position.ReadValue();
Vector2 pos2 = touches[1].position.ReadValue();
if (touches[0].press.isPressed && touches[1].press.isPressed)
{
float currentDist = Vector2.Distance(pos1, pos2);
if (prevPinchDistance > 0)
{
float diff = currentDist - prevPinchDistance;
Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize - (diff * 0.1f), 1f, 100f);
}
prevPinchDistance = currentDist;
return;
}
}
prevPinchDistance = -1;
}
else
{
float scroll = Mouse.current.scroll.ReadValue().y;
if (scroll != 0)
{
if (Keyboard.current.leftCtrlKey.isPressed)
{
Camera.main.orthographicSize = Mathf.Clamp(Camera.main.orthographicSize - scroll, 1f, 100f);
}
else
{
var pos = Camera.main.transform.position;
pos.y += scroll * 5f;
Camera.main.transform.position = pos;
}
}
}
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 5741e4f9d50a9654592384d58b622fa4
+207
View File
@@ -0,0 +1,207 @@
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class ObjectLoader : MonoBehaviour
{
[SerializeField] private Canvas canvas;
private string levelData = "kS29,1_40_2_62_3_255_4_0_5_0,kS30,1_0_2_19_3_200_4_0_5_0,kS31,1_255_2_255_3_255_4_0_5_0,kS32,1_255_2_255_3_255_4_0_5_0,kS33,1_255_2_255_3_255_4_0_5_0,kS34,1_255_2_255_3_255_4_0_5_0,kS35,1_255_2_255_3_255_4_0_5_0,kS36,1_255_2_255_3_255_4_0_5_0,kS37,1_255_2_255_3_255_4_0_5_0,kA13,0,kA15,0,kA16,0,kA14,,kA6,0,kA7,0,kA2,0,kA3,0,kA8,0,kA4,0,kA9,0,kA10,0,kA11,0;1,29,2,135,3,135,7,158,8,3,9,255,10,10;1,30,2,135,3,165,7,96,8,0,9,185,10,10;1,8,2,525,3,15;1,39,2,975,3,6;1,8,2,1005,3,15;1,8,2,1485,3,15;1,8,2,1455,3,15;1,1,2,1515,3,15;1,9,2,1545,3,2;1,9,2,1575,3,2;1,20,2,1575,3,13;1,16,2,1515,3,44;1,1,2,1635,3,45;1,9,2,1605,3,2;1,9,2,1635,3,2;1,9,2,1665,3,2;1,7,2,1635,3,15;1,9,2,1695,3,2;1,19,2,1695,3,19;1,16,2,1635,3,74;1,9,2,1725,3,2;1,1,2,1755,3,75;1,7,2,1755,3,45;1,7,2,1755,3,15;1,16,2,1755,3,104;1,8,2,2385,3,15;1,8,2,2415,3,15;1,3,2,2595,3,15;1,2,2,2625,3,15;1,2,2,2655,3,15;1,2,2,2685,3,15;1,2,2,2715,3,15;1,2,2,2745,3,15;1,2,2,2775,3,15;1,3,2,2805,3,15,4,1;1,9,2,2835,3,2;1,9,2,2865,3,2;1,9,2,2895,3,2;1,20,2,2865,3,13;1,3,2,2925,3,15;1,2,2,2955,3,15;1,2,2,2985,3,15;1,2,2,3015,3,15;1,2,2,3045,3,15;1,2,2,3075,3,15;1,8,2,3075,3,45;1,2,2,3105,3,15;1,2,2,3135,3,15;1,2,2,3165,3,15;1,2,2,3195,3,15;1,3,2,3225,3,15,4,1;1,9,2,3255,3,2;1,9,2,3285,3,2;1,21,2,3285,3,7;1,9,2,3315,3,2;1,3,2,3345,3,45;1,2,2,3345,3,15,6,-90;1,2,2,3375,3,45;1,5,2,3375,3,15;1,2,2,3405,3,45;1,2,2,3435,3,45;1,2,2,3465,3,45;1,2,2,3495,3,45;1,5,2,3405,3,15;1,5,2,3435,3,15;1,5,2,3465,3,15;1,5,2,3495,3,15;1,2,2,3525,3,45;1,5,2,3525,3,15;1,2,2,3585,3,45;1,2,2,3555,3,45;1,5,2,3585,3,15;1,5,2,3555,3,15;1,8,2,3555,3,75;1,2,2,3645,3,45;1,2,2,3675,3,45;1,2,2,3615,3,45;1,5,2,3615,3,15;1,5,2,3645,3,15;1,5,2,3675,3,15;1,27,2,3615,3,165;1,9,2,3765,3,2;1,9,2,3795,3,2;1,3,2,3735,3,45,4,1;1,2,2,3735,3,15,6,90;1,5,2,3705,3,15;1,2,2,3705,3,45;1,9,2,3825,3,2;1,9,2,3885,3,2;1,9,2,3855,3,2;1,40,2,3855,3,83;1,17,2,3855,3,71,5,1;1,18,2,3855,3,19;1,9,2,3915,3,2;1,9,2,3945,3,2;1,9,2,3975,3,2;1,40,2,3975,3,113;1,17,2,3975,3,101,5,1;1,9,2,4005,3,2;1,9,2,4035,3,2;1,9,2,4065,3,2;1,9,2,4095,3,2;1,21,2,4035,3,7;1,40,2,4095,3,143;1,17,2,4095,3,131,5,1;1,9,2,4125,3,2;1,9,2,4155,3,2;1,9,2,4185,3,2;1,9,2,4215,3,2;1,9,2,4245,3,2;1,9,2,4275,3,2;1,19,2,4209,3,19;1,40,2,4215,3,173;1,17,2,4215,3,161,5,1;1,9,2,4305,3,2;1,9,2,4335,3,2;1,9,2,4365,3,2;1,9,2,4395,3,2;1,40,2,4335,3,203;1,17,2,4335,3,191,5,1;1,18,2,4305,3,19;1,9,2,4425,3,2;1,9,2,4455,3,2;1,9,2,4485,3,2;1,20,2,4455,3,13;1,6,2,4455,3,165,6,-90;1,7,2,4485,3,165,6,-90;1,2,2,4515,3,135,6,-90;1,2,2,4515,3,105,6,-90;1,2,2,4515,3,75,6,-90;1,2,2,4515,3,45,6,-90;1,2,2,4515,3,15,6,-90;1,2,2,4575,3,165;1,5,2,4545,3,135;1,5,2,4575,3,135;1,5,2,4575,3,15;1,5,2,4545,3,15;1,5,2,4545,3,45;1,5,2,4545,3,75;1,5,2,4575,3,105;1,5,2,4545,3,105;1,5,2,4575,3,75;1,5,2,4575,3,45;1,2,2,4545,3,165;1,2,2,4515,3,165;1,2,2,4605,3,165;1,2,2,4635,3,165;1,2,2,4665,3,165;1,2,2,4695,3,165;1,5,2,4605,3,135;1,5,2,4635,3,135;1,5,2,4665,3,135;1,5,2,4695,3,135;1,5,2,4695,3,15;1,5,2,4665,3,15;1,5,2,4635,3,15;1,5,2,4605,3,15;1,5,2,4605,3,75;1,5,2,4605,3,105;1,5,2,4605,3,45;1,5,2,4635,3,45;1,5,2,4665,3,45;1,5,2,4695,3,45;1,5,2,4695,3,105;1,5,2,4665,3,105;1,5,2,4635,3,105;1,5,2,4635,3,75;1,5,2,4665,3,75;1,5,2,4695,3,75;1,8,2,4635,3,195;1,40,2,4695,3,233;1,8,2,4665,3,195;1,8,2,4695,3,195;1,40,2,4665,3,233;1,2,2,4725,3,165;1,2,2,4755,3,165;1,2,2,4785,3,165;1,5,2,4725,3,135;1,5,2,4755,3,135;1,5,2,4785,3,135;1,5,2,4785,3,15;1,5,2,4755,3,15;1,5,2,4725,3,15;1,5,2,4725,3,45;1,5,2,4755,3,45;1,5,2,4785,3,45;1,5,2,4785,3,75;1,5,2,4785,3,105;1,5,2,4755,3,105;1,5,2,4725,3,105;1,5,2,4725,3,75;1,5,2,4755,3,75;1,8,2,4725,3,195;1,2,2,4815,3,165;1,5,2,4815,3,135;1,5,2,4815,3,105;1,5,2,4815,3,75;1,5,2,4815,3,45;1,5,2,4815,3,15;1,8,2,4875,3,195;1,2,2,4845,3,165;1,2,2,4875,3,165;1,5,2,4845,3,15;1,5,2,4875,3,15;1,5,2,4875,3,135;1,5,2,4845,3,135;1,5,2,4845,3,105;1,5,2,4845,3,75;1,5,2,4875,3,75;1,5,2,4875,3,45;1,5,2,4875,3,105;1,5,2,4845,3,45;1,40,2,4905,3,233;1,40,2,4935,3,233;1,8,2,4905,3,195;1,8,2,4935,3,195;1,8,2,4965,3,195;1,2,2,4905,3,165;1,2,2,4935,3,165;1,2,2,4965,3,165;1,2,2,4995,3,165;1,5,2,4905,3,15;1,5,2,4935,3,15;1,5,2,4965,3,15;1,5,2,4995,3,15;1,5,2,4995,3,105;1,5,2,4965,3,105;1,5,2,4965,3,135;1,5,2,4935,3,135;1,5,2,4905,3,135;1,5,2,4905,3,45;1,5,2,4935,3,45;1,5,2,4965,3,45;1,5,2,4995,3,45;1,5,2,4995,3,135;1,5,2,4995,3,75;1,5,2,4965,3,75;1,5,2,4935,3,75;1,5,2,4905,3,75;1,5,2,4905,3,105;1,5,2,4935,3,105;1,2,2,5025,3,165;1,2,2,5055,3,165;1,5,2,5025,3,15;1,5,2,5055,3,15;1,5,2,5085,3,15;1,5,2,5085,3,45;1,5,2,5085,3,75;1,5,2,5085,3,105;1,5,2,5055,3,135;1,5,2,5025,3,135;1,5,2,5025,3,105;1,5,2,5025,3,45;1,5,2,5055,3,45;1,5,2,5055,3,75;1,5,2,5055,3,105;1,5,2,5025,3,75;1,3,2,5085,3,165,4,1;1,4,2,5085,3,135,4,1;1,5,2,5175,3,15;1,5,2,5145,3,15;1,5,2,5115,3,15;1,5,2,5115,3,45;1,5,2,5115,3,75;1,5,2,5115,3,105;1,5,2,5175,3,45;1,5,2,5145,3,45;1,5,2,5145,3,75;1,5,2,5145,3,105;1,5,2,5175,3,105;1,5,2,5175,3,75;1,2,2,5115,3,135;1,2,2,5145,3,135;1,2,2,5175,3,135;1,5,2,5295,3, Line truncated
//private string levelData = "kS1,40,kS2,125,kS3,255,kS4,0,kS5,102,kS6,255,kA1,0;1,1,2,345,3,135;1,2,2,405,3,135;1,3,2,465,3,135;1,4,2,525,3,135;1,5,2,585,3,135;1,6,2,645,3,135;1,7,2,705,3,135;1,8,2,765,3,135;1,39,2,825,3,126;1,9,2,885,3,122;1,40,2,945,3,143;1,35,2,1005,3,122;1,36,2,1065,3,135;1,10,2,1125,3,135;1,11,2,1185,3,135;1,12,2,1245,3,135;1,13,2,1305,3,135;1,15,2,1365,3,141;1,16,2,1425,3,134;1,17,2,1485,3,127;1,18,2,1545,3,139;1,19,2,1605,3,139;1,20,2,1665,3,133;1,21,2,1725,3,127;1,41,2,1785,3,153;1,22,2,1845,3,135;1,24,2,1905,3,135;1,23,2,1965,3,135;1,25,2,2025,3,135;1,26,2,2085,3,135;1,27,2,2145,3,135;1,29,2,2205,3,135,7,244,8,255,9,255,10,0.5;1,30,2,2265,3,135,7,244,8,255,9,255,10,0.5;1,33,2,2385,3,135;1,32,2,2445,3,135;";
public static Dictionary<string, string> SplitGd(string input, string splitKey)
{
var parts = input.Split(new[] { splitKey }, System.StringSplitOptions.None);
var result = new Dictionary<string, string>();
for (int i = 0; i < parts.Length - 1; i += 2)
{
result[parts[i]] = parts[i + 1];
}
return result;
}
void Start()
{
var objs = levelData.Split(";")[1..^1];
foreach (var objData in objs)
{
var parsedObjData = SplitGd(objData, ",");
Debug.Log(string.Join(", ", parsedObjData.Select(kvp => $"{kvp.Key}: {kvp.Value}")));
GameObject obj = new();
obj.transform.parent = canvas.transform;
if (parsedObjData.ContainsKey("6")) obj.transform.rotation = Quaternion.Euler(0f, 0f, -float.Parse(parsedObjData["6"]));
obj.name = parsedObjData["1"];
Vector2 scale = Vector2.one;
if (parsedObjData.ContainsKey("4")) scale.x = parsedObjData["4"] == "1" ? -1 : 1;
if (parsedObjData.ContainsKey("5")) scale.y = parsedObjData["5"] == "1" ? -1 : 1;
obj.transform.localScale = scale;
RectTransform objRect = obj.AddComponent<RectTransform>();
objRect.anchorMin = new Vector2(0, 0);
objRect.anchorMax = new Vector2(0, 0);
objRect.anchoredPosition = new(
(float.Parse(parsedObjData["2"]) - 15f) * (100f / 30f) + 50f,
(float.Parse(parsedObjData["3"]) - 15f) * (100f / 30f) + 50f
);
Image objSprite = obj.AddComponent<Image>();
switch (int.Parse(parsedObjData["1"]))
{
case 1:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/square_01_001");
break;
case 2:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/square_02_001");
break;
case 3:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/square_03_001");
break;
case 4:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/square_04_001");
break;
case 5:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/square_05_001");
break;
case 6:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/square_06_001");
break;
case 7:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/square_07_001");
break;
case 8:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/spike_01_001");
break;
case 39:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/spike_02_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 40f);
break;
case 9:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/pit_03_001");
objSprite.color = Color.black;
break;
case 40:
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 40f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 90f);
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/plank_01_color_001");
objSprite.color = Color.black;
GameObject subSpriteObj = new();
subSpriteObj.transform.parent = obj.transform;
subSpriteObj.transform.localPosition = Vector2.zero;
subSpriteObj.transform.localScale = Vector2.one;
RectTransform subSpriteRect = subSpriteObj.AddComponent<RectTransform>();
subSpriteRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 50f);
Image subSprite = subSpriteObj.AddComponent<Image>();
subSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/plank_01_001");
break;
case 35:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/bump_01_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 16f);
break;
case 36:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/ring_01_001");
break;
case 10:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/portal_01_front_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 250f);
break;
case 11:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/portal_02_front_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 250f);
break;
case 12:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/portal_03_front_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 250f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 120f);
break;
case 13:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/portal_04_front_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 250f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 120f);
break;
case 15:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/rod_01_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 140f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 20f);
break;
case 16:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/rod_02_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 90f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 20f);
break;
case 17:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/rod_03_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 40);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 20f);
break;
case 18:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/d_spikes_01_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 126.66f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 425f);
break;
case 19:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/d_spikes_02_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 126.66f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 330f);
break;
case 20:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/d_spikes_03_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 89.334f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 235f);
break;
case 21:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/d_spikes_04_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 46.672f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 120f);
break;
case 41:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet/chain_01_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 230f);
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 80f);
break;
case 22:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eeNoneBtn_001");
break;
case 24:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eeFTBtn_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 60f);
break;
case 23:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eeFBBtn_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 60f);
break;
case 25:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eeFLBtn_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 60f);
break;
case 26:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eeFRBtn_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 60f);
break;
case 27:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eeSUBtn_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 40f);
break;
case 29:
case 30:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eTintCol01Btn_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, 80f);
break;
case 33:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eGhostDBtn_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 65f);
break;
case 32:
objSprite.sprite = Resources.Load<Sprite>("GJ_GameSheet02/edit_eGhostEBtn_001");
objRect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, 65f);
break;
}
}
}
}
+2
View File
@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d554b87f590682447a2c0b9cd29120d6