Files
oboe/src/utility.cpp

63 lines
1.6 KiB
C++

//
// utility.cpp
// BoE
//
// Created by Celtic Minstrel on 17-04-14.
//
//
#include "utility.hpp"
#include "fileio/resmgr/res_strings.hpp"
std::string get_str(std::string list, short j){
if(j == 0) return list;
const StringList& strings = *ResMgr::strings.get(list);
return strings[j - 1];
}
short can_see(location p1,location p2,std::function<short(short,short)> get_obscurity) {
short storage = 0;
if(p1.y == p2.y) {
if(p1.x > p2.x) {
for(short count = p2.x + 1; count < p1.x; count++)
storage += get_obscurity(count, p1.y);
} else {
for(short count = p1.x + 1; count < p2.x; count++)
storage += get_obscurity(count, p1.y);
}
} else if(p1.x == p2.x) {
if(p1.y > p2.y) {
for(short count = p1.y - 1; count > p2.y; count--)
storage += get_obscurity(p1.x, count);
} else {
for(short count = p1.y + 1; count < p2.y; count++)
storage += get_obscurity(p1.x, count);
}
} else {
short dx = p2.x - p1.x;
short dy = p2.y - p1.y;
if(abs(dy) > abs(dx)) {
if(p2.y > p1.y) {
for(short count = 1; count < dy; count++)
storage += get_obscurity(p1.x + (count * dx) / dy, p1.y + count);
} else {
for(short count = -1; count > dy; count--)
storage += get_obscurity(p1.x + (count * dx) / dy, p1.y + count);
}
}
if(abs(dy) <= abs(dx)) {
if(p2.x > p1.x) {
for(short count = 1; count < dx; count++)
storage += get_obscurity(p1.x + count, p1.y + (count * dy) / dx);
} else {
for(short count = -1; count > dx; count--)
storage += get_obscurity(p1.x + count, p1.y + (count * dy) / dx);
}
}
}
return storage;
}