class Tmx::Parser::Json

Parses the JSON formatted output from Tiled.

Attributes

options[R]

Public Class Methods

new(options) click to toggle source
# File lib/tmx/parsers/json.rb, line 12
def initialize(options)
  @options = options
end

Public Instance Methods

parse(contents) click to toggle source
# File lib/tmx/parsers/json.rb, line 16
def parse(contents)
  parsed_contents = MultiJson.load(contents)

  object_layers = parsed_contents["layers"].find_all do |layer|
    layer["type"] == "objectgroup"
  end

  parsed_contents["object_groups"] = object_layers

  object_layers.each do |object_layer|
    parse_object_layer(object_layer)
  end

  image_layers = parsed_contents["layers"].find_all do |layer|
    layer["type"] == "imagelayer"
  end

  parsed_contents["image_layers"] = image_layers

  parsed_contents["layers"].reject! {|layer| layer["type"] != "tilelayer" }

  parsed_contents

end

Private Instance Methods

parse_object_layer(object_layer) click to toggle source
# File lib/tmx/parsers/json.rb, line 43
def parse_object_layer(object_layer)
  object_layer["objects"].each do |object|

    if object["ellipse"]
      object["shape"] = "ellipse"
    elsif object["polyline"]
      object["shape"] = "polyline"
      object["points"] = object["polyline"].map {|h| "#{h["x"]},#{h["y"]}" }
    elsif object["polygon"]
      object["shape"] = "polygon"
      object["points"] = object["polygon"].map {|h| "#{h["x"]},#{h["y"]}" }
    else
      x = object["x"]
      y = object["y"]
      width = object["width"]
      height = object["height"]

      object["shape"] = "polygon"
      object["points"] = [ "#{x},#{y}", "#{x + width},#{y}", "#{x + width},#{y + height}", "#{x},#{y + height}" ]
    end
  end
end