public void CalculateTileProperties() { //Set tile properties to the same size as the map. TileProperties = new DenseArray <TileProperties>(Width, Height); //For each item var properties = ObjectGroups["TileProperties"]; foreach (var tiledObject in properties) { //Create a new item. var tileProperties = new TileProperties(); //Parse properties tileProperties = tiledObject.Properties .Aggregate(tileProperties, (current, tiledObjectProperty) => TilePropertyMap[tiledObjectProperty.Key].Invoke(tiledObjectProperty.Value, current)); //find prositon and store. var pos = Isometric.WorldToIsometric(tiledObject.WorldPosition, this); TileProperties[(int)pos.X, (int)pos.Y] = tileProperties; } }