Example #1
0
SpriteDescriptionPtr
SpriteDescription::from_file(const Pathname& path)
{
  ReaderObject reader_object = FileReader::parse(path);
  ReaderMapping reader = reader_object.get_mapping();

  SpriteDescriptionPtr desc(new SpriteDescription);

  reader.read_int("speed", desc->speed);
  reader.read_bool("loop", desc->loop);
  reader.read_vector2i("offset", desc->offset);

  reader.read_enum("origin", desc->origin, string2origin);

  if (!reader.read_path("image", desc->filename))
  {
    log_error("'image' missing for %1%", reader_object.get_name());
  }

  desc->filename = Pathname(desc->filename.get_raw_path(), Pathname::DATA_PATH); // FIXME: Hack
  reader.read_size("array", desc->array);
  reader.read_vector2i("position",   desc->frame_pos);
  reader.read_size("size",  desc->frame_size);

  return desc;
}
Example #2
0
Savegame::Savegame(const ReaderMapping& reader) :
  filename(),
  status(),
  needed_time(),
  saved_pingus()
{
  reader.read_string("filename", filename);
  reader.read_enum("status", status, string_to_status);
  reader.read_int("time", needed_time);
  reader.read_int("saved-pingus", saved_pingus);
}
Example #3
0
bool
ReaderMapping::read_desc(const char* key, ResDescriptor& value) const
{
  ReaderMapping reader;
  if (read_mapping(key, reader))
  {
    reader.read_string("image", value.res_name);
    reader.read_enum("modifier", value.modifier, &ResourceModifier::from_string);
    return true;
  }
  else
  {
    return false;
  }
}
Example #4
0
ServerEvent::ServerEvent(const ReaderObject& reader_object) :
    type(PINGU_ACTION_EVENT),
    time_stamp(0),
    pingu_id(0),
    pos(),
    pingu_action(ActionName::WALKER)
{
    ReaderMapping reader = reader_object.get_mapping();
    if (reader_object.get_name() == "armageddon")
    {
        type = ARMAGEDDON_EVENT;
        reader.read_int("time", time_stamp);
    }
    else if (reader_object.get_name() == "end")
    {
        type = END_EVENT;
        reader.read_int("time", time_stamp);
    }
    else if (reader_object.get_name() == "finish")
    {
        type = FINISH_EVENT;
        reader.read_int("time", time_stamp);
    }
    else if (reader_object.get_name() == "pingu-action")
    {
        std::string raw_x;
        std::string raw_y;

        type = PINGU_ACTION_EVENT;
        reader.read_int ("time",   time_stamp);
        int pingu_id_tmp;
        reader.read_int ("id", pingu_id_tmp);
        pingu_id = static_cast<unsigned int>(pingu_id_tmp);

        if (reader.read_string("raw-x", raw_x))
            pos.x = Math::string2float(raw_x);

        if (reader.read_string("raw-y", raw_y))
            pos.y = Math::string2float(raw_y);

        reader.read_enum("action", pingu_action, &ActionName::from_string);
    }
    else
    {
        raise_exception(std::runtime_error, "ServerEvent: Parse error: Unknown event: " << reader_object.get_name());
    }
}