[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n*.sln    merge=union\n*.csproj merge=union\n*.vbproj merge=union\n*.fsproj merge=union\n*.dbproj merge=union\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": "[Ll]ibrary/\r\n[Tt]emp/\r\n[Oo]bj/\r\n\r\n# Autogenerated VS/MD solution and project files\r\n/*.csproj\r\n/*.unityproj\r\n/*.sln\r\n/*.suo\r\n/*.user\r\n/*.userprefs\r\n/*.pidb\r\n/*.booproj\r\n\r\n# =========================\r\n# Operating System Files\r\n# =========================\r\n\r\n# OSX\r\n# =========================\r\n\r\n.DS_Store\n.AppleDouble\n.LSOverride\n\n# Icon must ends with two \\r.\nIcon\r\r\n\n# Thumbnails\n._*\n\n# Files that might appear on external disk\n.Spotlight-V100\n.Trashes\n\r\n# Windows\r\n# =========================\r\n\r\n# Windows image file caches\r\nThumbs.db\r\nehthumbs.db\r\n\r\n# Folder config file\r\nDesktop.ini\r\n\r\n# Recycle Bin used on file shares\r\n$RECYCLE.BIN/\r\n\r\n# Windows Installer files\r\n*.cab\r\n*.msi\r\n*.msm\r\n*.msp\r\n"
  },
  {
    "path": "Assets/Editor/LevelExport.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\nusing UnityEditor;\nusing System.IO;\nusing System.Xml.Linq;\nusing Assets.Scripts;\nusing System.Collections.Generic;\nusing System.Linq;\n\npublic class LevelExport : EditorWindow\n{\n    [MenuItem(\"Custom Editor/Export Level\")]\n    public static void ShowWindow()\n    {\n        EditorWindow.GetWindow(typeof(LevelExport));\n    }\n\n    Vector2 scrollPosition = Vector2.zero;\n    int noOfEnemies;\n    int initialMoney;\n    int MinCarrotSpawnTime, MaxCarrotSpawnTime;\n    string filename = \"LevelX.xml\";\n    int waypointsCount;\n    int pathsCount;\n    void OnGUI()\n    {\n        scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition);\n        EditorGUILayout.LabelField(\"Total Rounds created:\" + rounds.Count);\n        for (int i = 0; i < rounds.Count; i++)\n        {\n            EditorGUILayout.BeginHorizontal();\n            EditorGUILayout.LabelField(\"Round \" + (i + 1));\n            EditorGUILayout.LabelField(\"Number of Enemies \" + rounds[i].NoOfEnemies);\n            if (GUILayout.Button(\"Delete\"))\n            {\n                rounds.RemoveAt(i);\n            }\n            EditorGUILayout.EndHorizontal();\n        }\n        EditorGUILayout.EndScrollView();\n\n        EditorGUILayout.LabelField(\"Add a new round\", EditorStyles.boldLabel);\n        noOfEnemies = EditorGUILayout.IntSlider(\"Number of enemies\", noOfEnemies, 1, 20);\n\n        if (GUILayout.Button(\"Add new round\"))\n        {\n            rounds.Add(new Round() { NoOfEnemies = noOfEnemies });\n        }\n        initialMoney = EditorGUILayout.IntSlider(\"Initial Money\", initialMoney, 200, 400);\n        MinCarrotSpawnTime = EditorGUILayout.IntSlider(\"MinCarrotSpawnTime\", MinCarrotSpawnTime, 1, 10);\n        MaxCarrotSpawnTime = EditorGUILayout.IntSlider(\"MaxCarrotSpawnTime\", MaxCarrotSpawnTime, 1, 10);\n        filename = EditorGUILayout.TextField(\"Filename:\", filename);\n        EditorGUILayout.LabelField(\"Export Level\", EditorStyles.boldLabel);\n        if (GUILayout.Button(\"Export\"))\n        {\n            Export();\n        }\n    }\n\n    XDocument doc;\n    List<Round> rounds = new List<Round>();\n\n    // The export method\n    void Export()\n    {\n        // Create a new output file stream\n        doc = new XDocument();\n        doc.Add(new XElement(\"Elements\"));\n        XElement elements = doc.Element(\"Elements\");\n\n\n        XElement pathPiecesXML = new XElement(\"PathPieces\");\n        var paths = GameObject.FindGameObjectsWithTag(\"Path\");\n       \n        foreach (var item in paths)\n        {\n            XElement path = new XElement(\"Path\");\n            XAttribute attrX = new XAttribute(\"X\", item.transform.position.x);\n            XAttribute attrY = new XAttribute(\"Y\", item.transform.position.y);\n            path.Add(attrX, attrY);\n            pathPiecesXML.Add(path);\n        }\n        pathsCount = paths.Length;\n        elements.Add(pathPiecesXML);\n\n        XElement waypointsXML = new XElement(\"Waypoints\");\n        var waypoints = GameObject.FindGameObjectsWithTag(\"Waypoint\");\n        if (!WaypointsAreValid(waypoints))\n        {\n            return;\n        }\n        //order by user selected order\n        waypoints = waypoints.OrderBy(x => x.GetComponent<OrderedWaypointForEditor>().Order).ToArray();\n        foreach (var item in waypoints)\n        {\n            XElement waypoint = new XElement(\"Waypoint\");\n            XAttribute attrX = new XAttribute(\"X\", item.transform.position.x);\n            XAttribute attrY = new XAttribute(\"Y\", item.transform.position.y);\n            waypoint.Add(attrX, attrY);\n            waypointsXML.Add(waypoint);\n        }\n        waypointsCount = waypoints.Length;\n        elements.Add(waypointsXML);\n\n        XElement roundsXML = new XElement(\"Rounds\");\n        foreach (var item in rounds)\n        {\n            XElement round = new XElement(\"Round\");\n            XAttribute NoOfEnemies = new XAttribute(\"NoOfEnemies\", item.NoOfEnemies);\n            round.Add(NoOfEnemies);\n            roundsXML.Add(round);\n        }\n        elements.Add(roundsXML);\n\n        XElement towerXML = new XElement(\"Tower\");\n        var tower = GameObject.FindGameObjectWithTag(\"Tower\");\n        if(tower == null)\n        {\n            ShowErrorForNull(\"Tower\");\n            return;\n        }\n        XAttribute towerX = new XAttribute(\"X\", tower.transform.position.x);\n        XAttribute towerY = new XAttribute(\"Y\", tower.transform.position.y);\n        towerXML.Add(towerX, towerY);\n        elements.Add(towerXML);\n\n        XElement otherStuffXML = new XElement(\"OtherStuff\");\n        otherStuffXML.Add(new XAttribute(\"InitialMoney\", initialMoney));\n        otherStuffXML.Add(new XAttribute(\"MinCarrotSpawnTime\", MinCarrotSpawnTime));\n        otherStuffXML.Add(new XAttribute(\"MaxCarrotSpawnTime\", MaxCarrotSpawnTime));\n        elements.Add(otherStuffXML);\n\n\n        if (!InputIsValid())\n            return;\n\n\n\n        if (EditorUtility.DisplayDialog(\"Save confirmation\",\n            \"Are you sure you want to save level \" + filename +\"?\", \"OK\", \"Cancel\"))\n        {\n            doc.Save(\"Assets/\" + filename);\n            EditorUtility.DisplayDialog(\"Saved\", filename + \" saved!\", \"OK\");\n        }\n        else\n        {\n            EditorUtility.DisplayDialog(\"NOT Saved\", filename + \" not saved!\", \"OK\");\n        }\n    }\n\n    private bool WaypointsAreValid(GameObject[] waypoints)\n    {\n        //first check whether whey all have a OrderedWaypoint component\n        if (!waypoints.All(x => x.GetComponent<OrderedWaypointForEditor>() != null))\n        {\n            EditorUtility.DisplayDialog(\"Error\", \"All waypoints must have an ordered waypoint component\", \"OK\");\n            return false;\n        }\n        //check if all Order fields on the orderwaypoint components are different\n\n        if (waypoints.Count() != waypoints.Select(x=>x.GetComponent<OrderedWaypointForEditor>().Order).Distinct().Count())\n        {\n            EditorUtility.DisplayDialog(\"Error\", \"All waypoints must have a different order\", \"OK\");\n            return false;\n        }\n        return true;\n    }\n\n    private void ShowErrorForNull(string gameObjectName)\n    {\n        EditorUtility.DisplayDialog(\"Error\", \"Cannot find gameobject \" + gameObjectName, \"OK\");\n    }\n\n    private bool InputIsValid()\n    {\n        if (MinCarrotSpawnTime > MaxCarrotSpawnTime)\n        {\n            EditorUtility.DisplayDialog(\"Error\", \"MinCarrotSpawnTime must be less or equal \"\n            + \" to MaxCarrotSpawnTime\", \"OK\");\n            return false;\n        }\n\n        if (rounds.Count == 0)\n        {\n            EditorUtility.DisplayDialog(\"Error\", \"You cannot have 0 rounds\", \"OK\");\n            return false;\n        }\n\n        if (waypointsCount == 0)\n        {\n            EditorUtility.DisplayDialog(\"Error\", \"You cannot have 0 waypoints\", \"OK\");\n            return false;\n        }\n\n        if (pathsCount == 0)\n        {\n            EditorUtility.DisplayDialog(\"Error\", \"You cannot have 0 paths\", \"OK\");\n            return false;\n        }\n\n        return true;\n    }\n\n}\n"
  },
  {
    "path": "Assets/Editor/LevelExport.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 9a1f98525123ab0448bcd52794183e29\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Editor.meta",
    "content": "fileFormatVersion: 2\nguid: 0ec61eb9e3c0b01418f1349ad01afec7\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Prefabs/Arrow.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: f19afcd826e89cb488afdd3215cc2f64\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Prefabs/Bunny.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: 2432be9b4f27c07418472db59ada6820\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Prefabs/Enemy.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: a84d866c941de9c4f8466adb84ab6371\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Prefabs/Path.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: b1e0f8e16e04e3a48ab9865c613b0a8d\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Prefabs/RootGO.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: 672ec9dc8634232488dc5b57ae3b541f\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Prefabs/Tower.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: 72b25f8bade59464daa9a3b36a4a0f04\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Prefabs/carrot.prefab.meta",
    "content": "fileFormatVersion: 2\nguid: 72926e40b231c84498bdcebbf5ec8d81\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Prefabs.meta",
    "content": "fileFormatVersion: 2\nguid: 787b4919f33dbac4fb854100a24852e5\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Resources/Level1.xml",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<Elements>\n  <PathPieces>\n    <Path X=\"-1.30081642\" Y=\"1.43285584\" />\n    <Path X=\"-2.30081654\" Y=\"1.43285584\" />\n    <Path X=\"-3.30081654\" Y=\"1.47059512\" />\n    <Path X=\"-0.300816417\" Y=\"-0.5671437\" />\n    <Path X=\"0.6992016\" Y=\"-0.5671451\" />\n    <Path X=\"-1.30081642\" Y=\"-0.5671439\" />\n    <Path X=\"-2.30081654\" Y=\"-0.5671439\" />\n    <Path X=\"-3.30081654\" Y=\"-0.5671439\" />\n    <Path X=\"4.699178\" Y=\"-4.56714344\" />\n    <Path X=\"3.69918251\" Y=\"-4.56714344\" />\n    <Path X=\"5.699173\" Y=\"-4.56714344\" />\n    <Path X=\"6.69917536\" Y=\"-4.56714344\" />\n    <Path X=\"7.6991663\" Y=\"-4.56714344\" />\n    <Path X=\"8.699181\" Y=\"-4.56714344\" />\n    <Path X=\"9.699175\" Y=\"-4.56714344\" />\n    <Path X=\"2.69918823\" Y=\"-2.56714845\" />\n    <Path X=\"3.69917679\" Y=\"-2.56714845\" />\n    <Path X=\"1.69918823\" Y=\"-2.56714845\" />\n    <Path X=\"1.699192\" Y=\"-3.56714559\" />\n    <Path X=\"1.69918823\" Y=\"-4.56714344\" />\n    <Path X=\"1.69918823\" Y=\"-0.5671432\" />\n    <Path X=\"6.6991663\" Y=\"-1.567147\" />\n    <Path X=\"2.69918823\" Y=\"-4.56714344\" />\n    <Path X=\"2.69918823\" Y=\"-0.5671432\" />\n    <Path X=\"3.69917679\" Y=\"-0.5671432\" />\n    <Path X=\"4.69918442\" Y=\"-0.5671432\" />\n    <Path X=\"5.69918251\" Y=\"-0.5671451\" />\n    <Path X=\"6.69918156\" Y=\"-0.5671432\" />\n    <Path X=\"6.699174\" Y=\"-2.56714845\" />\n    <Path X=\"5.69918251\" Y=\"-2.56714845\" />\n    <Path X=\"4.699188\" Y=\"1.432855\" />\n    <Path X=\"3.699192\" Y=\"1.432855\" />\n    <Path X=\"2.69919968\" Y=\"1.432855\" />\n    <Path X=\"1.699192\" Y=\"1.432855\" />\n    <Path X=\"0.699192047\" Y=\"1.432855\" />\n    <Path X=\"-4.30081654\" Y=\"1.47059512\" />\n    <Path X=\"-4.30081654\" Y=\"0.432856083\" />\n    <Path X=\"4.69918251\" Y=\"-2.56714845\" />\n    <Path X=\"-4.30081654\" Y=\"-0.5671439\" />\n    <Path X=\"-0.300816417\" Y=\"1.43285584\" />\n    <Path X=\"3.699171\" Y=\"4.432855\" />\n    <Path X=\"4.6991787\" Y=\"4.432855\" />\n    <Path X=\"5.699171\" Y=\"4.432855\" />\n    <Path X=\"6.69916248\" Y=\"4.432855\" />\n    <Path X=\"7.69917774\" Y=\"4.432855\" />\n    <Path X=\"7.69917\" Y=\"3.432859\" />\n    <Path X=\"7.6991663\" Y=\"2.43286085\" />\n    <Path X=\"7.69918156\" Y=\"1.432855\" />\n    <Path X=\"6.69918537\" Y=\"1.432855\" />\n    <Path X=\"5.699171\" Y=\"1.432855\" />\n    <Path X=\"-5.290001\" Y=\"4.44432974\" />\n    <Path X=\"-4.30081558\" Y=\"4.432855\" />\n    <Path X=\"-3.30081558\" Y=\"4.432855\" />\n    <Path X=\"-2.30081558\" Y=\"4.432855\" />\n    <Path X=\"-1.30081546\" Y=\"4.432855\" />\n    <Path X=\"-0.300815582\" Y=\"4.432855\" />\n    <Path X=\"0.6991844\" Y=\"4.432855\" />\n    <Path X=\"1.6991806\" Y=\"4.432855\" />\n    <Path X=\"2.6991787\" Y=\"4.432855\" />\n    <Path X=\"-6.290001\" Y=\"4.44432974\" />\n  </PathPieces>\n  <Waypoints>\n    <Waypoint X=\"11.2078037\" Y=\"-4.519046\" />\n    <Waypoint X=\"1.741848\" Y=\"-4.519046\" />\n    <Waypoint X=\"1.741848\" Y=\"-2.55718851\" />\n    <Waypoint X=\"6.69554234\" Y=\"-2.55718851\" />\n    <Waypoint X=\"6.69554234\" Y=\"-0.5462837\" />\n    <Waypoint X=\"-4.241806\" Y=\"-0.5462837\" />\n    <Waypoint X=\"-4.241806\" Y=\"1.51366663\" />\n    <Waypoint X=\"7.725524\" Y=\"1.51366663\" />\n    <Waypoint X=\"7.725524\" Y=\"4.45645332\" />\n    <Waypoint X=\"-7.28267574\" Y=\"4.45645332\" />\n  </Waypoints>\n  <Tower X=\"-7.37928\" Y=\"4.42552137\" />\n  <Rounds>\n    <Round NoOfEnemies=\"2\" />\n    <Round NoOfEnemies=\"2\" />\n    <Round NoOfEnemies=\"4\" />\n    <Round NoOfEnemies=\"4\" />\n    <Round NoOfEnemies=\"6\" />\n    <Round NoOfEnemies=\"6\" />\n    <Round NoOfEnemies=\"8\" />\n    <Round NoOfEnemies=\"8\" />\n    <Round NoOfEnemies=\"10\" />\n    <Round NoOfEnemies=\"12\" />\n  </Rounds>\n  <OtherStuff InitialMoney =\"200\" MinCarrotSpawnTime=\"1\" MaxCarrotSpawnTime=\"3\" />\n</Elements>\n"
  },
  {
    "path": "Assets/Resources/Level1.xml.meta",
    "content": "fileFormatVersion: 2\nguid: 111b176d9751b244f9766267f11fc925\nTextScriptImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Resources.meta",
    "content": "fileFormatVersion: 2\nguid: 027bff34dfdf63540b766acb3fa45a4b\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Scenes/game.unity.meta",
    "content": "fileFormatVersion: 2\nguid: 8048a33abbc13eb42b049b36a2c26c4a\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Scenes.meta",
    "content": "fileFormatVersion: 2\nguid: 46411d2a8f3579c40b74596148184941\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/Arrow.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\n\npublic class Arrow : MonoBehaviour {\n\n\t// Use this for initialization\n\tvoid Start () {\n\t\t//disable it after 5 seconds, whatever happens\n\t\tInvoke(\"Disable\", 5f);\n\t}\n\n\tpublic void Disable()\n\t{\n\t\t//if we are called from another gameobject,\n\t\t//cancel the timed invoke\n\t\tCancelInvoke();\n\t\t//since we're pooling it, make it inactive instead of destroying it\n\t\tthis.gameObject.SetActive(false);\n\t}\n\t\n\t\n}\n"
  },
  {
    "path": "Assets/Scripts/Arrow.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 3efa080e0e608b44f8797ac518170b84\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/AudioManager.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\n\npublic class AudioManager : MonoBehaviour {\n\n    public AudioClip ArrowAudioClip, DeathSoundAudioClip;\n\n    /// <summary>\n    /// Basic singleton implementation\n    /// </summary>\n    public static AudioManager Instance { get; private set; }\n\n    void Awake()\n    {\n        Instance = this;\n    }\n\n    public void PlayArrowSound()\n    {\n        StartCoroutine(PlaySound(ArrowAudioClip));\n    }\n\n    public void PlayDeathSound()\n    {\n        StartCoroutine(PlaySound(DeathSoundAudioClip));\n    }\n\n    //coroutine is used since we also want to deactivate it after the sound is played\n    private IEnumerator PlaySound(AudioClip clip)\n    {\n        //get an object from the pooler, activate it, play the sound\n        //wait for sound completion and then deactivate the object\n        GameObject go = ObjectPoolerManager.Instance.AudioPooler.GetPooledObject();\n        go.SetActive(true);\n        go.GetComponent<AudioSource>().PlayOneShot(clip);\n        yield return new WaitForSeconds(clip.length);\n        go.SetActive(false);\n    }\n}\n"
  },
  {
    "path": "Assets/Scripts/AudioManager.cs.meta",
    "content": "fileFormatVersion: 2\nguid: b76483430df840a4fa28c360640f3991\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/Bunny.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\nusing System.Linq;\nusing Assets.Scripts;\n\npublic class Bunny : MonoBehaviour\n{\n\n    //arrow sound found here\n    //https://www.freesound.org/people/Erdie/sounds/65734/\n\n    public Transform ArrowSpawnPosition;\n    public GameObject ArrowPrefab;\n    public float ShootWaitTime = 2f;\n    private float LastShootTime = 0f;\n    GameObject targetedEnemy;\n    private float InitialArrowForce = 500f;\n\n    // Use this for initialization\n    void Start()\n    {\n        State = BunnyState.Inactive;\n        //find where we're shooting from\n        ArrowSpawnPosition = transform.FindChild(\"ArrowSpawnPosition\");\n    }\n\n    // Update is called once per frame\n    void Update()\n    {\n        //if we're in the last round and we've killed all enemies, do nothing\n        if (GameManager.Instance.FinalRoundFinished &&\n            GameManager.Instance.Enemies.Where(x => x != null).Count() == 0)\n            State = BunnyState.Inactive;\n\n        //searching for an enemy\n        if (State == BunnyState.Searching)\n        {\n            if (GameManager.Instance.Enemies.Where(x => x != null).Count() == 0) return;\n\n            //find the closest enemy\n            //aggregate method proposed here\n            //http://unitygems.com/linq-1-time-linq/\n            targetedEnemy = GameManager.Instance.Enemies.Where(x => x != null)\n           .Aggregate((current, next) => Vector2.Distance(current.transform.position, transform.position)\n               < Vector2.Distance(next.transform.position, transform.position)\n              ? current : next);\n\n            //if there is an enemy and is close to us, target it\n            if (targetedEnemy != null && targetedEnemy.activeSelf\n                && Vector3.Distance(transform.position, targetedEnemy.transform.position)\n                < Constants.MinDistanceForBunnyToShoot)\n            {\n                State = BunnyState.Targeting;\n            }\n\n        }\n        else if (State == BunnyState.Targeting)\n        {\n            //if the targeted enemy is still close to us, look at it and shoot!\n            if (targetedEnemy != null \n                && Vector3.Distance(transform.position, targetedEnemy.transform.position)\n                    < Constants.MinDistanceForBunnyToShoot)\n            {\n                LookAndShoot();\n            }\n            else //enemy has left our shooting range, so look for another one\n            {\n                State = BunnyState.Searching;\n            }\n        }\n    }\n\n    private void LookAndShoot()\n    {\n        //look at the enemy\n        Quaternion diffRotation = Quaternion.LookRotation\n            (transform.position - targetedEnemy.transform.position, Vector3.forward);\n        transform.rotation = Quaternion.RotateTowards\n            (transform.rotation, diffRotation, Time.deltaTime * 2000);\n        transform.eulerAngles = new Vector3(0, 0, transform.eulerAngles.z);\n\n        //make sure we're almost looking at the enemy before start shooting\n        Vector2 direction = targetedEnemy.transform.position - transform.position;\n        float axisDif = Vector2.Angle(transform.up, direction);\n        //shoot only if we have 20 degrees rotation difference to the enemy\n        if (axisDif <= 20f)\n        {\n            if (Time.time - LastShootTime > ShootWaitTime)\n            {\n                Shoot(direction);\n                LastShootTime = Time.time;\n            }\n\n        }\n    }\n\n\n    private void Shoot(Vector2 dir)\n    {\n        //if the enemy is still close to us\n        if (targetedEnemy != null && targetedEnemy.activeSelf\n            && Vector3.Distance(transform.position, targetedEnemy.transform.position)\n                    < Constants.MinDistanceForBunnyToShoot)\n        {\n            //create a new arrow\n            GameObject go = ObjectPoolerManager.Instance.ArrowPooler.GetPooledObject();\n            go.transform.position = ArrowSpawnPosition.position;\n            go.transform.rotation = transform.rotation;\n            go.SetActive(true);\n            //SHOOT IT!\n            go.GetComponent<Rigidbody2D>().AddForce(dir * InitialArrowForce);\n            AudioManager.Instance.PlayArrowSound();\n        }\n        else//find another enemy\n        {\n            State = BunnyState.Searching;\n        }\n\n\n    }\n    private BunnyState State;\n\n\n    public void Activate()\n    {\n        State = BunnyState.Searching;\n    }\n}\n"
  },
  {
    "path": "Assets/Scripts/Bunny.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 709dea957d3aa334d925137e1c5adea3\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/Carrot.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\nusing Assets.Scripts;\n\npublic class Carrot : MonoBehaviour\n{\n\n    //carrot sprite found in http://opengameart.org/content/easter-carrot-pick-up-item\n\n    Camera mainCamera;\n\n    // Use this for initialization\n    void Start()\n    {\n        mainCamera = Camera.main;\n    }\n\n    // Update is called once per frame\n    void Update()\n    {\n        transform.position = new Vector3(\n            transform.position.x,\n            transform.position.y - Time.deltaTime * FallSpeed,\n            transform.position.z);\n        transform.Rotate(0, 0, Time.deltaTime * 10);\n\n        if (Input.GetMouseButtonDown(0))\n        {\n            //check if the user tap/click touches the carrot\n            Vector2 location = mainCamera.ScreenToWorldPoint(Input.mousePosition);\n\n            if (this.GetComponent<BoxCollider2D>() == Physics2D.OverlapPoint(location,\n                1 << LayerMask.NameToLayer(\"Carrot\")))\n            {\n                //increase player money\n                GameManager.Instance.AlterMoneyAvailable(Constants.CarrotAward);\n                //destroy carrot\n                Destroy(this.gameObject);\n            }\n        }\n    }\n\n    public float FallSpeed = 1;\n}\n"
  },
  {
    "path": "Assets/Scripts/Carrot.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 3bae68fd5da19fb4282e7ea8bb942abf\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/CarrotSpawner.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\n\npublic class CarrotSpawner : MonoBehaviour {\n\n\t/// <summary>\n\t/// Carrot prefab\n\t/// </summary>\n\tpublic GameObject Carrot;\n\n\tpublic void StartCarrotSpawning()\n\t{\n\t\tStartCoroutine(SpawnCarrots());\n\t}\n\n\tpublic void StopCarrotSpawning()\n\t{\n\t\tStopAllCoroutines();\n\t}\n\tprivate IEnumerator SpawnCarrots()\n\t{\n\t\twhile (true)\n\t\t{\n\t\t\t//select a random position\n\t\t\tfloat X = Random.Range(100, Screen.width - 100);\n\t\t\tVector3 randomPosition = Camera.main.ScreenToWorldPoint(new Vector3(X, 0, 0));\n\t\t\t//create and drop a carrot\n\t\t\tGameObject carrot = Instantiate(Carrot,\n\t\t\t\tnew Vector3(randomPosition.x, transform.position.y, transform.position.z),\n\t\t\t\tQuaternion.identity) as GameObject;\n\t\t\tcarrot.GetComponent<Carrot>().FallSpeed = Random.Range(1f, 3f);\n\t\t\t//wait for random seconds, based on level parameters\n\t\t\tyield return new WaitForSeconds\n\t\t\t\t(Random.Range(GameManager.Instance.MinCarrotSpawnTime, \n\t\t\t\tGameManager.Instance.MaxCarrotSpawnTime));\n\t\t}\n\t}\n\t\n\n}\n"
  },
  {
    "path": "Assets/Scripts/CarrotSpawner.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 5b9bb9fb6b842624db44df45e2f9add1\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/Constants.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing UnityEngine;\n\nnamespace Assets.Scripts\n{\n    /// <summary>\n    /// Constant helper variables\n    /// </summary>\n    public static class Constants\n    {\n        public static readonly Color RedColor = new Color(1f, 0f, 0f, 0f);\n        public static readonly Color BlackColor = new Color(0f, 0f, 0f, 0f);\n        public static readonly int BunnyCost = 50;\n        public static readonly int CarrotAward = 10;\n        public static readonly int InitialEnemyHealth = 50;\n        public static readonly int ArrowDamage = 20;\n        public static readonly float MinDistanceForBunnyToShoot = 3f;\n        \n    }\n}\n"
  },
  {
    "path": "Assets/Scripts/Constants.cs.meta",
    "content": "fileFormatVersion: 2\nguid: e8abcfc6062ce5f4a857ac7393af9e6a\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/DragDropBunny.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\nusing System.Linq;\nusing Assets.Scripts;\n\n/// <summary>\n/// Drag and drop mechanism\n/// </summary>\npublic class DragDropBunny : MonoBehaviour\n{\n\n    // Use this for initialization\n    void Start()\n    {\n        mainCamera = Camera.main;\n    }\n   \n    private Camera mainCamera;\n    //type of bunnies we'll create\n    public GameObject BunnyPrefab;\n    //the starting object for the drag\n    public GameObject BunnyGenerator;\n    bool isDragging = false;\n    //temp bunny\n    private GameObject newBunny;\n\n    //will be colored red if we cannot place a bunny there\n    private GameObject tempBackgroundBehindPath;\n\n    // Update is called once per frame\n    void Update()\n    {\n        //if we have money and we can drag a new bunny\n        if (Input.GetMouseButtonDown(0) && !isDragging &&\n            GameManager.Instance.MoneyAvailable >= Constants.BunnyCost)\n        {\n            ResetTempBackgroundColor();\n            Vector2 location = mainCamera.ScreenToWorldPoint(Input.mousePosition);\n            //if user has tapped onto the bunny generator\n            if (BunnyGenerator.GetComponent<CircleCollider2D>() ==\n                Physics2D.OverlapPoint(location, 1 << LayerMask.NameToLayer(\"BunnyGenerator\")))\n            {\n                //initiate dragging operation and create a new bunny for us to drag\n                isDragging = true;\n                //create a temp bunny to drag around\n                newBunny = Instantiate(BunnyPrefab, BunnyGenerator.transform.position, Quaternion.identity)\n                    as GameObject;\n            }\n        }\n        else if (Input.GetMouseButton(0) && isDragging)\n        {\n            Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);\n            RaycastHit2D[] hits = Physics2D.RaycastAll(ray.origin, ray.direction);\n            if (hits.Length > 0 && hits[0].collider != null)\n            {\n                newBunny.transform.position = hits[0].collider.gameObject.transform.position;\n\n                //if we're hitting a path or tower\n                //or there is an existing bunny there\n                //we use > 1 since we're hovering over the newBunny gameobject \n                //(i.e. there is already a bunny there)\n                if (hits.Where(x => x.collider.gameObject.tag == \"Path\"\n                    || x.collider.gameObject.tag == \"Tower\").Count() > 0\n                    || hits.Where(x=>x.collider.gameObject.tag == \"Bunny\").Count() > 1)\n                {\n                    //we cannot place a bunny there\n                    GameObject backgroundBehindPath = hits.Where\n                        (x => x.collider.gameObject.tag == \"Background\").First().collider.gameObject;\n                    //make the sprite material \"more red\"\n                    //to let the user know that we can't place a bunny here\n                    backgroundBehindPath.GetComponent<SpriteRenderer>().color = Constants.RedColor;\n                    \n                    if (tempBackgroundBehindPath != backgroundBehindPath)\n                        ResetTempBackgroundColor();\n                    //cache it to revert later\n                    tempBackgroundBehindPath = backgroundBehindPath;\n                }\n                else //just reset the color on previously set paths\n                {\n                    ResetTempBackgroundColor();\n                }\n\n            }\n        }\n        //we're stopping dragging\n        else if (Input.GetMouseButtonUp(0) && isDragging)\n        {\n            ResetTempBackgroundColor();\n            //check if we can leave the bunny here\n            Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);\n\n            RaycastHit2D[] hits = Physics2D.RaycastAll(ray.origin, ray.direction,\n                Mathf.Infinity, ~(1 << LayerMask.NameToLayer(\"BunnyGenerator\")));\n            //in order to place it, we must have a background and no other bunnies\n            if (hits.Where(x=>x.collider.gameObject.tag == \"Background\").Count() > 0\n                && hits.Where(x => x.collider.gameObject.tag == \"Path\").Count() == 0\n                && hits.Where(x=>x.collider.gameObject.tag == \"Bunny\").Count() == 1)\n            {\n                //we can leave a bunny here, so decrease money and activate it\n                GameManager.Instance.AlterMoneyAvailable(-Constants.BunnyCost);\n                newBunny.transform.position = \n                    hits.Where(x => x.collider.gameObject.tag == \"Background\")\n                    .First().collider.gameObject.transform.position;\n                newBunny.GetComponent<Bunny>().Activate();\n            }\n            else\n            {\n                //we can't leave a bunny here, so destroy the temp one\n                Destroy(newBunny);\n            }\n            isDragging = false;\n\n        }\n    }\n\n    //make background sprite appear as it is\n    private void ResetTempBackgroundColor()\n    {\n        if (tempBackgroundBehindPath != null)\n            tempBackgroundBehindPath.GetComponent<SpriteRenderer>().color = Constants.BlackColor;\n    }\n\n}\n"
  },
  {
    "path": "Assets/Scripts/DragDropBunny.cs.meta",
    "content": "fileFormatVersion: 2\nguid: dc48c92ee473e39499456b4328dde1ac\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/Enemy.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\nusing Assets.Scripts;\nusing System;\n\npublic class Enemy : MonoBehaviour\n{\n    //death sound found here\n    //https://www.freesound.org/people/psychentist/sounds/168567/\n\n    public int Health;\n    int nextWaypointIndex = 0;\n    public float Speed = 1f;\n    // Use this for initialization\n    void Start()\n    {\n        Health = Constants.InitialEnemyHealth;\n    }\n\n    // Update is called once per frame\n    void Update()\n    {\n\n        //calculate the distance between current position\n        //and the target waypoint\n        if (Vector2.Distance(transform.position,\n            GameManager.Instance.Waypoints[nextWaypointIndex].position) < 0.01f)\n        {\n            //is this waypoint the last one?\n            if (nextWaypointIndex == GameManager.Instance.Waypoints.Length - 1)\n            {\n                RemoveAndDestroy();\n                GameManager.Instance.Lives--;\n            }\n            else\n            {\n                //our enemy will go to the next waypoint\n                nextWaypointIndex++;\n                //our simple AI, enemy is looking at the next waypoint\n                transform.LookAt(GameManager.Instance.Waypoints[nextWaypointIndex].position,\n                    -Vector3.forward);\n                //only in the z axis\n                transform.eulerAngles = new Vector3(0, 0, transform.eulerAngles.z);\n            }\n        }\n        \n        //enemy is moved towards the next waypoint\n        transform.position = Vector2.MoveTowards(transform.position,\n            GameManager.Instance.Waypoints[nextWaypointIndex].position,\n            Time.deltaTime * Speed);\n    }\n\n\n\n    void OnCollisionEnter2D(Collision2D col)\n    {\n        if (col.gameObject.tag == \"Arrow\")\n        {//if we're hit by an arrow\n            if (Health > 0)\n            {\n                //decrease enemy health\n                Health -= Constants.ArrowDamage;\n                if (Health <= 0)\n                {\n                    RemoveAndDestroy();\n                }\n            }\n            col.gameObject.GetComponent<Arrow>().Disable(); //disable the arrow\n        }\n    }\n    public event EventHandler EnemyKilled;\n\n    void RemoveAndDestroy()\n    {\n        AudioManager.Instance.PlayDeathSound();\n        //remove it from the enemy list\n        GameManager.Instance.Enemies.Remove(this.gameObject);\n        Destroy(this.gameObject);\n        //notify interested parties that we died\n        if (EnemyKilled != null)\n            EnemyKilled(this, EventArgs.Empty);\n    }\n}\n"
  },
  {
    "path": "Assets/Scripts/Enemy.cs.meta",
    "content": "fileFormatVersion: 2\nguid: afc9dcbac1e688c4384857ea0f44e5b9\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/Enums.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Assets.Scripts\n{\n    public enum BunnyState\n    {\n        Inactive,\n        Searching,\n        Targeting\n    }\n\n    public enum GameState\n    {\n        Start,\n        Playing,\n        Won,\n        Lost\n    }\n}\n"
  },
  {
    "path": "Assets/Scripts/Enums.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 28a214e46c3781448abaea3be81ab638\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/GameManager.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Assets.Scripts;\nusing System.Collections;\nusing System;\n\npublic class GameManager : MonoBehaviour\n{\n    //basic singleton implementation\n    [HideInInspector]\n    public static GameManager Instance { get; private set; }\n\n    void Awake()\n    {\n        Instance = this;\n    }\n\n    //sprites can be found here: \n    //http://www.gameartguppy.com/shop/top-tower-defense-bunny-badgers-game-art-set/\n\n    //enemies on screen\n    public List<GameObject> Enemies;\n    //prefabs\n    public GameObject EnemyPrefab;\n    public GameObject PathPrefab;\n    public GameObject TowerPrefab;\n    //list of waypoints in the current level\n    public Transform[] Waypoints;\n    private GameObject PathPiecesParent;\n    private GameObject WaypointsParent;\n    //file pulled from resources\n    private LevelStuffFromXML levelStuffFromXML;\n    //will spawn carrots on screen\n    public CarrotSpawner CarrotSpawner;\n\n    //helpful variables for our player\n    [HideInInspector]\n    public int MoneyAvailable { get; private set; }\n    [HideInInspector]\n    public float MinCarrotSpawnTime;\n    [HideInInspector]\n    public float MaxCarrotSpawnTime;\n    public int Lives = 10;\n    private int currentRoundIndex = 0;\n    [HideInInspector]\n    public GameState CurrentGameState;\n    public SpriteRenderer BunnyGeneratorSprite;\n    [HideInInspector]\n    public bool FinalRoundFinished;\n    public GUIText infoText;\n\n    private object lockerObject = new object();\n\n    // Use this for initialization\n    void Start()\n    {\n        IgnoreLayerCollisions();\n\n        Enemies = new List<GameObject>();\n        PathPiecesParent = GameObject.Find(\"PathPieces\");\n        WaypointsParent = GameObject.Find(\"Waypoints\");\n        levelStuffFromXML = Utilities.ReadXMLFile();\n\n        CreateLevelFromXML();\n\n        CurrentGameState = GameState.Start;\n\n        FinalRoundFinished = false;\n    }\n\n    /// <summary>\n    /// Will create necessary stuff from the object that has the XML stuff\n    /// </summary>\n    private void CreateLevelFromXML()\n    {\n        foreach (var position in levelStuffFromXML.Paths)\n        {\n            GameObject go = Instantiate(PathPrefab, position, \n                Quaternion.identity) as GameObject;\n            go.GetComponent<SpriteRenderer>().sortingLayerName = \"Path\";\n            go.transform.parent = PathPiecesParent.transform;\n        }\n\n        for (int i = 0; i < levelStuffFromXML.Waypoints.Count; i++)\n        {\n            GameObject go = new GameObject();\n            go.transform.position = levelStuffFromXML.Waypoints[i];\n            go.transform.parent = WaypointsParent.transform;\n            go.tag = \"Waypoint\";\n            go.name = \"Waypoints\" + i.ToString();\n        }\n\n        GameObject tower = Instantiate(TowerPrefab, levelStuffFromXML.Tower,\n            Quaternion.identity) as GameObject;\n        tower.GetComponent<SpriteRenderer>().sortingLayerName = \"Foreground\";\n\n        Waypoints = GameObject.FindGameObjectsWithTag(\"Waypoint\")\n            .OrderBy(x => x.name).Select(x => x.transform).ToArray();\n\n        MoneyAvailable = levelStuffFromXML.InitialMoney;\n        MinCarrotSpawnTime = levelStuffFromXML.MinCarrotSpawnTime;\n        MaxCarrotSpawnTime = levelStuffFromXML.MaxCarrotSpawnTime;\n    }\n\n    /// <summary>\n    /// Will make the arrow collide only with enemies!\n    /// </summary>\n    private void IgnoreLayerCollisions()\n    {\n        int bunnyLayerID = LayerMask.NameToLayer(\"Bunny\");\n        int enemyLayerID = LayerMask.NameToLayer(\"Enemy\");\n        int arrowLayerID = LayerMask.NameToLayer(\"Arrow\");\n        int bunnyGeneratorLayerID = LayerMask.NameToLayer(\"BunnyGenerator\");\n        int backgroundLayerID = LayerMask.NameToLayer(\"Background\");\n        int pathLayerID = LayerMask.NameToLayer(\"Path\");\n        int towerLayerID = LayerMask.NameToLayer(\"Tower\");\n        int carrotLayerID = LayerMask.NameToLayer(\"Carrot\");\n        Physics2D.IgnoreLayerCollision(bunnyLayerID, enemyLayerID); //Bunny and Enemy (when dragging the bunny)\n        Physics2D.IgnoreLayerCollision(arrowLayerID, bunnyGeneratorLayerID); //Arrow and BunnyGenerator\n        Physics2D.IgnoreLayerCollision(arrowLayerID, backgroundLayerID); //Arrow and Background\n        Physics2D.IgnoreLayerCollision(arrowLayerID, pathLayerID); //Arrow and Path\n        Physics2D.IgnoreLayerCollision(arrowLayerID, bunnyLayerID); //Arrow and Bunny\n        Physics2D.IgnoreLayerCollision(arrowLayerID, towerLayerID); //Arrow and Tower\n        Physics2D.IgnoreLayerCollision(arrowLayerID, carrotLayerID); //Arrow and Carrot\n    }\n\n\n\n    IEnumerator NextRound()\n    {\n        //give the player 2 secs to do stuff\n        yield return new WaitForSeconds(2f);\n        //get a reference to the next round details\n        Round currentRound = levelStuffFromXML.Rounds[currentRoundIndex];\n        for (int i = 0; i < currentRound.NoOfEnemies; i++)\n        {//spawn a new enemy\n            GameObject enemy = Instantiate(EnemyPrefab, Waypoints[0].position, Quaternion.identity) as GameObject;\n            Enemy enemyComponent = enemy.GetComponent<Enemy>();\n            //set speed and enemyKilled handler\n            enemyComponent.Speed += Mathf.Clamp(currentRoundIndex, 1f, 5f);\n            enemyComponent.EnemyKilled += OnEnemyKilled;\n            //add it to the list and wait till you spawn the next one\n            Enemies.Add(enemy);\n            yield return new WaitForSeconds(1f / (currentRoundIndex == 0 ? 1 : currentRoundIndex));\n        }\n\n    }\n\n    /// <summary>\n    /// Handler for the enemy killed event\n    /// </summary>\n    /// <param name=\"sender\"></param>\n    /// <param name=\"e\"></param>\n    void OnEnemyKilled(object sender, EventArgs e)\n    {\n        bool startNewRound = false;\n        //explicit lock, since this may occur any time by any enemy\n        //not 100% that this is needed, but better safe than sorry!\n        lock (lockerObject)\n        {\n            if (Enemies.Where(x => x != null).Count() == 0 && CurrentGameState == GameState.Playing)\n            {\n                startNewRound = true;\n            }\n        }\n        if (startNewRound)\n            CheckAndStartNewRound();\n    }\n\n    /// <summary>\n    /// Starts a new round (if available) and sets the FinalRound flag\n    /// </summary>\n    private void CheckAndStartNewRound()\n    {\n        if (currentRoundIndex < levelStuffFromXML.Rounds.Count - 1)\n        {\n            currentRoundIndex++;\n            StartCoroutine(NextRound());\n        }\n        else\n        {\n            FinalRoundFinished = true;\n        }\n    }\n\n    // Update is called once per frame\n    void Update()\n    {\n        switch (CurrentGameState)\n        {\n            //start state, on tap, start the game and spawn carrots!\n            case GameState.Start:\n                if (Input.GetMouseButtonUp(0))\n                {\n                    CurrentGameState = GameState.Playing;\n                    StartCoroutine(NextRound());\n                    CarrotSpawner.StartCarrotSpawning();\n                }\n                break;\n            case GameState.Playing:\n                if (Lives == 0) //we lost\n                {\n                    //no more rounds\n                    StopCoroutine(NextRound());\n                    DestroyExistingEnemiesAndCarrots();\n                    CarrotSpawner.StopCarrotSpawning();\n                    CurrentGameState = GameState.Lost;\n                }\n                else if (FinalRoundFinished && Enemies.Where(x => x != null).Count() == 0)\n                {\n                    DestroyExistingEnemiesAndCarrots();\n                    CarrotSpawner.StopCarrotSpawning();\n                    CurrentGameState = GameState.Won;\n                }\n                break;\n            case GameState.Won:\n                if (Input.GetMouseButtonUp(0))\n                {//restart\n                    Application.LoadLevel(Application.loadedLevel);\n                }\n                break;\n            case GameState.Lost:\n                if (Input.GetMouseButtonUp(0))\n                {//restart\n                    Application.LoadLevel(Application.loadedLevel);\n                }\n                break;\n            default:\n                break;\n        }\n    }\n\n    private void DestroyExistingEnemiesAndCarrots()\n    {\n        //get all the enemies\n        foreach (var item in Enemies)\n        {\n            if (item != null)\n                Destroy(item.gameObject);\n        }\n        //get all the carrots\n        var carrots = GameObject.FindGameObjectsWithTag(\"Carrot\");\n        foreach (var item in carrots)\n        {\n            Destroy(item);\n        }\n    }\n\n    /// <summary>\n    /// Increase or decrease money available\n    /// </summary>\n    /// <param name=\"money\"></param>\n    public void AlterMoneyAvailable(int money)\n    {\n        MoneyAvailable += money;\n        //we're also modifying the BunnyGenerator alpha color\n        //yeah, I know, I could use an event for that, next time!\n        if (MoneyAvailable < Constants.BunnyCost)\n        {\n            Color temp = BunnyGeneratorSprite.color;\n            temp.a = 0.3f;\n            BunnyGeneratorSprite.color = temp;\n        }\n        else\n        {\n            Color temp = BunnyGeneratorSprite.color;\n            temp.a = 1.0f;\n            BunnyGeneratorSprite.color = temp;\n        }\n    }\n\n    /// <summary>\n    /// Show GUI stuff with the deprecated way\n    /// Long live Unity 4.6!\n    /// </summary>\n    void OnGUI()\n    {\n        Utilities.AutoResize(800, 480);\n        switch (CurrentGameState)\n        {\n            case GameState.Start:\n                infoText.text = \"Tap to start!\";\n                break;\n            case GameState.Playing:\n                infoText.text = \"Money: \" + MoneyAvailable.ToString() + \"\\n\"\n                    + \"Life: \" + Lives.ToString() + \"\\n\" +\n                    string.Format(\"round {0} of {1}\", currentRoundIndex + 1, levelStuffFromXML.Rounds.Count);\n                break;\n            case GameState.Won:\n                infoText.text = \"Won! Tap to restart!\";\n                break;\n            case GameState.Lost:\n                infoText.text = \"Lost :( Tap to restart!\";\n                break;\n            default:\n                break;\n        }\n    }\n}\n"
  },
  {
    "path": "Assets/Scripts/GameManager.cs.meta",
    "content": "fileFormatVersion: 2\nguid: dca7afd3653af314d8caa97a1b2b9c65\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/LevelStuffFromXML.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing UnityEngine;\n\nnamespace Assets.Scripts\n{\n    /// <summary>\n    /// Simple class to hold all our level details\n    /// </summary>\n    public class LevelStuffFromXML\n    {\n        public float MinCarrotSpawnTime;\n        public float MaxCarrotSpawnTime;\n        public int InitialMoney;\n        public List<Round> Rounds;\n        public List<Vector2> Paths;\n        public List<Vector2> Waypoints;\n        public Vector2 Tower;\n        public LevelStuffFromXML()\n        {\n            Paths = new List<Vector2>();\n            Waypoints = new List<Vector2>();\n            Rounds = new List<Round>();\n        }\n\n    }\n\n    /// <summary>\n    /// Some basic information about each game round\n    /// </summary>\n    public class Round\n    {\n        public int NoOfEnemies { get; set; }\n    }\n\n\n    \n}\n"
  },
  {
    "path": "Assets/Scripts/LevelStuffFromXML.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 49ad409a2968e44438f811f5e011dc2a\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/ObjectPooler.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System;\n\n/// <summary>\n/// A very simple object pooler that duplicates its initial capacity when needed\n/// Can add custom components on creation\n/// </summary>\npublic class ObjectPooler : MonoBehaviour\n{\n    //[optional] set a parent for the new gameobject\n    public Transform Parent;\n    //[optional] prefab to instantiate our pool with\n    public GameObject PooledObject;\n    private List<GameObject> PooledObjects;\n    public int PoolLength = 10;\n\n    private Type[] componentsToAdd;\n\n    public void Initialize()\n    {\n        PooledObjects = new List<GameObject>();\n        for (int i = 0; i < PoolLength; i++)\n        {\n            CreateObjectInPool();\n        }\n    }\n\n    public void Initialize(params Type[] componentsToAdd)\n    {\n        this.componentsToAdd = componentsToAdd;\n        Initialize();\n    }\n\n\n\n    public GameObject GetPooledObject()\n    {\n        for (int i = 0; i < PooledObjects.Count; i++)\n        {\n            if (!PooledObjects[i].activeInHierarchy)\n            {\n                return PooledObjects[i];\n            }\n        }\n        int indexToReturn = PooledObjects.Count;\n        //create more\n        CreateObjectInPool(); \n        //will return the first one that we created\n        return PooledObjects[indexToReturn];\n    }\n\n    private void CreateObjectInPool()\n    {\n        //if we don't have a prefab set, instantiate a new gameobject\n        //else instantiate the prefab\n        GameObject go;\n        if (PooledObject == null)\n            go = new GameObject(this.name + \" PooledObject\");\n        else\n        {\n            go = Instantiate(PooledObject) as GameObject;\n        }\n\n        //set the new object as inactive and add it to the list\n        go.SetActive(false);\n        PooledObjects.Add(go);\n\n        //if we have components to add\n        //add them\n        if (componentsToAdd != null)\n            foreach (Type itemType in componentsToAdd)\n            {\n                go.AddComponent(itemType);\n            }\n\n        //if we have set the parent, assign it as the new object's parent\n        if (Parent != null)\n            go.transform.parent = this.Parent;\n\n\n    }\n}\n"
  },
  {
    "path": "Assets/Scripts/ObjectPooler.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 488109e57cfeb4f439fbe3c2d1fff85a\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/ObjectPoolerManager.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\nusing System;\n\npublic class ObjectPoolerManager : MonoBehaviour {\n\n    //we'll need pools for arrows and audio objects\n    public ObjectPooler ArrowPooler;\n    public ObjectPooler AudioPooler;\n\n    public GameObject ArrowPrefab;\n\n\n    //basic singleton implementation\n    public static ObjectPoolerManager Instance {get;private set;}\n    void Awake()\n    {\n        Instance = this;\n    }\n\n    void Start()\n    {\n        //just instantiate the pools\n        if (ArrowPooler == null)\n        {\n            GameObject go = new GameObject(\"ArrowPooler\");\n            ArrowPooler = go.AddComponent<ObjectPooler>();\n            ArrowPooler.PooledObject = ArrowPrefab;\n            go.transform.parent = this.gameObject.transform;\n            ArrowPooler.Initialize();\n        }\n\n        if (AudioPooler == null)\n        {\n            GameObject go = new GameObject(\"AudioPooler\");\n            AudioPooler = go.AddComponent<ObjectPooler>();\n            go.transform.parent = this.gameObject.transform;\n            AudioPooler.Initialize(typeof(AudioSource));\n        }\n\n        \n    }\n\n}\n"
  },
  {
    "path": "Assets/Scripts/ObjectPoolerManager.cs.meta",
    "content": "fileFormatVersion: 2\nguid: e2d7d1d58baa9c84a9844e78d48e9856\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/OrderedWaypointForEditor.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections;\n\npublic class OrderedWaypointForEditor : MonoBehaviour {\n\n    [Range(0, 20)]\n    public int Order;\n}\n"
  },
  {
    "path": "Assets/Scripts/OrderedWaypointForEditor.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 64a78926b994396478dd7aeb85de7891\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts/Utilities.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Xml.Linq;\nusing UnityEngine;\n\nnamespace Assets.Scripts\n{\n    public static class Utilities\n    {\n        /// <summary>\n        /// Found here\n        /// http://www.bensilvis.com/?p=500\n        /// </summary>\n        /// <param name=\"screenWidth\"></param>\n        /// <param name=\"screenHeight\"></param>\n        public static void AutoResize(int screenWidth, int screenHeight)\n        {\n            Vector2 resizeRatio = new Vector2((float)Screen.width / screenWidth, (float)Screen.height / screenHeight);\n            GUI.matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(resizeRatio.x, resizeRatio.y, 1.0f));\n        }\n\n        /// <summary>\n        /// Reads the XML file\n        /// </summary>\n        /// <returns>A new FileStuffFromXML object</returns>\n        public static LevelStuffFromXML ReadXMLFile()\n        {\n            LevelStuffFromXML ls = new LevelStuffFromXML();\n            //we're directly loading the level1 file, change if appropriate\n            TextAsset ta = Resources.Load(\"Level1\") as TextAsset;\n            //LINQ to XML rulez!\n            XDocument xdoc = XDocument.Parse(ta.text);\n            XElement el = xdoc.Element(\"Elements\");\n            var paths = el.Element(\"PathPieces\").Elements(\"Path\");\n\n            foreach (var item in paths)\n            {\n                ls.Paths.Add(new Vector2(float.Parse(item.Attribute(\"X\").Value), float.Parse(item.Attribute(\"Y\").Value)));\n            }\n\n            var waypoints = el.Element(\"Waypoints\").Elements(\"Waypoint\");\n            foreach (var item in waypoints)\n            {\n                ls.Waypoints.Add(new Vector2(float.Parse(item.Attribute(\"X\").Value), float.Parse(item.Attribute(\"Y\").Value)));\n            }\n\n            var rounds = el.Element(\"Rounds\").Elements(\"Round\");\n            foreach (var item in rounds)\n            {\n                ls.Rounds.Add(new Round()\n                {\n                    NoOfEnemies = int.Parse(item.Attribute(\"NoOfEnemies\").Value),\n                });\n            }\n\n            XElement tower = el.Element(\"Tower\");\n            ls.Tower = new Vector2(float.Parse(tower.Attribute(\"X\").Value), float.Parse(tower.Attribute(\"Y\").Value));\n\n            XElement otherStuff = el.Element(\"OtherStuff\");\n            ls.InitialMoney = int.Parse(otherStuff.Attribute(\"InitialMoney\").Value);\n            ls.MinCarrotSpawnTime = float.Parse(otherStuff.Attribute(\"MinCarrotSpawnTime\").Value);\n            ls.MaxCarrotSpawnTime = float.Parse(otherStuff.Attribute(\"MaxCarrotSpawnTime\").Value);\n\n            return ls;\n        }\n    }\n}\n"
  },
  {
    "path": "Assets/Scripts/Utilities.cs.meta",
    "content": "fileFormatVersion: 2\nguid: 7a20868bd88fd7049b4a5140a5d29a85\nMonoImporter:\n  serializedVersion: 2\n  defaultReferences: []\n  executionOrder: 0\n  icon: {instanceID: 0}\n  userData: \n"
  },
  {
    "path": "Assets/Scripts.meta",
    "content": "fileFormatVersion: 2\nguid: b19b59416800782489d18fe36a84ab3b\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Shaders/ColorTint.mat.meta",
    "content": "fileFormatVersion: 2\nguid: b7ba5a509df92a74398bf5b62eb4fe8d\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Shaders/ColorTint.shader",
    "content": "Shader \"Sprites/ColorTint\"\n{\n\tProperties\n\t{\n\t\t[PerRendererData] _MainTex (\"Sprite Texture\", 2D) = \"white\" {}\n\t\t_Color (\"Tint\", Color) = (1,1,1,1)\n\t\t[MaterialToggle] PixelSnap (\"Pixel snap\", Float) = 0\n\t}\n\n\tSubShader\n\t{\n\t\tTags\n\t\t{ \n\t\t\t\"Queue\"=\"Transparent\" \n\t\t\t\"IgnoreProjector\"=\"True\" \n\t\t\t\"RenderType\"=\"Transparent\" \n\t\t\t\"PreviewType\"=\"Plane\"\n\t\t\t\"CanUseSpriteAtlas\"=\"True\"\n\t\t}\n\n\t\tCull Off\n\t\tLighting Off\n\t\tZWrite Off\n\t\tFog { Mode Off }\n\t\tBlend One OneMinusSrcAlpha\n\n\t\tPass\n\t\t{\n\t\tCGPROGRAM\n\t\t\t#pragma vertex vert\n\t\t\t#pragma fragment frag\n\t\t\t#pragma multi_compile DUMMY PIXELSNAP_ON\n\t\t\t#include \"UnityCG.cginc\"\n\t\t\t\n\t\t\tstruct appdata_t\n\t\t\t{\n\t\t\t\tfloat4 vertex   : POSITION;\n\t\t\t\tfloat4 color    : COLOR;\n\t\t\t\tfloat2 texcoord : TEXCOORD0;\n\t\t\t};\n\n\t\t\tstruct v2f\n\t\t\t{\n\t\t\t\tfloat4 vertex   : SV_POSITION;\n\t\t\t\tfixed4 color    : COLOR;\n\t\t\t\thalf2 texcoord  : TEXCOORD0;\n\t\t\t};\n\t\t\t\n\t\t\tfixed4 _Color;\n\n\t\t\tv2f vert(appdata_t IN)\n\t\t\t{\n\t\t\t\tv2f OUT;\n\t\t\t\tOUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);\n\t\t\t\tOUT.texcoord = IN.texcoord;\n\t\t\t\tOUT.color = IN.color * _Color;\n\t\t\t\t#ifdef PIXELSNAP_ON\n\t\t\t\tOUT.vertex = UnityPixelSnap (OUT.vertex);\n\t\t\t\t#endif\n\n\t\t\t\treturn OUT;\n\t\t\t}\n\n\t\t\tsampler2D _MainTex;\n\n\t\t\tfixed4 frag(v2f IN) : SV_Target\n\t\t\t{\n\t\t\t\tfixed4 c = tex2D(_MainTex, IN.texcoord) + IN.color;\n\t\t\t\tc.rgb *= c.a;\n\t\t\t\treturn c;\n\t\t\t}\n\t\tENDCG\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "Assets/Shaders/ColorTint.shader.meta",
    "content": "fileFormatVersion: 2\nguid: 7c8d7f59d7a80fc45912a0c9d8b64579\nShaderImporter:\n  defaultTextures: []\n  userData: \n"
  },
  {
    "path": "Assets/Shaders.meta",
    "content": "fileFormatVersion: 2\nguid: 69b51734598a78d4a8e279e7fb493066\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sounds/168567__psychentist__ratdeath.mp3.meta",
    "content": "fileFormatVersion: 2\nguid: 9aaa3da4158013243a187e055f33dbd5\nAudioImporter:\n  serializedVersion: 4\n  format: 0\n  quality: .5\n  stream: 1\n  3D: 0\n  forceToMono: 0\n  useHardware: 0\n  loopable: 0\n  userData: \n"
  },
  {
    "path": "Assets/Sounds/65734__erdie__bow02.wav.meta",
    "content": "fileFormatVersion: 2\nguid: 541fe3a7f0ec22948a88a86e6774cfe4\nAudioImporter:\n  serializedVersion: 4\n  format: -1\n  quality: .5\n  stream: 1\n  3D: 0\n  forceToMono: 0\n  useHardware: 0\n  loopable: 0\n  userData: \n"
  },
  {
    "path": "Assets/Sounds.meta",
    "content": "fileFormatVersion: 2\nguid: c71b79bd02e1cde4d812907a26d27c9f\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/EnemyAnimation.anim.meta",
    "content": "fileFormatVersion: 2\nguid: ef008c9025b82b04585bba2c7a5f1a22\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_01.controller.meta",
    "content": "fileFormatVersion: 2\nguid: 06c4e1dfa0810ed4db81b595f2de3bf8\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_01.png.meta",
    "content": "fileFormatVersion: 2\nguid: 443e5452ed1796e4699de9831c7b493b\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: badger_01\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_01@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: 42c55b1dc33d21a49919e9b1a6d9928b\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: badger_01@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_02.png.meta",
    "content": "fileFormatVersion: 2\nguid: 6d9cb6ab118c1a3408e53fc162708882\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: badger_02\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_02@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: c3096ba5b7896744fa6399ffbbc9cbc3\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: badger_02@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_03.png.meta",
    "content": "fileFormatVersion: 2\nguid: 0d1f44e860c375649a4d60e03d8b7cd9\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: badger_03\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_03@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: d75b717cdc914a247802604c25de0926\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: badger_03@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_04.png.meta",
    "content": "fileFormatVersion: 2\nguid: e83644e8d4773a142909f1df20881009\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: badger_04\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger/badger_04@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: 7400c9026a5d695479a5cbed5f2d9994\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: badger_04@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Badger.meta",
    "content": "fileFormatVersion: 2\nguid: 13d68614efe659c4293a66bd1bb231c3\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/BunnyAnimation.anim.meta",
    "content": "fileFormatVersion: 2\nguid: 5deddcdc66d096a4994986b4f7c6d010\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/arrow.png.meta",
    "content": "fileFormatVersion: 2\nguid: c693a10ba62079b4f997524d1b6c260f\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: arrow\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/arrow@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: 621f7ea190675c34fb870b6334c17ae5\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: arrow@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/bottom.png.meta",
    "content": "fileFormatVersion: 2\nguid: 1a7d014538ccce54eb9a0dd4faa6c9cb\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: bottom\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/bunny_1.controller.meta",
    "content": "fileFormatVersion: 2\nguid: 15d94c4b5a586b24fa07a8630cfc5d0c\nNativeFormatImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/bunny_1.png.meta",
    "content": "fileFormatVersion: 2\nguid: 7d1c98caecbf5e44db21404a61b97fff\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: bunny_1\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/bunny_1@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: b0b30b9403990714cb19556fc431958b\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: bunny_1@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/bunny_2.png.meta",
    "content": "fileFormatVersion: 2\nguid: 710f7fefa97723546ab50e8e4717c454\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: bunny_2\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/bunny_2@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: 0aaf43323629cd94b80f77508b5e5df7\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: bunny_2@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/carrot.png.meta",
    "content": "fileFormatVersion: 2\nguid: de362250c89ad5e4faea67651309a36d\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: carrot\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/tower_bunnies.png.meta",
    "content": "fileFormatVersion: 2\nguid: 885e425c85fccd54a854bdc0ac7682ec\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: tower_bunnies\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies/tower_bunnies@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: dd20952364264be4bafa677bd019a27f\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: tower_bunnies@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Bunnies.meta",
    "content": "fileFormatVersion: 2\nguid: 3795f53b69028044892d738c8db9664f\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites/License.txt",
    "content": "THIS LICENSE AGREEMENT, is between you (the “Licensee”), and Razeware LLC (http://www.raywenderlich.com) (the “Licensor”). By purchasing, downloading, or using any art licensed by Razeware LLC, you agree to the following:\n\n\nOwnership of Work\n\nLicensor owns all proprietary rights in and to all copyrightable works, generally described as game art, all of which are displayed and viewable at http://www.gameartguppy.com (the “Work”), and has the exclusive right to license others to produce, copy, make, or sell the Work.\n\n\nGrant of License\n\nLicensee is granted a non-exclusive, non-transferrable license to use the Work, royalty free, for personal and commercial projects, including games and apps created for the computer, web, or smartphone/tablet. Licensee may modify Work.\n\n\nLicense Prohibitions\n\nLicensee may not:\na) Resell game art, or resell modified game art. \nb) Use game art in a template of any nature for distribution or sale to third parties.\nc) Place licensed art on any website in a complete or archived downloadable format. \n\nAssignment\n\nLicensee may not convey, sublicense, assign, transfer, pledge, hypothecate, encumber or otherwise dispose of this Agreement without the prior written consent of the Licensor.\n\n\nIndemnification\n\nLicensee shall fully indemnify, defend, and hold harmless Licensor from and against any and all claims, losses, damages, expenses, and liability.\n\n\nAcknowledgement\n\nYOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT AND UNDERSTAND IT PRIOR TO AGREEING TO IT. YOU AGREE TO BE BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT. YOU FURTHER AGREE THAT IT IS THE COMPLETE AND EXCLUSIVE STATEMENT OF THE AGREEMENT BETWEEN YOU AND RAZEWARE LLC, WHICH SUPERSEDES ANY PROPOSAL OR PRIOR AGREEMENT, ORAL OR WRITTEN, AND ANY OTHER COMMUNICATION BETWEEN YOU AND RAZEWARE LLC RELATING TO THE SUBJECT OF THIS AGREEMENT."
  },
  {
    "path": "Assets/Sprites/License.txt.meta",
    "content": "fileFormatVersion: 2\nguid: d88eccb2082153d4cb76731a55b2b8ed\nTextScriptImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Tiles/bg_tile.png.meta",
    "content": "fileFormatVersion: 2\nguid: 907cad51a106b1e46b8e86e9a199cd45\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: bg_tile\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Tiles/bg_tile@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: 02b9236213329e348972f816b10c7fd8\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: bg_tile@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Tiles/tile_path_step.png.meta",
    "content": "fileFormatVersion: 2\nguid: 2f958940635368745b1c90b3b11e67a4\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: tile_path_step\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Tiles/tile_path_step@2x.png.meta",
    "content": "fileFormatVersion: 2\nguid: 216858c04f59db84b8f2929a270316a2\nTextureImporter:\n  fileIDToRecycleName:\n    21300000: tile_path_step@2x\n  serializedVersion: 2\n  mipmaps:\n    mipMapMode: 0\n    enableMipMap: 0\n    linearTexture: 0\n    correctGamma: 0\n    fadeOut: 0\n    borderMipMap: 0\n    mipMapFadeDistanceStart: 1\n    mipMapFadeDistanceEnd: 3\n  bumpmap:\n    convertToNormalMap: 0\n    externalNormalMap: 0\n    heightScale: .25\n    normalMapFilter: 0\n  isReadable: 0\n  grayScaleToAlpha: 0\n  generateCubemap: 0\n  seamlessCubemap: 0\n  textureFormat: -1\n  maxTextureSize: 1024\n  textureSettings:\n    filterMode: -1\n    aniso: -1\n    mipBias: -1\n    wrapMode: -1\n  nPOTScale: 0\n  lightmap: 0\n  compressionQuality: 50\n  spriteMode: 1\n  spriteExtrude: 1\n  spriteMeshType: 1\n  alignment: 0\n  spritePivot: {x: .5, y: .5}\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\n  spritePixelsToUnits: 100\n  alphaIsTransparency: 1\n  textureType: 8\n  buildTargetSettings: []\n  spriteSheet:\n    sprites: []\n  spritePackingTag: \n  userData: \n"
  },
  {
    "path": "Assets/Sprites/Tiles.meta",
    "content": "fileFormatVersion: 2\nguid: 7c85e353d39294a4da7b4cc2d0b4bf10\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "Assets/Sprites.meta",
    "content": "fileFormatVersion: 2\nguid: 1a3a02826cda25047868c30b8415cd37\nfolderAsset: yes\nDefaultImporter:\n  userData: \n"
  },
  {
    "path": "README.md",
    "content": "[![unofficial Google Analytics for GitHub](https://gaforgithub.azurewebsites.net/api?repo=TowerDefenseStyleGame)](https://github.com/dgkanatsios/gaforgithub)\n\nTowerDefense\n============\n\nA Tower Defense clone in Unity3D. For a tutorial blog post please see:\n\nhttp://dgkanatsios.com/2014/09/04/a-tower-defense-game-in-unity-part-1-3/\n\nhttp://dgkanatsios.com/2014/09/06/a-tower-defense-game-in-unity-part-2-3/\n"
  }
]