1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
/*
* File: maps.cc
* Summary: Functions used to create vaults.
* Written by: Linley Henzell
*/
#ifndef MAPS_H
#define MAPS_H
#include <vector>
#include "mapdef.h" // for typedef depth_ranges
struct level_range;
class map_def;
struct map_file_place;
struct vault_placement;
typedef std::vector<map_def> map_vector;
typedef std::vector<const map_def *> mapref_vector;
bool map_safe_vault_place(const map_def &md,
const coord_def &c,
const coord_def &size);
int vault_main(vault_placement &vp, const map_def *vault,
bool check_place = false);
bool resolve_subvault(map_def &vault);
// Given a rectangular region, slides it to fit into the map. size must be
// smaller than (GXM,GYM).
void fit_region_into_map_bounds(coord_def &pos, const coord_def &size,
int margin = 0);
const map_def *map_by_index(int index);
void strip_all_maps();
int map_count();
int map_count_for_tag(const std::string &tag, bool check_depth = false);
const map_def *find_map_by_name(const std::string &name);
const map_def *random_map_for_place(const level_id &place, bool minivault);
const map_def *random_map_in_depth(const level_id &lid,
bool want_minivault = false);
const map_def *random_map_for_tag(const std::string &tag,
bool check_depth = false,
bool check_chance = false);
mapref_vector random_chance_maps_in_depth(const level_id &place);
void add_parsed_map(const map_def &md);
std::vector<std::string> find_map_matches(const std::string &name);
mapref_vector find_maps_for_tag (const std::string tag,
bool check_depth = false,
bool check_used = true);
int weight_map_vector (std::vector<map_def> maps);
void read_maps();
void reread_maps();
void sanity_check_maps();
void read_map(const std::string &file);
void run_map_preludes();
void reset_map_parser();
std::string get_descache_path(const std::string &file,
const std::string &ext);
typedef std::map<std::string, map_file_place> map_load_info_t;
extern map_load_info_t lc_loaded_maps;
extern std::string lc_desfile;
extern map_def lc_map;
extern level_range lc_range;
extern depth_ranges lc_default_depths;
extern dlua_chunk lc_global_prelude;
extern bool lc_run_global_prelude;
typedef bool (*map_place_check_t)(const map_def &, const coord_def &c,
const coord_def &size);
typedef std::vector<coord_def> point_vector;
typedef std::vector<std::string> string_vector;
extern map_place_check_t map_place_valid;
extern point_vector map_anchor_points;
// Use dgn_map_parameters to modify:
extern string_vector map_parameters;
const int MAP_CACHE_VERSION = 1014;
class dgn_map_parameters
{
public:
dgn_map_parameters(const std::string &astring);
dgn_map_parameters(const string_vector ¶meters);
private:
unwind_var<string_vector> mpar;
};
#ifdef DEBUG_DIAGNOSTICS
void mg_report_random_maps(FILE *outf, const level_id &place);
#endif
#endif
|