-- ScriptCompassTrue.lua
-- Script for Compass Tru addon
-- 19:05 23.01.2009
--------------------------------------------------------------------------------
-- GLOBALS
--------------------------------------------------------------------------------
-- CONSTANTS
Global( "HALF_PI", math.pi / 2 )
Global( "ZERO_ALPHA_ANGLE", math.pi / 3 )
-- WIDGETS
Global( "wtArrow", {} )
Global( "wtShadow", {} )
Global( "wtCompass", {} )
Global( "wtLabel", {} )
-- FUNCTIONS
Global( "onBase", {} )
Global( "onReaction", {} )
--------------------------------------------------------------------------------
function Update()
local angle = -1 * mission.GetCameraDirection() + HALF_PI
wtArrow:Rotate( angle )
wtShadow:Rotate( angle )
angle = RollNumberToRange( angle - ZERO_ALPHA_ANGLE, -math.pi, math.pi )
local alpha = - ( math.cos( angle ) - 1 ) / 2
wtArrow:SetForegroundColor( { a = alpha, r = 1, g = 1, b = 1 } )
end
--------------------------------------------------------------------------------
function ShowZoneInfo()
local zone = cartographer.GetCurrentZone()
wtLabel:SetVal( "value", IsValidWs( zone.subZoneName ) and zone.subZoneName or ValidateWs( zone.zoneName ) )
end
--------------------------------------------------------------------------------
-- EVENT HANDLERS
--------------------------------------------------------------------------------
onReaction[ "compass_over" ] = function( reaction )
if reaction.active then
local zone = cartographer.GetCurrentZone()
local tooltip = {
tooltip = TOOLTIP_SIMPLEDESC,
name = ValidateWs( zone.allod ),
desc = ValidateWs( zone.zoneName ),
rect = wtCompass:GetRealRect(),
[ 3 ] = { type = TOOLTIP_CONTENT.SMART_LINE, ( IsValidWs( zone.subZoneName ) and { value = zone.subZoneName, style = "header" } or nil )
}
}
-- Запредельный СМЕРШ
local pos = avatar.GetPos()
local wstrLocX = common.FormatFloat( pos.globalX+pos.localX/32, "%.2f")
local wstrLocY = common.FormatFloat( pos.globalY+pos.localY/32, "%.2f")
tooltip [ 4 ] = { type = TOOLTIP_CONTENT.SEPARATOR, { active = true } }
tooltip [ 5 ] = { type = TOOLTIP_CONTENT.SMART_LINE, { value = wstrLocX , style = "Epic" } }
tooltip [ 6 ] = { type = TOOLTIP_CONTENT.SMART_LINE, { value = wstrLocY , style = "Epic" } }
-- end Запредельный СМЕРШ
common.SendEvent( "SCRIPT_REQUEST_CONTEXT_TOOLTIP", tooltip )
else
common.SendEvent( "SCRIPT_HIDE_CONTEXT_TOOLTIP", {} )
end
end
--------------------------------------------------------------------------------
onReaction[ "compass_pressed" ] = function( reaction )
local map = cartographer.GetCurrentMap()
common.SendEvent( map and not map.isTerrain and "SCRIPT_TOGGLE_ASTRALMAP" or "SCRIPT_TOGGLE_WORLDMAP", {} )
end
--------------------------------------------------------------------------------
onBase[ "EVENT_CAMERA_DIRECTION_CHANGED" ] = Update
onBase[ "EVENT_SECOND_TIMER" ] = Update
onBase[ "EVENT_AVATAR_CLIENT_ZONE_CHANGED" ] = ShowZoneInfo
--------------------------------------------------------------------------------
-- RESOURCES SETUP
--------------------------------------------------------------------------------
function RegisterEventHandlers( handlers )
for event, handler in handlers do
--trace( "event = ", event )
common.RegisterEventHandler( handler, event )
end
end
--------------------------------------------------------------------------------
function RegisterReactionHandlers( reactions )
for reaction, handler in reactions do
--trace( "reaction = ", reaction )
common.RegisterReactionHandler( handler, reaction )
end
end
--------------------------------------------------------------------------------
function GetWidgets()
local wtFrame = mainForm:GetChildChecked( "Frame", false )
wtArrow = wtFrame:GetChildChecked( "Arrow", false )
wtShadow = wtFrame:GetChildChecked( "Shadow", false )
wtCompass = wtFrame:GetChildChecked( "Title", false ):GetChildChecked( "Label", false ) -- Запредельный СМЕРШ
--wtCompass = wtFrame:GetChildChecked( "Compass", false ) -- Запредельный СМЕРШ
wtLabel = wtFrame:GetChildChecked( "Title", false ):GetChildChecked( "Label", false )
end
--------------------------------------------------------------------------------
-- INITIALIZATION
--------------------------------------------------------------------------------
function Init()
RegisterLayoutManagedAddon( { type = ADDON_TYPE_HUD, side = SCREEN_SIDE_TOP } )
RegisterEventHandlers( onBase )
RegisterReactionHandlers( onReaction )
GetWidgets()
end
--------------------------------------------------------------------------------
Init()