mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-27 21:35:24 +00:00
Merge branch 'lua_terminal' into 'master'
Load ESM4 Terminal objects, add lua bindings for them See merge request OpenMW/openmw!3341
This commit is contained in:
commit
18f3e937cb
@ -62,7 +62,7 @@ add_openmw_dir (mwlua
|
|||||||
luamanagerimp object worldview userdataserializer luaevents engineevents objectvariant
|
luamanagerimp object worldview userdataserializer luaevents engineevents objectvariant
|
||||||
context globalscripts localscripts playerscripts luabindings objectbindings cellbindings mwscriptbindings
|
context globalscripts localscripts playerscripts luabindings objectbindings cellbindings mwscriptbindings
|
||||||
camerabindings uibindings inputbindings nearbybindings postprocessingbindings stats debugbindings
|
camerabindings uibindings inputbindings nearbybindings postprocessingbindings stats debugbindings
|
||||||
types/types types/door types/item types/actor types/container types/lockable types/weapon types/npc types/creature types/player types/activator types/book types/lockpick types/probe types/apparatus types/potion types/ingredient types/misc types/repair types/armor types/light types/static types/clothing types/levelledlist
|
types/types types/door types/item types/actor types/container types/lockable types/weapon types/npc types/creature types/player types/activator types/book types/lockpick types/probe types/apparatus types/potion types/ingredient types/misc types/repair types/armor types/light types/static types/clothing types/levelledlist types/terminal
|
||||||
worker magicbindings
|
worker magicbindings
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <components/esm4/loadmisc.hpp>
|
#include <components/esm4/loadmisc.hpp>
|
||||||
#include <components/esm4/loadnpc.hpp>
|
#include <components/esm4/loadnpc.hpp>
|
||||||
#include <components/esm4/loadstat.hpp>
|
#include <components/esm4/loadstat.hpp>
|
||||||
|
#include <components/esm4/loadterm.hpp>
|
||||||
#include <components/esm4/loadtree.hpp>
|
#include <components/esm4/loadtree.hpp>
|
||||||
#include <components/esm4/loadweap.hpp>
|
#include <components/esm4/loadweap.hpp>
|
||||||
|
|
||||||
@ -81,6 +82,7 @@ namespace MWClass
|
|||||||
ESM4Named<ESM4::Ingredient>::registerSelf();
|
ESM4Named<ESM4::Ingredient>::registerSelf();
|
||||||
ESM4Named<ESM4::MiscItem>::registerSelf();
|
ESM4Named<ESM4::MiscItem>::registerSelf();
|
||||||
ESM4Static::registerSelf();
|
ESM4Static::registerSelf();
|
||||||
|
ESM4Named<ESM4::Terminal>::registerSelf();
|
||||||
ESM4Tree::registerSelf();
|
ESM4Tree::registerSelf();
|
||||||
ESM4Named<ESM4::Weapon>::registerSelf();
|
ESM4Named<ESM4::Weapon>::registerSelf();
|
||||||
ESM4Light::registerSelf();
|
ESM4Light::registerSelf();
|
||||||
|
45
apps/openmw/mwlua/types/terminal.cpp
Normal file
45
apps/openmw/mwlua/types/terminal.cpp
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#include "types.hpp"
|
||||||
|
|
||||||
|
#include <components/esm4/loadterm.hpp>
|
||||||
|
#include <components/lua/utilpackage.hpp>
|
||||||
|
#include <components/misc/convert.hpp>
|
||||||
|
#include <components/misc/resourcehelpers.hpp>
|
||||||
|
#include <components/resource/resourcesystem.hpp>
|
||||||
|
|
||||||
|
#include "apps/openmw/mwworld/esmstore.hpp"
|
||||||
|
|
||||||
|
namespace sol
|
||||||
|
{
|
||||||
|
template <>
|
||||||
|
struct is_automagical<ESM4::Terminal> : std::false_type
|
||||||
|
{
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWLua
|
||||||
|
{
|
||||||
|
|
||||||
|
void addESM4TerminalBindings(sol::table term, const Context& context)
|
||||||
|
{
|
||||||
|
|
||||||
|
auto vfs = MWBase::Environment::get().getResourceSystem()->getVFS();
|
||||||
|
|
||||||
|
addRecordFunctionBinding<ESM4::Terminal>(term, context, "ESM4Terminal");
|
||||||
|
|
||||||
|
sol::usertype<ESM4::Terminal> record = context.mLua->sol().new_usertype<ESM4::Terminal>("ESM4_Terminal");
|
||||||
|
record[sol::meta_function::to_string] = [](const ESM4::Terminal& rec) -> std::string {
|
||||||
|
return "ESM4_Terminal[" + ESM::RefId(rec.mId).toDebugString() + "]";
|
||||||
|
};
|
||||||
|
record["id"] = sol::readonly_property(
|
||||||
|
[](const ESM4::Terminal& rec) -> std::string { return ESM::RefId(rec.mId).serializeText(); });
|
||||||
|
record["editorId"]
|
||||||
|
= sol::readonly_property([](const ESM4::Terminal& rec) -> std::string { return rec.mEditorId; });
|
||||||
|
record["text"] = sol::readonly_property([](const ESM4::Terminal& rec) -> std::string { return rec.mText; });
|
||||||
|
record["resultText"]
|
||||||
|
= sol::readonly_property([](const ESM4::Terminal& rec) -> std::string { return rec.mResultText; });
|
||||||
|
record["name"] = sol::readonly_property([](const ESM4::Terminal& rec) -> std::string { return rec.mFullName; });
|
||||||
|
record["model"] = sol::readonly_property([vfs](const ESM4::Terminal& rec) -> std::string {
|
||||||
|
return Misc::ResourceHelpers::correctMeshPath(rec.mModel, vfs);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -48,6 +48,7 @@ namespace MWLua
|
|||||||
constexpr std::string_view ESM4MiscItem = "ESM4Miscellaneous";
|
constexpr std::string_view ESM4MiscItem = "ESM4Miscellaneous";
|
||||||
constexpr std::string_view ESM4Potion = "ESM4Potion";
|
constexpr std::string_view ESM4Potion = "ESM4Potion";
|
||||||
constexpr std::string_view ESM4Static = "ESM4Static";
|
constexpr std::string_view ESM4Static = "ESM4Static";
|
||||||
|
constexpr std::string_view ESM4Terminal = "ESM4Terminal";
|
||||||
constexpr std::string_view ESM4Tree = "ESM4Tree";
|
constexpr std::string_view ESM4Tree = "ESM4Tree";
|
||||||
constexpr std::string_view ESM4Weapon = "ESM4Weapon";
|
constexpr std::string_view ESM4Weapon = "ESM4Weapon";
|
||||||
}
|
}
|
||||||
@ -90,6 +91,7 @@ namespace MWLua
|
|||||||
{ ESM::REC_MISC4, ObjectTypeName::ESM4MiscItem },
|
{ ESM::REC_MISC4, ObjectTypeName::ESM4MiscItem },
|
||||||
{ ESM::REC_ALCH4, ObjectTypeName::ESM4Potion },
|
{ ESM::REC_ALCH4, ObjectTypeName::ESM4Potion },
|
||||||
{ ESM::REC_STAT4, ObjectTypeName::ESM4Static },
|
{ ESM::REC_STAT4, ObjectTypeName::ESM4Static },
|
||||||
|
{ ESM::REC_TERM4, ObjectTypeName::ESM4Terminal },
|
||||||
{ ESM::REC_TREE4, ObjectTypeName::ESM4Tree },
|
{ ESM::REC_TREE4, ObjectTypeName::ESM4Tree },
|
||||||
{ ESM::REC_WEAP4, ObjectTypeName::ESM4Weapon },
|
{ ESM::REC_WEAP4, ObjectTypeName::ESM4Weapon },
|
||||||
};
|
};
|
||||||
@ -227,6 +229,7 @@ namespace MWLua
|
|||||||
addType(ObjectTypeName::ESM4MiscItem, { ESM::REC_MISC4 });
|
addType(ObjectTypeName::ESM4MiscItem, { ESM::REC_MISC4 });
|
||||||
addType(ObjectTypeName::ESM4Potion, { ESM::REC_ALCH4 });
|
addType(ObjectTypeName::ESM4Potion, { ESM::REC_ALCH4 });
|
||||||
addType(ObjectTypeName::ESM4Static, { ESM::REC_STAT4 });
|
addType(ObjectTypeName::ESM4Static, { ESM::REC_STAT4 });
|
||||||
|
addESM4TerminalBindings(addType(ObjectTypeName::ESM4Terminal, { ESM::REC_TERM4 }), context);
|
||||||
addType(ObjectTypeName::ESM4Tree, { ESM::REC_TREE4 });
|
addType(ObjectTypeName::ESM4Tree, { ESM::REC_TREE4 });
|
||||||
addType(ObjectTypeName::ESM4Weapon, { ESM::REC_WEAP4 });
|
addType(ObjectTypeName::ESM4Weapon, { ESM::REC_WEAP4 });
|
||||||
|
|
||||||
|
@ -68,6 +68,7 @@ namespace MWLua
|
|||||||
void addLevelledCreatureBindings(sol::table list, const Context& context);
|
void addLevelledCreatureBindings(sol::table list, const Context& context);
|
||||||
|
|
||||||
void addESM4DoorBindings(sol::table door, const Context& context);
|
void addESM4DoorBindings(sol::table door, const Context& context);
|
||||||
|
void addESM4TerminalBindings(sol::table term, const Context& context);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void addRecordFunctionBinding(
|
void addRecordFunctionBinding(
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
#include <components/esm4/loadnpc.hpp>
|
#include <components/esm4/loadnpc.hpp>
|
||||||
#include <components/esm4/loadrefr.hpp>
|
#include <components/esm4/loadrefr.hpp>
|
||||||
#include <components/esm4/loadstat.hpp>
|
#include <components/esm4/loadstat.hpp>
|
||||||
|
#include <components/esm4/loadterm.hpp>
|
||||||
#include <components/esm4/loadtree.hpp>
|
#include <components/esm4/loadtree.hpp>
|
||||||
#include <components/esm4/loadweap.hpp>
|
#include <components/esm4/loadweap.hpp>
|
||||||
#include <components/esm4/readerutils.hpp>
|
#include <components/esm4/readerutils.hpp>
|
||||||
|
@ -72,6 +72,7 @@ namespace ESM4
|
|||||||
struct Furniture;
|
struct Furniture;
|
||||||
struct Ingredient;
|
struct Ingredient;
|
||||||
struct MiscItem;
|
struct MiscItem;
|
||||||
|
struct Terminal;
|
||||||
struct Tree;
|
struct Tree;
|
||||||
struct Weapon;
|
struct Weapon;
|
||||||
struct Creature;
|
struct Creature;
|
||||||
@ -92,9 +93,9 @@ namespace MWWorld
|
|||||||
|
|
||||||
CellRefList<ESM4::Static>, CellRefList<ESM4::Light>, CellRefList<ESM4::Activator>, CellRefList<ESM4::Potion>,
|
CellRefList<ESM4::Static>, CellRefList<ESM4::Light>, CellRefList<ESM4::Activator>, CellRefList<ESM4::Potion>,
|
||||||
CellRefList<ESM4::Ammunition>, CellRefList<ESM4::Armor>, CellRefList<ESM4::Book>, CellRefList<ESM4::Clothing>,
|
CellRefList<ESM4::Ammunition>, CellRefList<ESM4::Armor>, CellRefList<ESM4::Book>, CellRefList<ESM4::Clothing>,
|
||||||
CellRefList<ESM4::Container>, CellRefList<ESM4::Door>, CellRefList<ESM4::Ingredient>, CellRefList<ESM4::Tree>,
|
CellRefList<ESM4::Container>, CellRefList<ESM4::Door>, CellRefList<ESM4::Ingredient>,
|
||||||
CellRefList<ESM4::MiscItem>, CellRefList<ESM4::Weapon>, CellRefList<ESM4::Furniture>,
|
CellRefList<ESM4::Terminal>, CellRefList<ESM4::Tree>, CellRefList<ESM4::MiscItem>, CellRefList<ESM4::Weapon>,
|
||||||
CellRefList<ESM4::Creature>, CellRefList<ESM4::Npc>>;
|
CellRefList<ESM4::Furniture>, CellRefList<ESM4::Creature>, CellRefList<ESM4::Npc>>;
|
||||||
|
|
||||||
/// \brief Mutable state of a cell
|
/// \brief Mutable state of a cell
|
||||||
class CellStore
|
class CellStore
|
||||||
|
@ -293,6 +293,7 @@ namespace MWWorld
|
|||||||
case ESM::REC_MISC4:
|
case ESM::REC_MISC4:
|
||||||
case ESM::REC_NPC_4:
|
case ESM::REC_NPC_4:
|
||||||
case ESM::REC_STAT4:
|
case ESM::REC_STAT4:
|
||||||
|
case ESM::REC_TERM4:
|
||||||
case ESM::REC_TREE4:
|
case ESM::REC_TREE4:
|
||||||
case ESM::REC_WEAP4:
|
case ESM::REC_WEAP4:
|
||||||
return true;
|
return true;
|
||||||
|
@ -102,6 +102,7 @@ namespace ESM4
|
|||||||
struct Race;
|
struct Race;
|
||||||
struct Reference;
|
struct Reference;
|
||||||
struct Static;
|
struct Static;
|
||||||
|
struct Terminal;
|
||||||
struct Tree;
|
struct Tree;
|
||||||
struct Weapon;
|
struct Weapon;
|
||||||
struct World;
|
struct World;
|
||||||
@ -139,7 +140,7 @@ namespace MWWorld
|
|||||||
Store<ESM4::HeadPart>, Store<ESM4::Ingredient>, Store<ESM4::Land>, Store<ESM4::LevelledCreature>,
|
Store<ESM4::HeadPart>, Store<ESM4::Ingredient>, Store<ESM4::Land>, Store<ESM4::LevelledCreature>,
|
||||||
Store<ESM4::LevelledItem>, Store<ESM4::LevelledNpc>, Store<ESM4::Light>, Store<ESM4::MiscItem>,
|
Store<ESM4::LevelledItem>, Store<ESM4::LevelledNpc>, Store<ESM4::Light>, Store<ESM4::MiscItem>,
|
||||||
Store<ESM4::Npc>, Store<ESM4::Outfit>, Store<ESM4::Potion>, Store<ESM4::Race>, Store<ESM4::Reference>,
|
Store<ESM4::Npc>, Store<ESM4::Outfit>, Store<ESM4::Potion>, Store<ESM4::Race>, Store<ESM4::Reference>,
|
||||||
Store<ESM4::Static>, Store<ESM4::Tree>, Store<ESM4::Weapon>, Store<ESM4::World>>;
|
Store<ESM4::Static>, Store<ESM4::Terminal>, Store<ESM4::Tree>, Store<ESM4::Weapon>, Store<ESM4::World>>;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -91,6 +91,9 @@ MWWorld::ManualRef::ManualRef(const MWWorld::ESMStore& store, const ESM::RefId&
|
|||||||
case ESM::REC_STAT4:
|
case ESM::REC_STAT4:
|
||||||
create(store.get<ESM4::Static>(), name, mRef, mPtr);
|
create(store.get<ESM4::Static>(), name, mRef, mPtr);
|
||||||
break;
|
break;
|
||||||
|
case ESM::REC_TERM4:
|
||||||
|
create(store.get<ESM4::Terminal>(), name, mRef, mPtr);
|
||||||
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
throw std::logic_error("failed to create manual cell ref for " + name.toDebugString() + " (unknown ID)");
|
throw std::logic_error("failed to create manual cell ref for " + name.toDebugString() + " (unknown ID)");
|
||||||
|
|
||||||
|
@ -1400,6 +1400,7 @@ template class MWWorld::TypedDynamicStore<ESM4::Outfit>;
|
|||||||
template class MWWorld::TypedDynamicStore<ESM4::Potion>;
|
template class MWWorld::TypedDynamicStore<ESM4::Potion>;
|
||||||
template class MWWorld::TypedDynamicStore<ESM4::Race>;
|
template class MWWorld::TypedDynamicStore<ESM4::Race>;
|
||||||
template class MWWorld::TypedDynamicStore<ESM4::Static>;
|
template class MWWorld::TypedDynamicStore<ESM4::Static>;
|
||||||
|
template class MWWorld::TypedDynamicStore<ESM4::Terminal>;
|
||||||
template class MWWorld::TypedDynamicStore<ESM4::Tree>;
|
template class MWWorld::TypedDynamicStore<ESM4::Tree>;
|
||||||
template class MWWorld::TypedDynamicStore<ESM4::Weapon>;
|
template class MWWorld::TypedDynamicStore<ESM4::Weapon>;
|
||||||
template class MWWorld::TypedDynamicStore<ESM4::World>;
|
template class MWWorld::TypedDynamicStore<ESM4::World>;
|
||||||
|
@ -70,6 +70,7 @@
|
|||||||
#include <components/esm4/loadrace.hpp>
|
#include <components/esm4/loadrace.hpp>
|
||||||
#include <components/esm4/loadrefr.hpp>
|
#include <components/esm4/loadrefr.hpp>
|
||||||
#include <components/esm4/loadstat.hpp>
|
#include <components/esm4/loadstat.hpp>
|
||||||
|
#include <components/esm4/loadterm.hpp>
|
||||||
#include <components/esm4/loadtree.hpp>
|
#include <components/esm4/loadtree.hpp>
|
||||||
#include <components/esm4/loadweap.hpp>
|
#include <components/esm4/loadweap.hpp>
|
||||||
#include <components/esm4/loadwrld.hpp>
|
#include <components/esm4/loadwrld.hpp>
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
#include "reader.hpp"
|
#include "reader.hpp"
|
||||||
//#include "writer.hpp"
|
// #include "writer.hpp"
|
||||||
|
|
||||||
void ESM4::Terminal::load(ESM4::Reader& reader)
|
void ESM4::Terminal::load(ESM4::Reader& reader)
|
||||||
{
|
{
|
||||||
@ -69,7 +69,7 @@ void ESM4::Terminal::load(ESM4::Reader& reader)
|
|||||||
case ESM4::SUB_ANAM: // flags
|
case ESM4::SUB_ANAM: // flags
|
||||||
case ESM4::SUB_CTDA:
|
case ESM4::SUB_CTDA:
|
||||||
case ESM4::SUB_INAM:
|
case ESM4::SUB_INAM:
|
||||||
case ESM4::SUB_ITXT:
|
case ESM4::SUB_ITXT: // Menu Item
|
||||||
case ESM4::SUB_MODT: // texture hash?
|
case ESM4::SUB_MODT: // texture hash?
|
||||||
case ESM4::SUB_SCDA:
|
case ESM4::SUB_SCDA:
|
||||||
case ESM4::SUB_SCHR:
|
case ESM4::SUB_SCHR:
|
||||||
|
@ -1625,6 +1625,9 @@
|
|||||||
--- Functions for @{#ESM4Door} objects
|
--- Functions for @{#ESM4Door} objects
|
||||||
-- @field [parent=#types] #ESM4Door ESM4Door
|
-- @field [parent=#types] #ESM4Door ESM4Door
|
||||||
|
|
||||||
|
--- Functions for @{#ESM4Terminal} objects
|
||||||
|
-- @field [parent=#types] #ESM4Terminal ESM4Terminal
|
||||||
|
|
||||||
--- Functions for @{#ESM4Ingredient} objects
|
--- Functions for @{#ESM4Ingredient} objects
|
||||||
-- @field [parent=#types] #ESM4Ingredient ESM4Ingredient
|
-- @field [parent=#types] #ESM4Ingredient ESM4Ingredient
|
||||||
|
|
||||||
@ -1643,6 +1646,31 @@
|
|||||||
--- Functions for @{#ESM4Weapon} objects
|
--- Functions for @{#ESM4Weapon} objects
|
||||||
-- @field [parent=#types] #ESM4Weapon ESM4Weapon
|
-- @field [parent=#types] #ESM4Weapon ESM4Weapon
|
||||||
|
|
||||||
|
---
|
||||||
|
-- @type ESM4Terminal
|
||||||
|
-- @field #list<#ESM4TerminalRecord> records A read-only list of all @{#ESM4TerminalRecord}s in the world database.
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Whether the object is a ESM4Terminal.
|
||||||
|
-- @function [parent=#ESM4Terminal] objectIsInstance
|
||||||
|
-- @param openmw.core#GameObject object
|
||||||
|
-- @return #boolean
|
||||||
|
|
||||||
|
---
|
||||||
|
-- Returns the read-only @{#ESM4TerminalRecord} of a terminal
|
||||||
|
-- @function [parent=#ESM4Terminal] record
|
||||||
|
-- @param #any objectOrRecordId
|
||||||
|
-- @return #ESM4TerminalRecord
|
||||||
|
|
||||||
|
---
|
||||||
|
-- @type ESM4TerminalRecord
|
||||||
|
-- @field #string id Record id (Form ID)
|
||||||
|
-- @field #string editorId Human-readable ID
|
||||||
|
-- @field #string name Human-readable name
|
||||||
|
-- @field #string model VFS path to the model
|
||||||
|
-- @field #string text Text body of the terminal record
|
||||||
|
-- @field #string resultText Result text of the terminal record
|
||||||
|
|
||||||
---
|
---
|
||||||
-- @type ESM4Door
|
-- @type ESM4Door
|
||||||
-- @extends #Lockable
|
-- @extends #Lockable
|
||||||
|
Loading…
x
Reference in New Issue
Block a user