[
  {
    "path": "LD45/Audio/AudioManager.cs",
    "content": "﻿using UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\nnamespace Audio {\r\n\tpublic class AudioManager : MonoBehaviour {\r\n\r\n\t\tpublic Sound[] sounds;\r\n\r\n\t\tpublic bool muted;\r\n\r\n\t\tpublic bool muteMusic;\r\n\t\t\r\n\t\tpublic static AudioManager Instance { get; set; }\r\n       \r\n\t\tvoid Awake () {\r\n\t\t\tInstance = this;\r\n \r\n\t\t\tforeach (Sound s in sounds) {\r\n\t\t\t\ts.source = gameObject.AddComponent<AudioSource>();\r\n\t\t\t\ts.source.clip = s.clip;\r\n \r\n\t\t\t\ts.source.loop = s.loop;\r\n\t\t\t\ts.source.volume = s.volume;\r\n\t\t\t\ts.source.pitch = s.pitch;\r\n\t\t\t\ts.source.bypassListenerEffects = s.bypass;\r\n\t\t\t}\r\n\r\n\t\t\tPlay(\"Song\");\r\n\t\t\tSetVolume(0.7f);\r\n\t\t}\r\n\r\n\t\tpublic void MuteSounds() {\r\n\t\t\tmuted = !muted;\r\n\t\t}\r\n\t\t\r\n\t\tpublic void MuteMusic() {\r\n\t\t\tmuteMusic = !muteMusic;\r\n\t\t\tfloat v;\r\n\t\t\tif (muteMusic) v = 0f;\r\n\t\t\telse v = 1f;\r\n\t\t\tforeach (Sound s in sounds) {\r\n\t\t\t\tif (s.name == \"Song\") {\r\n\t\t\t\t\ts.source.volume = v;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void SetVolume(float v) {\r\n\t\t\tforeach (Sound s in sounds) {\r\n\t\t\t\tif (s.name == \"Song\") {\r\n\t\t\t\t\ts.source.volume = v;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void UnmuteMusic() {\r\n\t\t\tforeach (Sound s in sounds) {\r\n\t\t\t\tif (s.name == \"Song\") {\r\n\t\t\t\t\ts.source.volume = 1.15f;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n \r\n\t\tpublic void Play(string n) {\r\n\t\t\tif (muted && n != \"Song\") return;\r\n\t\t\tforeach (Sound s in sounds) {\r\n\t\t\t\tif (s.name == n) {\r\n\t\t\t\t\ts.source.Play();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tpublic void Stop(string n) {\r\n\t\t\tforeach (Sound s in sounds) {\r\n\t\t\t\tif (s.name == n) {\r\n\t\t\t\t\ts.source.Stop();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n"
  },
  {
    "path": "LD45/Audio/Sound.cs",
    "content": "﻿using UnityEngine;\r\n\r\nnamespace Audio {\r\n    [System.Serializable]\r\n    public class Sound {\r\n \r\n        public string name;\r\n \r\n        public AudioClip clip;\r\n               \r\n        [Range(0, 2f)]\r\n        public float volume;\r\n        [Range(0, 2)]\r\n        public float pitch;\r\n \r\n        public bool loop;\r\n\r\n        public bool bypass;\r\n \r\n        [HideInInspector]\r\n        public AudioSource source;\r\n    }\r\n}"
  },
  {
    "path": "LD45/Board/GenerateDungeon.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class GenerateDungeon : MonoBehaviour {\r\n\r\n    public GameObject normalChest, upgradeChest, eliteChest;\r\n\r\n    private int nRooms = 10;\r\n    private int n = 50;\r\n    private float scale = 30f;\r\n\r\n    public GameObject room, enemyRoom, corridor, empty, mark, floorNr, emptyRoom;\r\n\r\n    private Vector2 spawnPos;\r\n\r\n    public int[,] rooms;\r\n    public List<Tuple<Vector2, Vector2>> roomPositions;\r\n    private List<Tuple<Vector2, Vector2>> availableRooms;\r\n\r\n    private List<Vector2> directionsList;\r\n    private List<Vector2> currentDirections;\r\n\r\n    public List<GameObject> objects;\r\n    \r\n    public static GenerateDungeon Instance { get; set; }\r\n    private void Awake() {\r\n        Instance = this;\r\n        objects = new List<GameObject>();\r\n    }\r\n\r\n    public void DeleteDungeon() {\r\n        print(\"c: \" + objects.Count);\r\n        foreach (var g in objects) {\r\n            Destroy(g);\r\n        }\r\n    }\r\n\r\n    public void GenerateNewDungeon() {\r\n        roomPositions = new List<Tuple<Vector2, Vector2>>();\r\n        rooms = new int[n,n];\r\n        \r\n        directionsList = new List<Vector2>();\r\n        directionsList.Add(new Vector2(0, 1));\r\n        directionsList.Add(new Vector2(0, -1));\r\n        directionsList.Add(new Vector2(1, 0));\r\n        directionsList.Add(new Vector2(-1, 0));\r\n\r\n        Vector2 pos = new Vector2(25,25);\r\n        Vector2 size = new Vector2(Random.Range(1, 2), Random.Range(1, 2));\r\n        Tuple<Vector2, Vector2> firstRoom = new Tuple<Vector2, Vector2>(pos, size);\r\n        roomPositions.Add(firstRoom);\r\n        Instantiate(floorNr, pos * scale, Quaternion.identity);\r\n        markRoom(firstRoom, 3);\r\n        \r\n        for (int i = 0; i < nRooms; i++) {\r\n            int c = 0;\r\n            //Dont do this at home kids LOL\r\n            while (!GenerateNewRoom()) {\r\n                c++;\r\n                if (c > 100) break;\r\n            }\r\n        }\r\n        availableRooms = new List<Tuple<Vector2, Vector2>>(roomPositions);\r\n\r\n        Vector2 finalRoom = availableRooms[availableRooms.Count - 1].Item1;\r\n        rooms[(int) finalRoom.x, (int) finalRoom.y] = 3;\r\n        FindSpawns();\r\n        FindChests();\r\n        ShowRooms();\r\n    }\r\n\r\n    private void FindChests() {\r\n        int total = Random.Range(3, 5);\r\n        print(\"total: \" + total);\r\n        \r\n        int normalChests = Random.Range(1, 4);\r\n        total -= normalChests;\r\n        int upgradeChests = total;\r\n        int eliteChests = 0;\r\n        if (Random.Range(0f, 1f) < 0.25f) eliteChests = 1;\r\n\r\n        for (int i = 0; i < normalChests; i++) {\r\n            int r = Random.Range(0, availableRooms.Count);\r\n            Vector2 pos = availableRooms[r].Item1;\r\n            objects.Add(Instantiate(normalChest, pos * scale, Quaternion.identity));\r\n            availableRooms.RemoveAt(r);\r\n            rooms[(int) pos.x, (int) pos.y] = 3;\r\n        }\r\n        \r\n        for (int i = 0; i < upgradeChests; i++) {\r\n            int r = Random.Range(0, availableRooms.Count);\r\n            Vector2 pos = availableRooms[r].Item1;\r\n            objects.Add(Instantiate(upgradeChest, pos * scale, Quaternion.identity));\r\n            availableRooms.RemoveAt(r);\r\n            rooms[(int) pos.x, (int) pos.y] = 3;\r\n        }\r\n        for (int i = 0; i < eliteChests; i++) {\r\n            int r = Random.Range(0, availableRooms.Count);\r\n            Vector2 pos = availableRooms[r].Item1;\r\n            objects.Add(Instantiate(eliteChest, pos * scale, Quaternion.identity));\r\n            availableRooms.RemoveAt(r);\r\n            rooms[(int) pos.x, (int) pos.y] = 3;\r\n        }\r\n    }\r\n\r\n    private void ShowAvailable() {\r\n        for (int i = 0; i < availableRooms.Count; i++) {\r\n            print(availableRooms[i].Item1.x + \", \" + availableRooms[i].Item1.y );\r\n        }\r\n    }\r\n\r\n    private void FindSpawns() {\r\n        Vector2 playerSpawn = roomPositions[0].Item1;\r\n        spawnPos = playerSpawn;\r\n        Vector2 bossSpawn = roomPositions[nRooms].Item1;\r\n\r\n        availableRooms.RemoveAt(nRooms);\r\n        availableRooms.RemoveAt(0);\r\n        //Instantiate(mark, playerSpawn * scale, Quaternion.identity);\r\n        objects.Add(Instantiate(mark, bossSpawn * scale, Quaternion.identity));\r\n    }\r\n\r\n    private void FindRandomLeaf() {\r\n        \r\n    }\r\n\r\n    private bool GenerateNewRoom() {\r\n        int roomNumber = Random.Range(0, roomPositions.Count);\r\n        Vector2 npos = roomPositions[roomNumber].Item1;\r\n        Vector2 nsize = roomPositions[roomNumber].Item2;\r\n            \r\n        int x = Random.Range(0, (int) nsize.x);\r\n        int y = Random.Range(0, (int) nsize.y);\r\n            \r\n        //Find direction to create new room\r\n        currentDirections = new List<Vector2>();\r\n        currentDirections.Add(new Vector2(0, 1));\r\n        currentDirections.Add(new Vector2(0, -1));\r\n        currentDirections.Add(new Vector2(1, 0));\r\n        currentDirections.Add(new Vector2(-1, 0));\r\n        for (int u = 0; u < 4; u++) {\r\n            int nr = Random.Range(0, currentDirections.Count);\r\n            Vector2 dir = currentDirections[nr] * 2;\r\n            currentDirections.RemoveAt(nr);\r\n            if (!hasNeighbours(npos + dir)) {\r\n                if (nNeighbours(npos+dir) > 2) continue;\r\n                Vector2 p = npos + dir;\r\n                Vector2 s = nsize;\r\n                Tuple<Vector2, Vector2> nRoom = new Tuple<Vector2, Vector2>(p, s);\r\n                roomPositions.Add(nRoom);\r\n                markRoom(nRoom, 1);\r\n                rooms[(int) (npos.x + (dir.x / 2)), (int) (npos.y + (dir.y / 2))] = 2;\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private bool hasNeighbours(Vector2 pos) {\r\n        for (int y = -1; y < 2; y++) {\r\n            for (int x = -1; x < 2; x++) {\r\n                Vector2 p = new Vector2(x, y) + pos;\r\n                if (p.x < 0 || p.x > n || p.y < 0 || p.y > n) continue;\r\n                if (rooms[(int) p.x, (int) p.y] != 0)\r\n                    return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    \r\n    private int nNeighbours(Vector2 pos) {\r\n        int count = 0;\r\n\r\n        if (rooms[(int) pos.x + 2, (int) pos.y] != 0) count++;\r\n        if (rooms[(int) pos.x - 2, (int) pos.y] != 0) count++;\r\n        if (rooms[(int) pos.x, (int) pos.y + 2] != 0) count++;\r\n        if (rooms[(int) pos.x, (int) pos.y - 2] != 0) count++;\r\n\r\n        return count;\r\n    }\r\n\r\n    private void markRoom(Tuple<Vector2, Vector2> newRoom, int mark) {\r\n        Vector2 pos = newRoom.Item1;\r\n        Vector2 size = newRoom.Item2;\r\n        for (int x = 0; x < size.x; x++) {\r\n            rooms[(int) pos.x + x, (int) pos.y] = mark;\r\n        }\r\n        for (int y = 1; y < size.y; y++) {\r\n            rooms[(int) pos.x, (int) pos.y + y] = mark;\r\n        }\r\n\r\n        if (size.x == 2 && size.y == 2)\r\n            rooms[(int) pos.x + 1, (int) pos.y + 1] = mark;\r\n    }\r\n\r\n    private void ShowRooms() {\r\n        for (int x = 0; x < n; x++) {\r\n            for (int y = 0; y < n; y++) {\r\n                if (rooms[x, y] == 0) { //nothing\r\n                    GameObject r = Instantiate(empty, new Vector2(x * scale, y * scale), Quaternion.identity);\r\n                    r.transform.localScale = Vector2.one * scale;\r\n                    objects.Add(r);\r\n                }\r\n\r\n                if (rooms[x, y] == 1) { //room\r\n                    GameObject r = Instantiate(enemyRoom, new Vector2(x * scale, y * scale), Quaternion.identity);\r\n                    r.transform.localScale = Vector2.one * scale;\r\n                    objects.Add(r);\r\n                }\r\n                else if (rooms[x, y] == 2) { //corridor\r\n                    float a = 0;\r\n                    if (rooms[x + 1, y] == 1 || rooms[x - 1, y] == 1) a = 90;\r\n                    if (rooms[x + 1, y] == 3 || rooms[x - 1, y] == 3) a = 90;\r\n                    Vector2 s = corridor.transform.localScale * scale;\r\n                    GameObject r = Instantiate(corridor, new Vector2(x * scale, y * scale), Quaternion.Euler(new Vector3(0,0,a)));\r\n                    r.transform.localScale = s;\r\n                    objects.Add(r);\r\n                }\r\n                else if (rooms[x, y] == 3) {\r\n                    GameObject r = Instantiate(emptyRoom, new Vector2(x * scale, y * scale), Quaternion.identity);\r\n                    r.transform.localScale = Vector2.one * scale;\r\n                    objects.Add(r);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public Vector2 GetSpawnPos() {\r\n        return spawnPos * scale;\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Board/SpawnEnemy.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class SpawnEnemy : MonoBehaviour {\r\n\r\n    public GameObject enemy, p, spawnPopFx;\r\n    public ParticleSystem ps;\r\n    \r\n    private void Start() {\r\n        Invoke(nameof(Spawn), Random.Range(1f, 2f));\r\n        ParticleSystem.MainModule m = ps.main;\r\n        m.startColor = enemy.GetComponent<SpriteRenderer>().color;\r\n    }\r\n\r\n    private void Spawn() {\r\n        enemy.SetActive(true);\r\n        Destroy(p);\r\n        ParticleSystem ps2 = Instantiate(spawnPopFx, transform.position, Quaternion.identity).GetComponent<ParticleSystem>();\r\n        ParticleSystem.MainModule m2 = ps2.main;\r\n        m2.startColor = enemy.GetComponent<SpriteRenderer>().color;\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Board/SpawnProps.cs",
    "content": "﻿using System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class SpawnProps : MonoBehaviour {\r\n\r\n    public GameObject barrel;\r\n    public GameObject crate;\r\n    public GameObject wall;\r\n    public GameObject lava;\r\n\r\n    public bool walls;\r\n    \r\n    void Start() {\r\n        \r\n        \r\n        int crates = Random.Range(0, 3);\r\n\r\n        for (int i = 0; i < crates; i++) {\r\n            Vector3 pos = new Vector3(Random.Range(-10, 10), Random.Range(-10, 10));\r\n            GenerateDungeon.Instance.objects.Add(Instantiate(crate, transform.position + pos, Quaternion.identity));\r\n        }\r\n\r\n        if (walls) {\r\n            int walls = Random.Range(0, 4); \r\n            for (int i = 0; i < walls; i++) {\r\n                Vector3 pos = new Vector3(Random.Range(-7, 7), Random.Range(-7, 7));\r\n                Vector3 r = new Vector3(0, 0, Random.Range(1, 3) * 90);\r\n                GenerateDungeon.Instance.objects.Add(Instantiate(wall, transform.position + pos, Quaternion.Euler(r)));\r\n            }\r\n        }\r\n        \r\n    }\r\n    \r\n}\r\n"
  },
  {
    "path": "LD45/Board/StartRoom.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing Audio;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class StartRoom : MonoBehaviour {\r\n\r\n    public SpriteRenderer doorSprite;\r\n    public GameObject colliders, roomfade, enemy;\r\n    private bool started;\r\n\r\n    private int waves, currentWave;\r\n    private float roomSize;\r\n\r\n    private List<GameObject> enemies;\r\n\r\n    private bool readyToCheck = true;\r\n\r\n    private void Awake() {\r\n        enemies = new List<GameObject>();\r\n        roomSize = 28f;\r\n    }\r\n\r\n    private void OnTriggerEnter2D(Collider2D other) {\r\n        if (started) return;\r\n        if (other.gameObject.CompareTag(\"Player\")) {\r\n            CameraMovement.Instance.SetRoom(transform);\r\n            CameraShake.ShakeOnce(0.5f, 2f);\r\n            AudioManager.Instance.Play(\"DoorOpen\");\r\n            doorSprite.sortingOrder = 1;\r\n            colliders.SetActive(true);\r\n            roomfade.SetActive(true);\r\n            started = true;\r\n            waves = Game.Instance.GetWaveAmount();\r\n            currentWave = 1;\r\n        }\r\n    }\r\n\r\n    private void FixedUpdate() {\r\n        if (!started || !readyToCheck) return;\r\n        \r\n        CheckEnemyList();\r\n        if (enemies.Count == 0) {\r\n            if (currentWave > waves) {\r\n                FinishRoom();\r\n                return;\r\n            }\r\n            SpawnEnemies();\r\n            currentWave++;\r\n            readyToCheck = false;\r\n        }\r\n    }\r\n\r\n    private void CheckEnemyList() {\r\n        for (int i = 0; i < enemies.Count; i++) {\r\n            if (enemies[i] == null)\r\n                enemies.RemoveAt(i);\r\n        }\r\n    }\r\n\r\n    private void SpawnEnemies() {\r\n        print(\"spawning bois\");\r\n        int n = Game.Instance.GetEnemyAmount();\r\n        for (int i = 0; i < n; i++) {\r\n            Invoke(nameof(SpawnOneEnemy), Random.Range(0, 7));\r\n        }\r\n\r\n        Invoke(nameof(GetCheckReady), 7f);\r\n    }\r\n\r\n    private void GetCheckReady() {\r\n        readyToCheck = true;\r\n    }\r\n\r\n    private void SpawnOneEnemy() {\r\n        GameObject e = SelectEnemy();\r\n        Vector3 p = (transform.position + new Vector3(Random.Range(-roomSize / 2, roomSize / 2),Random.Range(-roomSize / 2, roomSize / 2), 0));\r\n        enemies.Add(Instantiate(e, p, Quaternion.identity).transform.GetChild(0).gameObject);\r\n    }\r\n\r\n    private GameObject SelectEnemy() {\r\n        return Game.Instance.GetEnemy();\r\n    }\r\n\r\n    public void FinishRoom() {\r\n        doorSprite.sortingOrder = -1;\r\n        colliders.SetActive(false);\r\n        roomfade.SetActive(false);\r\n        CameraMovement.Instance.SetRoom(null);\r\n        AudioManager.Instance.Play(\"DoorClose\");\r\n        Destroy(this);\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Camera/CameraMovement.cs",
    "content": "﻿using System;\r\nusing UnityEngine;\r\npublic class CameraMovement : MonoBehaviour {\r\n\r\n\tpublic Transform player;\r\n\r\n\tprivate float speed = 0.7f;\r\n\tprivate Vector2 velSpeed;\r\n\r\n\tprivate float defaultZoom = 8f;\r\n\tprivate float zoomSpeed = 1f;\r\n\tprivate float velZoom;\r\n\r\n\tprivate Vector2 startPos;\r\n\tprivate Transform roomT;\r\n\t\r\n\tpublic Camera c;\r\n\r\n\tpublic static CameraMovement Instance { get; set; }\r\n\r\n\tprivate void Awake() {\r\n\t\tInstance = this;\r\n\t\tstartPos = transform.position;\r\n\t}\r\n\r\n\tvoid FixedUpdate () {\r\n\t\tif (player == null) return;\r\n\t\t//Movement\r\n\t\tfloat playerSpeed = PlayerMovement.Instance.GetRb().velocity.magnitude; \r\n\t\tVector2 posOffset = PlayerMovement.Instance.GetRb().velocity / 1.75f;\r\n\t\tVector2 myPos = new Vector2(player.transform.position.x, player.transform.position.y) + posOffset;\r\n\r\n\t\t//Stay within room bounds\r\n\t\tif (roomT != null) {\r\n\t\t\tVector2 roomPos = roomT.position;\r\n\t\t\tfloat offset = 10f;\r\n\t\t\tif (myPos.x > roomPos.x + offset) myPos = new Vector2(roomPos.x + offset, myPos.y);\r\n\t\t\telse if (myPos.x < roomPos.x - offset) myPos = new Vector2(roomPos.x - offset, myPos.y);\r\n\t\t\tif (myPos.y > roomPos.y + offset) myPos = new Vector2(myPos.x, roomPos.y + offset);\r\n\t\t\telse if (myPos.y < roomPos.y - offset) myPos = new Vector2(myPos.x, roomPos.y - offset);\r\n\t\t}\r\n\r\n\t\ttransform.position = Vector2.SmoothDamp(transform.position, myPos, ref velSpeed, speed);\r\n\r\n\t\tif (playerSpeed > 11) playerSpeed = 11;\r\n\t\t//Zoom\r\n\t\tfloat desiredZoom = defaultZoom + (playerSpeed / 4); //+ height;\r\n\t\tCamera.main.orthographicSize =\r\n\t\t\tMathf.SmoothDamp(Camera.main.orthographicSize, desiredZoom, ref velZoom, zoomSpeed);\r\n\t\ttransform.position = new Vector3(transform.position.x, transform.position.y, -10);\r\n\t}\r\n\r\n\tpublic void SetPlayer(Transform t) {\r\n\t\tplayer = t;\r\n\t}\r\n\r\n\tpublic void StartRound() {\r\n\t\tc.orthographicSize = 0.1f;\r\n\t\ttransform.position = player.transform.position;\r\n\t}\r\n\r\n\tpublic void SetRoom(Transform pos) {\r\n\t\troomT = pos;\r\n\t}\r\n}\r\n"
  },
  {
    "path": "LD45/Camera/CameraShake.cs",
    "content": "﻿using UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class CameraShake : MonoBehaviour {\r\n    public Transform camTransform;\r\n\t\r\n    private static float shakeDuration = 0f;\r\n\r\n    private static float shakeAmount = 0.7f;\r\n\r\n    private float vel;\r\n    private Vector3 vel2 = Vector3.zero;\r\n\t\r\n    Vector3 originalPos;\r\n\t\r\n    void Awake() {\r\n        if (camTransform == null) {\r\n            camTransform = transform;\r\n        }\r\n\r\n        originalPos = camTransform.localPosition;\r\n    }\r\n\r\n    public static void ShakeOnce(float lenght, float strength) {\r\n        shakeDuration = lenght;\r\n        shakeAmount = strength;\r\n    }\r\n\r\n    void Update() {\r\n        \r\n        if (shakeDuration > 0) {\r\n            Vector3 newPos = originalPos + Random.insideUnitSphere * shakeAmount;\r\n\r\n            camTransform.localPosition = Vector3.SmoothDamp(camTransform.localPosition, newPos, ref vel2, 0.05f);\r\n\r\n            shakeDuration -= Time.deltaTime;\r\n            shakeAmount = Mathf.SmoothDamp(shakeAmount, 0, ref vel, 0.7f);\r\n        }\r\n        else {\r\n            camTransform.localPosition = originalPos;\r\n        }\r\n\t\t\r\n    }\r\n}"
  },
  {
    "path": "LD45/Game/Game.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing TMPro;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class Game : MonoBehaviour {\r\n    \r\n    public GameObject player;\r\n\r\n    public GameObject menuUI, gameUI, deadUI;\r\n\r\n    public GameObject[] enemies;\r\n\r\n    public int floor = 1;\r\n\r\n    public bool playing;\r\n    public static Game Instance { get; set; }\r\n\r\n    public TextMeshProUGUI doneText;\r\n\r\n    private void Awake() {\r\n        Instance = this;\r\n    }\r\n\r\n    public void NextFloor() {\r\n        GenerateDungeon.Instance.DeleteDungeon();\r\n        GenerateDungeon.Instance.GenerateNewDungeon();\r\n        PlayerMovement.Instance.gameObject.transform.position = GenerateDungeon.Instance.GetSpawnPos();\r\n        CameraMovement.Instance.StartRound();\r\n        floor++;\r\n        Minimap.Instance.LoadMap();\r\n    }\r\n\r\n    public void StartGame() {\r\n        GenerateDungeon.Instance.GenerateNewDungeon();\r\n        Vector2 spawnPos = GenerateDungeon.Instance.GetSpawnPos();\r\n        GameObject p = Instantiate(player, spawnPos, Quaternion.identity);\r\n        CameraMovement.Instance.SetPlayer(p.transform);\r\n        CameraMovement.Instance.StartRound();\r\n        Timer.Instance.StartTimer();\r\n        playing = true;\r\n        floor = 1;\r\n        PlayerMovement.Instance.ResetPlayer();\r\n        Minimap.Instance.LoadMap();\r\n    }\r\n\r\n    public float GetFirerateMultiplier() {\r\n        float f = Timer.Instance.GetMinutes() / 3;\r\n        if (f == 0) f = 1;\r\n        \r\n        if (f == 5) f = 5;\r\n        return 5 / f;\r\n    }\r\n\r\n    public float GetSpeedMultiplier() {\r\n        float f = Timer.Instance.GetMinutes() / 30;\r\n        if (f > 0.5f) f = 0.5f;\r\n        \r\n        return 0.5f + f;\r\n    }\r\n\r\n    public int GetEnemyAmount() {\r\n        int min = Timer.Instance.GetMinutes();\r\n        int mi = 1 + (int) Mathf.Floor(min / 2);\r\n        int ma = (int) Mathf.Floor(min / 1.5f);\r\n        if (ma < 3) ma = 3;\r\n        if (ma > 10) ma = 10;\r\n        if (mi < 2) mi = 2;\r\n        print(\"min: \" + mi + \", m: \" + ma);\r\n        return Random.Range(mi, ma);\r\n    }\r\n\r\n    public int GetWaveAmount() {\r\n        int min = Timer.Instance.GetMinutes();\r\n        int ma = (int) Mathf.Floor(min / 4);\r\n        if (ma > 4) ma = 4;\r\n        if (ma < 2) ma = 2;\r\n        return Random.Range(1, ma);\r\n    }\r\n\r\n    public GameObject GetEnemy() {\r\n        int min = Timer.Instance.GetMinutes() / 4;\r\n        int m = 2 + min;\r\n        if (m > enemies.Length) m = enemies.Length;\r\n        print(\"max: \" + m);\r\n        int max = Random.Range(0, m);\r\n        print(\"r: \" + max);\r\n\r\n        return enemies[max];\r\n    }\r\n\r\n    public void PlayerDied() {\r\n        deadUI.SetActive(true);\r\n        gameUI.SetActive(false);\r\n        GenerateDungeon.Instance.DeleteDungeon();\r\n        doneText.text = \"You made it to floor \" + floor;\r\n        PlayerStats.Instance.gun1.sprite = null;\r\n        PlayerStats.Instance.gun2.sprite = null;\r\n    }\r\n\r\n    public int GetEnemyHealth() {\r\n        int min = Timer.Instance.GetMinutes() / 3;\r\n        return min;\r\n    }\r\n    \r\n    public void ExitGame() {\r\n        Application.Quit(1);\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Other/Crate.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing Audio;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class Crate : MonoBehaviour {\r\n\r\n    public GameObject breakFx;\r\n\r\n    public GameObject[] items;\r\n    private Collider2D[] playerColliders;\r\n    private Collider2D myCollider;\r\n    public bool e;\r\n    private bool coin;\r\n\r\n    private void Start() {\r\n        GenerateDungeon.Instance.objects.Add(gameObject);\r\n    }\r\n\r\n    public void Break() {\r\n        Instantiate(breakFx, transform.position, Quaternion.identity);\r\n        playerColliders = PlayerMovement.Instance.GetColliders();\r\n        print(playerColliders);\r\n        GameObject weapon = SelectWeapon(e);\r\n        \r\n        GameObject w = Instantiate(weapon, transform.position, transform.rotation);\r\n        Vector2 dir = (transform.position - PlayerMovement.Instance.transform.position).normalized;\r\n        w.GetComponent<Rigidbody2D>().AddForce((dir * 300) + new Vector2(Random.Range(-400, 400), Random.Range(-400, 400)));\r\n        w.GetComponent<Rigidbody2D>().AddTorque(Random.Range(-2000,2000));\r\n        CameraShake.ShakeOnce(0.2f, 1.5f);\r\n        AudioManager.Instance.Play(\"Hit2\");\r\n        myCollider = w.GetComponent<Collider2D>();\r\n        RemoveCollision();\r\n        gameObject.SetActive(false);\r\n        GenerateDungeon.Instance.objects.Add(w);\r\n    }\r\n\r\n    private void RemoveCollision() {\r\n        for (int i = 0; i < playerColliders.Length; i++) {\r\n            Physics2D.IgnoreCollision(playerColliders[i], myCollider, true);\r\n        }\r\n        Invoke(nameof(ResumeCollision), 0.8f);\r\n    }\r\n\r\n    private void ResumeCollision() {\r\n        print(\"start colliding again\");\r\n        for (int i = 0; i < playerColliders.Length; i++) {\r\n            Physics2D.IgnoreCollision(playerColliders[i], myCollider, false);\r\n        }\r\n    }\r\n\r\n    private GameObject SelectWeapon(bool e) {\r\n\r\n        if (Random.Range(0f, 1f) > 0.2f) {\r\n            coin = true;\r\n            return items[0];\r\n        }\r\n        \r\n        int u = Mathf.FloorToInt(0 + (items.Length - 1) * Mathf.Pow(Random.Range(0f, 1f), 2));\r\n        u += 1;\r\n\r\n        return items[u];\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Other/Enlighten.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class Enlighten : MonoBehaviour\r\n{\r\n    private void OnTriggerEnter2D(Collider2D other) {\r\n        other.gameObject.GetComponent<SpriteRenderer>().color = Color.white;\r\n        print(\"lighting\");\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Other/Floor.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing TMPro;\r\nusing UnityEngine;\r\n\r\npublic class Floor : MonoBehaviour {\r\n\r\n    public TextMeshProUGUI text;\r\n    public GameObject descriptionText;\r\n    \r\n    private void Start() {\r\n        int floor = Game.Instance.floor;\r\n        text.text = \"Floor \" + floor;\r\n        if (floor > 1)\r\n            descriptionText.SetActive(false);\r\n        else descriptionText.SetActive(true);\r\n        \r\n        GenerateDungeon.Instance.objects.Add(gameObject);\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Other/Goal.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class Goal : MonoBehaviour {\r\n    private bool done;\r\n    private void OnTriggerEnter2D(Collider2D other) {\r\n        if (done) return;\r\n        if (other.gameObject.CompareTag(\"Player\")) {\r\n            done = true;\r\n            Game.Instance.NextFloor();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Other/Laser.cs",
    "content": "﻿using System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class Laser : MonoBehaviour {\r\n    private Transform target;\r\n    public LineRenderer lr;\r\n    \r\n    void Start() {\r\n        target = PlayerMovement.Instance.transform;\r\n        lr.transform.parent = null;\r\n        lr.transform.position = Vector2.zero;\r\n    }\r\n\r\n    // Update is called once per frame\r\n    void Update() {\r\n        print(target);\r\n        if (target == null) return;\r\n\r\n        lr.SetPosition(0, transform.position);\r\n        lr.SetPosition(1, target.position);\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Other/Minimap.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class Minimap : MonoBehaviour {\r\n\r\n    private List<Tuple<Vector2, Vector2>> layout;\r\n\r\n    public Material mat;\r\n    \r\n    private GameObject player;\r\n\r\n    public GameObject room;\r\n    public Transform p;\r\n    private LineRenderer lr;\r\n    private Transform playerT;\r\n\r\n    public static Minimap Instance { get; set; }\r\n    private void Awake() {\r\n        Instance = this;\r\n        /*\r\n        lr = p.gameObject.AddComponent<LineRenderer>();\r\n        lr.startColor = Color.white;\r\n        lr.startWidth = 10f;\r\n        lr.transform.parent = p;\r\n        lr.sortingOrder = 10;\r\n        lr.sortingLayerName = \"UI\";\r\n        lr.material = mat;\r\n        */\r\n    }\r\n\r\n    public void LoadMap() {\r\n        for (int i = p.childCount - 1; i >= 0; i--) {\r\n            Destroy(p.GetChild(i).gameObject);\r\n        }\r\n        layout = GenerateDungeon.Instance.roomPositions;\r\n        Vector2 pos2 = PlayerMovement.Instance.transform.position / 30f;\r\n        player = Instantiate(room, pos2, Quaternion.identity);\r\n        player.transform.parent = p;\r\n        player.transform.localPosition = pos2;\r\n        player.transform.localScale *= 0.25f;\r\n        player.GetComponent<SpriteRenderer>().color = Color.blue;\r\n        player.GetComponent<SpriteRenderer>().sortingOrder = 5;\r\n\r\n        for (int i = 0; i < layout.Count; i++) {\r\n            Vector2 pos = layout[i].Item1 - new Vector2(25, 25);\r\n            pos *= 8;\r\n            GameObject g = Instantiate(room, pos, Quaternion.identity);\r\n            g.transform.parent = p;\r\n            g.transform.localPosition = pos;\r\n            g.transform.localScale *= 0.25f;\r\n        }\r\n\r\n        playerT = PlayerMovement.Instance.transform;\r\n    }\r\n\r\n    private void Update() {\r\n        if (player == null || playerT == null) return;\r\n        Vector3 pos = ((playerT.position / 30f) - new Vector3(25, 25)) * 8f;\r\n        Vector3 pPos = new Vector3((int) pos.x, (int)pos.y);\r\n        player.transform.localPosition = pPos;\r\n\r\n        /*\r\n        lr.positionCount++;\r\n        lr.SetPosition(lr.positionCount - 1, player.transform.position);\r\n*/\r\n        for (int i = 0; i < layout.Count; i++) {\r\n            \r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Other/Remove.cs",
    "content": "﻿using System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class Remove : MonoBehaviour {\r\n    // Start is called before the first frame update\r\n    void Start() {\r\n        Invoke(nameof(KillSelf), 1f);\r\n    }\r\n\r\n    private void KillSelf() {\r\n        Destroy(gameObject);\r\n    }\r\n}\r\n\r\n   \r\n"
  },
  {
    "path": "LD45/Player/Actor.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing Audio;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class Actor : MonoBehaviour {\r\n\r\n    public float speed;\r\n    protected Rigidbody2D rb;\r\n    public GameObject killFx, bullet, coin;\r\n    \r\n    protected Inventory inventory;\r\n\r\n    protected int dashCooldown;\r\n\r\n    protected bool dashing;\r\n    protected Vector2 dashDir;\r\n    protected float dashSpeed = 15f;\r\n    protected int dashDuration = 35;\r\n    protected int dashC;\r\n\r\n    protected Gun gun = GunContainer.rustyPistol;\r\n    protected bool readyToFire = true;\r\n\r\n    protected SpriteRenderer sr;\r\n    protected Color dColor;\r\n\r\n    [SerializeField] \r\n    protected int health = 5;\r\n\r\n    public ParticleSystem ps;\r\n    private ParticleSystem.EmissionModule em;\r\n\r\n    protected virtual void Init() { }\r\n    private void Awake() {\r\n        ps = GetComponentInChildren<ParticleSystem>();\r\n        em = ps.emission;\r\n        rb = GetComponent<Rigidbody2D>();\r\n        Init();\r\n        sr = GetComponent<SpriteRenderer>();\r\n        dColor = sr.color;\r\n    }\r\n\r\n    protected void Aim(Vector3 target) {\r\n        Vector2 dir = transform.position - target;\r\n        float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;\r\n        transform.rotation = Quaternion.Euler(new Vector3(0,0, angle + 90));\r\n    }\r\n\r\n    protected void Move(Vector2 dir) {\r\n        float pen = 1;\r\n        if ((dir.x > 0.5f || dir.x < -0.5f) && (dir.y > 0.5f || dir.y < -0.5f)) {\r\n            pen = 1.35f;\r\n        }\r\n\r\n        rb.velocity = dir.normalized * GetSpeed() * pen;\r\n    }\r\n\r\n    protected virtual float GetSpeed() {\r\n        return speed;\r\n    }\r\n\r\n    protected void Dash(Vector2 dir) {\r\n        if (dashCooldown > 0) return;\r\n        AudioManager.Instance.Play(\"Dash\");\r\n        float pen = 1;\r\n        if ((dir.x > 0.5f || dir.x < -0.5f) && (dir.y > 0.5f || dir.y < -0.5f)) {\r\n            pen = 0.8f;\r\n        }\r\n        rb.angularVelocity = 0f;\r\n        em.enabled = true;\r\n        dashing = true;\r\n        dashDir = dir * pen;\r\n        dashC = 0;\r\n        dashCooldown = 200;\r\n        CameraShake.ShakeOnce(0.25f, 1);\r\n    }\r\n\r\n    protected void StopDash() {\r\n        dashDir = Vector2.zero;\r\n        dashing = false;\r\n        em.enabled = false;\r\n        rb.angularVelocity = 0f;\r\n    }\r\n\r\n    protected virtual void KillActor() {\r\n        GameObject fx = Instantiate(killFx, transform.position, Quaternion.identity);\r\n        ParticleSystem.MainModule mm = fx.GetComponent<ParticleSystem>().main;\r\n        mm.startColor = dColor;\r\n        \r\n        AudioManager.Instance.Play(\"Explosion1\");\r\n\r\n        int a = Random.Range(1, 7);\r\n        for (int i = 0; i < a; i++) {\r\n            GameObject c = Instantiate(coin, transform.position, Quaternion.identity);\r\n            GenerateDungeon.Instance.objects.Add(c);\r\n            c.GetComponent<Rigidbody2D>().AddForce(new Vector2(Random.Range(-500, 500), Random.Range(-500, 500)));\r\n        }\r\n        \r\n        Destroy(gameObject);\r\n    }\r\n\r\n    public virtual void Damage(Vector2 dir, int damage) {\r\n        health -= damage;\r\n        if (health < 1) \r\n            KillActor();\r\n\r\n        AudioManager.Instance.Play(\"EnemyHit1\");\r\n        \r\n        CancelInvoke(nameof(ResetColor));\r\n        sr.color = Color.white;\r\n        Invoke(nameof(ResetColor), 0.05f);\r\n    }\r\n\r\n    private void ResetColor() {\r\n        sr.color = dColor;\r\n    }\r\n\r\n    protected void Fire() {\r\n        if (gun == null) return;\r\n        if (!readyToFire) return;\r\n        readyToFire = false;\r\n        AudioManager.Instance.Play(\"Shoot\");\r\n        for (int i = 0; i < gun.GetBullets(); i++) {\r\n            GameObject b = Instantiate(bullet, transform.position + (transform.up / 1.5f), transform.rotation);\r\n            if (gameObject.layer == LayerMask.NameToLayer(\"Player\")) {\r\n                b.layer = LayerMask.NameToLayer(\"PlayerBullet\");\r\n            } else b.layer = LayerMask.NameToLayer(\"EnemyBullet\");\r\n            Rigidbody2D brb = b.GetComponent<Rigidbody2D>();\r\n\r\n            b.GetComponent<SpriteRenderer>().color = dColor;\r\n            \r\n            ((Bullet) b.GetComponent(typeof(Bullet))).SetDamage(gun.GetDamage());\r\n\r\n            float s = gun.GetDamage() / 2;\r\n            if (s > 0.5f) s = 0.5f;\r\n            b.transform.localScale *= 1 + s;\r\n            \r\n            GenerateDungeon.Instance.objects.Add(b);\r\n\r\n            Vector2 dir = transform.rotation * Vector2.up;\r\n            Vector2 pdir = Vector2.Perpendicular(dir) * Random.Range(-gun.GetSpread(), gun.GetSpread());\r\n            brb.velocity = (dir + pdir) * gun.GetSpeed() * GetSpeedMultiplier();\r\n        }\r\n\r\n        float f = gun.GetFireRate();\r\n        Invoke(nameof(FireCooldown), gun.GetFireRate() * GetFirerateMultiplier());\r\n    }\r\n\r\n    protected void FireCooldown() {\r\n        readyToFire = true;\r\n    }\r\n\r\n    private void OnCollisionEnter2D(Collision2D other) {\r\n        if (dashing) {\r\n            if (other.gameObject.layer == LayerMask.NameToLayer(\"BlockPlayer\")) {\r\n                if (!other.gameObject.CompareTag(\"Crate\"))\r\n                    StopDash();\r\n            }\r\n        }\r\n    }\r\n\r\n    protected float GetSpeedMultiplier() {\r\n        if (gameObject.layer == LayerMask.NameToLayer(\"Enemy\"))\r\n            return Game.Instance.GetSpeedMultiplier();\r\n        return 1;\r\n    }\r\n    \r\n    protected float GetFirerateMultiplier() {\r\n        if (gameObject.layer == LayerMask.NameToLayer(\"Enemy\"))\r\n            return Random.Range(2, Game.Instance.GetFirerateMultiplier());\r\n        return GetFireRate();\r\n    }\r\n\r\n    protected virtual float GetFireRate() {\r\n        return 2;\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Player/Enemy/Enemy.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class Enemy : Actor {\r\n\r\n    private Transform target;\r\n    private Vector3 bias;\r\n    private int c;\r\n    private float biasStrength = 8f;\r\n    public LayerMask whatIsWall;\r\n\r\n    public int gunNr;\r\n\r\n    public int desiredDist;\r\n    public int moveAwayDist;\r\n\r\n    protected override void Init() {\r\n        target = PlayerMovement.Instance.transform;\r\n        if (gunNr == -1)\r\n            gun = GunContainer.GetRandomGun();\r\n        else \r\n            gun = GunContainer.GetGun(gunNr);\r\n        bias = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f,1f)) * biasStrength;\r\n        readyToFire = false;\r\n        Invoke(nameof(FireCooldown), gun.GetFireRate() * GetFirerateMultiplier());\r\n        health += Game.Instance.GetEnemyHealth();\r\n        GenerateDungeon.Instance.objects.Add(gameObject);\r\n    }\r\n\r\n    private void Update() {\r\n        if (target == null) return;\r\n        Vector2 tp = target.position;\r\n        Vector2 p = transform.position;\r\n        float dist = Vector2.Distance(tp, p);\r\n        if (dist > desiredDist)\r\n            Move((target.position - transform.position) + bias);\r\n        else if (dist < moveAwayDist) {\r\n            Move((transform.position - target.position) + bias);\r\n        }\r\n        else {\r\n            rb.velocity = Vector2.zero;\r\n        }\r\n\r\n        c++;\r\n        if (c > 400) {\r\n            bias = new Vector2(Random.Range(-1f, 1f), Random.Range(-1f,1f)) * biasStrength;\r\n            c = 0;\r\n        }\r\n        \r\n        Aim(target.position);\r\n\r\n        RaycastHit2D hit = Physics2D.Raycast(transform.position, target.position - transform.position, 20, whatIsWall);\r\n        Debug.DrawLine(transform.position, target.position, Color.black, 1);\r\n        if (hit.collider == null) return;\r\n        if (hit.collider.gameObject.layer == LayerMask.NameToLayer(\"Player\")) {\r\n            if (dist < 11f)\r\n                Fire();\r\n        } \r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Player/Enemy/MeleeEnemy.cs",
    "content": "﻿using UnityEngine;\r\n\r\npublic class MeleeEnemy : Actor {\r\n\r\n    private Transform target;\r\n\r\n    protected override void Init() {\r\n        target = PlayerMovement.Instance.transform;\r\n        health += Game.Instance.GetEnemyHealth();\r\n    }\r\n\r\n    private void Update() {\r\n        if (target == null) return;\r\n        Vector2 tp = target.position;\r\n        Vector2 p = transform.position;\r\n        float dist = Vector2.Distance(tp, p);\r\n        Move(target.position - transform.position);\r\n        \r\n        Aim(target.position);\r\n        GenerateDungeon.Instance.objects.Add(gameObject);\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "LD45/Player/Enemy.meta",
    "content": "fileFormatVersion: 2\nguid: d2a3ae5f977a6ac46862e85c0f71432d\nfolderAsset: yes\nDefaultImporter:\n  externalObjects: {}\n  userData: \n  assetBundleName: \n  assetBundleVariant: \n"
  },
  {
    "path": "LD45/Player/PlayerMovement.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing Audio;\r\nusing UnityEngine;\r\n\r\npublic class PlayerMovement : Actor {\r\n\r\n    public GameObject goldFx;\r\n    public static PlayerMovement Instance { get; set; }\r\n    private bool invincible;\r\n    private int cooldown;\r\n    private int pCooldown;\r\n\r\n    public int soda, helmet, sneaker;\r\n\r\n    public GameObject currentWeapon;\r\n    public GameObject chest;\r\n    \r\n    private int dashDamage = 1;\r\n\r\n    private int gold;\r\n    \r\n    private Vector2 pushDir;\r\n    protected override void Init() {\r\n        inventory = new Inventory();\r\n        Instance = this;\r\n        gun = inventory.GetCurrentGun();\r\n    }\r\n\r\n    private void Update() {\r\n        Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); \r\n        Aim(mousePos);\r\n\r\n        if (pCooldown > 0)\r\n            return;\r\n        if (dashing)\r\n            return;\r\n        \r\n        float x = Input.GetAxis(\"Horizontal\");\r\n        float y = Input.GetAxis(\"Vertical\");\r\n        Move(new Vector2(x, y));\r\n\r\n        //Shooting\r\n        if (Input.GetMouseButton(0))\r\n            Fire();\r\n\r\n        if (Input.GetKeyDown(KeyCode.Space)) {\r\n            Dash(((Vector3) mousePos - transform.position).normalized);\r\n        }\r\n\r\n        if (Input.GetKeyDown(KeyCode.Q)) {\r\n            inventory.SwapActive();\r\n        }\r\n\r\n        if (Input.GetKeyDown(KeyCode.E)) {\r\n            if (chest != null) {\r\n                Chest c = (Chest) chest.GetComponent(typeof(Chest));\r\n                if (gold >= c.price) {\r\n                    c.Open();\r\n                    gold -= c.price;\r\n                }\r\n                else {\r\n                    CameraShake.ShakeOnce(0.15f,1.5f);\r\n                    AudioManager.Instance.Play(\"Error\");\r\n                }\r\n            }\r\n            else if (currentWeapon != null) {\r\n                inventory.PickupGun(currentWeapon);\r\n                currentWeapon = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    private void FixedUpdate() {\r\n        if (dashCooldown > 0) dashCooldown--;\r\n\r\n        if (invincible) {\r\n            float a = Mathf.PingPong(Time.time * 10, 0.6f) + 0.3f;\r\n            if (a > 0.7f)\r\n                sr.color = dColor;\r\n            else sr.color = Color.black;\r\n\r\n            sr.color = new Color(sr.color.r, sr.color.g, sr.color.b, a / 1.3f);\r\n            \r\n            cooldown--;\r\n            pCooldown--;\r\n            \r\n            if (cooldown < 1) {\r\n                invincible = false;\r\n            }\r\n\r\n            if (pCooldown > 0) {\r\n                rb.velocity = pushDir;\r\n                return;\r\n            }\r\n\r\n            if (cooldown == 0) sr.color = dColor;\r\n        }\r\n        if (dashing) {\r\n            rb.velocity = (dashDir * dashSpeed) * (1f + (helmet / 4f));\r\n            dashC++;\r\n            float r = transform.localRotation.eulerAngles.z;\r\n            ParticleSystem.MainModule m = ps.main;\r\n            m.startRotationZ = 0.01745f * -r;\r\n            if (dashC > dashDuration) {\r\n                StopDash();\r\n            }\r\n        }\r\n    }\r\n\r\n    public Rigidbody2D GetRb() {\r\n        return rb;\r\n    }\r\n\r\n    public override void Damage(Vector2 dir, int damage) {\r\n        if (invincible || dashing) return;\r\n        base.Damage(dir, 1);\r\n        invincible = true;\r\n        cooldown = 80;\r\n        pCooldown = 25;\r\n        pushDir = -dir;\r\n        StopDash();\r\n        AudioManager.Instance.Play(\"PlayerHit\");\r\n    }\r\n\r\n    protected override void KillActor() {\r\n        base.KillActor();\r\n        Destroy(gameObject);\r\n        Game.Instance.playing = false;\r\n        Game.Instance.PlayerDied();\r\n    }\r\n\r\n    private void OnTriggerEnter2D(Collider2D other) {\r\n        if (other.gameObject.layer == LayerMask.NameToLayer(\"Pickup\")) {\r\n            if (other.gameObject.CompareTag(\"Coin\")) {\r\n                Destroy(other.gameObject);\r\n                AudioManager.Instance.Play(\"Coin\");\r\n                Instantiate(goldFx, transform.position, Quaternion.identity);\r\n                gold++;\r\n            }\r\n            \r\n            //Weapons\r\n            if (other.gameObject.CompareTag(\"Gun\")) {\r\n                currentWeapon = other.gameObject;\r\n            }\r\n            else if (other.gameObject.CompareTag(\"Chest\"))\r\n                chest = other.gameObject;\r\n            else if (other.gameObject.CompareTag(\"Upgrade\")) {\r\n                ((IUpgrade) other.GetComponent(typeof(IUpgrade))).Upgrade();\r\n                AudioManager.Instance.Play(\"Pickup\");                \r\n            }\r\n        }\r\n        \r\n        if (other.gameObject.layer == LayerMask.NameToLayer(\"Enemy\")) {\r\n            if (dashing) {\r\n                Actor e = (Actor) other.GetComponent(typeof(Actor));\r\n                e.Damage(rb.velocity, dashDamage + helmet);\r\n                CameraShake.ShakeOnce(0.2f, 2.5f);\r\n            }\r\n            else {\r\n                Damage(rb.velocity, dashDamage);\r\n            }\r\n        }\r\n        else if (other.gameObject.layer == LayerMask.NameToLayer(\"BlockPlayer\")) {\r\n            if (other.gameObject.CompareTag(\"Crate\")) {\r\n                if (dashing)\r\n                    ((Crate) other.gameObject.GetComponent(typeof(Crate))).Break();\r\n            }\r\n        }\r\n    }\r\n\r\n    private void OnTriggerExit2D(Collider2D other) {\r\n        if (other.gameObject.layer == LayerMask.NameToLayer(\"Pickup\")) {\r\n            if (other.gameObject.CompareTag(\"Gun\")) {\r\n                currentWeapon = null;\r\n            }\r\n            else if (other.gameObject.CompareTag(\"Chest\"))\r\n                chest = null;\r\n        }\r\n    }\r\n\r\n    public void Heal() {\r\n        if (health == 5) {\r\n            AudioManager.Instance.Play(\"Coin\");\r\n            gold += 10;\r\n            return;\r\n        }\r\n        health++;\r\n    }\r\n\r\n    public void SetGun(Gun g) {\r\n        gun = g;\r\n    }\r\n\r\n    public int GetGold() {\r\n        return gold;\r\n    }\r\n\r\n    public int GetHealth() {\r\n        return health;\r\n    }\r\n\r\n    public void ResetPlayer() {\r\n        inventory.ResetInventory();\r\n        soda = 0;\r\n        sneaker = 0;\r\n        helmet = 0;\r\n        gun = null;\r\n        health = 5;\r\n        gold = 20;\r\n        inventory = new Inventory();\r\n    }\r\n\r\n    protected override float GetFireRate() {\r\n        int s = soda + 1;\r\n        float r = 1.4f / s;\r\n\r\n        if (r < 0.25f) r = 0.3f;\r\n        return r;\r\n    }\r\n    protected override float GetSpeed() {\r\n        float s = speed + (sneaker / 2);\r\n        if (s > 20) s = 20;\r\n        return s;\r\n    }\r\n\r\n    public Collider2D[] GetColliders() {\r\n        return GetComponentsInChildren<Collider2D>();\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/UI/PlayerStats.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing TMPro;\r\nusing UnityEngine;\r\n\r\npublic class PlayerStats : MonoBehaviour {\r\n    \r\n    public TextMeshProUGUI gold;\r\n    public Transform hearts;\r\n\r\n    public SpriteRenderer gun1, gun2;\r\n\r\n    public static PlayerStats Instance { get; set; }\r\n    private void Awake() {\r\n        Instance = this;\r\n    }\r\n\r\n    private void Update() {\r\n        gold.text = \"\" + PlayerMovement.Instance.GetGold();\r\n        UpdateHearts();\r\n    }\r\n    \r\n    private void UpdateHearts() {\r\n        int h = PlayerMovement.Instance.GetHealth();\r\n\r\n        for (int i = 0; i < 5; i++) {\r\n            if (i < h)\r\n                hearts.GetChild(i).GetChild(0).gameObject.SetActive(true);\r\n            else hearts.GetChild(i).GetChild(0).gameObject.SetActive(false);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/UI/Settings.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing Audio;\r\nusing TMPro;\r\nusing UnityEngine;\r\nusing UnityEngine.Rendering.PostProcessing;\r\n\r\npublic class Settings : MonoBehaviour {\r\n\r\n    public TextMeshProUGUI graphicsText, musicText, sfxText;\r\n    public PostProcessLayer ppl;\r\n    private bool graphics, music, sfx;\r\n\r\n    private void Start() {\r\n        graphics = true;\r\n    }\r\n\r\n    public void ChangeGraphics() {\r\n        graphics = !graphics;\r\n\r\n        ppl.enabled = graphics;\r\n        graphicsText.text = \"Graphics - \";\r\n        graphicsText.text += graphics ? \"Fancy\" : \"Performance\";\r\n    }\r\n\r\n    public void ChangeMusic() {\r\n        bool s = AudioManager.Instance.muteMusic;\r\n        if (s) musicText.text = \"Music - off\";\r\n        else musicText.text = \"Music - on\";\r\n    }\r\n\r\n    public void ChangeSounds() {\r\n        bool s = AudioManager.Instance.muted;\r\n        if (s) sfxText.text = \"Sounds - off\";\r\n        else sfxText.text = \"Sounds - on\";\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "LD45/UI/Timer.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing TMPro;\r\nusing UnityEngine;\r\n\r\npublic class Timer : MonoBehaviour {\r\n\r\n    public TextMeshProUGUI text, status;\r\n    private float timer = 0;\r\n    \r\n    public static Timer Instance { get; set; }\r\n\r\n    private void Awake() {\r\n        Instance = this;\r\n    }\r\n\r\n    public void StartTimer() {\r\n        timer = 0;\r\n    }\r\n\r\n    void Update() {\r\n        if (!Game.Instance.playing) return;\r\n        timer += Time.deltaTime;\r\n \r\n        string minutes = Mathf.Floor(timer / 60).ToString(\"00\");\r\n        string seconds = Mathf.Floor(timer % 60).ToString(\"00\");\r\n     \r\n        text.text = string.Format(\"{0}:{1}\", minutes, seconds);\r\n\r\n        status.text = StatusText(Mathf.Floor(timer / 60));\r\n    }\r\n\r\n    private string StatusText(float f) {\r\n        if (f < 2) return \"very easy\";\r\n        if (f < 4) return \"easy\";\r\n        if (f < 8) return \"medium\";\r\n        if (f < 12) return \"hard\";\r\n        if (f < 16) return \"very hard\";\r\n        if (f < 20) return \"impossible\";\r\n        if (f < 25) return \"oh shit\";\r\n        if (f < 30) return \"very oh shit\";\r\n        return \"f\";\r\n    }\r\n\r\n    public int GetMinutes() {\r\n        return (int) Mathf.Floor(timer / 60);\r\n    }\r\n    \r\n}\r\n"
  },
  {
    "path": "LD45/Upgrades/Heart.cs",
    "content": "﻿using System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class Heart : MonoBehaviour, IUpgrade {\r\n    private bool upgraded;\r\n    public GameObject pickup;\r\n    \r\n    public void Upgrade() {\r\n        if (upgraded) return;\r\n        upgraded = true;\r\n        PlayerMovement.Instance.Heal();\r\n        Instantiate(pickup, transform.position, Quaternion.identity);\r\n        Destroy(gameObject);\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Upgrades/Helmet.cs",
    "content": "﻿using System.Collections;\r\nusing System.Collections.Generic;\r\nusing TMPro;\r\nusing UnityEngine;\r\n\r\npublic class Helmet : MonoBehaviour, IUpgrade {\r\n    //please dont look at my shitty redundant code LOL\r\n    private bool upgraded;\r\n    public GameObject pickup;\r\n    public GameObject text;\r\n    \r\n    public void Upgrade() {\r\n        if (upgraded) return;\r\n        upgraded = true;\r\n        PlayerMovement.Instance.helmet++;\r\n        Instantiate(pickup, transform.position, Quaternion.identity);\r\n        Destroy(gameObject);\r\n        Instantiate(text, transform.position, Quaternion.identity).GetComponentInChildren<TextMeshProUGUI>().text = \"+dash\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Upgrades/IUpgrade.cs",
    "content": "﻿using System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic interface IUpgrade {\r\n     \r\n     void Upgrade();\r\n     \r\n}\r\n"
  },
  {
    "path": "LD45/Upgrades/Sneakers.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing TMPro;\r\nusing UnityEngine;\r\n\r\npublic class Sneakers : MonoBehaviour, IUpgrade {\r\n\r\n    private bool upgraded;\r\n    public GameObject pickup;\r\n\r\n    public GameObject text;\r\n    \r\n    public void Upgrade() {\r\n        if (upgraded) return;\r\n        upgraded = true;\r\n        PlayerMovement.Instance.sneaker++;\r\n        Instantiate(pickup, transform.position, Quaternion.identity);\r\n        Destroy(gameObject);\r\n\r\n        Instantiate(text, transform.position, Quaternion.identity).GetComponentInChildren<TextMeshProUGUI>().text = \"+speed\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Upgrades/Soda.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing TMPro;\r\nusing UnityEngine;\r\n\r\npublic class Soda : MonoBehaviour, IUpgrade {\r\n    \r\n    private bool upgraded;\r\n    public GameObject pickup;\r\n    public GameObject text;\r\n    \r\n    public void Upgrade() {\r\n        if (upgraded) return;\r\n        upgraded = true;\r\n        PlayerMovement.Instance.soda++;\r\n        Instantiate(pickup, transform.position, Quaternion.identity);\r\n        Destroy(gameObject);\r\n        Instantiate(text, transform.position, Quaternion.identity).GetComponentInChildren<TextMeshProUGUI>().text = \"+fire rate\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Weapons/Bullet.cs",
    "content": "﻿using System;\r\nusing UnityEngine;\r\n\r\npublic class Bullet : MonoBehaviour {\r\n\r\n    public GameObject explosion;\r\n    private int damage = 1;\r\n    \r\n    private void OnCollisionEnter2D(Collision2D other) {\r\n        if (other.gameObject.layer == LayerMask.NameToLayer(\"BlockPlayer\"))\r\n            ExplodeBullet();\r\n        else {\r\n            Actor a = (Actor) other.gameObject.GetComponent(typeof(Actor));\r\n            a.Damage(-GetComponent<Rigidbody2D>().velocity, damage);\r\n            ExplodeBullet();\r\n        }\r\n    }\r\n\r\n    private void ExplodeBullet() {\r\n        Instantiate(explosion, transform.position, Quaternion.identity);\r\n        Destroy(gameObject);\r\n    }\r\n\r\n    public void SetDamage(int d) {\r\n        damage = d;\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Weapons/Chest.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing Audio;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class Chest : MonoBehaviour {\r\n\r\n    public GameObject[] weapons;\r\n    private Collider2D[] playerColliders;\r\n    private Collider2D myCollider;\r\n    public bool e;\r\n    public int price;\r\n    \r\n    public void Open() {\r\n        playerColliders = PlayerMovement.Instance.GetColliders();\r\n        print(playerColliders);\r\n        GameObject weapon = SelectWeapon(e);\r\n        GameObject w = Instantiate(weapon, transform.position, transform.rotation);\r\n        Vector2 dir = (transform.position - PlayerMovement.Instance.transform.position).normalized;\r\n        w.GetComponent<Rigidbody2D>().AddForce((dir * 3000) + new Vector2(Random.Range(-4000, 4000), Random.Range(-4000, 4000)));\r\n        w.GetComponent<Rigidbody2D>().AddTorque(Random.Range(-2000,2000));\r\n        CameraShake.ShakeOnce(0.3f, 2f);\r\n        AudioManager.Instance.Play(\"Pickup\");\r\n        myCollider = w.GetComponent<Collider2D>();\r\n        RemoveCollision();\r\n        gameObject.SetActive(false);\r\n        GenerateDungeon.Instance.objects.Add(w);\r\n    }\r\n\r\n    private void RemoveCollision() {\r\n        for (int i = 0; i < playerColliders.Length; i++) {\r\n            Physics2D.IgnoreCollision(playerColliders[i], myCollider, true);\r\n        }\r\n        Invoke(nameof(ResumeCollision), 0.8f);\r\n    }\r\n\r\n    private void ResumeCollision() {\r\n        print(\"start colliding again\");\r\n        for (int i = 0; i < playerColliders.Length; i++) {\r\n            Physics2D.IgnoreCollision(playerColliders[i], myCollider, false);\r\n        }\r\n    }\r\n\r\n    private GameObject SelectWeapon(bool e) {\r\n        if (e) {\r\n            return weapons[Random.Range(0, weapons.Length)];\r\n        }\r\n        \r\n        int u = Mathf.FloorToInt(0 + (weapons.Length) * Mathf.Pow(Random.Range(0f, 1f), 2));\r\n        int sum = 0;\r\n\r\n        return weapons[u];\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "LD45/Weapons/Gun.cs",
    "content": "﻿using UnityEngine;\r\n\r\npublic class Gun {\r\n\r\n    private float fireRate;\r\n    private float bullets;\r\n    private float spread;\r\n    private float speed;\r\n    private int damage;\r\n    private string description;\r\n    \r\n    public Gun(float fireRate, float bullets, float spread, float speed, int damage, string desc) {\r\n        this.fireRate = fireRate;\r\n        this.bullets = bullets;\r\n        this.spread = spread;\r\n        this.speed = speed;\r\n        this.description = desc;\r\n        this.damage = damage;\r\n    }\r\n\r\n    public float GetFireRate() {\r\n        return fireRate;\r\n    }\r\n\r\n    public float GetBullets() {\r\n        return bullets;\r\n    }\r\n\r\n    public float GetSpread() {\r\n        return spread;\r\n    }\r\n\r\n    public float GetSpeed() {\r\n        return speed;\r\n    }\r\n\r\n    public string GetDescription() {\r\n        return description;\r\n    }\r\n\r\n    public int GetDamage() {\r\n        return damage;\r\n    }\r\n\r\n}\r\n"
  },
  {
    "path": "LD45/Weapons/GunContainer.cs",
    "content": "﻿\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\nusing Random = UnityEngine.Random;\r\n\r\npublic class GunContainer : MonoBehaviour{\r\n    \r\n    public static readonly Gun rustyPistol = new Gun(0.35f, 1, 0.15f, 9f, 1, \"Rusty Pistol\");\r\n    public static readonly Gun shinyPistol = new Gun(0.3f, 1, 0.08f, 12f, 1, \"Shiny Pistol\");\r\n    public static readonly Gun dualPistol = new Gun(0.3f, 2, 0.2f, 11f, 1, \"Dual Pistol\");\r\n    public static readonly Gun revolver = new Gun(0.4f, 1, 0.05f, 14f, 2, \"Revolver\");\r\n    \r\n    public static readonly Gun smallShotgun = new Gun(0.5f, 5, 0.35f, 12f, 1, \"Small Shotgun\");\r\n    public static readonly Gun shotgun = new Gun(0.45f, 6, 0.25f, 14f, 1, \"Shotgun\");\r\n    public static readonly Gun sawedoffShotgun = new Gun(0.55f, 8, 0.5f, 14f, 1, \"Sawed-off Shotgun\");\r\n\r\n    public static readonly Gun rifle = new Gun(0.1f, 1, 0.15f, 15f, 1, \"Rifle\");\r\n    public static readonly Gun doubleRifle = new Gun(0.12f, 2, 0.45f, 15f, 1, \"Double Rifle\");\r\n    public static readonly Gun coolRifle = new Gun(0.15f, 1, 0.13f, 15f, 2, \"Cooler Rifle\");\r\n    public static readonly Gun sniper = new Gun(0.8f, 1, 0.0f, 25f, 10, \"Sniper\");\r\n\r\n    public static List<Gun> guns;\r\n\r\n    private void Start() {\r\n        guns = new List<Gun>();\r\n        guns.Add(rustyPistol);\r\n        guns.Add(shinyPistol);\r\n        guns.Add(dualPistol);\r\n        guns.Add(revolver);\r\n        guns.Add(smallShotgun);\r\n        guns.Add(shotgun);\r\n        guns.Add(sawedoffShotgun);\r\n        guns.Add(rifle);\r\n        guns.Add(doubleRifle);\r\n        guns.Add(coolRifle);\r\n        guns.Add(sniper);\r\n    }\r\n\r\n    public static Gun GetGun(int n) {\r\n        return guns[n];\r\n    }\r\n\r\n    public static Gun GetRandomGun() {\r\n        return guns[Random.Range(0, guns.Count)];\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Weapons/Inventory.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing Audio;\r\nusing UnityEngine;\r\n\r\npublic class Inventory : MonoBehaviour {\r\n\r\n    private Gun gun1, gun2;\r\n    private int activeGun = 0;\r\n    \r\n    public void PickupGun(GameObject g) {\r\n        if (g == null) return;\r\n        Weapon w = (Weapon) g.GetComponent(typeof(Weapon));\r\n        if (w.pickedUp) return;\r\n        w.pickedUp = true;\r\n        AudioManager.Instance.Play(\"PickupGun\");\r\n        g.SetActive(false);\r\n        if (gun1 == null) {\r\n            gun1 = ((Weapon) g.GetComponent(typeof(Weapon))).GetGun();\r\n            PlayerStats.Instance.gun1.sprite = g.GetComponent<SpriteRenderer>().sprite;\r\n        }\r\n        else if (gun2 == null) {\r\n            gun2 = ((Weapon) g.GetComponent(typeof(Weapon))).GetGun();\r\n            PlayerStats.Instance.gun2.sprite = g.GetComponent<SpriteRenderer>().sprite;\r\n        }\r\n        else if (activeGun == 0) {\r\n            gun1 = ((Weapon) g.GetComponent(typeof(Weapon))).GetGun();\r\n            PlayerStats.Instance.gun1.sprite = g.GetComponent<SpriteRenderer>().sprite;\r\n        }\r\n        else {\r\n            gun2 = ((Weapon) g.GetComponent(typeof(Weapon))).GetGun();\r\n            PlayerStats.Instance.gun2.sprite = g.GetComponent<SpriteRenderer>().sprite;\r\n        }\r\n\r\n        PlayerMovement.Instance.SetGun(GetCurrentGun());\r\n    }\r\n\r\n    public Gun GetCurrentGun() {\r\n        if (activeGun == 0) {\r\n            return gun1;\r\n        }\r\n        return gun2;\r\n    }\r\n\r\n    public void SwapActive() {\r\n        AudioManager.Instance.Play(\"PickupGun\");\r\n        if (activeGun == 0) {\r\n            activeGun = 1;\r\n            PlayerStats.Instance.gun1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = Color.gray;\r\n            PlayerStats.Instance.gun2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = Color.white;\r\n        }\r\n        else {\r\n            activeGun = 0;\r\n            PlayerStats.Instance.gun2.transform.GetChild(0).GetComponent<SpriteRenderer>().color = Color.gray;\r\n            PlayerStats.Instance.gun1.transform.GetChild(0).GetComponent<SpriteRenderer>().color = Color.white;\r\n        }\r\n        \r\n        PlayerMovement.Instance.SetGun(GetCurrentGun());\r\n    }\r\n\r\n    public void ResetInventory() {\r\n        gun1 = null;\r\n        gun2 = null;\r\n        activeGun = 0;\r\n    }\r\n}\r\n"
  },
  {
    "path": "LD45/Weapons/Weapon.cs",
    "content": "﻿using System;\r\nusing System.Collections;\r\nusing System.Collections.Generic;\r\nusing UnityEngine;\r\n\r\npublic class Weapon : MonoBehaviour {\r\n\r\n    private Gun gun;\r\n    public int gunNr;\r\n    public bool pickedUp;\r\n\r\n    private void Start() {\r\n        gun = GunContainer.GetGun(gunNr);\r\n    }\r\n\r\n    public Gun GetGun() {\r\n        return gun;\r\n    }\r\n}\r\n"
  },
  {
    "path": "README.md",
    "content": "# LudumDare45"
  }
]