// Path: core/src/com/alexaut/kroniax/game/tilemap/Properties.java
// public class Properties {
//     Map<String, Integer> mProperties;
// 
//     public Properties() {
//         mProperties = new HashMap<String, Integer>();
//     }
// 
//     public void add(String key, int value) {
//         mProperties.put(key, value);
//     }
// 
//     public boolean hasProperty(String key) {
//         return mProperties.get(key) != null;
//     }
// 
//     public int get(String key) {
//         return mProperties.get(key);
//     }
// 
//     public Set<String> getKeySet() {
//         return mProperties.keySet();
//     }
// 
// }
// 
// Path: core/src/com/alexaut/kroniax/game/tilemap/TileMap.java
// public class TileMap {
// 
//     private Properties mProperties;
// 
//     private ArrayList<Tileset> mTilesets;
//     private ArrayList<TileLayer> mTileLayers;
//     private ArrayList<LevelObject> mLevelObjects;
//     private ArrayList<Script> mScripts;
// 
//     public TileMap() {
//         mProperties = new Properties();
//         mTilesets = new ArrayList<Tileset>();
//         mTileLayers = new ArrayList<TileLayer>();
//         mLevelObjects = new ArrayList<LevelObject>();
//         mScripts = new ArrayList<Script>();
//     }
// 
//     public Properties getProperties() {
//         return mProperties;
//     }
// 
//     public ArrayList<Tileset> getTilesets() {
//         return mTilesets;
//     }
// 
//     public ArrayList<TileLayer> getTileLayers() {
//         return mTileLayers;
//     }
// 
//     public ArrayList<LevelObject> getLevelObjects() {
//         return mLevelObjects;
//     }
// 
//     public ArrayList<Script> getScripts() {
//         return mScripts;
//     }
// 
//     public TextureRegion getTileRegion(int id) {
//         if (id == 0)
//             return null;
// 
//         for (Tileset tileset : mTilesets) {
//             if (tileset.getFirstID() <= id) {
//                 return tileset.getTile(id);
//             }
//         }
//         return null;
//     }
// 
//     // Convenient functions
//     public int getWidth() {
//         if (mProperties.hasProperty("width"))
//             return mProperties.get("width");
//         return 0;
//     }
// 
//     public int getHeight() {
//         if (mProperties.hasProperty("height"))
//             return mProperties.get("height");
//         return 0;
//     }
// 
//     public int getTileWidth() {
//         if (mProperties.hasProperty("tilewidth"))
//             return mProperties.get("tilewidth");
//         return 0;
//     }
// 
//     public int getTileHeight() {
//         if (mProperties.hasProperty("tileheight"))
//             return mProperties.get("tileheight");
//         return 0;
//     }
// 
//     public void dispose() {
//         for (Tileset tileset : mTilesets)
//             tileset.dispose();
//     }
// 
// }


import com.alexaut.kroniax.game.tilemap.Properties;
import com.alexaut.kroniax.game.tilemap.TileMap;
import com.badlogic.gdx.math.Vector2;

package com.alexaut.kroniax.game.level;


public class LevelProperties {
    // Map Properties
    public Vector2 tileSize;
    public Vector2 size;
    public Vector2 tileCount;

    public Vector2 spawn;
    public float velocity;
    public float gravity;

    public boolean fixedCamera;

    public LevelProperties(TileMap level) throws Exception {
        parseMapDetails(level.getProperties());

        checkEssentialValues();
    }


// Path: core/src/com/alexaut/kroniax/game/tilemap/Properties.java
// public class Properties {
//     Map<String, Integer> mProperties;
// 
//     public Properties() {
//         mProperties = new HashMap<String, Integer>();
//     }
// 
//     public void add(String key, int value) {
//         mProperties.put(key, value);
//     }
// 
//     public boolean hasProperty(String key) {
//         return mProperties.get(key) != null;
//     }
// 
//     public int get(String key) {
//         return mProperties.get(key);
//     }
// 
//     public Set<String> getKeySet() {
//         return mProperties.keySet();
//     }
// 
// }
// 
// Path: core/src/com/alexaut/kroniax/game/tilemap/TileMap.java
// public class TileMap {
// 
//     private Properties mProperties;
// 
//     private ArrayList<Tileset> mTilesets;
//     private ArrayList<TileLayer> mTileLayers;
//     private ArrayList<LevelObject> mLevelObjects;
//     private ArrayList<Script> mScripts;
// 
//     public TileMap() {
//         mProperties = new Properties();
//         mTilesets = new ArrayList<Tileset>();
//         mTileLayers = new ArrayList<TileLayer>();
//         mLevelObjects = new ArrayList<LevelObject>();
//         mScripts = new ArrayList<Script>();
//     }
// 
//     public Properties getProperties() {
//         return mProperties;
//     }
// 
//     public ArrayList<Tileset> getTilesets() {
//         return mTilesets;
//     }
// 
//     public ArrayList<TileLayer> getTileLayers() {
//         return mTileLayers;
//     }
// 
//     public ArrayList<LevelObject> getLevelObjects() {
//         return mLevelObjects;
//     }
// 
//     public ArrayList<Script> getScripts() {
//         return mScripts;
//     }
// 
//     public TextureRegion getTileRegion(int id) {
//         if (id == 0)
//             return null;
// 
//         for (Tileset tileset : mTilesets) {
//             if (tileset.getFirstID() <= id) {
//                 return tileset.getTile(id);
//             }
//         }
//         return null;
//     }
// 
//     // Convenient functions
//     public int getWidth() {
//         if (mProperties.hasProperty("width"))
//             return mProperties.get("width");
//         return 0;
//     }
// 
//     public int getHeight() {
//         if (mProperties.hasProperty("height"))
//             return mProperties.get("height");
//         return 0;
//     }
// 
//     public int getTileWidth() {
//         if (mProperties.hasProperty("tilewidth"))
//             return mProperties.get("tilewidth");
//         return 0;
//     }
// 
//     public int getTileHeight() {
//         if (mProperties.hasProperty("tileheight"))
//             return mProperties.get("tileheight");
//         return 0;
//     }
// 
//     public void dispose() {
//         for (Tileset tileset : mTilesets)
//             tileset.dispose();
//     }
// 
// }


// Path: core/src/com/alexaut/kroniax/game/level/LevelProperties.java
import com.alexaut.kroniax.game.tilemap.Properties;
import com.alexaut.kroniax.game.tilemap.TileMap;
import com.badlogic.gdx.math.Vector2;

package com.alexaut.kroniax.game.level;


public class LevelProperties {
    // Map Properties
    public Vector2 tileSize;
    public Vector2 size;
    public Vector2 tileCount;

    public Vector2 spawn;
    public float velocity;
    public float gravity;

    public boolean fixedCamera;

    public LevelProperties(TileMap level) throws Exception {
        parseMapDetails(level.getProperties());

        checkEssentialValues();
    }


    private void parseMapDetails(Properties props) {
