Added: game:onLoadMap lua event to allow override map texture as needed
--HG-- branch : develop
This commit is contained in:
parent
8c51bbc808
commit
4e515eedf0
5 changed files with 153 additions and 4 deletions
42
code/ryzom/client/data/gamedev/interfaces_v3/map.lua
Normal file
42
code/ryzom/client/data/gamedev/interfaces_v3/map.lua
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
--
|
||||||
|
-- custom maps
|
||||||
|
--
|
||||||
|
|
||||||
|
if (game==nil) then
|
||||||
|
game= {};
|
||||||
|
end
|
||||||
|
|
||||||
|
-- alternative textures for maps
|
||||||
|
game.mapTextures = {}
|
||||||
|
-- game.mapTextures["zorai_map.tga"] = "tryker_map.tga"
|
||||||
|
|
||||||
|
-- register alternative texture for map
|
||||||
|
function game:setAltMap(mapName, altMap)
|
||||||
|
self.mapTextures[mapName] = altMap
|
||||||
|
end
|
||||||
|
|
||||||
|
-- remove alternative map texture
|
||||||
|
function game:removeAltMap(mapName)
|
||||||
|
self.mapTextures[mapName] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- map = getUI("ui:interface:map:content:map_content:actual_map")
|
||||||
|
function game:onLoadMap(map)
|
||||||
|
-- debugInfo("onLoadMap(id=".. map.id ..", texture=".. map.texture ..")");
|
||||||
|
|
||||||
|
-- if alt view not enabled
|
||||||
|
if getDbProp("UI:VARIABLES:SHOW_ALT_MAP") == 0 or map:isIsland() then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local texture = map.texture
|
||||||
|
if self.mapTextures[texture] ~= nil then
|
||||||
|
-- debugInfo("-- using ".. self.mapTextures[texture] .." for " .. texture)
|
||||||
|
return self.mapTextures[texture]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- register map overrride
|
||||||
|
-- game:setAltMap("fyros_map.tga", "fyros_map_sp.tga")
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
|
|
||||||
<root id="interface" x="0" y="0" w="800" h="600" active="true" />
|
<root id="interface" x="0" y="0" w="800" h="600" active="true" />
|
||||||
|
|
||||||
|
<lua file="map.lua" />
|
||||||
|
|
||||||
|
<!-- flag for game:onLoadMap() handler to override map texture or not -->
|
||||||
|
<variable entry="UI:VARIABLES:SHOW_ALT_MAP" type="bool" value="0" />
|
||||||
|
|
||||||
<!-- base menu of landmark -->
|
<!-- base menu of landmark -->
|
||||||
<group type="menu" id="land_mark_menu" extends="base_menu">
|
<group type="menu" id="land_mark_menu" extends="base_menu">
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "../sheet_manager.h" // for MaxNumPeopleInTeam
|
#include "../sheet_manager.h" // for MaxNumPeopleInTeam
|
||||||
#include "../global.h"
|
#include "../global.h"
|
||||||
#include "nel/gui/ctrl_quad.h"
|
#include "nel/gui/ctrl_quad.h"
|
||||||
|
#include "nel/gui/lua_ihm.h"
|
||||||
//
|
//
|
||||||
#include "nel/misc/xml_auto_ptr.h"
|
#include "nel/misc/xml_auto_ptr.h"
|
||||||
#include "game_share/mission_desc.h"
|
#include "game_share/mission_desc.h"
|
||||||
|
@ -403,6 +404,7 @@ CGroupMap::CGroupMap(const TCtorParam ¶m)
|
||||||
_MaxH = 2000;
|
_MaxH = 2000;
|
||||||
//_MinW = 50;
|
//_MinW = 50;
|
||||||
_MapTF = NULL;
|
_MapTF = NULL;
|
||||||
|
_MapTexture.clear();
|
||||||
_PlayerPosMaterial = NULL;
|
_PlayerPosMaterial = NULL;
|
||||||
_PlayerPosTF = NULL;
|
_PlayerPosTF = NULL;
|
||||||
_MapTexW = 0;
|
_MapTexW = 0;
|
||||||
|
@ -462,6 +464,8 @@ CGroupMap::CGroupMap(const TCtorParam ¶m)
|
||||||
_PanStartDateInMs = 0;
|
_PanStartDateInMs = 0;
|
||||||
_DeltaTimeBeforePanInMs = 0;
|
_DeltaTimeBeforePanInMs = 0;
|
||||||
_DeltaPosBeforePan = 0;
|
_DeltaPosBeforePan = 0;
|
||||||
|
//
|
||||||
|
_LuaLoadMapEntered = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//============================================================================================================
|
//============================================================================================================
|
||||||
|
@ -2070,16 +2074,62 @@ void CGroupMap::loadPlayerPos()
|
||||||
_PlayerPosMaterial.setTexture(_PlayerPosTF);
|
_PlayerPosMaterial.setTexture(_PlayerPosTF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//============================================================================================================
|
||||||
|
void CGroupMap::reload()
|
||||||
|
{
|
||||||
|
if (!_CurMap || !getActive()) return;
|
||||||
|
|
||||||
|
SMap* current = _CurMap;
|
||||||
|
_CurMap = NULL;
|
||||||
|
|
||||||
|
setMap(current);
|
||||||
|
}
|
||||||
|
|
||||||
//============================================================================================================
|
//============================================================================================================
|
||||||
void CGroupMap::loadMap()
|
void CGroupMap::loadMap()
|
||||||
{
|
{
|
||||||
_MapLoadFailure = true;
|
_MapLoadFailure = true;
|
||||||
if (!_CurMap) return;
|
if (!_CurMap) return;
|
||||||
const std::string &mapName = _CurMap->BitmapName;
|
|
||||||
std::string fullName = NLMISC::CPath::lookup(mapName, false, false);
|
_MapTexture = _CurMap->BitmapName;
|
||||||
|
|
||||||
|
// call lua game:onLoadMap() function if present
|
||||||
|
// avoid deadlock if called recursively
|
||||||
|
if (!_LuaLoadMapEntered)
|
||||||
|
{
|
||||||
|
_LuaLoadMapEntered = true;
|
||||||
|
CLuaState *ls = CLuaManager::getInstance().getLuaState();
|
||||||
|
|
||||||
|
CLuaStackRestorer lsr(ls, ls->getTop());
|
||||||
|
ls->pushGlobalTable();
|
||||||
|
|
||||||
|
CLuaObject game(*ls);
|
||||||
|
game = game["game"];
|
||||||
|
if (!game["onLoadMap"].isNil())
|
||||||
|
{
|
||||||
|
uint numArg = 1;
|
||||||
|
uint numResult = 1;
|
||||||
|
|
||||||
|
CLuaIHM::pushReflectableOnStack(*ls, this);
|
||||||
|
if (game.callMethodByNameNoThrow("onLoadMap", numArg, numResult))
|
||||||
|
{
|
||||||
|
if (ls->isString(1))
|
||||||
|
{
|
||||||
|
if (!NLMISC::CPath::lookup(ls->toString(1), false, false).empty())
|
||||||
|
_MapTexture = ls->toString(1);
|
||||||
|
else
|
||||||
|
nlwarning("Custom map texture not found '%s' for map '%s'", ls->toString(1), _MapTexture.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_LuaLoadMapEntered = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string fullName = NLMISC::CPath::lookup(_MapTexture, false, false);
|
||||||
if (fullName.empty())
|
if (fullName.empty())
|
||||||
{
|
{
|
||||||
nlwarning("Can't find map %s", mapName.c_str());
|
nlwarning("Can't find map %s", _MapTexture.c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint32 w, h;
|
uint32 w, h;
|
||||||
|
@ -2098,7 +2148,7 @@ void CGroupMap::loadMap()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nlwarning("Can't open map %s", mapName.c_str());
|
nlwarning("Can't open map %s", _MapTexture.c_str());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_MapTF = Driver->createTextureFile(fullName);
|
_MapTF = Driver->createTextureFile(fullName);
|
||||||
|
@ -3322,6 +3372,36 @@ SMap *CGroupMap::getParentMap(SMap *map)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=========================================================================================================
|
||||||
|
std::string CGroupMap::getContinentName() const
|
||||||
|
{
|
||||||
|
if (_CurMap == NULL) return "";
|
||||||
|
|
||||||
|
return toLower(_CurMap->ContinentName);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================================================================================
|
||||||
|
std::string CGroupMap::getMapTexture() const
|
||||||
|
{
|
||||||
|
return toLower(_MapTexture);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================================================================================
|
||||||
|
int CGroupMap::luaReload(CLuaState &ls)
|
||||||
|
{
|
||||||
|
CLuaIHM::checkArgCount(ls, "reload", 0);
|
||||||
|
reload();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=========================================================================================================
|
||||||
|
int CGroupMap::luaIsIsland(CLuaState &ls)
|
||||||
|
{
|
||||||
|
CLuaIHM::checkArgCount(ls, "isIsland", 0);
|
||||||
|
ls.push(_IsIsland);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/////////////////////
|
/////////////////////
|
||||||
// ACTION HANDLERS //
|
// ACTION HANDLERS //
|
||||||
|
|
|
@ -114,6 +114,17 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void onUpdate(CGroupMap &/* owner */) {}
|
virtual void onUpdate(CGroupMap &/* owner */) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
REFLECT_EXPORT_START(CGroupMap, CInterfaceGroup)
|
||||||
|
REFLECT_STRING("continent", getContinentName, dummySet);
|
||||||
|
REFLECT_STRING("texture", getMapTexture, dummySet);
|
||||||
|
REFLECT_LUA_METHOD("isIsland", luaIsIsland);
|
||||||
|
REFLECT_LUA_METHOD("reload", luaReload);
|
||||||
|
REFLECT_EXPORT_END
|
||||||
|
|
||||||
|
int luaReload(CLuaState &ls);
|
||||||
|
int luaIsIsland(CLuaState &ls);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CGroupMap(const TCtorParam ¶m);
|
CGroupMap(const TCtorParam ¶m);
|
||||||
virtual ~CGroupMap();
|
virtual ~CGroupMap();
|
||||||
|
@ -134,6 +145,14 @@ public:
|
||||||
void setMap(const std::string &mapName);
|
void setMap(const std::string &mapName);
|
||||||
void setMap(SMap *map);
|
void setMap(SMap *map);
|
||||||
|
|
||||||
|
// return current continent
|
||||||
|
std::string getContinentName() const;
|
||||||
|
// return currently displayed map texture
|
||||||
|
std::string getMapTexture() const;
|
||||||
|
|
||||||
|
// reload current map texture
|
||||||
|
void reload();
|
||||||
|
|
||||||
// pan the map of the given number of pixels
|
// pan the map of the given number of pixels
|
||||||
void pan(sint32 dx, sint32 dy);
|
void pan(sint32 dx, sint32 dy);
|
||||||
|
|
||||||
|
@ -323,6 +342,7 @@ private:
|
||||||
CContinent *_CurContinent; // the last continent for which the map was displayed (can be NULL if world)
|
CContinent *_CurContinent; // the last continent for which the map was displayed (can be NULL if world)
|
||||||
NLMISC::CVector2f _MapMinCorner; // In world coordinates
|
NLMISC::CVector2f _MapMinCorner; // In world coordinates
|
||||||
NLMISC::CVector2f _MapMaxCorner;
|
NLMISC::CVector2f _MapMaxCorner;
|
||||||
|
std::string _MapTexture; // currently displayed map texture
|
||||||
|
|
||||||
bool _IsIsland; // true if current map is an island (island bitmap need not to be raised to the next
|
bool _IsIsland; // true if current map is an island (island bitmap need not to be raised to the next
|
||||||
// power of 2
|
// power of 2
|
||||||
|
@ -499,6 +519,8 @@ private:
|
||||||
// r2 islands
|
// r2 islands
|
||||||
std::vector<SMap> _Islands;
|
std::vector<SMap> _Islands;
|
||||||
|
|
||||||
|
// guard against recursive calls
|
||||||
|
bool _LuaLoadMapEntered;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void loadPlayerPos();
|
void loadPlayerPos();
|
||||||
|
|
|
@ -34,6 +34,7 @@ void registerInterfaceElements()
|
||||||
CViewPointerRyzom::forceLinking();
|
CViewPointerRyzom::forceLinking();
|
||||||
|
|
||||||
REGISTER_REFLECTABLE_CLASS(CViewRadar, CViewBase);
|
REGISTER_REFLECTABLE_CLASS(CViewRadar, CViewBase);
|
||||||
|
REGISTER_REFLECTABLE_CLASS(CGroupMap, CInterfaceGroup);
|
||||||
REGISTER_REFLECTABLE_CLASS(CDBCtrlSheet, CCtrlDraggable);
|
REGISTER_REFLECTABLE_CLASS(CDBCtrlSheet, CCtrlDraggable);
|
||||||
REGISTER_REFLECTABLE_CLASS(IListSheetBase, CInterfaceGroup);
|
REGISTER_REFLECTABLE_CLASS(IListSheetBase, CInterfaceGroup);
|
||||||
REGISTER_REFLECTABLE_CLASS(CInterface3DScene, CInterfaceGroup);
|
REGISTER_REFLECTABLE_CLASS(CInterface3DScene, CInterfaceGroup);
|
||||||
|
|
Loading…
Reference in a new issue