#include "MW4Headers.hpp" #include "GUILightAmp.hpp" #include #include #include #include #include using MidLevelRenderer::MLRTexturePool; using MidLevelRenderer::MLRTexture; //ElementRenderer::CameraElement *GUILightAmp::s_Camera = NULL; //bool GUILightAmp::s_MarkForAttach = false; //####################################################################### //########################### GUIWeaponManager ##################### //####################################################################### //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // GUILightAmp::GUILightAmp() : Plug(Plug::DefaultData), m_screenTiles(NULL), s_Camera(NULL) { s_MarkForAttach = false; m_CurrentMod = 0; m_numTiles = 0; isShown = false; m_LastScreenX = 0; m_LastScreenY = 0; ChangeResolution(); Hide(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // GUILightAmp::~GUILightAmp() { if(m_screenTiles.GetCurrent()) { delete m_screenTiles.GetCurrent(); m_screenTiles.Remove(); } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void GUILightAmp::Initialize() { Check_Object(this); s_MarkForAttach = false; m_numTiles = 0; isShown = false; ChangeResolution(); Hide(); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void GUILightAmp::SetModifier (Stuff::Scalar mod) { m_CurrentMod = mod; SetupTiles (); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void GUILightAmp::SetupTiles (void) { Scalar left,right; Scalar top; left = m_CurrentMod * 16.0f; left = (Scalar) floor (left); Clamp (left,0,15); right = left + 1; left *= 0.0625f; right *= 0.0625f; top = 0; Scalar TOffset=gos_GetMachineInformation(gos_Info_TextureOffset) ? 0.0f : 0.5f; for(int i=0; i *poly_UVs; bool *poly_status; Vector4D corners[4]; RGBAColor colors[4]; Vector2DOf UVs[4]; m_screenTiles.GetCurrent()->GetQuadData( i, &poly_corners, &poly_colors, &poly_UVs, &poly_status ); colors[0].red = colors[1].red = colors[2].red = colors[3].red = 1.0f; colors[0].green = colors[1].green = colors[2].green = colors[3].green = 1.0f; colors[0].blue = colors[1].blue = colors[2].blue = colors[3].blue = 1.0f; colors[0].alpha = colors[1].alpha = colors[2].alpha = colors[3].alpha = 1.0f; Mem_Copy(poly_colors, colors, 4 * sizeof(RGBAColor), 4 * sizeof(RGBAColor)); UVs[0].x = left; UVs[0].y = 0.0f; UVs[1].x = right; UVs[1].y = 0.0f; UVs[2].x = right; if((i + 1) ), 4 * sizeof(Vector2DOf)); corners[0].x = 0.0f; if(i > 0) corners[0].y = ((top-TOffset) / Environment.screenHeight); else corners[0].y = 0.0f; corners[1].x = 1.0f; corners[1].y = corners[0].y; corners[2].x = 1.0f; if((i + 1) = 256) { m_Left_Over -= 256; m_numTiles++; } gos_PushCurrentHeap(ElementRenderer::ScreenQuadsElement::s_Heap); ElementRenderer::ScreenQuadsElement *screen_tiles = new ElementRenderer::ScreenQuadsElement(m_numTiles); m_screenTiles.Add(screen_tiles); gos_PopCurrentHeap(); SetupTiles (); ElementRenderer::StateChange *state_change = new ElementRenderer::StateChange(); Check_Object(MLRTexturePool::Instance); MLRTexture *quad_texture = (*MLRTexturePool::Instance)("LI", 0); if(!quad_texture) { quad_texture = MLRTexturePool::Instance->Add("LI", 0); } Check_Object(quad_texture); state_change->SetTextureHandle(quad_texture->GetTextureHandle()); // state_change->SetAlphaMode(ElementRenderer::StateChange::AlphaInvAlphaMode); // state_change->SetAlphaMode(MidLevelRenderer::MLRState::OneOneMode); state_change->SetAlphaMode(MidLevelRenderer::MLRState::OneInvAlphaMode); state_change->SetRenderPriority(ElementRenderer::StateChange::HUDPriority0); state_change->DisableBackfaceCulling(); state_change->DisableChildBackfaceControl(); state_change->SetFogMode(ElementRenderer::StateChange::DisableFogMode); state_change->DisableChildFogControl(); state_change->DisableZBufferWrite(); state_change->DisableChildZBufferWriteControl(); state_change->DisableZBufferCompare(); state_change->DisableChildZBufferCompareControl(); state_change->DisableTextureWrap(); state_change->DisableChildTextureWrapControl(); state_change->DisableChildFilterControl (); state_change->SetFilterMode (MidLevelRenderer::MLRStateBase::NoFilterMode); screen_tiles->AdoptStateChange(state_change); if(s_Camera.GetCurrent() && m_screenTiles.GetCurrent ()) { s_Camera.GetCurrent()->AttachChild(m_screenTiles.GetCurrent()); m_screenTiles.GetCurrent()->Sync(); } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void GUILightAmp::Hide() { Check_Object(this); for(int i=0; iSetQuadStatus(i, false); } } isShown = false; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void GUILightAmp::Show() { Check_Object(this); if (!m_screenTiles.GetCurrent ()) { ChangeResolution (); } if (m_screenTiles.GetCurrent ()) { for(int i=0; iSetQuadStatus(i, true); } if(s_MarkForAttach) { s_Camera.GetCurrent()->AttachChild(m_screenTiles.GetCurrent()); m_screenTiles.GetCurrent()->Sync(); s_MarkForAttach = false; } } isShown = true; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void GUILightAmp::AdoptCamera(ElementRenderer::CameraElement *camera) { Check_Pointer(camera); if (s_Camera.GetCurrent()) { Verify (s_Camera.GetCurrent () == camera); return; } s_Camera.Add(camera); s_MarkForAttach = true; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // void GUILightAmp::RemoveCamera() { if (s_Camera.GetCurrent()) { s_Camera.Remove(); } s_MarkForAttach = false; }