mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-22 10:20:26 +01:00
228 lines
6.6 KiB
C++
228 lines
6.6 KiB
C++
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
the Free Software Foundation
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
|
|
#include "StdAfx.h"
|
|
#include "LCDDrawing.h"
|
|
|
|
static CTextureObject _toPointer;
|
|
static CTextureObject _toBcgClouds;
|
|
static CTextureObject _toBcgGrid;
|
|
CDrawPort *_pdp = NULL;
|
|
static PIX _pixSizeI;
|
|
static PIX _pixSizeJ;
|
|
static PIXaabbox2D _boxScreen;
|
|
static FLOAT _tmNow;
|
|
static ULONG _ulA;
|
|
|
|
extern void LCDInit(void)
|
|
{
|
|
try {
|
|
_toBcgClouds.SetData_t(CTFILENAME("Textures\\General\\Background6.tex"));
|
|
_toBcgGrid.SetData_t(CTFILENAME("Textures\\General\\Grid16x16-dot.tex"));
|
|
_toPointer.SetData_t(CTFILENAME("Textures\\General\\Pointer.tex"));
|
|
} catch (char *strError) {
|
|
FatalError("%s\n", strError);
|
|
}
|
|
}
|
|
|
|
extern void LCDEnd(void)
|
|
{
|
|
_toBcgClouds.SetData(NULL);
|
|
_toBcgGrid.SetData(NULL);
|
|
_toPointer.SetData(NULL);
|
|
}
|
|
|
|
extern void LCDPrepare(FLOAT fFade)
|
|
{
|
|
// get current time and alpha value
|
|
_tmNow = (FLOAT)_pTimer->GetHighPrecisionTimer().GetSeconds();
|
|
_ulA = NormFloatToByte(fFade);
|
|
}
|
|
|
|
extern void LCDSetDrawport(CDrawPort *pdp)
|
|
{
|
|
_pdp = pdp;
|
|
_pixSizeI = _pdp->GetWidth();
|
|
_pixSizeJ = _pdp->GetHeight();
|
|
_boxScreen = PIXaabbox2D ( PIX2D(0,0), PIX2D(_pixSizeI, _pixSizeJ));
|
|
}
|
|
|
|
void TiledTexture( PIXaabbox2D &_boxScreen, FLOAT fStretch, MEX2D &vScreen, MEXaabbox2D &boxTexture)
|
|
{
|
|
PIX pixW = _boxScreen.Size()(1);
|
|
PIX pixH = _boxScreen.Size()(2);
|
|
boxTexture = MEXaabbox2D(MEX2D(0, 0), MEX2D(pixW/fStretch, pixH/fStretch));
|
|
boxTexture+=vScreen;
|
|
}
|
|
|
|
extern void LCDDrawBox(PIX pixUL, PIX pixDR, PIXaabbox2D &box, COLOR col)
|
|
{
|
|
// up
|
|
_pdp->DrawLine(
|
|
box.Min()(1)-pixUL, box.Min()(2)-pixUL,
|
|
box.Max()(1)+pixDR, box.Min()(2)-pixUL, col);
|
|
// down
|
|
_pdp->DrawLine(
|
|
box.Min()(1)-pixUL, box.Max()(2)+pixDR,
|
|
box.Max()(1)+pixDR, box.Max()(2)+pixDR, col);
|
|
// left
|
|
_pdp->DrawLine(
|
|
box.Min()(1)-pixUL, box.Min()(2)-pixUL,
|
|
box.Min()(1)-pixUL, box.Max()(2)+pixDR, col);
|
|
// right
|
|
_pdp->DrawLine(
|
|
box.Max()(1)+pixDR, box.Min()(2)-pixUL,
|
|
box.Max()(1)+pixDR, box.Max()(2)+pixDR+1, col);
|
|
}
|
|
|
|
extern void LCDScreenBoxOpenLeft(COLOR col)
|
|
{
|
|
// up
|
|
_pdp->DrawLine(
|
|
_boxScreen.Min()(1)-1, _boxScreen.Min()(2),
|
|
_boxScreen.Max()(1)-1, _boxScreen.Min()(2), col);
|
|
// down
|
|
_pdp->DrawLine(
|
|
_boxScreen.Min()(1)-1, _boxScreen.Max()(2)-1,
|
|
_boxScreen.Max()(1)-1, _boxScreen.Max()(2)-1, col);
|
|
// right
|
|
_pdp->DrawLine(
|
|
_boxScreen.Max()(1)-1, _boxScreen.Min()(2),
|
|
_boxScreen.Max()(1)-1, _boxScreen.Max()(2)-1+1, col);
|
|
}
|
|
|
|
extern void LCDScreenBoxOpenRight(COLOR col)
|
|
{
|
|
// up
|
|
_pdp->DrawLine(
|
|
_boxScreen.Min()(1)-1, _boxScreen.Min()(2),
|
|
_boxScreen.Max()(1)-1, _boxScreen.Min()(2), col);
|
|
// down
|
|
_pdp->DrawLine(
|
|
_boxScreen.Min()(1)-1, _boxScreen.Max()(2)-1,
|
|
_boxScreen.Max()(1)-1, _boxScreen.Max()(2)-1, col);
|
|
// left
|
|
_pdp->DrawLine(
|
|
_boxScreen.Min()(1), _boxScreen.Min()(2),
|
|
_boxScreen.Min()(1), _boxScreen.Max()(2)-1+1, col);
|
|
}
|
|
|
|
extern void LCDScreenBox(COLOR col)
|
|
{
|
|
LCDDrawBox(0,-1, _boxScreen, col);
|
|
}
|
|
|
|
extern void LCDRenderClouds1(void)
|
|
{
|
|
MEXaabbox2D boxBcgClouds1;
|
|
TiledTexture(_boxScreen, 1.3f*_pdp->GetWidth()/640.0f,
|
|
MEX2D(sin(_tmNow*0.75f)*50,sin(_tmNow*0.9f)*40), boxBcgClouds1);
|
|
_pdp->PutTexture(&_toBcgClouds, _boxScreen, boxBcgClouds1, C_dGREEN|_ulA>>1);
|
|
TiledTexture(_boxScreen, 0.8f*_pdp->GetWidth()/640.0f,
|
|
MEX2D(sin(_tmNow*0.95f)*50,sin(_tmNow*0.8f)*40), boxBcgClouds1);
|
|
_pdp->PutTexture(&_toBcgClouds, _boxScreen, boxBcgClouds1, C_dGREEN|_ulA>>1);
|
|
}
|
|
|
|
extern void LCDRenderClouds2(void)
|
|
{
|
|
MEXaabbox2D boxBcgClouds2;
|
|
TiledTexture(_boxScreen, 0.5f*_pdp->GetWidth()/640.0f,
|
|
MEX2D(2,10), boxBcgClouds2);
|
|
_pdp->PutTexture(&_toBcgClouds, _boxScreen, boxBcgClouds2, C_BLACK|(_ulA>>1));
|
|
}
|
|
|
|
extern void LCDRenderClouds2Light(void)
|
|
{
|
|
MEXaabbox2D boxBcgClouds2;
|
|
TiledTexture(_boxScreen, 1.7f*_pdp->GetWidth()/640.0f,
|
|
MEX2D(2,10), boxBcgClouds2);
|
|
_pdp->PutTexture(&_toBcgClouds, _boxScreen, boxBcgClouds2, C_BLACK|(_ulA>>1));
|
|
}
|
|
|
|
extern void LCDRenderGrid(void)
|
|
{
|
|
MEXaabbox2D boxBcgGrid;
|
|
TiledTexture(_boxScreen, 1.0f, MEX2D(0,0), boxBcgGrid);
|
|
_pdp->PutTexture(&_toBcgGrid, _boxScreen, boxBcgGrid, C_dGREEN|_ulA);
|
|
}
|
|
|
|
/*
|
|
extern void LCDRenderClouds1(void)
|
|
{
|
|
MEXaabbox2D boxBcgClouds1 = MEXaabbox2D(MEX2D(0,0), MEX2D(256,512));
|
|
MEXaabbox2D boxBcgClouds2 = MEXaabbox2D(MEX2D(0,0), MEX2D(512,256));
|
|
boxBcgClouds1 += MEX2D( sin(_tmNow*0.45f)*50, sin(_tmNow*0.65f)*40);
|
|
boxBcgClouds2 += MEX2D( sin(_tmNow*0.55f)*50, sin(_tmNow*0.35f)*40);
|
|
_pdp->PutTexture( &_toBcgClouds, _boxScreen, boxBcgClouds1, C_dGREEN|(_ulA>>1));
|
|
_pdp->PutTexture( &_toBcgClouds, _boxScreen, boxBcgClouds2, C_dGREEN|(_ulA>>1));
|
|
}
|
|
|
|
extern void LCDRenderClouds2(void)
|
|
{
|
|
MEXaabbox2D boxBcgClouds = MEXaabbox2D(MEX2D(0,0), MEX2D(512,512));
|
|
boxBcgClouds += MEX2D(2,10);
|
|
_pdp->PutTexture( &_toBcgClouds, _boxScreen, boxBcgClouds, C_BLACK|(_ulA>>1));
|
|
}
|
|
|
|
extern void LCDRenderClouds2Light(void)
|
|
{
|
|
MEXaabbox2D boxBcgClouds2;
|
|
TiledTexture( _boxScreen, 1.3f, MEX2D(2,10), boxBcgClouds2);
|
|
_pdp->PutTexture( &_toBcgClouds, _boxScreen, boxBcgClouds2, C_BLACK|(_ulA>>1));
|
|
}
|
|
|
|
extern void LCDRenderGrid(void)
|
|
{
|
|
MEXaabbox2D boxBcgGrid;
|
|
TiledTexture( _boxScreen, 1.0f, MEX2D(8,8), boxBcgGrid);
|
|
_pdp->PutTexture( &_toBcgGrid, _boxScreen, boxBcgGrid, C_dGREEN|_ulA);
|
|
}
|
|
*/
|
|
|
|
extern COLOR LCDGetColor(COLOR colDefault, const char *strName)
|
|
{
|
|
return colDefault;//||((colDefault&0xFF0000)<<8);
|
|
}
|
|
|
|
extern COLOR LCDFadedColor(COLOR col)
|
|
{
|
|
return MulColors(C_WHITE|_ulA, col);
|
|
}
|
|
|
|
extern COLOR LCDBlinkingColor(COLOR col0, COLOR col1)
|
|
{
|
|
return LerpColor( col0, col1, sin(_tmNow*10.0f)*0.5f+0.5f);
|
|
}
|
|
|
|
extern void LCDDrawPointer(PIX pixI, PIX pixJ)
|
|
{
|
|
CDisplayMode dmCurrent;
|
|
_pGfx->GetCurrentDisplayMode(dmCurrent);
|
|
if (dmCurrent.IsFullScreen()) {
|
|
while (ShowCursor(FALSE) >= 0);
|
|
} else {
|
|
if (!_pInput->IsInputEnabled()) {
|
|
while (ShowCursor(TRUE) < 0);
|
|
}
|
|
return;
|
|
}
|
|
PIX pixSizeI = _toPointer.GetWidth();
|
|
PIX pixSizeJ = _toPointer.GetHeight();
|
|
pixI-=1;
|
|
pixJ-=1;
|
|
_pdp->PutTexture( &_toPointer, PIXaabbox2D( PIX2D(pixI, pixJ), PIX2D(pixI+pixSizeI, pixJ+pixSizeJ)),
|
|
LCDFadedColor(C_WHITE|255));
|
|
}
|