src/ai/api/ai_airport.hpp.sq
author truelight
Wed, 18 Jul 2007 14:58:37 +0000
branchnoai
changeset 9673 ee4f133c84ec
parent 9670 820b77e19bb3
child 9674 15f7b310b6cf
permissions -rw-r--r--
(svn r10612) [NoAI] -Add: allow a class as return value; pack the result in a SQ instance and it should work perfectly
#include "ai_airport.hpp"

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

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

void SQAIAirportRegister(Squirrel *engine) {
	DefSQClass <AIAirport> SQAIAirport("AIAirport");
	SQAIAirport.PreRegister(engine);
	SQAIAirport.AddConstructor<void (AIAirport::*)(), 1>(engine, "x");

	SQAIAirport.DefSQConst(engine, AIAirport::AT_SMALL,         "AT_SMALL");
	SQAIAirport.DefSQConst(engine, AIAirport::AT_LARGE,         "AT_LARGE");
	SQAIAirport.DefSQConst(engine, AIAirport::AT_HELIPORT,      "AT_HELIPORT");
	SQAIAirport.DefSQConst(engine, AIAirport::AT_METROPOLITAN,  "AT_METROPOLITAN");
	SQAIAirport.DefSQConst(engine, AIAirport::AT_INTERNATIONAL, "AT_INTERNATIONAL");
	SQAIAirport.DefSQConst(engine, AIAirport::AT_COMMUTER,      "AT_COMMUTER");
	SQAIAirport.DefSQConst(engine, AIAirport::AT_HELIDEPOT,     "AT_HELIDEPOT");
	SQAIAirport.DefSQConst(engine, AIAirport::AT_INTERCON,      "AT_INTERCON");
	SQAIAirport.DefSQConst(engine, AIAirport::AT_HELISTATION,   "AT_HELISTATION");

	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetClassName,             "GetClassName",             1, "x");
	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsHangarTile,             "IsHangarTile",             2, "xi");
	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportTile,            "IsAirportTile",            2, "xi");
	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::AiportAvailable,          "AiportAvailable",          2, "xi");
	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportWidth,          "GetAirportWidth",          2, "xi");
	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportHeight,         "GetAirportHeight",         2, "xi");
	SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportCoverageRadius, "GetAirportCoverageRadius", 2, "xi");

	SQAIAirport.DefSQMethod(engine, &AIAirport::BuildAirport,       "BuildAirport",       3, "xii");
	SQAIAirport.DefSQMethod(engine, &AIAirport::RemoveAirport,      "RemoveAirport",      2, "xi");
	SQAIAirport.DefSQMethod(engine, &AIAirport::GetHangarOfAirport, "GetHangarOfAirport", 2, "xi");

	SQAIAirport.PostRegister(engine);
}