src/ai/api/ai_station.hpp.sq
author truelight
Wed, 18 Jul 2007 15:09:16 +0000
branchnoai
changeset 9674 15f7b310b6cf
parent 9673 ee4f133c84ec
child 9679 788e083db48b
permissions -rw-r--r--
(svn r10613) [NoAI] -Add r10612: give release-hook for return values of classes for which SQ creates a temporary holder so they are free'd when SQ does
#include "ai_station.hpp"

namespace SQConvert {
	/* Allow enums to be used as Squirrel parameters */
	template <> AIStation::StationType GetParam(ForceType<AIStation::StationType>, HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AIStation::StationType)tmp; }
	template <> int Return<AIStation::StationType>(HSQUIRRELVM vm, AIStation::StationType res) { sq_pushinteger(vm, (int32)res); return 1; }

	/* Allow AIStation to be used as Squirrel parameter */
	template <> AIStation *GetParam(ForceType<AIStation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStation *)instance; }
	template <> AIStation &GetParam(ForceType<AIStation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStation *)instance; }
	template <> const AIStation *GetParam(ForceType<const AIStation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIStation *)instance; }
	template <> const AIStation &GetParam(ForceType<const AIStation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIStation *)instance; }
	template <> int Return<AIStation *>(HSQUIRRELVM vm, AIStation *res) { HSQOBJECT instance; Squirrel::CreateClassInstanceVM(vm, "AIStation", res, &instance, DefSQDestructorCallback<AIStation>); sq_pushobject(vm, instance); return 1; }
}; // namespace SQConvert

void SQAIStationRegister(Squirrel *engine) {
	DefSQClass <AIStation> SQAIStation("AIStation");
	SQAIStation.PreRegister(engine);
	SQAIStation.AddConstructor<void (AIStation::*)(), 1>(engine, "x");

	SQAIStation.DefSQConst(engine, AIStation::STATION_ANY,        "STATION_ANY");
	SQAIStation.DefSQConst(engine, AIStation::STATION_TRAIN,      "STATION_TRAIN");
	SQAIStation.DefSQConst(engine, AIStation::STATION_TRUCK_STOP, "STATION_TRUCK_STOP");
	SQAIStation.DefSQConst(engine, AIStation::STATION_BUS_STOP,   "STATION_BUS_STOP");
	SQAIStation.DefSQConst(engine, AIStation::STATION_AIRPORT,    "STATION_AIRPORT");
	SQAIStation.DefSQConst(engine, AIStation::STATION_DOCK,       "STATION_DOCK");

	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetClassName,      "GetClassName",      1, "x");
	SQAIStation.DefSQStaticMethod(engine, &AIStation::IsValidStation,    "IsValidStation",    2, "xi");
	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetStationID,      "GetStationID",      2, "xi");
	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetLocation,       "GetLocation",       2, "xi");
	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCargoWaiting,   "GetCargoWaiting",   3, "xii");
	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCargoRating,    "GetCargoRating",    3, "xii");
	SQAIStation.DefSQStaticMethod(engine, &AIStation::GetCoverageRadius, "GetCoverageRadius", 2, "xi");

	SQAIStation.PostRegister(engine);
}