Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 110 lines (92 sloc) 4.388 kb
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 108 109 110
// illarionserver - server for the game Illarion
// Copyright 2011 Illarion e.V.
//
// This file is part of illarionserver.
//
// illarionserver is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// illarionserver is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with illarionserver. If not, see <http://www.gnu.org/licenses/>.


#ifndef MAPVECTOR_HH
#define MAPVECTOR_HH

#include <vector>
#include "globals.hpp"

class Map;

//falls nicht auskommentiert, werden mehr Bildschirmausgaben gemacht:
/* #define MapVector_DEBUG */

//! eine std::vector-Klasse für Map-Objekte.
// Die Klasse erweitert die Funktionalität von std::vector um
// Map - spezifische Suchfunktionen
class MapVector : private std::vector < Map * > {
public:
    using std::vector < Map * >::iterator;
    using std::vector < Map * >::begin;
    using std::vector < Map * >::end;
    using std::vector < Map * >::size;

    MapVector();

    void clear();

    //! sucht in dem std::vector nach Map mit Koordinaten in der Nähe von pos
    // \param rnorth maximaler Abstand der Map nach Norden
    // \param rsouth maximaler Abstand der Map nach Süden
    // \param reast maximaler Abstand der Map nach Osten
    // \param rwest maximaler Abstand der Map nach Westen
    // \param pos der Mittelpunkt des Sichtfensters
    // \param ret der Vektor mit den gefundenen Karten
    // \return true, falls mindestens eine Karte gunden wurde, false sonst
    bool findAllMapsInRangeOf(char rnorth, char rsouth, char reast, char rwest, position pos, std::vector < Map * > &ret);

    //! prüft, ob sich eine Map im angegebenen Bereich befindet
    // \param upperleft_X obere linke X-Koordinate
    // \param upperleft_Y obere linke Y-Koordinate
    // \param sizex Breite des Bereiches
    // \param sizey Höhe des Bereiches
    // \param z Z-Koordinate der Ebene
    // \return true falls siche eine Map in dem Bereich befindet
    bool mapInRangeOf(short int upperleft_X, short int upperleft_Y, unsigned short int sizex, unsigned short int sizey, short int z);

    //! sucht in dem std::vector nach der Map auf der pos liegt
    // \param pos die gesuchte Koordinate
    // \param map die gesucht Map, falls sie gefunden wurde
    // \return false falls keine passende Map gefunden wurde, sonst true
    bool findMapForPos(position pos, Map* &map);

    //! sucht in dem std::vector nach der Map auf der (x,y,z) liegt
    // \param x die gesuchte X-Koordinate
    // \param y die gesuchte Y-Koordinate
    // \param z die gesuchte Z-Koordinate
    // \param map die gesucht Map, falls sie gefunden wurde
    // \return false falls keine passende Map gefunden wurde, sonst true
    bool findMapForPos(short int x, short int y, short int z, Map* &map);

    //! sucht in dem std::vector nach allen Map die die X-Koordinaten von start bis end berühren
    // \param start kleinste X-Koordinate
    // \param end größte X-Koordinate
    // \param ret ein std::vector mit Zeigern auf alle gefundenen Map
    // \return true, falls mindestens eine Map gefunden wurde, false sonst
    bool findAllMapsWithXInRangeOf(short int start, short int end, std::vector < Map * > &ret);

    //! sucht die niedrigste Karte über einer Position
    // \param pos die Position
    // \param lowmap die gefundene Karte
    // \return true falls eine Karte gefunden wurde, false sonst
    bool findLowestMapOverCharacter(position pos, Map* &lowmap);

    //! fügt eine Map in den std::vector ein und aktualisiert low_X und high_X
    // \param newMap die einzufügende Map
    // \return true falls die Map eingefügt werden konnte, false sonst
    bool InsertMap(Map *newMap);

    short int getLowX() {
        return lowX;
    };
    short int getHighX() {
        return highX;
    };

private:
    //! die kleinste X-Koordinate aller Map im std::vector
    short int lowX;

    //! die großte X-Koordinate aller Map im std::vector
    short int highX;
};
#endif
Something went wrong with that request. Please try again.