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>
362 lines
8.8 KiB
C++
362 lines
8.8 KiB
C++
#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");
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
}}
|
||
|
||
|