11#include " scripthost.h"
22#include " ../node/d2rsprite.h"
33#include " ../node/dc6sprite.h"
4+ #include " ../node/inputlistener.h"
45#include " cascprovider.h"
56#include " engine.h"
67#include " filesystemprovider.h"
@@ -58,6 +59,7 @@ AbyssEngine::ScriptHost::ScriptHost(Engine *engine) : _engine(engine), _lua() {
5859
5960 module .set_function (" addLoaderProvider" , &ScriptHost::LuaAddLoaderProvider, this );
6061 module .set_function (" createButton" , &ScriptHost::LuaCreateButton, this );
62+ module .set_function (" createInputListener" , &ScriptHost::LuaCreateInputListener, this );
6163 module .set_function (" createLabel" , &ScriptHost::LuaCreateLabel, this );
6264 module .set_function (" createMapRenderer" , &ScriptHost::LuaCreateMapRenderer, this );
6365 module .set_function (" createPalette" , &ScriptHost::LuaCreatePalette, this );
@@ -80,6 +82,8 @@ AbyssEngine::ScriptHost::ScriptHost(Engine *engine) : _engine(engine), _lua() {
8082 module .set_function (" setCursor" , &ScriptHost::LuaSetCursor, this );
8183 module .set_function (" showSystemCursor" , &ScriptHost::LuaShowSystemCursor, this );
8284 module .set_function (" shutdown" , &ScriptHost::LuaFuncShutdown, this );
85+ module .set_function (" worldToOrtho" , &ScriptHost::LuaWorldToOrtho, this );
86+ module .set_function (" orthoToWorld" , &ScriptHost::LuaOrthoToWorld, this );
8387
8488 // User Types -------------------------------------------------------------------------------------------------------------------------
8589
@@ -134,6 +138,11 @@ AbyssEngine::ScriptHost::ScriptHost(Engine *engine) : _engine(engine), _lua() {
134138 spriteType[" playMode" ] = sol::property (&Sprite::LuaGetPlayMode, &Sprite::LuaSetPlayMode);
135139 spriteType[" currentFrameIndex" ] = sol::property (&Sprite::GetCurrentFrameIndex, &Sprite::SetCurrentFrameIndex);
136140
141+ // InputListener
142+ auto inputListenerType = CreateLuaObjectType<InputListener>(module , " InputListener" , sol::no_constructor);
143+ inputListenerType[" onMouseButton" ] = &InputListener::LuaSetMouseButtonCallback;
144+ inputListenerType[" onMouseMove" ] = &InputListener::LuaSetMouseMoveCallback;
145+
137146 // Sound Effect
138147 auto soundEffect = module .new_usertype <SoundEffect>(" SoundEffect" , sol::no_constructor);
139148 soundEffect[" play" ] = &SoundEffect::Play;
@@ -185,10 +194,19 @@ AbyssEngine::ScriptHost::ScriptHost(Engine *engine) : _engine(engine), _lua() {
185194 ds1.set (" width" , sol::property (&LibAbyss::DS1::Width, &LibAbyss::DS1::Width));
186195 ds1.set (" height" , sol::property (&LibAbyss::DS1::Height, &LibAbyss::DS1::Height));
187196
197+ // DT1 Tile
198+ auto dt1TileType = module .new_usertype <LibAbyss::DT1::Tile>(" DT1Tile" , sol::no_constructor);
199+ dt1TileType[" type" ] = sol::readonly_property (&LibAbyss::DT1::Tile::Type);
200+ dt1TileType[" mainIndex" ] = sol::readonly_property (&LibAbyss::DT1::Tile::MainIndex);
201+ dt1TileType[" subIndex" ] = sol::readonly_property (&LibAbyss::DT1::Tile::SubIndex);
202+
188203 // Zone
189204 auto zoneType = module .new_usertype <LibAbyss::Zone>(" Zone" , sol::no_constructor);
190205 zoneType[" resetMap" ] = &LibAbyss::Zone::ResetMap;
191206 zoneType[" stamp" ] = &LibAbyss::Zone::Stamp;
207+ zoneType[" getTileInfo" ] = &LibAbyss::Zone::GetTileInfo;
208+ zoneType[" width" ] = sol::readonly_property (&LibAbyss::Zone::WidthInTiles);
209+ zoneType[" height" ] = sol::readonly_property (&LibAbyss::Zone::HeightInTiles);
192210
193211 _environment.add (module );
194212}
@@ -365,9 +383,7 @@ std::unique_ptr<AbyssEngine::Image> AbyssEngine::ScriptHost::LuaLoadImage(std::s
365383 throw std::runtime_error (absl::StrCat (" Unknowns sprite format for file: " , spritePath));
366384}
367385
368- std::unique_ptr<AbyssEngine::Sprite> AbyssEngine::ScriptHost::LuaCreateSprite (AbyssEngine::Image& image) {
369- return std::make_unique<Sprite>(image);
370- }
386+ std::unique_ptr<AbyssEngine::Sprite> AbyssEngine::ScriptHost::LuaCreateSprite (AbyssEngine::Image &image) { return std::make_unique<Sprite>(image); }
371387
372388std::unique_ptr<AbyssEngine::Button> AbyssEngine::ScriptHost::LuaCreateButton (Image &image) { return std::make_unique<Button>(image); }
373389
@@ -485,3 +501,15 @@ std::unique_ptr<LibAbyss::DS1> AbyssEngine::ScriptHost::LuaLoadDS1(std::string_v
485501 auto stream = _engine->GetLoader ().Load (fileName);
486502 return std::make_unique<LibAbyss::DS1>(stream);
487503}
504+
505+ std::unique_ptr<AbyssEngine::InputListener> AbyssEngine::ScriptHost::LuaCreateInputListener () { return std::make_unique<InputListener>(); }
506+
507+ std::tuple<int , int > AbyssEngine::ScriptHost::LuaWorldToOrtho (int x, int y) {
508+ MapRenderer::WorldToOrtho (x, y);
509+ return {x, y};
510+ }
511+
512+ std::tuple<int , int > AbyssEngine::ScriptHost::LuaOrthoToWorld (int x, int y) {
513+ MapRenderer::OrthoToWorld (x, y);
514+ return {x, y};
515+ }
0 commit comments