Files
Client/GameTools/CaldronBase/Console.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

362 lines
8.8 KiB
C++
Raw Blame History

#include "./console.h"
#include "./DInput8Mgr.h"
#include "./D3D9GraphicLayer.h"
#include "../Scene/D3DXFont.h"
#include "../Scene/SceneStateMgr.h"
#include "../Scene/MainSceneMgr.h"
#include "../Scene/MaterialShaderMgr.h"
#include "../Scene/D3DXFont.h"
#include "./Timer.h"
#include "../Interface/CaldronMainInterface.h"
namespace Caldron {
namespace Scene {
void CConsoleMaterialShder::Apply()
{
CSceneStateMgr::_SetD3DRenderState(D3DRS_CULLMODE,D3DCULL_NONE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_ALPHABLENDENABLE ,FALSE);
CSceneStateMgr::_SetD3DRenderState(D3DRS_TEXTUREFACTOR,0x00000000);
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLOROP ,D3DTOP_SELECTARG1);
CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_COLORARG1 ,D3DTA_TFACTOR);
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_COLOROP ,D3DTOP_DISABLE );
CSceneStateMgr::_SetD3DTextureStageState(1, D3DTSS_ALPHAOP ,D3DTOP_DISABLE );
}
}
namespace Base {
CConsole::CConsole(void) : m_iEnable(-1),m_fAniTime(0.5f),m_iUseLines(0),m_iWindowLines(20),m_iCurrentPos(0),m_iCursorX(0),m_iCursorY(0),
m_dwScreenWidth(0),m_dwScreenHeight(0),m_iMaterialShaderIndex(-1),m_iCurrentPage(1),m_fUnitUv(0.1f),m_fTargetUv(30.0f),m_fCurrentUv(0.0f),
m_fCurrentHeight(0.0f),m_fUnitAniHeight(0.0f),m_fTargetHeight(0.0f)
{
memset(m_strInputLine,0,sizeof(char) * 1024);
memset(m_pBuffer,0,sizeof(char *) * CONSOLE_MAXLINE);
m_iMaterialShaderIndex = -1;
m_dwConsoleDecl = D3DFVF_XYZRHW;// | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE1(2);
}
CConsole::~CConsole(void)
{
for(int i = 0; i < m_iUseLines; i++ )
{
SafeDeleteA(m_pBuffer[i]);
m_pBuffer[i] = NULL;
}
}
void CConsole::Init()
{
Scene::CConsoleMaterialShder *pShader = new Scene::CConsoleMaterialShder;
m_iMaterialShaderIndex = (Scene::CMainSceneMgr::_GetMaterialShaderMgr())->PushMaterialShader(pShader);
for(int i =0 ;i < 4;i++ )
{
m_pVertex[i].m_vecPos.w = 0.1f;
m_pVertex[i].m_vecPos.z = 0.1f;
}
}
void CConsole::Display()
{
if(m_iEnable != CONSOLEVIEW_HIDEANI)
{
CDInput8Mgr::Lock(CONSOLE_INPUTLOCK_KEY);
memset(m_strInputLine,0,sizeof(char) * 1024);
m_iEnable = CONSOLEVIEW_DISPLAYANI;
m_iWindowLines = 20;
m_iCurrentPos = 0;
m_iCursorX = 10;
m_iCursorY = (int)(m_fTargetHeight - 15);
}
}
void CConsole::Hide()
{
if(m_iEnable != CONSOLEVIEW_DISPLAYANI)
{
m_iEnable = CONSOLEVIEW_HIDEANI;
m_iWindowLines = 20;
m_iCurrentPos = 0;
}
}
void CConsole::ProcessKey()
{
if(m_iEnable == CONSOLEVIEW_DISPLAY)
{
if(CDInput8Mgr::PushOnceKey(DIK_GRAVE,CONSOLE_INPUTLOCK_KEY))
{
Scene::CMainSceneMgr::ChangeConsole();
}
if(CDInput8Mgr::PushOnceKey(DIK_RETURN ,CONSOLE_INPUTLOCK_KEY))
{
CommandExec();
m_iCurrentPos = 0;
memset(m_strInputLine,0,sizeof(char) * 1024);
}
// key <20>Է<EFBFBD>ó<EFBFBD><C3B3>
CDInput8Mgr::KeyStrok(m_strInputLine,m_iCurrentPos);
if(m_iCurrentPos >= 1024)
m_iCurrentPos = 1023;
if(m_iCurrentPos < 0)
m_iCurrentPos = 0;
}
}
void CConsole::Update(float fSkipFrame)
{
CD3D9GraphicLayer::_GetWindowSize(m_dwScreenWidth,m_dwScreenHeight);
m_fTargetHeight = (float)m_dwScreenHeight * 0.6f;
m_fUnitAniHeight = (float)m_fTargetHeight / m_fAniTime;
if(m_iEnable == CONSOLEVIEW_HIDE)
return ;
switch(m_iEnable)
{
case CONSOLEVIEW_HIDEANI:
if(m_fCurrentHeight > 0)
{
m_fCurrentHeight -= (float)m_fUnitAniHeight * fSkipFrame;
}
break;
case CONSOLEVIEW_DISPLAYANI:
if(m_fCurrentHeight < m_fTargetHeight)
{
m_fCurrentHeight += (float)m_fUnitAniHeight * fSkipFrame;
}
break;
case CONSOLEVIEW_DISPLAY:
break;
default:
break;
}
if(m_fCurrentHeight <= 0)
{
m_fCurrentHeight = 0;
m_iEnable = CONSOLEVIEW_HIDE;
CDInput8Mgr::Unlock();
}
else if(m_fCurrentHeight >= m_fTargetHeight)
{
m_fCurrentHeight = m_fTargetHeight;
m_iEnable = CONSOLEVIEW_DISPLAY;
}
m_fCurrentUv += m_fUnitUv * fSkipFrame;
if(m_fCurrentUv >= m_fTargetUv)
{
m_fUnitUv *= -1.0f;
}
else if(m_fCurrentUv <= 0.0f)
{
m_fUnitUv *= -1.0f;
}
ProcessKey();
}
void CConsole::Render(LPDIRECT3DDEVICE9 lpDevice)
{
if(m_iEnable == CONSOLEVIEW_HIDE)
return ;
Scene::CMainSceneMgr::_GetMaterialShaderMgr()->GetNodes(m_iMaterialShaderIndex)->Apply();
m_pVertex[3].m_vecPos.x = (float)m_dwScreenWidth;
m_pVertex[3].m_vecPos.y = m_fCurrentHeight;
m_pVertex[0].m_vecPos.x = 0.0f;
m_pVertex[0].m_vecPos.y = m_fCurrentHeight;
m_pVertex[1].m_vecPos.x = 0.0f;
m_pVertex[1].m_vecPos.y = 0.0f;
m_pVertex[2].m_vecPos.x = (float)m_dwScreenWidth;
m_pVertex[2].m_vecPos.y = 0.0f;
lpDevice->SetFVF(m_dwConsoleDecl);
lpDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN ,2,&m_pVertex,sizeof(CConsoleVertex));
if(m_iEnable == CONSOLEVIEW_DISPLAY)
{
RenderText(5,m_iCursorY,">");
if(m_iCurrentPos < 1023)
m_strInputLine[m_iCurrentPos] = '_';
RenderText((long)m_iCursorX,(long)m_iCursorY,m_strInputLine);
int iCount = (m_iUseLines > m_iWindowLines) ? m_iWindowLines : m_iUseLines;
for(int iLine = 0; iLine < iCount; iLine++)
{
RenderText((long)m_iCursorX,(long)iLine * 13 + 2,m_pBuffer[iLine]);
}
}
}
void CConsole::RenderText(long iX,long iY,const char *strText)
{
Scene::CMainSceneMgr::_GetFont()->PrintFont(iX,iY,strText);
}
void CConsole::AddText(const char *fmt,...)
{
static char str[1024];
int iLength;
va_list va;
va_start( va, fmt );
vsprintf( str, fmt, va );
va_end( va );
if(m_iUseLines == CONSOLE_MAXLINE)
SafeDeleteA(m_pBuffer[--m_iUseLines]);
memmove(&m_pBuffer[1],&m_pBuffer[0],sizeof(char *)*m_iUseLines);
iLength = (int)strlen(str) + 1;
m_pBuffer[0] = new char[iLength];
memcpy(m_pBuffer[0],str,iLength);
m_iUseLines++;
}
void CConsole::CommandExec()
{
m_strInputLine[m_iCurrentPos] = 0;
AddText(m_strInputLine);
if(strstr(m_strInputLine,"BYE")) // Console Close
Scene::CMainSceneMgr::ChangeConsole();
else if(strstr(m_strInputLine,"FOV")) // Fov
{
float fFov = 45.0f;
float fMinDistance = 0.1f;
float fMaxDistance = 10000.0f;
bool bRight = true;
char *tok = strtok(m_strInputLine," ");
if((tok = strtok(NULL," ")) != NULL)
{
fFov = (float)atof(tok);
if((tok = strtok(NULL," ")) != NULL)
{
fMinDistance = (float)atof(tok);
if((tok = strtok(NULL," ")) != NULL)
{
fMaxDistance = (float)atof(tok);
}
else
{
bRight = false;
}
}
else
{
bRight = false;
}
}
else
{
bRight = false;
}
if(bRight == true)
Scene::CSceneStateMgr::_SetD3DPerspectiveLHMatrix(Scene::D3DMATRIX_PROJECT,fFov,(float)m_dwScreenWidth / (float)m_dwScreenHeight,fMinDistance,fMaxDistance);
else
AddText("FOV arg wrong. ex> FOV 45.0 0.1 1000.0");
}
else if(strstr(m_strInputLine,"WIREFRAME VIEW")) // Fill Mode setting
Scene::CMainSceneMgr::_ChangeGlobalMode(Scene::GLOBAL_FILLMODE,D3DFILL_WIREFRAME);
else if(strstr(m_strInputLine,"SOLID VIEW"))
Scene::CMainSceneMgr::_ChangeGlobalMode(Scene::GLOBAL_FILLMODE,D3DFILL_SOLID);
else if(strstr(m_strInputLine,"FPS ON")) // Fps View
Scene::CMainSceneMgr::_ChangeGlobalMode(Scene::GLOBAL_FPSSTATE,1);
else if(strstr(m_strInputLine,"FPS OFF"))
Scene::CMainSceneMgr::_ChangeGlobalMode(Scene::GLOBAL_FPSSTATE,0);
else if(strstr(m_strInputLine,"CAMERA INFO ON")) // Camera Info
Scene::CMainSceneMgr::_ChangeGlobalMode(Scene::GLOBAL_CAMERAINFO,1);
else if(strstr(m_strInputLine,"CAMERA INFO OFF"))
Scene::CMainSceneMgr::_ChangeGlobalMode(Scene::GLOBAL_CAMERAINFO,0);
else if(strstr(m_strInputLine,"LOG CONSOLE")) // Log Device Setting
CLogMgr::_SetOutDevice(Caldron::LOG_CONSOLEOUT);
else if(strstr(m_strInputLine,"LOG FILE"))
CLogMgr::_SetOutDevice(Caldron::LOG_FILEOUT);
else if(strstr(m_strInputLine,"LOG MESSAGEBOX"))
CLogMgr::_SetOutDevice(Caldron::LOG_MESSAGEBOXOUT);
else if(strstr(m_strInputLine,"HELP")) // Help
HelpMessage();
else if(strstr(m_strInputLine,"FPS HOLD")) // Fps Hold
{
char *tok = strtok(m_strInputLine," ");
int iHold = 0;
if((tok = strtok(NULL," ")) != NULL)
{
if((tok = strtok(NULL," ")) != NULL)
{
iHold = atoi(tok);
Caldron::Base::CTimer::_GetInstance().SetFPS(iHold);
}
}
}
else if(strstr(m_strInputLine,"QUIT"))
{
Interface::CCaldronMsgObj *pNode = new Interface::CCaldronMsgObj(Interface::MESSAGE_APP_QUIT,0);
Interface::CCaldronMainInterface::PushCaldronMsg(pNode);
}
}
void CConsole::HelpMessage()
{
AddText(" BYE : Console Close");
AddText(" FOV FovValue MinValue MaxValue : Fov Setting ( ex > FOV 45.0 0.1 1000.0)");
AddText(" WIREFRAME VIEW : WireFrame View");
AddText(" SOLID VIEW : Solid View");
AddText(" FPS ON : FPS Draw");
AddText(" FPS OFF : FPS Not Draw");
AddText(" CAMERA INFO ON : Camera Info On");
AddText(" CAMERA INFO OFF : Camera Info Off");
AddText(" LOG CONSOLE : Log to Console");
AddText(" LOG FILE : Log to File");
AddText(" LOG MESSAGEBOX : Log to MessageBox");
AddText(" FPS HOLD holdFps : FPS HOLD ( ex > FPS HOLD 100 )");
AddText(" QUIT : APP Quit");
}
}}