123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- /* 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));
- }
|