Program Listing for File path.hpp¶
↰ Return to documentation for file (libtcod/path.hpp)
/* BSD 3-Clause License
*
* Copyright © 2008-2025, Jice and the libtcod contributors.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
// clang-format off
#pragma once
#ifndef TCOD_PATH_HPP_
#define TCOD_PATH_HPP_
#include <utility>
#include "fov.hpp"
#include "path.h"
class TCODLIB_API ITCODPathCallback {
public :
virtual ~ITCODPathCallback() {}
virtual float getWalkCost( int xFrom, int yFrom, int xTo, int yTo, void *userData ) const = 0;
};
class TCODLIB_API TCODPath {
public :
TCODPath(const TCODMap *map, float diagonalCost=1.41f);
TCODPath(int width, int height, const ITCODPathCallback *listener, void *userData, float diagonalCost=1.41f);
TCODPath(const TCODPath&) = delete;
TCODPath& operator=(const TCODPath&) = delete;
TCODPath(TCODPath&& rhs) noexcept {
std::swap(data, rhs.data);
std::swap(cppData, rhs.cppData);
}
TCODPath& operator=(TCODPath&& rhs) noexcept {
std::swap(data, rhs.data);
std::swap(cppData, rhs.cppData);
return *this;
}
virtual ~TCODPath();
bool compute(int ox, int oy, int dx, int dy);
void reverse();
void getOrigin(int *x,int *y) const;
void getDestination(int *x,int *y) const;
int size() const;
void get(int index, int *x, int *y) const;
bool isEmpty() const;
bool walk(int *x, int *y, bool recalculateWhenNeeded);
protected :
friend float TCOD_path_func(int xFrom, int yFrom, int xTo,int yTo, void *data);
TCOD_path_t data{};
struct WrapperData {
void *userData{};
const ITCODPathCallback *listener{};
} cppData;
};
//Dijkstra kit
class TCODLIB_API TCODDijkstra {
public:
TCODDijkstra (TCODMap *map, float diagonalCost=1.41f);
TCODDijkstra (int width, int height, const ITCODPathCallback *listener, void *userData, float diagonalCost=1.41f);
TCODDijkstra(const TCODDijkstra&) = delete;
TCODDijkstra& operator=(const TCODDijkstra&) = delete;
TCODDijkstra(TCODDijkstra&& rhs) noexcept {
std::swap(data, rhs.data);
std::swap(cppData, rhs.cppData);
}
TCODDijkstra& operator=(TCODDijkstra&& rhs) noexcept {
std::swap(data, rhs.data);
std::swap(cppData, rhs.cppData);
return *this;
}
~TCODDijkstra (void);
void compute (int rootX, int rootY);
bool setPath (int toX, int toY);
float getDistance (int x, int y);
bool walk (int *x, int *y);
bool isEmpty() const;
void reverse();
int size() const;
void get(int index, int *x, int *y) const;
private:
TCOD_dijkstra_t data{};
struct WrapperData {
void *userData{};
const ITCODPathCallback *listener{};
} cppData;
};
#endif // TCOD_PATH_HPP_