2
When the user is logged in as admin we want to show a special admin menu which contains options for showing various widgets and tools specially suited for admins.
3
We'll use the existing icon bar and add a new icon to it, so the MainIconBar.lua script must be loaded.
4
The creation of the amdmin menu is delayed until we've actually logged in as an admin; if not it will never be created.
7
Admin = {connectors={}, adminIcon=nil}
9
--adds a standard menu item to the main popup menu.
10
function Admin.addMenuItem(labelText, clickMethod, tooltipText)
11
local menuItem = windowManager:createWindow("EmberLook/MenuItem")
12
menuItem:setText(labelText)
13
menuItem:subscribeEvent("Clicked", clickMethod)
14
menuItem:setTooltipText(tooltipText)
15
Admin.popup:addChildWindow(menuItem)
20
Add an icon to the icon bar and build a popup menu which will be shown when the icon is clicked
22
function Admin.buildWidget()
24
if MainIconBar.addIcon ~= nil then
25
--we'll use the "spell" icon from the "iconset_mason" for now until we get a better icon
26
local foreground = EmberOgre.Gui.IconBase:loadImageFromImageset("iconset_mason", "spell")
27
Admin.adminIcon = MainIconBar.addIcon("admin", foreground, "Click here to access the admin menu.")
28
Admin.adminIcon:getButton():subscribeEvent("MouseClick", "Admin.admin_MouseClick")
30
Admin.popup = windowManager:createWindow("EmberLook/PopupMenu")
31
Admin.popup = CEGUI.toPopupMenu(Admin.popup)
32
Admin.popup:subscribeEvent("MouseLeave", "Admin.popupMenu_MouseLeaves")
34
Admin.addMenuItem("Model editor", "Admin.ModelEditor_Click", "Shows the model editor.")
35
Admin.addMenuItem("Terrain editor", "Admin.TerrainEditor_Click", "Shows the terrain editor.")
36
Admin.addMenuItem("Switch camera", "Admin.SwitchCamera_Click", "Switches camera mode between free flying and attached to the avatar.")
37
Admin.addMenuItem("Entity creator", "Admin.EntityCreator_Click", "Shows the entity creator.")
38
Admin.addMenuItem("Script editor", "Admin.ScriptEditor_Click", "Shows the script editor.")
39
Admin.addMenuItem("Entity browser", "Admin.EntityBrowser_Click", "Shows the entity browser.")
40
Admin.addMenuItem("Assets manager", "Admin.AssetsManager_Click", "Shows the assets manager.")
41
Admin.addMenuItem("Picking info", "Admin.PickingInfo_Click", "Shows mouse picking info.")
44
root:addChildWindow(Admin.popup)
48
--hide the menu when the mouse leaves it
49
function Admin.popupMenu_MouseLeaves(args)
50
--only hide if we're not moved to another menu item
51
local mousePosition = CEGUI.MouseCursor:getSingleton():getPosition()
52
local windowUnderTheCursor = Admin.popup:getTargetChildAtPosition(mousePosition)
53
if windowUnderTheCursor == nil then
54
Admin.popup:closePopupMenu()
60
Show the admin menu at the mouse position
62
function Admin.admin_MouseClick(args)
63
Admin.popup:openPopupMenu()
65
--[[ local adminContainer = Admin.adminIcon:getContainer()
66
local x = adminContainer:getXPosition():asAbsolute(0) + (adminContainer:getWidth():asAbsolute(0) * 0.5)
67
local y = adminContainer:getYPosition():asAbsolute(0) - Admin.popup.getHeight():asAbsolute(0);]]
69
local mousePosition = CEGUI.MouseCursor:getSingleton():getPosition()
70
local x = mousePosition.x - Admin.popup:getWidth():asAbsolute(0) * 0.5
71
local y = mousePosition.y - Admin.popup:getHeight():asAbsolute(0) + 5
73
local uPosition = CEGUI.UVector2:new_local(CEGUI.UDim(0,x), CEGUI.UDim(0,y))
75
Admin.popup:setPosition(uPosition)
76
Admin.popup:moveToFront()
80
function Admin.ModelEditor_Click(args)
81
console:runCommand("/show_modelEdit")
84
function Admin.TerrainEditor_Click(args)
85
if TerrainEditor == nil then
86
loadScript("TerrainEditor.lua")
88
console:runCommand("/show_terrainEditor")
92
function Admin.SwitchCamera_Click(args)
93
console:runCommand("/toggle_cameraattached")
96
function Admin.EntityCreator_Click(args)
97
console:runCommand("/show_advEntityCreator")
100
function Admin.ScriptEditor_Click(args)
101
console:runCommand("/show_scriptEdit")
104
function Admin.EntityBrowser_Click(args)
105
console:runCommand("/show_entityBrowser")
108
function Admin.AssetsManager_Click(args)
109
console:runCommand("/show_assetsManager")
112
function Admin.PickingInfo_Click(args)
113
console:runCommand("/show_pickingInfo")
116
--only show the admin menu if we're logged in as an admin
117
function Admin.createdAvatarEmberEntity(avatarEntity)
118
if avatarEntity:getAvatar():isAdmin() then
123
--listen for when we've gotten an avatar entity, and see if we're admin
124
connect(Admin.connectors, emberOgre.EventCreatedAvatarEntity, "Admin.createdAvatarEmberEntity")