aboutsummaryrefslogtreecommitdiff
path: root/archive/hgewin/hge_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'archive/hgewin/hge_impl.h')
-rwxr-xr-xarchive/hgewin/hge_impl.h356
1 files changed, 356 insertions, 0 deletions
diff --git a/archive/hgewin/hge_impl.h b/archive/hgewin/hge_impl.h
new file mode 100755
index 0000000..244dafc
--- /dev/null
+++ b/archive/hgewin/hge_impl.h
@@ -0,0 +1,356 @@
+// -*- C++ -*-
+/*
+** Haaf's Game Engine 1.8
+** Copyright (C) 2003-2007, Relish Games
+** hge.relishgames.com
+**
+** Common core implementation header
+** Upgraded to DirectX9 By Chris Xiong, 2013/08/08
+*/
+
+
+#ifndef HGE_IMPL_H
+#define HGE_IMPL_H
+
+#include "hge.h"
+#include <stdio.h>
+#include <d3d9.h>
+#include <d3dx9.h>
+
+#define DEMO
+
+#define D3DFVF_HGEVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1)
+#define VERTEX_BUFFER_SIZE 4000
+
+
+typedef BOOL (WINAPI *GetSystemPowerStatusFunc)(LPSYSTEM_POWER_STATUS);
+
+
+struct CRenderTargetList
+{
+ int width;
+ int height;
+ IDirect3DTexture9* pTex;
+ IDirect3DSurface9* pDepth;
+ CRenderTargetList* next;
+};
+
+struct CTextureList
+{
+ HTEXTURE tex;
+ int width;
+ int height;
+ CTextureList* next;
+};
+
+struct CResourceList
+{
+ char filename[_MAX_PATH];
+ char password[64];
+ CResourceList* next;
+};
+
+struct CStreamList
+{
+ HSTREAM hstream;
+ void* data;
+ CStreamList* next;
+};
+
+struct CInputEventList
+{
+ hgeInputEvent event;
+ CInputEventList* next;
+};
+
+
+void DInit();
+void DDone();
+bool DFrame();
+
+
+/*
+** HGE Interface implementation
+*/
+class HGE_Impl : public HGE
+{
+public:
+ virtual void CALL Release();
+
+ virtual bool CALL System_Initiate();
+ virtual void CALL System_Shutdown();
+ virtual bool CALL System_Start();
+ virtual void CALL System_SetStateBool (hgeBoolState state, bool value);
+ virtual void CALL System_SetStateFunc (hgeFuncState state, hgeCallback value);
+ virtual void CALL System_SetStateHwnd (hgeHwndState state, HWND value);
+ virtual void CALL System_SetStateInt (hgeIntState state, int value);
+ virtual void CALL System_SetStateString(hgeStringState state, const char *value);
+ virtual bool CALL System_GetStateBool (hgeBoolState );
+ virtual hgeCallback CALL System_GetStateFunc (hgeFuncState );
+ virtual HWND CALL System_GetStateHwnd (hgeHwndState );
+ virtual int CALL System_GetStateInt (hgeIntState );
+ virtual const char* CALL System_GetStateString(hgeStringState);
+ virtual const char* CALL System_GetErrorMessage();
+ virtual void CALL System_Log(const char *format, ...);
+ virtual bool CALL System_Launch(const char *url);
+ virtual void CALL System_Snapshot(const char *filename=0);
+
+ virtual void* CALL Resource_Load(const char *filename, DWORD *size=0);
+ virtual void CALL Resource_Free(void *res);
+ virtual bool CALL Resource_AttachPack(const char *filename, const char *password=0);
+ virtual void CALL Resource_RemovePack(const char *filename);
+ virtual void CALL Resource_RemoveAllPacks();
+ virtual char* CALL Resource_MakePath(const char *filename=0);
+ virtual char* CALL Resource_EnumFiles(const char *wildcard=0);
+ virtual char* CALL Resource_EnumFolders(const char *wildcard=0);
+
+ virtual void CALL Ini_SetInt(const char *section, const char *name, int value);
+ virtual int CALL Ini_GetInt(const char *section, const char *name, int def_val);
+ virtual void CALL Ini_SetFloat(const char *section, const char *name, float value);
+ virtual float CALL Ini_GetFloat(const char *section, const char *name, float def_val);
+ virtual void CALL Ini_SetString(const char *section, const char *name, const char *value);
+ virtual char* CALL Ini_GetString(const char *section, const char *name, const char *def_val);
+
+ virtual void CALL Random_Seed(int seed=0);
+ virtual int CALL Random_Int(int min, int max);
+ virtual float CALL Random_Float(float min, float max);
+
+ virtual float CALL Timer_GetTime();
+ virtual float CALL Timer_GetDelta();
+ virtual int CALL Timer_GetFPS();
+ virtual float CALL Timer_GetFPSf();
+
+ virtual HEFFECT CALL Effect_Load(const char *filename, DWORD size=0);
+ virtual void CALL Effect_Free(HEFFECT eff);
+ virtual HCHANNEL CALL Effect_Play(HEFFECT eff);
+ virtual HCHANNEL CALL Effect_PlayEx(HEFFECT eff, float volume=1.0, float pan=0.0, float pitch=1.0f, bool loop=false);
+
+ virtual HMUSIC CALL Music_Load(const char *filename, DWORD size=0);
+ virtual void CALL Music_Free(HMUSIC mus);
+ virtual HCHANNEL CALL Music_Play(HMUSIC mus, bool loop, int volume = 100, int order = 0, int row = 0);
+ virtual void CALL Music_SetAmplification(HMUSIC music, int ampl);
+ virtual int CALL Music_GetAmplification(HMUSIC music);
+ virtual int CALL Music_GetLength(HMUSIC music);
+ virtual void CALL Music_SetPos(HMUSIC music, int order, int row);
+ virtual bool CALL Music_GetPos(HMUSIC music, int *order, int *row);
+ virtual void CALL Music_SetInstrVolume(HMUSIC music, int instr, int volume);
+ virtual int CALL Music_GetInstrVolume(HMUSIC music, int instr);
+ virtual void CALL Music_SetChannelVolume(HMUSIC music, int channel, int volume);
+ virtual int CALL Music_GetChannelVolume(HMUSIC music, int channel);
+
+ virtual HSTREAM CALL Stream_Load(const char *filename, DWORD size=0);
+ virtual void CALL Stream_Free(HSTREAM stream);
+ virtual HCHANNEL CALL Stream_Play(HSTREAM stream, bool loop, int volume = 100);
+
+ virtual void CALL Channel_SetPanning(HCHANNEL chn, float pan);
+ virtual void CALL Channel_SetVolume(HCHANNEL chn, float volume);
+ virtual void CALL Channel_SetPitch(HCHANNEL chn, float pitch);
+ virtual void CALL Channel_Pause(HCHANNEL chn);
+ virtual void CALL Channel_Resume(HCHANNEL chn);
+ virtual void CALL Channel_Stop(HCHANNEL chn);
+ virtual void CALL Channel_PauseAll();
+ virtual void CALL Channel_ResumeAll();
+ virtual void CALL Channel_StopAll();
+ virtual bool CALL Channel_IsPlaying(HCHANNEL chn);
+ virtual float CALL Channel_GetLength(HCHANNEL chn);
+ virtual float CALL Channel_GetPos(HCHANNEL chn);
+ virtual void CALL Channel_SetPos(HCHANNEL chn, float fSeconds);
+ virtual int CALL Channel_GetPos_BySample(HCHANNEL chn);
+ virtual void CALL Channel_SetPos_BySample(HCHANNEL chn, int iSample);
+ virtual void CALL Channel_SlideTo(HCHANNEL channel, float time, int volume, int pan = -101, float pitch = -1);
+ virtual bool CALL Channel_IsSliding(HCHANNEL channel);
+
+ virtual void CALL Input_GetMousePos(float *x, float *y);
+ virtual void CALL Input_SetMousePos(float x, float y);
+ virtual int CALL Input_GetMouseWheel();
+ virtual bool CALL Input_IsMouseOver();
+ virtual bool CALL Input_KeyDown(int key);
+ virtual bool CALL Input_KeyUp(int key);
+ virtual bool CALL Input_GetKeyState(int key);
+ virtual int CALL Input_GetKeyStateEx(int key);
+ virtual const char* CALL Input_GetKeyName(int key);
+ virtual int CALL Input_GetKey();
+ virtual int CALL Input_GetChar();
+ virtual bool CALL Input_GetEvent(hgeInputEvent *event);
+
+ virtual bool CALL Gfx_BeginScene(HTARGET target=0);
+ virtual void CALL Gfx_EndScene();
+ virtual void CALL Gfx_Clear(DWORD color);
+ virtual void CALL Gfx_RenderLine(float x1, float y1, float x2, float y2, DWORD color=0xFFFFFFFF, float z=0.5f);
+ virtual void CALL Gfx_RenderTriple(const hgeTriple *triple);
+ virtual void CALL Gfx_RenderQuad(const hgeQuad *quad);
+ virtual hgeVertex* CALL Gfx_StartBatch(int prim_type, HTEXTURE tex, int blend, int *max_prim);
+ virtual void CALL Gfx_FinishBatch(int nprim);
+ virtual void CALL Gfx_SetClipping(int x=0, int y=0, int w=0, int h=0);
+ virtual void CALL Gfx_SetTransform(float x=0, float y=0, float dx=0, float dy=0, float rot=0, float hscale=0, float vscale=0);
+
+ virtual HTARGET CALL Target_Create(int width, int height, bool zbuffer);
+ virtual void CALL Target_Free(HTARGET target);
+ virtual HTEXTURE CALL Target_GetTexture(HTARGET target);
+
+ virtual HTEXTURE CALL Texture_Create(int width, int height);
+ virtual HTEXTURE CALL Texture_Load(const char *filename, DWORD size=0, bool bMipmap=false);
+ virtual void CALL Texture_Free(HTEXTURE tex);
+ virtual int CALL Texture_GetWidth(HTEXTURE tex, bool bOriginal=false);
+ virtual int CALL Texture_GetHeight(HTEXTURE tex, bool bOriginal=false);
+ virtual DWORD* CALL Texture_Lock(HTEXTURE tex, bool bReadOnly=true, int left=0, int top=0, int width=0, int height=0);
+ virtual void CALL Texture_Unlock(HTEXTURE tex);
+
+ //////// Implementation ////////
+
+ static HGE_Impl* _Interface_Get();
+ void _FocusChange(bool bAct);
+ void _PostError(const char *error);
+
+
+ HINSTANCE hInstance;
+ HWND hwnd;
+
+ bool bActive;
+ char szError[256];
+ char szAppPath[_MAX_PATH];
+ char szIniString[256];
+
+
+ // System States
+ bool (*procFrameFunc)();
+ bool (*procRenderFunc)();
+ bool (*procFocusLostFunc)();
+ bool (*procFocusGainFunc)();
+ bool (*procGfxRestoreFunc)();
+ bool (*procExitFunc)();
+ const char* szIcon;
+ char szWinTitle[256];
+ int nScreenWidth;
+ int nScreenHeight;
+ int nScreenBPP;
+ bool bWindowed;
+ bool bZBuffer;
+ bool bTextureFilter;
+ char szIniFile[_MAX_PATH];
+ char szLogFile[_MAX_PATH];
+ bool bUseSound;
+ int nSampleRate;
+ int nFXVolume;
+ int nMusVolume;
+ int nStreamVolume;
+ int nHGEFPS;
+ bool bHideMouse;
+ bool bDontSuspend;
+ HWND hwndParent;
+
+ #ifdef DEMO
+ bool bDMO;
+ #endif
+
+
+ // Power
+ int nPowerStatus;
+ HMODULE hKrnl32;
+ GetSystemPowerStatusFunc lpfnGetSystemPowerStatus;
+
+ void _InitPowerStatus();
+ void _UpdatePowerStatus();
+ void _DonePowerStatus();
+
+
+ // Graphics
+ D3DPRESENT_PARAMETERS* d3dpp;
+
+ D3DPRESENT_PARAMETERS d3dppW;
+ RECT rectW;
+ LONG styleW;
+
+ D3DPRESENT_PARAMETERS d3dppFS;
+ RECT rectFS;
+ LONG styleFS;
+
+ IDirect3D9* pD3D;
+ IDirect3DDevice9* pD3DDevice;
+ IDirect3DVertexBuffer9* pVB;
+ IDirect3DIndexBuffer9* pIB;
+
+ IDirect3DSurface9* pScreenSurf;
+ IDirect3DSurface9* pScreenDepth;
+ CRenderTargetList* pTargets;
+ CRenderTargetList* pCurTarget;
+
+ D3DXMATRIX matView;
+ D3DXMATRIX matProj;
+
+ CTextureList* textures;
+ hgeVertex* VertArray;
+
+ int nPrim;
+ int CurPrimType;
+ int CurBlendMode;
+ HTEXTURE CurTexture;
+
+ bool _GfxInit();
+ void _GfxDone();
+ bool _GfxRestore();
+ void _AdjustWindow();
+ void _Resize(int width, int height);
+ bool _init_lost();
+ void _render_batch(bool bEndScene=false);
+ int _format_id(D3DFORMAT fmt);
+ void _SetBlendMode(int blend);
+ void _SetProjectionMatrix(int width, int height);
+
+
+ // Audio
+ //HINSTANCE hBass;
+ void* hOpenAL;
+ bool bSilent;
+ CStreamList* streams;
+ bool _SoundInit();
+ void _SoundDone();
+ void _SetMusVolume(int vol);
+ void _SetStreamVolume(int vol);
+ void _SetFXVolume(int vol);
+
+
+ // Input
+ int VKey;
+ int Char;
+ int Zpos;
+ float Xpos;
+ float Ypos;
+ bool bMouseOver;
+ bool bCaptured;
+ char keyz[256];
+ bool keylast[256];
+ CInputEventList* queue;
+ void _UpdateMouse();
+ void _InputInit();
+ void _ClearQueue();
+ void _BuildEvent(int type, int key, int scan, int flags, int x, int y);
+
+
+ // Resources
+ char szTmpFilename[_MAX_PATH];
+ CResourceList* res;
+ HANDLE hSearch;
+ WIN32_FIND_DATA SearchData;
+
+
+ // Timer
+ float fTime;
+ float fDeltaTime;
+ float fUpdateFPSDelay;
+ float nFPSf;
+ DWORD nFixedDelta;
+ int nFPS;
+ int Fcnt;
+ DWORD t0, t0fps, dt;
+ int cfps;
+
+
+private:
+ HGE_Impl();
+};
+
+extern HGE_Impl* pHGE;
+
+#endif
+