mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-07-04 21:50:35 -04:00
* Some files were still encoded with Windows newlines. I fixed all of that.
* Started using the static keyword in a few more places in the client * Updated libpng, libmpg123, and freetype to the latest versions, with position-independent code turned off rather than set to "both"
This commit is contained in:
parent
ecafff8c5c
commit
5713fc1bd1
23 changed files with 1432 additions and 1456 deletions
|
@ -1,5 +1,5 @@
|
|||
#include <initguid.h>
|
||||
|
||||
DEFINE_GUID(CLSID_XAudio2, 0xe21a7345, 0xeb21, 0x468e, 0xbe, 0x50, 0x80, 0x4d, 0xb9, 0x7c, 0xf7, 0x08);
|
||||
DEFINE_GUID(CLSID_XAudio2_Debug, 0xf7a76c21, 0x53d4, 0x46bb, 0xac, 0x53, 0x8b, 0x45, 0x9c, 0xae, 0x46, 0xbd);
|
||||
#include <initguid.h>
|
||||
|
||||
DEFINE_GUID(CLSID_XAudio2, 0xe21a7345, 0xeb21, 0x468e, 0xbe, 0x50, 0x80, 0x4d, 0xb9, 0x7c, 0xf7, 0x08);
|
||||
DEFINE_GUID(CLSID_XAudio2_Debug, 0xf7a76c21, 0x53d4, 0x46bb, 0xac, 0x53, 0x8b, 0x45, 0x9c, 0xae, 0x46, 0xbd);
|
||||
DEFINE_GUID(IID_IXAudio2, 0x8bcf1f58, 0x9fe7, 0x4583, 0x8a, 0xc6, 0xe2, 0xad, 0xc4, 0x65, 0xc8, 0xbb);
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
#include "EngineInterface.hpp"
|
||||
|
||||
void Shutdown();
|
||||
static void Shutdown();
|
||||
Scene * CurrentScene;
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
|
||||
|
@ -115,7 +115,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void Shutdown()
|
||||
static void Shutdown()
|
||||
{
|
||||
Audio::Shutdown();
|
||||
Graphics::Shutdown();
|
||||
|
|
|
@ -1,179 +1,179 @@
|
|||
/*
|
||||
Niotso - The New Implementation of The Sims Online
|
||||
Graphics/Font.cpp
|
||||
Copyright (c) 2012 Niotso Project <http://niotso.org/>
|
||||
Author(s): Fatbag <X-Fi6@phppoll.org>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "../EngineInterface.hpp"
|
||||
|
||||
namespace Graphics {
|
||||
|
||||
FT_Library FreeTypeLibrary;
|
||||
FT_Face FontFace;
|
||||
|
||||
static void FindStringSize(const wchar_t * String, unsigned * width, unsigned * height, int * xoffset, int * yoffset, int font){
|
||||
int x = 0, y = 0;
|
||||
int lowestx = 0, lowesty = 0, highestx = 0, highesty = 0;
|
||||
|
||||
for(wchar_t letter=*String; letter!='\0'; letter=*(++String)){
|
||||
int error = FT_Load_Char(FontFace, letter, FT_LOAD_RENDER);
|
||||
if(error) continue;
|
||||
|
||||
int bottomx = x + FontFace->glyph->bitmap_left;
|
||||
int bottomy = y + FontFace->glyph->bitmap_top - FontFace->glyph->bitmap.rows;
|
||||
if(bottomx < lowestx) lowestx = bottomx;
|
||||
if(bottomy < lowesty) lowesty = bottomy;
|
||||
|
||||
int topx = x + FontFace->glyph->bitmap_left + FontFace->glyph->bitmap.width;
|
||||
int topy = y + FontFace->glyph->bitmap_top;
|
||||
if(topx > highestx) highestx = topx;
|
||||
if(topy > highesty) highesty = topy;
|
||||
|
||||
x += FontFace->glyph->advance.x >> 6;
|
||||
y += FontFace->glyph->advance.y >> 6;
|
||||
}
|
||||
|
||||
*width = highestx-lowestx, *height = highesty-lowesty;
|
||||
*xoffset = -lowestx, *yoffset = -lowesty;
|
||||
}
|
||||
|
||||
void DrawText(Image_t * Image, const wchar_t * String, int x, int y, unsigned width, unsigned height,
|
||||
TextAlignment Alignment, int font, COLORREF Color){
|
||||
//x, y, width, height form the bounding rectangle into which the text should be drawn.
|
||||
//(x,y) defines the offset to the top-left of the rectangle from the top left of the background.
|
||||
//The destination image must be stored in bottom-up order.
|
||||
|
||||
if(x >= (signed)Image->Width || y >= (signed)Image->Height) return;
|
||||
|
||||
//(stringx,stringy) will refer to the top-left of the string in bottom-up coordinates
|
||||
int stringx, stringy;
|
||||
unsigned StringWidth, StringHeight;
|
||||
FindStringSize(String, &StringWidth, &StringHeight, &stringx, &stringy, font);
|
||||
|
||||
//Horizontal alignment
|
||||
if(Alignment < 2) stringx = x; //Left
|
||||
else if(Alignment < 4) stringx = x+(width-StringWidth+1)/2; //Middle
|
||||
else stringx = x+width-StringWidth; //Right
|
||||
//Vertical alignment
|
||||
if(!(Alignment&1)) stringy = y; //Top
|
||||
else stringy = y+(height-StringHeight+1)/2; //Middle
|
||||
stringy = Image->Height-stringy-StringHeight;
|
||||
|
||||
//Now that we've done the alignment, we can crop the bounding box within the limits of the background image
|
||||
if(x < 0){ Image->Width += x; x = 0; }
|
||||
if(y < 0){ Image->Height += y; y = 0; }
|
||||
if(width > Image->Width) width = Image->Width;
|
||||
if(height > Image->Height) height = Image->Height;
|
||||
|
||||
for(wchar_t letter=*String; letter!='\0'; letter=*(++String)){
|
||||
int error = FT_Load_Char(FontFace, letter, FT_LOAD_RENDER);
|
||||
if(error) continue;
|
||||
|
||||
int cWidth = FontFace->glyph->bitmap.width, cHeight = FontFace->glyph->bitmap.rows;
|
||||
if(cWidth && cHeight){
|
||||
uint8_t * cRender; /* Convert to Bottom-up */
|
||||
uint8_t * OriginalRender = FontFace->glyph->bitmap.buffer;
|
||||
if(FontFace->glyph->bitmap.pitch > 0){
|
||||
cRender = (uint8_t *) malloc(cWidth * cHeight);
|
||||
for(int i=0; i<cHeight; i++)
|
||||
memcpy(cRender + i*cWidth, OriginalRender + (cHeight-i-1)*cWidth, cWidth);
|
||||
}else cRender = OriginalRender;
|
||||
|
||||
stringx += FontFace->glyph->bitmap_left;
|
||||
stringy += FontFace->glyph->bitmap_top-cHeight;
|
||||
for(int i=max(-stringy, 0); i<cHeight && (unsigned)stringy+i < height; i++){
|
||||
for(int j=max(-stringx, 0); j<cWidth && (unsigned)stringx+j < width; j++){
|
||||
int value = cRender[i*cWidth + j];
|
||||
uint8_t *ptr = Image->Data + 3*((stringy+i)*width + (stringx+j));
|
||||
|
||||
int originalcolor;
|
||||
originalcolor = *ptr;
|
||||
*ptr++ = (uint8_t) (originalcolor + (int)((GetBValue(Color)-originalcolor)*2*value+255)/510);
|
||||
originalcolor = *ptr;
|
||||
*ptr++ = (uint8_t) (originalcolor + (int)((GetGValue(Color)-originalcolor)*2*value+255)/510);
|
||||
originalcolor = *ptr;
|
||||
*ptr++ = (uint8_t) (originalcolor + (int)((GetRValue(Color)-originalcolor)*2*value+255)/510);
|
||||
}
|
||||
}
|
||||
stringx -= FontFace->glyph->bitmap_left;
|
||||
stringy -= FontFace->glyph->bitmap_top-cHeight;
|
||||
|
||||
if(FontFace->glyph->bitmap.pitch > 0) free(cRender);
|
||||
}
|
||||
stringx += FontFace->glyph->advance.x >> 6;
|
||||
stringy += FontFace->glyph->advance.y >> 6;
|
||||
}
|
||||
}
|
||||
|
||||
Image_t * StringImage(const wchar_t * String, int font, COLORREF Color){
|
||||
Image_t * Image = (Image_t*) malloc(sizeof(Image_t));
|
||||
if(Image == NULL) return NULL;
|
||||
|
||||
unsigned StringWidth, StringHeight;
|
||||
int stringx, stringy;
|
||||
FindStringSize(String, &StringWidth, &StringHeight, &stringx, &stringy, font);
|
||||
|
||||
Image->Data = (uint8_t*) malloc(4 * StringWidth * StringHeight);
|
||||
if(Image->Data == NULL){
|
||||
free(Image);
|
||||
return NULL;
|
||||
}
|
||||
for(unsigned i=0; i<4*StringWidth*StringHeight;){
|
||||
Image->Data[i++] = GetBValue(Color);
|
||||
Image->Data[i++] = GetGValue(Color);
|
||||
Image->Data[i++] = GetRValue(Color);
|
||||
Image->Data[i++] = 0;
|
||||
}
|
||||
|
||||
for(wchar_t letter=*String; letter!='\0'; letter=*(++String)){
|
||||
int error = FT_Load_Char(FontFace, letter, FT_LOAD_RENDER);
|
||||
if(error) continue;
|
||||
|
||||
int cWidth = FontFace->glyph->bitmap.width, cHeight = FontFace->glyph->bitmap.rows;
|
||||
if(cWidth && cHeight){
|
||||
uint8_t * cRender; /* Convert to Bottom-up */
|
||||
uint8_t * OriginalRender = FontFace->glyph->bitmap.buffer;
|
||||
if(FontFace->glyph->bitmap.pitch > 0){
|
||||
cRender = (uint8_t *) malloc(cWidth * cHeight);
|
||||
for(int i=0; i<cHeight; i++)
|
||||
memcpy(cRender + i*cWidth, OriginalRender + (cHeight-i-1)*cWidth, cWidth);
|
||||
}else cRender = OriginalRender;
|
||||
|
||||
stringx += FontFace->glyph->bitmap_left;
|
||||
stringy += FontFace->glyph->bitmap_top-cHeight;
|
||||
for(int i=0; i<cHeight; i++){
|
||||
for(int j=0; j<cWidth; j++){
|
||||
uint8_t *ptr = Image->Data + 4*((stringy+i)*StringWidth + (stringx+j));
|
||||
ptr[3] = cRender[i*cWidth + j];
|
||||
}
|
||||
}
|
||||
stringx -= FontFace->glyph->bitmap_left;
|
||||
stringy -= FontFace->glyph->bitmap_top-cHeight;
|
||||
|
||||
if(FontFace->glyph->bitmap.pitch > 0) free(cRender);
|
||||
}
|
||||
stringx += FontFace->glyph->advance.x >> 6;
|
||||
stringy += FontFace->glyph->advance.y >> 6;
|
||||
}
|
||||
|
||||
Image->Width = StringWidth;
|
||||
Image->Height = StringHeight;
|
||||
Image->Format = FIMG_BGRA32;
|
||||
return Image;
|
||||
}
|
||||
|
||||
/*
|
||||
Niotso - The New Implementation of The Sims Online
|
||||
Graphics/Font.cpp
|
||||
Copyright (c) 2012 Niotso Project <http://niotso.org/>
|
||||
Author(s): Fatbag <X-Fi6@phppoll.org>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "../EngineInterface.hpp"
|
||||
|
||||
namespace Graphics {
|
||||
|
||||
FT_Library FreeTypeLibrary;
|
||||
FT_Face FontFace;
|
||||
|
||||
static void FindStringSize(const wchar_t * String, unsigned * width, unsigned * height, int * xoffset, int * yoffset, int font){
|
||||
int x = 0, y = 0;
|
||||
int lowestx = 0, lowesty = 0, highestx = 0, highesty = 0;
|
||||
|
||||
for(wchar_t letter=*String; letter!='\0'; letter=*(++String)){
|
||||
int error = FT_Load_Char(FontFace, letter, FT_LOAD_RENDER);
|
||||
if(error) continue;
|
||||
|
||||
int bottomx = x + FontFace->glyph->bitmap_left;
|
||||
int bottomy = y + FontFace->glyph->bitmap_top - FontFace->glyph->bitmap.rows;
|
||||
if(bottomx < lowestx) lowestx = bottomx;
|
||||
if(bottomy < lowesty) lowesty = bottomy;
|
||||
|
||||
int topx = x + FontFace->glyph->bitmap_left + FontFace->glyph->bitmap.width;
|
||||
int topy = y + FontFace->glyph->bitmap_top;
|
||||
if(topx > highestx) highestx = topx;
|
||||
if(topy > highesty) highesty = topy;
|
||||
|
||||
x += FontFace->glyph->advance.x >> 6;
|
||||
y += FontFace->glyph->advance.y >> 6;
|
||||
}
|
||||
|
||||
*width = highestx-lowestx, *height = highesty-lowesty;
|
||||
*xoffset = -lowestx, *yoffset = -lowesty;
|
||||
}
|
||||
|
||||
void DrawText(Image_t * Image, const wchar_t * String, int x, int y, unsigned width, unsigned height,
|
||||
TextAlignment Alignment, int font, COLORREF Color){
|
||||
//x, y, width, height form the bounding rectangle into which the text should be drawn.
|
||||
//(x,y) defines the offset to the top-left of the rectangle from the top left of the background.
|
||||
//The destination image must be stored in bottom-up order.
|
||||
|
||||
if(x >= (signed)Image->Width || y >= (signed)Image->Height) return;
|
||||
|
||||
//(stringx,stringy) will refer to the top-left of the string in bottom-up coordinates
|
||||
int stringx, stringy;
|
||||
unsigned StringWidth, StringHeight;
|
||||
FindStringSize(String, &StringWidth, &StringHeight, &stringx, &stringy, font);
|
||||
|
||||
//Horizontal alignment
|
||||
if(Alignment < 2) stringx = x; //Left
|
||||
else if(Alignment < 4) stringx = x+(width-StringWidth+1)/2; //Middle
|
||||
else stringx = x+width-StringWidth; //Right
|
||||
//Vertical alignment
|
||||
if(!(Alignment&1)) stringy = y; //Top
|
||||
else stringy = y+(height-StringHeight+1)/2; //Middle
|
||||
stringy = Image->Height-stringy-StringHeight;
|
||||
|
||||
//Now that we've done the alignment, we can crop the bounding box within the limits of the background image
|
||||
if(x < 0){ Image->Width += x; x = 0; }
|
||||
if(y < 0){ Image->Height += y; y = 0; }
|
||||
if(width > Image->Width) width = Image->Width;
|
||||
if(height > Image->Height) height = Image->Height;
|
||||
|
||||
for(wchar_t letter=*String; letter!='\0'; letter=*(++String)){
|
||||
int error = FT_Load_Char(FontFace, letter, FT_LOAD_RENDER);
|
||||
if(error) continue;
|
||||
|
||||
int cWidth = FontFace->glyph->bitmap.width, cHeight = FontFace->glyph->bitmap.rows;
|
||||
if(cWidth && cHeight){
|
||||
uint8_t * cRender; /* Convert to Bottom-up */
|
||||
uint8_t * OriginalRender = FontFace->glyph->bitmap.buffer;
|
||||
if(FontFace->glyph->bitmap.pitch > 0){
|
||||
cRender = (uint8_t *) malloc(cWidth * cHeight);
|
||||
for(int i=0; i<cHeight; i++)
|
||||
memcpy(cRender + i*cWidth, OriginalRender + (cHeight-i-1)*cWidth, cWidth);
|
||||
}else cRender = OriginalRender;
|
||||
|
||||
stringx += FontFace->glyph->bitmap_left;
|
||||
stringy += FontFace->glyph->bitmap_top-cHeight;
|
||||
for(int i=max(-stringy, 0); i<cHeight && (unsigned)stringy+i < height; i++){
|
||||
for(int j=max(-stringx, 0); j<cWidth && (unsigned)stringx+j < width; j++){
|
||||
int value = cRender[i*cWidth + j];
|
||||
uint8_t *ptr = Image->Data + 3*((stringy+i)*width + (stringx+j));
|
||||
|
||||
int originalcolor;
|
||||
originalcolor = *ptr;
|
||||
*ptr++ = (uint8_t) (originalcolor + (int)((GetBValue(Color)-originalcolor)*2*value+255)/510);
|
||||
originalcolor = *ptr;
|
||||
*ptr++ = (uint8_t) (originalcolor + (int)((GetGValue(Color)-originalcolor)*2*value+255)/510);
|
||||
originalcolor = *ptr;
|
||||
*ptr++ = (uint8_t) (originalcolor + (int)((GetRValue(Color)-originalcolor)*2*value+255)/510);
|
||||
}
|
||||
}
|
||||
stringx -= FontFace->glyph->bitmap_left;
|
||||
stringy -= FontFace->glyph->bitmap_top-cHeight;
|
||||
|
||||
if(FontFace->glyph->bitmap.pitch > 0) free(cRender);
|
||||
}
|
||||
stringx += FontFace->glyph->advance.x >> 6;
|
||||
stringy += FontFace->glyph->advance.y >> 6;
|
||||
}
|
||||
}
|
||||
|
||||
Image_t * StringImage(const wchar_t * String, int font, COLORREF Color){
|
||||
Image_t * Image = (Image_t*) malloc(sizeof(Image_t));
|
||||
if(Image == NULL) return NULL;
|
||||
|
||||
unsigned StringWidth, StringHeight;
|
||||
int stringx, stringy;
|
||||
FindStringSize(String, &StringWidth, &StringHeight, &stringx, &stringy, font);
|
||||
|
||||
Image->Data = (uint8_t*) malloc(4 * StringWidth * StringHeight);
|
||||
if(Image->Data == NULL){
|
||||
free(Image);
|
||||
return NULL;
|
||||
}
|
||||
for(unsigned i=0; i<4*StringWidth*StringHeight;){
|
||||
Image->Data[i++] = GetBValue(Color);
|
||||
Image->Data[i++] = GetGValue(Color);
|
||||
Image->Data[i++] = GetRValue(Color);
|
||||
Image->Data[i++] = 0;
|
||||
}
|
||||
|
||||
for(wchar_t letter=*String; letter!='\0'; letter=*(++String)){
|
||||
int error = FT_Load_Char(FontFace, letter, FT_LOAD_RENDER);
|
||||
if(error) continue;
|
||||
|
||||
int cWidth = FontFace->glyph->bitmap.width, cHeight = FontFace->glyph->bitmap.rows;
|
||||
if(cWidth && cHeight){
|
||||
uint8_t * cRender; /* Convert to Bottom-up */
|
||||
uint8_t * OriginalRender = FontFace->glyph->bitmap.buffer;
|
||||
if(FontFace->glyph->bitmap.pitch > 0){
|
||||
cRender = (uint8_t *) malloc(cWidth * cHeight);
|
||||
for(int i=0; i<cHeight; i++)
|
||||
memcpy(cRender + i*cWidth, OriginalRender + (cHeight-i-1)*cWidth, cWidth);
|
||||
}else cRender = OriginalRender;
|
||||
|
||||
stringx += FontFace->glyph->bitmap_left;
|
||||
stringy += FontFace->glyph->bitmap_top-cHeight;
|
||||
for(int i=0; i<cHeight; i++){
|
||||
for(int j=0; j<cWidth; j++){
|
||||
uint8_t *ptr = Image->Data + 4*((stringy+i)*StringWidth + (stringx+j));
|
||||
ptr[3] = cRender[i*cWidth + j];
|
||||
}
|
||||
}
|
||||
stringx -= FontFace->glyph->bitmap_left;
|
||||
stringy -= FontFace->glyph->bitmap_top-cHeight;
|
||||
|
||||
if(FontFace->glyph->bitmap.pitch > 0) free(cRender);
|
||||
}
|
||||
stringx += FontFace->glyph->advance.x >> 6;
|
||||
stringy += FontFace->glyph->advance.y >> 6;
|
||||
}
|
||||
|
||||
Image->Width = StringWidth;
|
||||
Image->Height = StringHeight;
|
||||
Image->Format = FIMG_BGRA32;
|
||||
return Image;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,226 +1,226 @@
|
|||
/*
|
||||
Niotso - The New Implementation of The Sims Online
|
||||
Scene/LoginScreen/LoginScreen.cpp
|
||||
Copyright (c) 2012 Niotso Project <http://niotso.org/>
|
||||
Author(s): Fatbag <X-Fi6@phppoll.org>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "../../EngineInterface.hpp"
|
||||
|
||||
static const wchar_t * const StatusStrings[] = {
|
||||
L"Extruding Terrain Web",
|
||||
L"Adjusting Emotional Weights",
|
||||
L"Calibrating Personality Matrix",
|
||||
|
||||
L"Calculating Domestic Coefficients",
|
||||
L"Readjusting Career Ladder",
|
||||
L"Accessing Money Supply",
|
||||
L"Hacking the Social Network",
|
||||
L"Tweaking Chaos Control",
|
||||
L"Downloading Reticulated Splines"
|
||||
};
|
||||
static const char * const images[] = {"eagames.bmp", "maxis.png", "setup.bmp"};
|
||||
|
||||
static const char * const sounds[] = {"loadloop.wav"};
|
||||
|
||||
LoginScreen::LoginScreen() : Scene(0){
|
||||
Screen = Screen_EAGames;
|
||||
Time = 0;
|
||||
ScrollPos = -1;
|
||||
memset(image, 0, IMG_COUNT * sizeof(Image_t *));
|
||||
memset(texture, 0, TEX_COUNT * sizeof(GLuint));
|
||||
memset(sound, 0, SND_COUNT * sizeof(PlayableSound_t *));
|
||||
|
||||
glMatrixMode(GL_TEXTURE);
|
||||
glGenTextures(TEX_COUNT, texture);
|
||||
|
||||
FT_Set_Char_Size(Graphics::FontFace, 0, 22*64, 0, 0);
|
||||
|
||||
for(int i=TEX_EAGAMES; i<=TEX_SETUP; i++){
|
||||
Image_t * Image = File::ReadImageFile(images[i]);
|
||||
if(!Image){
|
||||
const char * Message;
|
||||
switch(File::Error){
|
||||
case FERR_NOT_FOUND:
|
||||
Message = "%s does not exist.";
|
||||
break;
|
||||
case FERR_OPEN:
|
||||
Message = "%s could not be opened for reading.";
|
||||
break;
|
||||
case FERR_BLANK:
|
||||
case FERR_UNRECOGNIZED:
|
||||
case FERR_INVALIDDATA:
|
||||
Message = "%s is corrupt or invalid.";
|
||||
break;
|
||||
case FERR_MEMORY:
|
||||
Message = "Memory for %s could not be allocated.";
|
||||
break;
|
||||
default:
|
||||
Message = "%s could not be read.";
|
||||
}
|
||||
|
||||
char Buffer[1024];
|
||||
sprintf(Buffer, Message, images[i]);
|
||||
MessageBox(Window::hWnd, Buffer, NULL, MB_OK | MB_ICONERROR);
|
||||
EXIT_SCENE();
|
||||
}
|
||||
|
||||
if(i == TEX_MAXIS){
|
||||
Graphics::DrawText(Image, L"Maxis\x2122 is an Electronic Arts\x2122 brand.", 0, 600-146, 800, 146,
|
||||
Graphics::ALIGN_CENTER_CENTER, 0, RGB(0xef, 0xe3, 0x8c));
|
||||
}
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture[i]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, Image->Width, Image->Height, 0, GL_BGR, GL_UNSIGNED_BYTE, Image->Data);
|
||||
free(Image->Data);
|
||||
free(Image);
|
||||
}
|
||||
|
||||
image[IMG_COPYRIGHT] = Graphics::StringImage(L"(c) 2002, 2003 Electronic Arts Inc. All rights reserved.",
|
||||
0, RGB(0xef, 0xe3, 0x8c));
|
||||
if(image[IMG_COPYRIGHT] == NULL){
|
||||
EXIT_SCENE();
|
||||
}
|
||||
glBindTexture(GL_TEXTURE_2D, texture[TEX_COPYRIGHT]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, image[IMG_COPYRIGHT]->Width, image[IMG_COPYRIGHT]->Height, 0, GL_BGRA,
|
||||
GL_UNSIGNED_BYTE, image[IMG_COPYRIGHT]->Data);
|
||||
free(image[IMG_COPYRIGHT]->Data);
|
||||
|
||||
for(int i=0; i<9; i++){
|
||||
image[IMG_STATUS+i] = Graphics::StringImage(StatusStrings[i], 0, RGB(0xef, 0xe3, 0x8c));
|
||||
if(image[IMG_STATUS+i] == NULL){
|
||||
EXIT_SCENE();
|
||||
}
|
||||
glBindTexture(GL_TEXTURE_2D, texture[TEX_STATUS+i]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, image[IMG_STATUS+i]->Width, image[IMG_STATUS+i]->Height, 0, GL_BGRA,
|
||||
GL_UNSIGNED_BYTE, image[IMG_STATUS+i]->Data);
|
||||
free(image[IMG_STATUS+i]->Data);
|
||||
}
|
||||
|
||||
for(int i=0; i<SND_COUNT; i++){
|
||||
Sound_t * Sound = File::ReadSoundFile(sounds[i]);
|
||||
if(!Sound){
|
||||
const char * Message;
|
||||
switch(File::Error){
|
||||
case FERR_NOT_FOUND:
|
||||
Message = "%s does not exist.";
|
||||
break;
|
||||
case FERR_OPEN:
|
||||
Message = "%s could not be opened for reading.";
|
||||
break;
|
||||
case FERR_BLANK:
|
||||
case FERR_UNRECOGNIZED:
|
||||
case FERR_INVALIDDATA:
|
||||
Message = "%s is corrupt or invalid.";
|
||||
break;
|
||||
case FERR_MEMORY:
|
||||
Message = "Memory for %s could not be allocated.";
|
||||
break;
|
||||
default:
|
||||
Message = "%s could not be read.";
|
||||
}
|
||||
|
||||
char Buffer[1024];
|
||||
sprintf(Buffer, Message, sounds[i]);
|
||||
MessageBox(Window::hWnd, Buffer, NULL, MB_OK | MB_ICONERROR);
|
||||
EXIT_SCENE();
|
||||
}
|
||||
|
||||
sound[i] = Audio::LoadSound(Sound);
|
||||
free(Sound);
|
||||
if(!sound){
|
||||
MessageBox(Window::hWnd, "Sound could not be created", NULL, MB_OK | MB_ICONERROR);
|
||||
EXIT_SCENE();
|
||||
}
|
||||
Audio::PlaySound(sound[i]);
|
||||
}
|
||||
}
|
||||
|
||||
LoginScreen::~LoginScreen(){
|
||||
for(int i=0; i<IMG_COUNT; i++){ if(image[i]) free(image[i]); }
|
||||
glDeleteTextures(TEX_COUNT, texture);
|
||||
|
||||
for(int i=0; i<SND_COUNT; i++){
|
||||
if(sound[i]){
|
||||
Audio::DeleteSound(sound[i]);
|
||||
free(sound[i]->Data);
|
||||
free(sound[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int LoginScreen::Run(float TimeDelta){
|
||||
Time += TimeDelta;
|
||||
if(ScrollPos != 8){
|
||||
ScrollPos += TimeDelta*0.75;
|
||||
if(ScrollPos > 8) ScrollPos = 8;
|
||||
}
|
||||
|
||||
if(Screen != Screen_Setup && Time >= 4.0){
|
||||
Screen = (Screen==Screen_EAGames) ? Screen_Maxis : Screen_Setup;
|
||||
Time = 0;
|
||||
}
|
||||
|
||||
if(System::UserInput.CloseWindow){
|
||||
return SCENE_EXIT;
|
||||
}
|
||||
return SCENE_NEED_REDRAW;
|
||||
}
|
||||
|
||||
void LoginScreen::Render(){
|
||||
glMatrixMode(GL_TEXTURE);
|
||||
|
||||
//Background
|
||||
glBindTexture(GL_TEXTURE_2D, texture[Screen]);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,0); glVertex2i(0,0);
|
||||
glTexCoord2i(1,0); glVertex2i(800,0);
|
||||
glTexCoord2i(1,1); glVertex2i(800,600);
|
||||
glTexCoord2i(0,1); glVertex2i(0,600);
|
||||
glEnd();
|
||||
|
||||
if(Screen != Screen_Setup) return;
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture[TEX_COPYRIGHT]);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,0); glVertex2i((800-image[IMG_COPYRIGHT]->Width)/2,58);
|
||||
glTexCoord2i(1,0); glVertex2i((800-image[IMG_COPYRIGHT]->Width)/2 + image[IMG_COPYRIGHT]->Width,58);
|
||||
glTexCoord2i(1,1); glVertex2i((800-image[IMG_COPYRIGHT]->Width)/2 + image[IMG_COPYRIGHT]->Width,image[IMG_COPYRIGHT]->Height + 58);
|
||||
glTexCoord2i(0,1); glVertex2i((800-image[IMG_COPYRIGHT]->Width)/2,image[IMG_COPYRIGHT]->Height + 58);
|
||||
glEnd();
|
||||
|
||||
for(int i=0; i<9; i++){
|
||||
glBindTexture(GL_TEXTURE_2D, texture[TEX_STATUS+i]);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,0); glVertex2i(((float)i - ScrollPos)*800 + (800-image[IMG_STATUS+i]->Width)/2,20);
|
||||
glTexCoord2i(1,0); glVertex2i(((float)i - ScrollPos)*800 + (800-image[IMG_STATUS+i]->Width)/2 + image[IMG_STATUS+i]->Width,20);
|
||||
glTexCoord2i(1,1); glVertex2i(((float)i - ScrollPos)*800 + (800-image[IMG_STATUS+i]->Width)/2 + image[IMG_STATUS+i]->Width,image[IMG_STATUS+i]->Height + 20);
|
||||
glTexCoord2i(0,1); glVertex2i(((float)i - ScrollPos)*800 + (800-image[IMG_STATUS+i]->Width)/2,image[IMG_STATUS+i]->Height + 20);
|
||||
glEnd();
|
||||
}
|
||||
/*
|
||||
Niotso - The New Implementation of The Sims Online
|
||||
Scene/LoginScreen/LoginScreen.cpp
|
||||
Copyright (c) 2012 Niotso Project <http://niotso.org/>
|
||||
Author(s): Fatbag <X-Fi6@phppoll.org>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
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, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "../../EngineInterface.hpp"
|
||||
|
||||
static const wchar_t * const StatusStrings[] = {
|
||||
L"Extruding Terrain Web",
|
||||
L"Adjusting Emotional Weights",
|
||||
L"Calibrating Personality Matrix",
|
||||
|
||||
L"Calculating Domestic Coefficients",
|
||||
L"Readjusting Career Ladder",
|
||||
L"Accessing Money Supply",
|
||||
L"Hacking the Social Network",
|
||||
L"Tweaking Chaos Control",
|
||||
L"Downloading Reticulated Splines"
|
||||
};
|
||||
static const char * const images[] = {"eagames.bmp", "maxis.png", "setup.bmp"};
|
||||
|
||||
static const char * const sounds[] = {"loadloop.wav"};
|
||||
|
||||
LoginScreen::LoginScreen() : Scene(0){
|
||||
Screen = Screen_EAGames;
|
||||
Time = 0;
|
||||
ScrollPos = -1;
|
||||
memset(image, 0, IMG_COUNT * sizeof(Image_t *));
|
||||
memset(texture, 0, TEX_COUNT * sizeof(GLuint));
|
||||
memset(sound, 0, SND_COUNT * sizeof(PlayableSound_t *));
|
||||
|
||||
glMatrixMode(GL_TEXTURE);
|
||||
glGenTextures(TEX_COUNT, texture);
|
||||
|
||||
FT_Set_Char_Size(Graphics::FontFace, 0, 22*64, 0, 0);
|
||||
|
||||
for(int i=TEX_EAGAMES; i<=TEX_SETUP; i++){
|
||||
Image_t * Image = File::ReadImageFile(images[i]);
|
||||
if(!Image){
|
||||
const char * Message;
|
||||
switch(File::Error){
|
||||
case FERR_NOT_FOUND:
|
||||
Message = "%s does not exist.";
|
||||
break;
|
||||
case FERR_OPEN:
|
||||
Message = "%s could not be opened for reading.";
|
||||
break;
|
||||
case FERR_BLANK:
|
||||
case FERR_UNRECOGNIZED:
|
||||
case FERR_INVALIDDATA:
|
||||
Message = "%s is corrupt or invalid.";
|
||||
break;
|
||||
case FERR_MEMORY:
|
||||
Message = "Memory for %s could not be allocated.";
|
||||
break;
|
||||
default:
|
||||
Message = "%s could not be read.";
|
||||
}
|
||||
|
||||
char Buffer[1024];
|
||||
sprintf(Buffer, Message, images[i]);
|
||||
MessageBox(Window::hWnd, Buffer, NULL, MB_OK | MB_ICONERROR);
|
||||
EXIT_SCENE();
|
||||
}
|
||||
|
||||
if(i == TEX_MAXIS){
|
||||
Graphics::DrawText(Image, L"Maxis\x2122 is an Electronic Arts\x2122 brand.", 0, 600-146, 800, 146,
|
||||
Graphics::ALIGN_CENTER_CENTER, 0, RGB(0xef, 0xe3, 0x8c));
|
||||
}
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture[i]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, Image->Width, Image->Height, 0, GL_BGR, GL_UNSIGNED_BYTE, Image->Data);
|
||||
free(Image->Data);
|
||||
free(Image);
|
||||
}
|
||||
|
||||
image[IMG_COPYRIGHT] = Graphics::StringImage(L"(c) 2002, 2003 Electronic Arts Inc. All rights reserved.",
|
||||
0, RGB(0xef, 0xe3, 0x8c));
|
||||
if(image[IMG_COPYRIGHT] == NULL){
|
||||
EXIT_SCENE();
|
||||
}
|
||||
glBindTexture(GL_TEXTURE_2D, texture[TEX_COPYRIGHT]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, image[IMG_COPYRIGHT]->Width, image[IMG_COPYRIGHT]->Height, 0, GL_BGRA,
|
||||
GL_UNSIGNED_BYTE, image[IMG_COPYRIGHT]->Data);
|
||||
free(image[IMG_COPYRIGHT]->Data);
|
||||
|
||||
for(int i=0; i<9; i++){
|
||||
image[IMG_STATUS+i] = Graphics::StringImage(StatusStrings[i], 0, RGB(0xef, 0xe3, 0x8c));
|
||||
if(image[IMG_STATUS+i] == NULL){
|
||||
EXIT_SCENE();
|
||||
}
|
||||
glBindTexture(GL_TEXTURE_2D, texture[TEX_STATUS+i]);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, image[IMG_STATUS+i]->Width, image[IMG_STATUS+i]->Height, 0, GL_BGRA,
|
||||
GL_UNSIGNED_BYTE, image[IMG_STATUS+i]->Data);
|
||||
free(image[IMG_STATUS+i]->Data);
|
||||
}
|
||||
|
||||
for(int i=0; i<SND_COUNT; i++){
|
||||
Sound_t * Sound = File::ReadSoundFile(sounds[i]);
|
||||
if(!Sound){
|
||||
const char * Message;
|
||||
switch(File::Error){
|
||||
case FERR_NOT_FOUND:
|
||||
Message = "%s does not exist.";
|
||||
break;
|
||||
case FERR_OPEN:
|
||||
Message = "%s could not be opened for reading.";
|
||||
break;
|
||||
case FERR_BLANK:
|
||||
case FERR_UNRECOGNIZED:
|
||||
case FERR_INVALIDDATA:
|
||||
Message = "%s is corrupt or invalid.";
|
||||
break;
|
||||
case FERR_MEMORY:
|
||||
Message = "Memory for %s could not be allocated.";
|
||||
break;
|
||||
default:
|
||||
Message = "%s could not be read.";
|
||||
}
|
||||
|
||||
char Buffer[1024];
|
||||
sprintf(Buffer, Message, sounds[i]);
|
||||
MessageBox(Window::hWnd, Buffer, NULL, MB_OK | MB_ICONERROR);
|
||||
EXIT_SCENE();
|
||||
}
|
||||
|
||||
sound[i] = Audio::LoadSound(Sound);
|
||||
free(Sound);
|
||||
if(!sound){
|
||||
MessageBox(Window::hWnd, "Sound could not be created", NULL, MB_OK | MB_ICONERROR);
|
||||
EXIT_SCENE();
|
||||
}
|
||||
Audio::PlaySound(sound[i]);
|
||||
}
|
||||
}
|
||||
|
||||
LoginScreen::~LoginScreen(){
|
||||
for(int i=0; i<IMG_COUNT; i++){ if(image[i]) free(image[i]); }
|
||||
glDeleteTextures(TEX_COUNT, texture);
|
||||
|
||||
for(int i=0; i<SND_COUNT; i++){
|
||||
if(sound[i]){
|
||||
Audio::DeleteSound(sound[i]);
|
||||
free(sound[i]->Data);
|
||||
free(sound[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int LoginScreen::Run(float TimeDelta){
|
||||
Time += TimeDelta;
|
||||
if(ScrollPos != 8){
|
||||
ScrollPos += TimeDelta*0.75;
|
||||
if(ScrollPos > 8) ScrollPos = 8;
|
||||
}
|
||||
|
||||
if(Screen != Screen_Setup && Time >= 4.0){
|
||||
Screen = (Screen==Screen_EAGames) ? Screen_Maxis : Screen_Setup;
|
||||
Time = 0;
|
||||
}
|
||||
|
||||
if(System::UserInput.CloseWindow){
|
||||
return SCENE_EXIT;
|
||||
}
|
||||
return SCENE_NEED_REDRAW;
|
||||
}
|
||||
|
||||
void LoginScreen::Render(){
|
||||
glMatrixMode(GL_TEXTURE);
|
||||
|
||||
//Background
|
||||
glBindTexture(GL_TEXTURE_2D, texture[Screen]);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,0); glVertex2i(0,0);
|
||||
glTexCoord2i(1,0); glVertex2i(800,0);
|
||||
glTexCoord2i(1,1); glVertex2i(800,600);
|
||||
glTexCoord2i(0,1); glVertex2i(0,600);
|
||||
glEnd();
|
||||
|
||||
if(Screen != Screen_Setup) return;
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, texture[TEX_COPYRIGHT]);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,0); glVertex2i((800-image[IMG_COPYRIGHT]->Width)/2,58);
|
||||
glTexCoord2i(1,0); glVertex2i((800-image[IMG_COPYRIGHT]->Width)/2 + image[IMG_COPYRIGHT]->Width,58);
|
||||
glTexCoord2i(1,1); glVertex2i((800-image[IMG_COPYRIGHT]->Width)/2 + image[IMG_COPYRIGHT]->Width,image[IMG_COPYRIGHT]->Height + 58);
|
||||
glTexCoord2i(0,1); glVertex2i((800-image[IMG_COPYRIGHT]->Width)/2,image[IMG_COPYRIGHT]->Height + 58);
|
||||
glEnd();
|
||||
|
||||
for(int i=0; i<9; i++){
|
||||
glBindTexture(GL_TEXTURE_2D, texture[TEX_STATUS+i]);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2i(0,0); glVertex2i(((float)i - ScrollPos)*800 + (800-image[IMG_STATUS+i]->Width)/2,20);
|
||||
glTexCoord2i(1,0); glVertex2i(((float)i - ScrollPos)*800 + (800-image[IMG_STATUS+i]->Width)/2 + image[IMG_STATUS+i]->Width,20);
|
||||
glTexCoord2i(1,1); glVertex2i(((float)i - ScrollPos)*800 + (800-image[IMG_STATUS+i]->Width)/2 + image[IMG_STATUS+i]->Width,image[IMG_STATUS+i]->Height + 20);
|
||||
glTexCoord2i(0,1); glVertex2i(((float)i - ScrollPos)*800 + (800-image[IMG_STATUS+i]->Width)/2,image[IMG_STATUS+i]->Height + 20);
|
||||
glEnd();
|
||||
}
|
||||
}
|
|
@ -42,14 +42,14 @@ int Initialize(){
|
|||
Shutdown();
|
||||
return ERROR_WINDOW_SYNCOBJECT;
|
||||
}
|
||||
|
||||
|
||||
Thread = CreateThread(NULL, 1024 /* very tiny stack size is needed */, Window::Procedure, NULL, 0, &ThreadID);
|
||||
if(Thread == NULL){
|
||||
MessageBox(NULL, "Failed to create the message loop thread.", NULL, MB_OK | MB_ICONERROR);
|
||||
Shutdown();
|
||||
return ERROR_WINDOW_CREATE_THREAD;
|
||||
}
|
||||
|
||||
|
||||
if(WaitForSingleObject(Window::Response, INFINITE) != WAIT_OBJECT_0){
|
||||
MessageBox(NULL, "Failed to synchronize with the message loop thread.", NULL, MB_OK | MB_ICONERROR);
|
||||
Shutdown();
|
||||
|
@ -60,14 +60,14 @@ int Initialize(){
|
|||
Shutdown();
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
||||
hWnd = FindWindow("TSO_NIOTSO", "The Sims Online");
|
||||
if(hWnd == NULL){
|
||||
MessageBox(NULL, "Failed to obtain a handle for the window.", NULL, MB_OK | MB_ICONERROR);
|
||||
Shutdown();
|
||||
return ERROR_WINDOW_HANDLE;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ void Shutdown(){
|
|||
CloseHandle(Response);
|
||||
Response = NULL;
|
||||
}
|
||||
|
||||
|
||||
UnregisterClass("TSO_NIOTSO", System::hInst);
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
case WM_KEYUP:
|
||||
System::UserInput_v.Keys[wParam] = (uMsg == WM_KEYDOWN);
|
||||
return 0;
|
||||
|
||||
|
||||
case WM_CLOSE:
|
||||
System::UserInput_v.CloseWindow = true;
|
||||
return 0;
|
||||
|
@ -113,7 +113,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lPar
|
|||
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm);
|
||||
System::FramePeriod = 1.0f/dm.dmDisplayFrequency;
|
||||
} return 0;
|
||||
|
||||
|
||||
}
|
||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
@ -126,13 +126,13 @@ static DWORD WINAPI Procedure(LPVOID){
|
|||
return 0;
|
||||
}
|
||||
SetEvent(Window::Response);
|
||||
|
||||
|
||||
MSG msg;
|
||||
while(GetMessage(&msg, NULL, 0, 0)){
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -179,7 +179,7 @@ static int CreateWindowInvisible(HINSTANCE hInst, unsigned Width, unsigned Heigh
|
|||
if(hWnd == NULL){
|
||||
Fullscreen = false;
|
||||
RECT WindowRect = {0, 0, Width, Height};
|
||||
|
||||
|
||||
//Use a style of WS_OVERLAPPEDWINDOW to allow resizing
|
||||
AdjustWindowRectEx(&WindowRect, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX, FALSE,
|
||||
WS_EX_APPWINDOW); //This finds the dimensions of a window with a client area of our specified dimensions
|
||||
|
@ -189,14 +189,14 @@ static int CreateWindowInvisible(HINSTANCE hInst, unsigned Width, unsigned Heigh
|
|||
unsigned WindowWidth = WindowRect.right-WindowRect.left, WindowHeight = WindowRect.bottom-WindowRect.top;
|
||||
RECT WorkspaceRect;
|
||||
SystemParametersInfo(SPI_GETWORKAREA, 0, &WorkspaceRect, 0);
|
||||
|
||||
|
||||
hWnd = CreateWindowEx(WS_EX_APPWINDOW, "TSO_NIOTSO", "The Sims Online",
|
||||
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
|
||||
((WorkspaceRect.right-WorkspaceRect.left - WindowWidth)>>1) + WorkspaceRect.left,
|
||||
((WorkspaceRect.bottom-WorkspaceRect.top - WindowHeight)>>1) + WorkspaceRect.top,
|
||||
WindowWidth, WindowHeight, 0, 0, hInst, NULL);
|
||||
}
|
||||
|
||||
|
||||
if(hWnd == NULL){
|
||||
MessageBox(NULL, "Failed to create the window.", NULL, MB_OK | MB_ICONERROR);
|
||||
return ERROR_WINDOW_CREATE;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue