diff options
-rw-r--r-- | crawl-ref/source/colour.cc | 125 | ||||
-rw-r--r-- | crawl-ref/source/colour.h | 21 |
2 files changed, 73 insertions, 73 deletions
diff --git a/crawl-ref/source/colour.cc b/crawl-ref/source/colour.cc index 511be6c7f8..5a14678545 100644 --- a/crawl-ref/source/colour.cc +++ b/crawl-ref/source/colour.cc @@ -12,30 +12,24 @@ #include <utility> typedef std::vector< std::pair<int, int> > random_colour_map; -typedef int (*element_colour_calculator)(int, const coord_def&); typedef int (*randomized_element_colour_calculator)(int, const coord_def&, random_colour_map); static int _randomized_element_colour(int, const coord_def&, random_colour_map); -struct element_colour_calc +struct random_element_colour_calc : public element_colour_calc { - element_type type; - - element_colour_calc(element_type _type, - element_colour_calculator _calc) - : type(_type), calc(_calc) + random_element_colour_calc(element_type _type, + std::vector< std::pair<int, int> > _rand_vals) + : element_colour_calc(_type, (element_colour_calculator)_randomized_element_colour), + rand_vals(_rand_vals) {}; - virtual int get(const coord_def& loc = coord_def(), bool non_random = false); - - int get_non_random(const coord_def& loc = coord_def()) - { return get(loc, true); }; + virtual int get(const coord_def& loc = coord_def(), + bool non_random = false); protected: - int rand(bool non_random); - - element_colour_calculator calc; + random_colour_map rand_vals; }; int element_colour_calc::rand(bool non_random) @@ -48,21 +42,6 @@ int element_colour_calc::get(const coord_def& loc, bool non_random) return (*calc)(rand(non_random), loc); } -struct random_element_colour_calc : public element_colour_calc -{ - random_element_colour_calc(element_type _type, - std::vector< std::pair<int, int> > _rand_vals) - : element_colour_calc(_type, (element_colour_calculator)_randomized_element_colour), - rand_vals(_rand_vals) - {}; - - virtual int get(const coord_def& loc = coord_def(), - bool non_random = false); - -protected: - random_colour_map rand_vals; -}; - int random_element_colour_calc::get(const coord_def& loc, bool non_random) { // casting function pointers from other function pointers is guaranteed @@ -209,7 +188,7 @@ static element_colour_calc *_create_random_element_colour_calc(element_type type return new random_element_colour_calc(type, rand_vals); } -static void _add_element_colour(element_colour_calc *colour) +void add_element_colour(element_colour_calc *colour) { ASSERT(element_colours.find(colour->type) == element_colours.end()); element_colours[colour->type] = colour; @@ -217,143 +196,143 @@ static void _add_element_colour(element_colour_calc *colour) void init_element_colours() { - _add_element_colour(new element_colour_calc( + add_element_colour(new element_colour_calc( ETC_FLOOR, _etc_floor )); - _add_element_colour(new element_colour_calc( + add_element_colour(new element_colour_calc( ETC_ROCK, _etc_rock )); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_FIRE, 40, RED, 40, YELLOW, 40, LIGHTRED, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_ICE, 40, LIGHTBLUE, 40, BLUE, 40, WHITE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_EARTH, 70, BROWN, 50, GREEN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_AIR, 60, LIGHTGREY, 60, WHITE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_ELECTRICITY, 40, LIGHTCYAN, 40, LIGHTBLUE, 40, CYAN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_POISON, 60, LIGHTGREEN, 60, GREEN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_WATER, 60, BLUE, 60, CYAN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_MAGIC, 30, LIGHTMAGENTA, 30, LIGHTBLUE, 30, MAGENTA, 30, BLUE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_MUTAGENIC, 60, LIGHTMAGENTA, 60, MAGENTA, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_WARP, 60, LIGHTMAGENTA, 60, MAGENTA, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_ENCHANT, 60, LIGHTBLUE, 60, BLUE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_HEAL, 60, LIGHTBLUE, 60, YELLOW, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_BLOOD, 60, RED, 60, DARKGREY, 0)); // assassin - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_DEATH, 80, DARKGREY, 40, MAGENTA, 0)); // necromancer - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_NECRO, 80, DARKGREY, 40, MAGENTA, 0)); // ie demonology - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_UNHOLY, 80, DARKGREY, 40, RED, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_DARK, 80, DARKGREY, 40, LIGHTGREY, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_HOLY, 60, YELLOW, 60, WHITE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_VEHUMET, 40, LIGHTRED, 40, LIGHTMAGENTA, 40, LIGHTBLUE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_BEOGH, // plain Orc colour 60, LIGHTRED, // Orcish mines wall/idol colour 60, BROWN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_CRYSTAL, 40, LIGHTGREY, 40, GREEN, 40, LIGHTRED, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_SLIME, 40, GREEN, 40, BROWN, 40, LIGHTGREEN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_SMOKE, 30, LIGHTGREY, 30, DARKGREY, 30, LIGHTBLUE, 30, MAGENTA, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_JEWEL, 12, WHITE, 12, YELLOW, @@ -366,28 +345,28 @@ void init_element_colours() 12, GREEN, 12, BLUE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_ELVEN, 40, LIGHTGREEN, 40, GREEN, 20, LIGHTBLUE, 20, BLUE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_DWARVEN, 40, BROWN, 40, LIGHTRED, 20, LIGHTGREY, 20, CYAN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_ORCISH, 40, DARKGREY, 40, RED, 20, BROWN, 20, MAGENTA, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_GILA, 30, LIGHTMAGENTA, 30, MAGENTA, @@ -395,7 +374,7 @@ void init_element_colours() 15, LIGHTRED, 15, RED, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_KRAKEN, 15, GREEN, 15, LIGHTGREEN, @@ -406,56 +385,56 @@ void init_element_colours() 15, MAGENTA, 15, LIGHTMAGENTA, 0)); - _add_element_colour(new element_colour_calc( + add_element_colour(new element_colour_calc( ETC_STONE, _etc_stone )); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_MIST, 100, CYAN, 20, BLUE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_SHIMMER_BLUE, 90, BLUE, 20, LIGHTBLUE, 10, CYAN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_DECAY, 60, BROWN, 60, GREEN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_SILVER, 90, LIGHTGREY, 30, WHITE, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_GOLD, 60, YELLOW, 60, BROWN, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_IRON, 40, CYAN, 40, LIGHTGREY, 40, DARKGREY, 0)); - _add_element_colour(_create_random_element_colour_calc( + add_element_colour(_create_random_element_colour_calc( ETC_BONE, 90, WHITE, 30, LIGHTGREY, 0)); - _add_element_colour(new element_colour_calc( + add_element_colour(new element_colour_calc( ETC_ELVEN_BRICK, _etc_elven_brick )); - _add_element_colour(new element_colour_calc( + add_element_colour(new element_colour_calc( ETC_WAVES, _etc_waves )); - _add_element_colour(new element_colour_calc( + add_element_colour(new element_colour_calc( ETC_TREE, _etc_tree )); - _add_element_colour(new element_colour_calc( + add_element_colour(new element_colour_calc( ETC_RANDOM, _etc_random )); } diff --git a/crawl-ref/source/colour.h b/crawl-ref/source/colour.h index c1abe01b71..ba63c9f954 100644 --- a/crawl-ref/source/colour.h +++ b/crawl-ref/source/colour.h @@ -51,12 +51,33 @@ enum element_type ETC_RANDOM, // any colour (except BLACK) }; +typedef int (*element_colour_calculator)(int, const coord_def&); + +struct element_colour_calc +{ + element_type type; + + element_colour_calc(element_type _type, + element_colour_calculator _calc) + : type(_type), calc(_calc) + {}; + + virtual int get(const coord_def& loc = coord_def(), + bool non_random = false); + +protected: + int rand(bool non_random); + + element_colour_calculator calc; +}; + int str_to_colour(const std::string &str, int default_colour = -1, bool accept_number = true); const std::string colour_to_str(uint8_t colour); unsigned int str_to_tile_colour(std::string colour); void init_element_colours(); +void add_element_colour(element_colour_calc *colour); uint8_t random_colour(); uint8_t random_uncommon_colour(); uint8_t make_low_colour(uint8_t colour); |