src/ai/api/ai_pathfinder.hpp
author truebrain
Wed, 26 Mar 2008 15:17:40 +0000
branchnoai
changeset 9823 0b7f816cf46f
parent 9681 3997f1ce203a
permissions -rw-r--r--
(svn r12431) [NoAI] -Add: added AIEventSubsidiaryOffer, which keeps you informed about new Subsidiaries
9652
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     1
/* $Id$ */
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     2
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     3
/** @file ai_pathfinder.hpp Everything to query and build pathfinders */
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     4
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     5
#ifndef AI_PATHFINDER_HPP
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     6
#define AI_PATHFINDER_HPP
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     7
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     8
#include "ai_object.hpp"
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
     9
#include "ai_tilelist.hpp"
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    10
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    11
/**
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    12
 * A class that handles the base pathfinder. It is ment as
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    13
 *  parent-class for real implementation so all PFs have a general
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    14
 *  interface, but can have different backends.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    15
 */
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    16
class AIPathFinder : public AIObject {
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    17
public:
9669
366771e15a2c (svn r10608) [NoAI] -Documentation: comment some functions to make Doxygen happy
truelight
parents: 9653
diff changeset
    18
	/**
366771e15a2c (svn r10608) [NoAI] -Documentation: comment some functions to make Doxygen happy
truelight
parents: 9653
diff changeset
    19
	 * The type of pathfinders known in the game.
366771e15a2c (svn r10608) [NoAI] -Documentation: comment some functions to make Doxygen happy
truelight
parents: 9653
diff changeset
    20
	 */
9652
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    21
	enum PathFinderType {
9681
3997f1ce203a (svn r10630) [NoAI] -Fix: allow enums to not have a predefined value for Squirrel
truelight
parents: 9669
diff changeset
    22
		PATHFINDER_ROAD,
3997f1ce203a (svn r10630) [NoAI] -Fix: allow enums to not have a predefined value for Squirrel
truelight
parents: 9669
diff changeset
    23
		PATHFINDER_RAIL,
9652
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    24
	};
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    25
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    26
	/**
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    27
	 * The name of the class, needed by several sub-processes.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    28
	 */
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    29
	static const char *GetClassName() { return "AIPathFinder"; }
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    30
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    31
	/**
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    32
	 * Find a route between 2 points. Any pathfinder might have specific
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    33
	 *  functions to calibrate penalties and stuff.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    34
	 * @param start a list of tiles from where we can start.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    35
	 * @param end a list of tiles where we can end.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    36
	 * @return internal structure about how to make the route, or NULL if no route was found.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    37
	 */
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9652
diff changeset
    38
	virtual void *FindRoute(AITileList *start, AITileList *end) = 0;
9652
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    39
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    40
	/**
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    41
	 * Build the route as found by FindRoute.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    42
	 * @param result the result 'void *' from FindRoute.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    43
	 * @return true if the route was build, false if anything went wrong.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    44
	 */
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9652
diff changeset
    45
	virtual bool BuildRoute(void *result) = 0;
9652
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    46
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    47
	/**
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    48
	 * When you are done with the route result, we have to free it in order to avoid memleaks.
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    49
	 * @note Always call this function on the result of FindRoute, even when you ran BuildRoute before!
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    50
	 */
9653
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9652
diff changeset
    51
	virtual void FreeRoute(void *result) = 0;
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9652
diff changeset
    52
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9652
diff changeset
    53
	/** Keep the compilers happy */
50e2eb4abf46 (svn r10554) [NoAI] -Codechange: allow classes with virtual functions to still export their enums.
rubidium
parents: 9652
diff changeset
    54
	virtual ~AIPathFinder() {}
9652
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    55
};
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    56
c15bf5355b95 (svn r10553) [NoAI] -Add: added a framework for AIPathFinder() and implemented a really stupid AIPathFinderStupid()
truelight
parents:
diff changeset
    57
#endif /* AI_PATHFINDER_HPP */