2018-09-25 01:12:29 +01:00
|
|
|
#include "event.h"
|
|
|
|
#include "map.h"
|
2019-04-05 19:34:28 +01:00
|
|
|
#include "project.h"
|
2020-03-11 20:23:07 +00:00
|
|
|
#include "config.h"
|
2018-09-25 01:12:29 +01:00
|
|
|
|
2022-02-05 23:53:04 +00:00
|
|
|
QString EventGroup::Object = "object_event_group";
|
|
|
|
QString EventGroup::Warp = "warp_event_group";
|
|
|
|
QString EventGroup::Heal = "heal_event_group";
|
|
|
|
QString EventGroup::Coord = "coord_event_group";
|
|
|
|
QString EventGroup::Bg = "bg_event_group";
|
|
|
|
|
2018-09-25 01:12:29 +01:00
|
|
|
QString EventType::Object = "event_object";
|
|
|
|
QString EventType::Warp = "event_warp";
|
2018-12-26 20:15:35 +00:00
|
|
|
QString EventType::Trigger = "event_trigger";
|
|
|
|
QString EventType::WeatherTrigger = "event_weather_trigger";
|
2018-09-25 01:12:29 +01:00
|
|
|
QString EventType::Sign = "event_sign";
|
|
|
|
QString EventType::HiddenItem = "event_hidden_item";
|
|
|
|
QString EventType::SecretBase = "event_secret_base";
|
2022-02-05 23:53:04 +00:00
|
|
|
QString EventType::HealLocation = "event_healspot";
|
|
|
|
|
|
|
|
const QMap<QString, QString> EventTypeTable = {
|
|
|
|
{EventType::Object, EventGroup::Object},
|
|
|
|
{EventType::Warp, EventGroup::Warp},
|
|
|
|
{EventType::Trigger, EventGroup::Coord},
|
|
|
|
{EventType::WeatherTrigger, EventGroup::Coord},
|
|
|
|
{EventType::Sign, EventGroup::Bg},
|
|
|
|
{EventType::HiddenItem, EventGroup::Bg},
|
|
|
|
{EventType::SecretBase, EventGroup::Bg},
|
|
|
|
{EventType::HealLocation, EventGroup::Heal},
|
|
|
|
};
|
2018-09-25 01:12:29 +01:00
|
|
|
|
2021-02-16 15:49:14 +00:00
|
|
|
Event::Event() :
|
|
|
|
spriteWidth(16),
|
|
|
|
spriteHeight(16),
|
|
|
|
usingSprite(false)
|
|
|
|
{ }
|
2018-09-25 01:12:29 +01:00
|
|
|
|
2021-02-16 15:49:14 +00:00
|
|
|
Event::Event(const Event& toCopy) :
|
|
|
|
values(toCopy.values),
|
|
|
|
customValues(toCopy.customValues),
|
|
|
|
pixmap(toCopy.pixmap),
|
|
|
|
spriteWidth(toCopy.spriteWidth),
|
|
|
|
spriteHeight(toCopy.spriteHeight),
|
|
|
|
frame(toCopy.frame),
|
|
|
|
hFlip(toCopy.hFlip),
|
2022-01-24 22:17:31 +00:00
|
|
|
usingSprite(toCopy.usingSprite)
|
2021-02-16 15:49:14 +00:00
|
|
|
{ }
|
2020-07-09 23:31:35 +01:00
|
|
|
|
2021-02-16 15:49:14 +00:00
|
|
|
Event::Event(QJsonObject obj, QString type) : Event()
|
2019-02-03 18:26:27 +00:00
|
|
|
{
|
|
|
|
this->put("event_type", type);
|
|
|
|
this->readCustomValues(obj);
|
|
|
|
}
|
|
|
|
|
2019-04-05 19:34:28 +01:00
|
|
|
Event* Event::createNewEvent(QString event_type, QString map_name, Project *project)
|
2018-09-25 01:12:29 +01:00
|
|
|
{
|
2020-07-31 01:54:44 +01:00
|
|
|
Event *event = nullptr;
|
2018-09-25 01:12:29 +01:00
|
|
|
if (event_type == EventType::Object) {
|
2019-04-05 19:34:28 +01:00
|
|
|
event = createNewObjectEvent(project);
|
2020-05-22 01:11:37 +01:00
|
|
|
event->setFrameFromMovement(event->get("movement_type"));
|
2018-09-25 01:12:29 +01:00
|
|
|
} else if (event_type == EventType::Warp) {
|
|
|
|
event = createNewWarpEvent(map_name);
|
|
|
|
} else if (event_type == EventType::HealLocation) {
|
|
|
|
event = createNewHealLocationEvent(map_name);
|
2018-12-26 20:15:35 +00:00
|
|
|
} else if (event_type == EventType::Trigger) {
|
2019-04-05 19:34:28 +01:00
|
|
|
event = createNewTriggerEvent(project);
|
2018-12-26 20:15:35 +00:00
|
|
|
} else if (event_type == EventType::WeatherTrigger) {
|
2019-04-05 19:34:28 +01:00
|
|
|
event = createNewWeatherTriggerEvent(project);
|
2018-09-25 01:12:29 +01:00
|
|
|
} else if (event_type == EventType::Sign) {
|
2019-04-05 19:34:28 +01:00
|
|
|
event = createNewSignEvent(project);
|
2018-09-25 01:12:29 +01:00
|
|
|
} else if (event_type == EventType::HiddenItem) {
|
2019-04-05 19:34:28 +01:00
|
|
|
event = createNewHiddenItemEvent(project);
|
2018-09-25 01:12:29 +01:00
|
|
|
} else if (event_type == EventType::SecretBase) {
|
2019-04-05 19:34:28 +01:00
|
|
|
event = createNewSecretBaseEvent(project);
|
2020-07-31 01:54:44 +01:00
|
|
|
} else {
|
|
|
|
// should never be reached but just in case
|
|
|
|
event = new Event;
|
2018-09-25 01:12:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
event->setX(0);
|
|
|
|
event->setY(0);
|
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
2019-04-05 19:34:28 +01:00
|
|
|
Event* Event::createNewObjectEvent(Project *project)
|
2018-09-25 01:12:29 +01:00
|
|
|
{
|
|
|
|
Event *event = new Event;
|
2022-02-05 23:53:04 +00:00
|
|
|
event->put("event_group_type", EventGroup::Object);
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("event_type", EventType::Object);
|
2022-01-21 20:22:20 +00:00
|
|
|
event->put("sprite", project->gfxNames.first());
|
2021-02-15 16:33:30 +00:00
|
|
|
event->put("movement_type", project->movementTypes.first());
|
2020-05-22 22:51:56 +01:00
|
|
|
if (projectConfig.getObjectEventInConnectionEnabled()) {
|
2020-03-11 20:45:52 +00:00
|
|
|
event->put("in_connection", false);
|
|
|
|
}
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("radius_x", 0);
|
|
|
|
event->put("radius_y", 0);
|
|
|
|
event->put("script_label", "NULL");
|
|
|
|
event->put("event_flag", "0");
|
|
|
|
event->put("replacement", "0");
|
2021-02-15 16:33:30 +00:00
|
|
|
event->put("trainer_type", project->trainerTypes.value(0, "0"));
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("sight_radius_tree_id", 0);
|
2019-05-01 04:03:28 +01:00
|
|
|
event->put("elevation", 3);
|
2018-09-25 01:12:29 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
|
|
|
Event* Event::createNewWarpEvent(QString map_name)
|
|
|
|
{
|
|
|
|
Event *event = new Event;
|
2022-02-05 23:53:04 +00:00
|
|
|
event->put("event_group_type", EventGroup::Warp);
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("event_type", EventType::Warp);
|
|
|
|
event->put("destination_warp", 0);
|
|
|
|
event->put("destination_map_name", map_name);
|
2019-05-01 04:03:28 +01:00
|
|
|
event->put("elevation", 0);
|
2018-09-25 01:12:29 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
|
|
|
Event* Event::createNewHealLocationEvent(QString map_name)
|
|
|
|
{
|
|
|
|
Event *event = new Event;
|
2022-02-05 23:53:04 +00:00
|
|
|
event->put("event_group_type", EventGroup::Heal);
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("event_type", EventType::HealLocation);
|
2020-03-20 17:41:40 +00:00
|
|
|
event->put("loc_name", QString(Map::mapConstantFromName(map_name)).remove(0,4));
|
2020-03-20 07:09:48 +00:00
|
|
|
event->put("id_name", map_name.replace(QRegularExpression("([a-z])([A-Z])"), "\\1_\\2").toUpper());
|
2019-05-01 04:03:28 +01:00
|
|
|
event->put("elevation", 3);
|
2020-05-22 22:51:56 +01:00
|
|
|
if (projectConfig.getHealLocationRespawnDataEnabled()) {
|
2020-03-20 17:41:40 +00:00
|
|
|
event->put("respawn_map", map_name);
|
2020-03-20 07:09:48 +00:00
|
|
|
event->put("respawn_npc", 1);
|
|
|
|
}
|
2018-09-25 01:12:29 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
2019-04-05 19:34:28 +01:00
|
|
|
Event* Event::createNewTriggerEvent(Project *project)
|
2018-09-25 01:12:29 +01:00
|
|
|
{
|
|
|
|
Event *event = new Event;
|
2022-02-05 23:53:04 +00:00
|
|
|
event->put("event_group_type", EventGroup::Coord);
|
2018-12-26 20:15:35 +00:00
|
|
|
event->put("event_type", EventType::Trigger);
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("script_label", "NULL");
|
2021-02-15 16:33:30 +00:00
|
|
|
event->put("script_var", project->varNames.first());
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("script_var_value", "0");
|
2019-05-01 04:03:28 +01:00
|
|
|
event->put("elevation", 0);
|
2018-09-25 01:12:29 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
2019-04-05 19:34:28 +01:00
|
|
|
Event* Event::createNewWeatherTriggerEvent(Project *project)
|
2018-09-25 01:12:29 +01:00
|
|
|
{
|
|
|
|
Event *event = new Event;
|
2022-02-05 23:53:04 +00:00
|
|
|
event->put("event_group_type", EventGroup::Coord);
|
2018-12-26 20:15:35 +00:00
|
|
|
event->put("event_type", EventType::WeatherTrigger);
|
2021-02-15 16:33:30 +00:00
|
|
|
event->put("weather", project->coordEventWeatherNames.first());
|
2019-05-01 04:03:28 +01:00
|
|
|
event->put("elevation", 0);
|
2018-09-25 01:12:29 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
2019-04-05 19:34:28 +01:00
|
|
|
Event* Event::createNewSignEvent(Project *project)
|
2018-09-25 01:12:29 +01:00
|
|
|
{
|
|
|
|
Event *event = new Event;
|
2022-02-05 23:53:04 +00:00
|
|
|
event->put("event_group_type", EventGroup::Bg);
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("event_type", EventType::Sign);
|
2021-02-15 16:33:30 +00:00
|
|
|
event->put("player_facing_direction", project->bgEventFacingDirections.first());
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("script_label", "NULL");
|
2019-05-01 04:03:28 +01:00
|
|
|
event->put("elevation", 0);
|
2018-09-25 01:12:29 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
2019-04-05 19:34:28 +01:00
|
|
|
Event* Event::createNewHiddenItemEvent(Project *project)
|
2018-09-25 01:12:29 +01:00
|
|
|
{
|
|
|
|
Event *event = new Event;
|
2022-02-05 23:53:04 +00:00
|
|
|
event->put("event_group_type", EventGroup::Bg);
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("event_type", EventType::HiddenItem);
|
2021-02-15 16:33:30 +00:00
|
|
|
event->put("item", project->itemNames.first());
|
|
|
|
event->put("flag", project->flagNames.first());
|
2019-05-01 04:03:28 +01:00
|
|
|
event->put("elevation", 3);
|
2020-05-22 22:51:56 +01:00
|
|
|
if (projectConfig.getHiddenItemQuantityEnabled()) {
|
2020-03-11 20:23:07 +00:00
|
|
|
event->put("quantity", 1);
|
2020-05-22 22:51:56 +01:00
|
|
|
}
|
|
|
|
if (projectConfig.getHiddenItemRequiresItemfinderEnabled()) {
|
2020-03-11 20:23:07 +00:00
|
|
|
event->put("underfoot", false);
|
|
|
|
}
|
2018-09-25 01:12:29 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
2019-04-05 19:34:28 +01:00
|
|
|
Event* Event::createNewSecretBaseEvent(Project *project)
|
2018-09-25 01:12:29 +01:00
|
|
|
{
|
|
|
|
Event *event = new Event;
|
2022-02-05 23:53:04 +00:00
|
|
|
event->put("event_group_type", EventGroup::Bg);
|
2018-09-25 01:12:29 +01:00
|
|
|
event->put("event_type", EventType::SecretBase);
|
2021-02-15 16:33:30 +00:00
|
|
|
event->put("secret_base_id", project->secretBaseIds.first());
|
2019-05-01 04:03:28 +01:00
|
|
|
event->put("elevation", 0);
|
2018-09-25 01:12:29 +01:00
|
|
|
return event;
|
|
|
|
}
|
|
|
|
|
|
|
|
int Event::getPixelX()
|
|
|
|
{
|
|
|
|
return (this->x() * 16) - qMax(0, (this->spriteWidth - 16) / 2);
|
|
|
|
}
|
|
|
|
|
|
|
|
int Event::getPixelY()
|
|
|
|
{
|
|
|
|
return (this->y() * 16) - qMax(0, this->spriteHeight - 16);
|
|
|
|
}
|
|
|
|
|
2020-05-22 22:51:56 +01:00
|
|
|
static QMap<QString, bool> expectedObjectFields {
|
|
|
|
{"graphics_id", true},
|
|
|
|
{"x", true},
|
|
|
|
{"y", true},
|
|
|
|
{"elevation", true},
|
|
|
|
{"movement_type", true},
|
|
|
|
{"movement_range_x", true},
|
|
|
|
{"movement_range_y", true},
|
|
|
|
{"trainer_type", true},
|
|
|
|
{"trainer_sight_or_berry_tree_id", true},
|
|
|
|
{"script", true},
|
|
|
|
{"flag", true},
|
|
|
|
};
|
|
|
|
|
|
|
|
static QMap<QString, bool> expectedWarpFields {
|
|
|
|
{"x", true},
|
|
|
|
{"y", true},
|
|
|
|
{"elevation", true},
|
|
|
|
{"dest_map", true},
|
|
|
|
{"dest_warp_id", true},
|
|
|
|
};
|
|
|
|
|
|
|
|
static QMap<QString, bool> expectedTriggerFields {
|
|
|
|
{"type", true},
|
|
|
|
{"x", true},
|
|
|
|
{"y", true},
|
|
|
|
{"elevation", true},
|
|
|
|
{"var", true},
|
|
|
|
{"var_value", true},
|
|
|
|
{"script", true},
|
|
|
|
};
|
|
|
|
|
|
|
|
static QMap<QString, bool> expectedWeatherTriggerFields {
|
|
|
|
{"type", true},
|
|
|
|
{"x", true},
|
|
|
|
{"y", true},
|
|
|
|
{"elevation", true},
|
|
|
|
{"weather", true},
|
|
|
|
};
|
|
|
|
|
|
|
|
static QMap<QString, bool> expectedSignFields {
|
|
|
|
{"type", true},
|
|
|
|
{"x", true},
|
|
|
|
{"y", true},
|
|
|
|
{"elevation", true},
|
|
|
|
{"player_facing_dir", true},
|
|
|
|
{"script", true},
|
|
|
|
};
|
|
|
|
|
|
|
|
static QMap<QString, bool> expectedHiddenItemFields {
|
|
|
|
{"type", true},
|
|
|
|
{"x", true},
|
|
|
|
{"y", true},
|
|
|
|
{"elevation", true},
|
|
|
|
{"item", true},
|
|
|
|
{"flag", true},
|
|
|
|
};
|
|
|
|
|
|
|
|
static QMap<QString, bool> expectedSecretBaseFields {
|
|
|
|
{"type", true},
|
|
|
|
{"x", true},
|
|
|
|
{"y", true},
|
|
|
|
{"elevation", true},
|
|
|
|
{"secret_base_id", true},
|
|
|
|
};
|
|
|
|
|
2019-02-03 18:26:27 +00:00
|
|
|
QMap<QString, bool> Event::getExpectedFields()
|
|
|
|
{
|
|
|
|
QString type = this->get("event_type");
|
2020-05-22 22:51:56 +01:00
|
|
|
QMap<QString, bool> expectedFields = QMap<QString, bool>();
|
2019-02-03 18:26:27 +00:00
|
|
|
if (type == EventType::Object) {
|
2020-05-22 22:51:56 +01:00
|
|
|
expectedFields = expectedObjectFields;
|
|
|
|
if (projectConfig.getObjectEventInConnectionEnabled()) {
|
|
|
|
expectedFields.insert("in_connection", true);
|
2020-03-11 20:45:52 +00:00
|
|
|
}
|
2019-02-03 18:26:27 +00:00
|
|
|
} else if (type == EventType::Warp) {
|
2020-05-22 22:51:56 +01:00
|
|
|
expectedFields = expectedWarpFields;
|
2019-02-03 18:26:27 +00:00
|
|
|
} else if (type == EventType::Trigger) {
|
2020-05-22 22:51:56 +01:00
|
|
|
expectedFields = expectedTriggerFields;
|
2019-02-03 18:26:27 +00:00
|
|
|
} else if (type == EventType::WeatherTrigger) {
|
2020-05-22 22:51:56 +01:00
|
|
|
expectedFields = expectedWeatherTriggerFields;
|
2019-02-03 18:26:27 +00:00
|
|
|
} else if (type == EventType::Sign) {
|
2020-05-22 22:51:56 +01:00
|
|
|
expectedFields = expectedSignFields;
|
2019-02-03 18:26:27 +00:00
|
|
|
} else if (type == EventType::HiddenItem) {
|
2020-05-22 22:51:56 +01:00
|
|
|
expectedFields = expectedHiddenItemFields;
|
|
|
|
if (projectConfig.getHiddenItemQuantityEnabled()) {
|
|
|
|
expectedFields.insert("quantity", true);
|
|
|
|
}
|
|
|
|
if (projectConfig.getHiddenItemRequiresItemfinderEnabled()) {
|
|
|
|
expectedFields.insert("underfoot", true);
|
2020-03-11 20:23:07 +00:00
|
|
|
}
|
2019-02-03 18:26:27 +00:00
|
|
|
} else if (type == EventType::SecretBase) {
|
2020-05-22 22:51:56 +01:00
|
|
|
expectedFields = expectedSecretBaseFields;
|
2019-02-03 18:26:27 +00:00
|
|
|
}
|
2020-05-22 22:51:56 +01:00
|
|
|
return expectedFields;
|
2019-02-03 18:26:27 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
void Event::readCustomValues(QJsonObject values)
|
|
|
|
{
|
|
|
|
this->customValues.clear();
|
|
|
|
QMap<QString, bool> expectedValues = this->getExpectedFields();
|
|
|
|
for (QString key : values.keys()) {
|
|
|
|
if (!expectedValues.contains(key)) {
|
|
|
|
this->customValues[key] = values[key].toString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-06 03:46:25 +00:00
|
|
|
void Event::addCustomValuesTo(OrderedJson::object *obj)
|
2019-02-03 18:26:27 +00:00
|
|
|
{
|
|
|
|
for (QString key : this->customValues.keys()) {
|
|
|
|
if (!obj->contains(key)) {
|
|
|
|
(*obj)[key] = this->customValues[key];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object Event::buildObjectEventJSON()
|
2019-02-01 17:43:25 +00:00
|
|
|
{
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object eventObj;
|
2019-02-01 17:43:25 +00:00
|
|
|
eventObj["graphics_id"] = this->get("sprite");
|
2020-05-22 22:51:56 +01:00
|
|
|
if (projectConfig.getObjectEventInConnectionEnabled()) {
|
2020-03-11 20:45:52 +00:00
|
|
|
eventObj["in_connection"] = this->getInt("in_connection") > 0 || this->get("in_connection") == "TRUE";
|
|
|
|
}
|
2020-05-15 20:32:57 +01:00
|
|
|
eventObj["x"] = this->getS16("x");
|
|
|
|
eventObj["y"] = this->getS16("y");
|
2019-02-01 17:43:25 +00:00
|
|
|
eventObj["elevation"] = this->getInt("elevation");
|
|
|
|
eventObj["movement_type"] = this->get("movement_type");
|
|
|
|
eventObj["movement_range_x"] = this->getInt("radius_x");
|
|
|
|
eventObj["movement_range_y"] = this->getInt("radius_y");
|
|
|
|
eventObj["trainer_type"] = this->get("trainer_type");
|
|
|
|
eventObj["trainer_sight_or_berry_tree_id"] = this->get("sight_radius_tree_id");
|
|
|
|
eventObj["script"] = this->get("script_label");
|
|
|
|
eventObj["flag"] = this->get("event_flag");
|
2019-02-03 18:26:27 +00:00
|
|
|
this->addCustomValuesTo(&eventObj);
|
2019-02-01 17:43:25 +00:00
|
|
|
|
|
|
|
return eventObj;
|
|
|
|
}
|
|
|
|
|
2021-02-15 09:21:41 +00:00
|
|
|
OrderedJson::object Event::buildWarpEventJSON(const QMap<QString, QString> &mapNamesToMapConstants)
|
2019-02-01 17:43:25 +00:00
|
|
|
{
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object warpObj;
|
2019-02-01 17:43:25 +00:00
|
|
|
warpObj["x"] = this->getU16("x");
|
|
|
|
warpObj["y"] = this->getU16("y");
|
|
|
|
warpObj["elevation"] = this->getInt("elevation");
|
2021-02-15 09:21:41 +00:00
|
|
|
warpObj["dest_map"] = mapNamesToMapConstants.value(this->get("destination_map_name"));
|
2019-02-01 17:43:25 +00:00
|
|
|
warpObj["dest_warp_id"] = this->getInt("destination_warp");
|
2019-02-03 18:26:27 +00:00
|
|
|
this->addCustomValuesTo(&warpObj);
|
2019-02-01 17:43:25 +00:00
|
|
|
|
|
|
|
return warpObj;
|
|
|
|
}
|
|
|
|
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object Event::buildTriggerEventJSON()
|
2019-02-01 17:43:25 +00:00
|
|
|
{
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object triggerObj;
|
2019-02-01 17:43:25 +00:00
|
|
|
triggerObj["type"] = "trigger";
|
|
|
|
triggerObj["x"] = this->getU16("x");
|
|
|
|
triggerObj["y"] = this->getU16("y");
|
|
|
|
triggerObj["elevation"] = this->getInt("elevation");
|
|
|
|
triggerObj["var"] = this->get("script_var");
|
|
|
|
triggerObj["var_value"] = this->get("script_var_value");
|
|
|
|
triggerObj["script"] = this->get("script_label");
|
2019-02-03 18:26:27 +00:00
|
|
|
this->addCustomValuesTo(&triggerObj);
|
2019-02-01 17:43:25 +00:00
|
|
|
|
|
|
|
return triggerObj;
|
|
|
|
}
|
|
|
|
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object Event::buildWeatherTriggerEventJSON()
|
2019-02-01 17:43:25 +00:00
|
|
|
{
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object weatherObj;
|
2019-02-01 17:43:25 +00:00
|
|
|
weatherObj["type"] = "weather";
|
|
|
|
weatherObj["x"] = this->getU16("x");
|
|
|
|
weatherObj["y"] = this->getU16("y");
|
|
|
|
weatherObj["elevation"] = this->getInt("elevation");
|
|
|
|
weatherObj["weather"] = this->get("weather");
|
2019-02-03 18:26:27 +00:00
|
|
|
this->addCustomValuesTo(&weatherObj);
|
2019-02-01 17:43:25 +00:00
|
|
|
|
|
|
|
return weatherObj;
|
|
|
|
}
|
|
|
|
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object Event::buildSignEventJSON()
|
2019-02-01 17:43:25 +00:00
|
|
|
{
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object signObj;
|
2019-02-01 17:43:25 +00:00
|
|
|
signObj["type"] = "sign";
|
|
|
|
signObj["x"] = this->getU16("x");
|
|
|
|
signObj["y"] = this->getU16("y");
|
|
|
|
signObj["elevation"] = this->getInt("elevation");
|
|
|
|
signObj["player_facing_dir"] = this->get("player_facing_direction");
|
|
|
|
signObj["script"] = this->get("script_label");
|
2019-02-03 18:26:27 +00:00
|
|
|
this->addCustomValuesTo(&signObj);
|
2019-02-01 17:43:25 +00:00
|
|
|
|
|
|
|
return signObj;
|
|
|
|
}
|
|
|
|
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object Event::buildHiddenItemEventJSON()
|
2019-02-01 17:43:25 +00:00
|
|
|
{
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object hiddenItemObj;
|
2019-02-01 17:43:25 +00:00
|
|
|
hiddenItemObj["type"] = "hidden_item";
|
|
|
|
hiddenItemObj["x"] = this->getU16("x");
|
|
|
|
hiddenItemObj["y"] = this->getU16("y");
|
|
|
|
hiddenItemObj["elevation"] = this->getInt("elevation");
|
|
|
|
hiddenItemObj["item"] = this->get("item");
|
|
|
|
hiddenItemObj["flag"] = this->get("flag");
|
2020-05-22 22:51:56 +01:00
|
|
|
if (projectConfig.getHiddenItemQuantityEnabled()) {
|
2020-03-11 20:23:07 +00:00
|
|
|
hiddenItemObj["quantity"] = this->getInt("quantity");
|
2020-05-22 22:51:56 +01:00
|
|
|
}
|
|
|
|
if (projectConfig.getHiddenItemRequiresItemfinderEnabled()) {
|
2020-03-11 20:23:07 +00:00
|
|
|
hiddenItemObj["underfoot"] = this->getInt("underfoot") > 0 || this->get("underfoot") == "TRUE";
|
|
|
|
}
|
2019-02-03 18:26:27 +00:00
|
|
|
this->addCustomValuesTo(&hiddenItemObj);
|
2019-02-01 17:43:25 +00:00
|
|
|
|
|
|
|
return hiddenItemObj;
|
|
|
|
}
|
|
|
|
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object Event::buildSecretBaseEventJSON()
|
2019-02-01 17:43:25 +00:00
|
|
|
{
|
2020-03-06 03:46:25 +00:00
|
|
|
OrderedJson::object secretBaseObj;
|
2019-02-01 17:43:25 +00:00
|
|
|
secretBaseObj["type"] = "secret_base";
|
|
|
|
secretBaseObj["x"] = this->getU16("x");
|
|
|
|
secretBaseObj["y"] = this->getU16("y");
|
|
|
|
secretBaseObj["elevation"] = this->getInt("elevation");
|
|
|
|
secretBaseObj["secret_base_id"] = this->get("secret_base_id");
|
2019-02-03 18:26:27 +00:00
|
|
|
this->addCustomValuesTo(&secretBaseObj);
|
2019-02-01 17:43:25 +00:00
|
|
|
|
|
|
|
return secretBaseObj;
|
2018-09-25 01:12:29 +01:00
|
|
|
}
|
|
|
|
|
2022-01-24 22:17:31 +00:00
|
|
|
void Event::setPixmapFromSpritesheet(QImage spritesheet, int spriteWidth, int spriteHeight, bool inanimate)
|
2018-09-25 01:12:29 +01:00
|
|
|
{
|
2022-01-24 22:17:31 +00:00
|
|
|
int frame = inanimate ? 0 : this->frame;
|
2019-04-03 00:51:33 +01:00
|
|
|
QImage img = spritesheet.copy(frame * spriteWidth % spritesheet.width(), 0, spriteWidth, spriteHeight);
|
2022-01-24 22:17:31 +00:00
|
|
|
if (this->hFlip && !inanimate) {
|
2019-04-03 00:51:33 +01:00
|
|
|
img = img.transformed(QTransform().scale(-1, 1));
|
|
|
|
}
|
2022-01-24 22:17:31 +00:00
|
|
|
// Set first palette color fully transparent.
|
2018-09-25 01:12:29 +01:00
|
|
|
img.setColor(0, qRgba(0, 0, 0, 0));
|
|
|
|
pixmap = QPixmap::fromImage(img);
|
|
|
|
this->spriteWidth = spriteWidth;
|
|
|
|
this->spriteHeight = spriteHeight;
|
2019-01-11 01:59:41 +00:00
|
|
|
this->usingSprite = true;
|
2018-09-25 01:12:29 +01:00
|
|
|
}
|
2019-04-03 00:51:33 +01:00
|
|
|
|
|
|
|
void Event::setFrameFromMovement(QString facingDir) {
|
|
|
|
// defaults
|
|
|
|
this->frame = 0;
|
|
|
|
this->hFlip = false;
|
|
|
|
if (facingDir == "DIR_NORTH") {
|
|
|
|
this->frame = 1;
|
|
|
|
this->hFlip = false;
|
|
|
|
} else if (facingDir == "DIR_SOUTH") {
|
|
|
|
this->frame = 0;
|
|
|
|
this->hFlip = false;
|
|
|
|
} else if (facingDir == "DIR_WEST") {
|
|
|
|
this->frame = 2;
|
|
|
|
this->hFlip = false;
|
|
|
|
} else if (facingDir == "DIR_EAST") {
|
|
|
|
this->frame = 2;
|
|
|
|
this->hFlip = true;
|
|
|
|
}
|
|
|
|
}
|
2022-02-05 23:53:04 +00:00
|
|
|
|
|
|
|
bool Event::isValidType(QString event_type) {
|
|
|
|
return EventTypeTable.contains(event_type);
|
|
|
|
}
|
|
|
|
|
|
|
|
QString Event::typeToGroup(QString event_type) {
|
|
|
|
return EventTypeTable.value(event_type, QString());
|
|
|
|
}
|