Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Save actions #61

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions source/source/area/area.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -414,6 +414,7 @@ void area_data::clone(area_data &other) {
other.mission.gold_req = mission.gold_req;
other.mission.platinum_req = mission.platinum_req;

other.save_data = data_node(this->save_data);
other.problems.non_simples.clear();
other.problems.lone_edges.clear();
other.problems.lone_edges.reserve(problems.lone_edges.size());
Expand Down
3 changes: 3 additions & 0 deletions source/source/area/area.h
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,9 @@ struct area_data : public content {

//Path to the user data folder for this area.
string user_data_path;

//SaveDataNode for this area.
data_node save_data;


//--- Function declarations ---
Expand Down
3 changes: 3 additions & 0 deletions source/source/const.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,9 @@ namespace FILE_NAMES {
//Area main data file.
const string AREA_MAIN_DATA = "data.txt";

//Area save data file.
const string AREA_SAVE_DATA = "save.txt";

//Area geometry file.
const string AREA_GEOMETRY = "geometry.txt";

Expand Down
6 changes: 6 additions & 0 deletions source/source/content_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,12 @@ void content_manager::reload_packs() {
*/
void content_manager::unload_current_area(CONTENT_LOAD_LEVEL level) {
if(!game.cur_area_data) return;
if (level == CONTENT_LOAD_LEVEL_FULL){

string save_data_file_path = game.cur_area_data->user_data_path +
"/" + FILE_NAMES::AREA_SAVE_DATA;
game.cur_area_data->save_data.save_file(save_data_file_path);
}
game.cur_area_data->clear();
delete game.cur_area_data;
game.cur_area_data = nullptr;
Expand Down
11 changes: 11 additions & 0 deletions source/source/content_type_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,17 @@ bool area_content_manager::load_area(

//Main data.
if(game.perf_mon) game.perf_mon->start_measurement("Area -- Data");
string save_data_file_path = area_ptr->user_data_path +
"/" + FILE_NAMES::AREA_SAVE_DATA;
if (file_exists(save_data_file_path)){
data_node save_file= load_data_file(save_data_file_path);
if(!save_file.file_was_opened) return false;
area_ptr->save_data = save_file;
}else{
data_node save_file = data_node();
area_ptr->save_data = save_file;

}
area_ptr->load_main_data_from_data_node(&data_file, level);
area_ptr->load_mission_data_from_data_node(&data_file);
if(game.perf_mon) game.perf_mon->finish_measurement();
Expand Down
27 changes: 27 additions & 0 deletions source/source/init.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1524,7 +1524,34 @@ void init_mob_actions() {
mob_action_runners::turn_to_target,
mob_action_loaders::turn_to_target
);

reg_param("data", MOB_ACTION_PARAM_STRING, false, false);
reg_param("save section", MOB_ACTION_PARAM_STRING, false, false);
reg_action(
MOB_ACTION_WRITE_TO_SAVE,
"write_to_save",
mob_action_runners::write_to_save,
nullptr
);

reg_param("destination var name", MOB_ACTION_PARAM_STRING, true, false);
reg_param("save section", MOB_ACTION_PARAM_STRING, false, false);
reg_action(
MOB_ACTION_READ_FROM_SAVE,
"read_from_save",
mob_action_runners::read_from_save,
nullptr
);


reg_param("destination var name", MOB_ACTION_PARAM_STRING, true, false);
reg_param("save section", MOB_ACTION_PARAM_STRING, false, false);
reg_action(
MOB_ACTION_CHECK_FOR_SAVE,
"check_for_save",
mob_action_runners::check_for_save,
nullptr
);

#undef param
#undef reg_action
Expand Down
39 changes: 39 additions & 0 deletions source/source/mob_script_action.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2331,6 +2331,45 @@ void mob_action_runners::turn_to_target(mob_action_run_data &data) {
}
}

void mob_action_runners::write_to_save(mob_action_run_data &data) {
string data2 = data.args[0];
string section = data.args[1];
data_node* section_data;
size_t has_child =game.cur_area_data->save_data.get_nr_of_children_by_name(section);
if (has_child > 0){
section_data = game.cur_area_data->save_data.get_child_by_name(section);
section_data->value = data2;
}
else{
game.cur_area_data->save_data.add(new data_node(section,data2));
}
}

void mob_action_runners::read_from_save(mob_action_run_data &data) {
string dest_var = data.args[0];
string section = data.args[1];

size_t has_child =game.cur_area_data->save_data.get_nr_of_children_by_name(section);
if (has_child > 0){
data.m->set_var(dest_var,game.cur_area_data->save_data.get_child_by_name(section)->value);
}else{
game.errors.report("Save data section("+ section+") does not exist! please check for it or create it first!");
}

}

void mob_action_runners::check_for_save(mob_action_run_data &data) {
string dest_var = data.args[0];
string section = data.args[1];
size_t has_child =game.cur_area_data->save_data.get_nr_of_children_by_name(section);
if (has_child > 0){
data.m->set_var(dest_var,b2s(true));
}else{

data.m->set_var(dest_var,b2s(false));
}

}

/**
* @brief Confirms if the "if", "else", "end_if", "goto", and "label" actions in
Expand Down
13 changes: 13 additions & 0 deletions source/source/mob_script_action.h
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,15 @@ enum MOB_ACTION {
//Turn towards a target.
MOB_ACTION_TURN_TO_TARGET,

//Write A value to Save Data
MOB_ACTION_WRITE_TO_SAVE,

//Turn towards a target.
MOB_ACTION_READ_FROM_SAVE,

//Turn towards a target.
MOB_ACTION_CHECK_FOR_SAVE,

//Total amount of mob actions.
N_MOB_ACTIONS,

Expand Down Expand Up @@ -757,6 +766,10 @@ void throw_focus(mob_action_run_data &data);
void turn_to_absolute(mob_action_run_data &data);
void turn_to_relative(mob_action_run_data &data);
void turn_to_target(mob_action_run_data &data);

void write_to_save(mob_action_run_data &data);
void read_from_save(mob_action_run_data &data);
void check_for_save(mob_action_run_data &data);
};


Expand Down
23 changes: 0 additions & 23 deletions source/vs_code/c_cpp_properties.json

This file was deleted.

28 changes: 0 additions & 28 deletions source/vs_code/launch.json

This file was deleted.

85 changes: 0 additions & 85 deletions source/vs_code/tasks.json

This file was deleted.