class ProjectedCrosshair extends ScriptedWidgetEventHandler { protected Widget m_Root; protected vector m_Position; protected bool m_Visible; protected bool m_Debug; protected PlayerBase m_Player; protected Weapon_Base m_Weapon; void ProjectedCrosshair() { m_Player = NULL; m_Weapon = NULL; m_Visible = false; m_Debug = false; GetGame().GetUpdateQueue(CALL_CATEGORY_GUI).Insert(this.Update); } void ~ProjectedCrosshair() { GetGame().GetUpdateQueue(CALL_CATEGORY_GUI).Remove(this.Update); } void OnWidgetScriptInit(Widget w) { m_Root = w; m_Root.SetHandler(this); m_Root.Update(); } //! Update protected void Update() { #ifdef DIAG_DEVELOPER m_Debug = DiagMenu.GetBool( DiagMenuIDs.WEAPON_DEBUG ); #endif if (!m_Debug) return; if (!m_Player) GetPlayer(); if ( m_Player && m_Player.IsPlayerSelected() && m_Player.IsRaised() && !m_Player.IsInIronsights() && !GetGame().IsInventoryOpen() ) { float sx, sy; GetCrosshairPosition(); vector screenSpace = GetGame().GetScreenPos(m_Position); m_Root.GetSize(sx, sy); screenSpace[0] = screenSpace[0] - sx/2; screenSpace[1] = screenSpace[1] - sy/2; m_Root.SetPos(screenSpace[0], screenSpace[1]); m_Root.Show(m_Visible); } else { m_Root.Show(false); m_Position = vector.Zero; } } // getters protected void GetPlayer() { Class.CastTo(m_Player, GetGame().GetPlayer()); } protected void GetCrosshairPosition() { m_Visible = false; ItemBase itemInHands; itemInHands = m_Player.GetItemInHands(); if ( itemInHands && itemInHands.IsWeapon() ) { if( Class.CastTo(m_Weapon, itemInHands) ) { //m_Visible = MiscGameplayFunctions.GetProjectedCursorPos3d(m_Position, m_Weapon); } } } };