20130313
[gdash.git] / src / cave / helper / cavemap.cpp
blobb0692d846bb1227440a071951008df768ffa48d5
1 /*
2 * Copyright (c) 2007-2013, Czirkos Zoltan http://code.google.com/p/gdash/
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 #include "config.h"
19 #include <algorithm>
20 #include "cave/helper/cavemap.hpp"
22 void CaveMapBase::perfect_wrap_coords(int w, int h, int &x, int &y) {
23 y=(y+h)%h;
24 x=(x+w)%w;
27 void CaveMapBase::lineshift_wrap_coords_only_x(int w, int &x, int &y) {
28 /* fit x coordinate within range, with correcting y at the same time */
29 while (x>=w) {
30 y++;
31 x-=w;
33 while (x<0) { /* out of bounds on the left... */
34 y--; /* previous row */
35 x+=w;
37 /* here do not change x to be >=0 and <= h-1 */
40 void CaveMapBase::lineshift_wrap_coords_both(int w, int h, int &x, int &y) {
41 lineshift_wrap_coords_only_x(w, x, y);
42 y=(y+h)%h;