hge source explor 0x9 Power & Random & Ini

Power

  电源管理部分,会用到的参数为:

    // Power
    int                            nPowerStatus;
    HMODULE                        hKrnl32;
    GetSystemPowerStatusFunc       lpfnGetSystemPowerStatus;


_InitPowerStatus()

  初始化电源信息:

  • LoadLibrary("kernel32.dll")
  • 获得函数GetSystemPowerStatus地址
  • 调用_UpdatePowerStatus

void HGE_Impl::_InitPowerStatus()
{
    hKrnl32 = LoadLibrary("kernel32.dll");

    if(hKrnl32 != NULL)
        lpfnGetSystemPowerStatus = (GetSystemPowerStatusFunc)GetProcAddress(hKrnl32, "GetSystemPowerStatus");

    _UpdatePowerStatus();
}

_InitPowerStatus


 _UpdatePowerStatus()

  获得电源信息。


void HGE_Impl::_UpdatePowerStatus()
{
    SYSTEM_POWER_STATUS ps;

    if(lpfnGetSystemPowerStatus != NULL && lpfnGetSystemPowerStatus(&ps))
    {
        if(ps.ACLineStatus == 1)
        {
            nPowerStatus = HGEPWR_AC;
        }
        else if(ps.BatteryFlag < 128)
        {
            nPowerStatus = ps.BatteryLifePercent;
        }
        else
        {
            nPowerStatus = HGEPWR_UNSUPPORTED;
        }
    }
    else
    {
        nPowerStatus = HGEPWR_UNSUPPORTED;
    }
}

_UpdatePowerStatus


 _DonePowerStatus()

  结束,释放动态链接库。


void HGE_Impl::_DonePowerStatus()
{
    if(hKrnl32 != NULL) FreeLibrary(hKrnl32);
}

_DonePowerStatus


Random

  在这个模块中提供随机数,作为唯一的参数的 是随机数的种子。

unsigned int g_seed=0;


 Random_Seed(int seed)

  设置随机数的种子。


void CALL HGE_Impl::Random_Seed(int seed)
{
    if(!seed) g_seed=timeGetTime();
    else g_seed=seed;
}

Random_Seed


 Random_Int(int min, int max)

  线性同余法产生一个整型随机数,范围为(min,max)。


int CALL HGE_Impl::Random_Int(int min, int max)
{
    g_seed=214013*g_seed+2531011;
    return min+(g_seed ^ g_seed>>15)%(max-min+1);
}

Random_Int


 Random_Float(float min, float max)

  产生一个浮点型随机数,范围为(min,max)。


float CALL HGE_Impl::Random_Float(float min, float max)
{
    g_seed=214013*g_seed+2531011;
    //return min+g_seed*(1.0f/4294967295.0f)*(max-min);
    return min+(g_seed>>16)*(1.0f/65535.0f)*(max-min);
}

Random_Float


Ini

  在这个部分中,从指定的Ini文件中读取、写入数据,所以需要一ini文件。

    char                szIniFile[_MAX_PATH];


set(const char* section,const char* name,type value);

  写入不同类型的参数。


void CALL HGE_Impl::Ini_SetInt(const char *section, const char *name, int value)
{
    char buf[256];

    if(szIniFile[0]) {
        sprintf(buf,"%d",value);
        WritePrivateProfileString(section, name, buf, szIniFile);
    }
}

void CALL HGE_Impl::Ini_SetFloat(const char *section, const char *name, float value)
{
    char buf[256];

    if(szIniFile[0]) {
        sprintf(buf,"%f",value);
        WritePrivateProfileString(section, name, buf, szIniFile);
    }
}

void CALL HGE_Impl::Ini_SetString(const char *section, const char *name, const char *value)
{
    if(szIniFile[0]) WritePrivateProfileString(section, name, value, szIniFile);
}

Setter


get(const char* section,const char* name, type value);

  读取数据。


int CALL HGE_Impl::Ini_GetInt(const char *section, const char *name, int def_val)
{
    char buf[256];

    if(szIniFile[0]) {
        if(GetPrivateProfileString(section, name, "", buf, sizeof(buf), szIniFile))
        { return atoi(buf); }
        else { return def_val; }
    }
    return def_val;
}

float CALL HGE_Impl::Ini_GetFloat(const char *section, const char *name, float def_val)
{
    char buf[256];

    if(szIniFile[0]) {
        if(GetPrivateProfileString(section, name, "", buf, sizeof(buf), szIniFile))
        { return (float)atof(buf); }
        else { return def_val; }
    }
    return def_val;
}

char* CALL HGE_Impl::Ini_GetString(const char *section, const char *name, const char *def_val)
{
    if(szIniFile[0]) GetPrivateProfileString(section, name, def_val, szIniString, sizeof(szIniString), szIniFile);
    else strcpy(szIniString, def_val);
    return szIniString;
}

Getter



  接下来就是图形了!

时间: 2024-07-29 06:13:48

hge source explor 0x9 Power & Random & Ini的相关文章

hge source explor 0xC graphics Ⅲ

这里关于图形模块的内部接口部分 内部调用接口 内部接口主要完成:关于固定流水线的设置:dx的初始化:dx的结束 可以说内部接口已经完成了左右工作,只要进行组合调用即可 _GfxInit() DX的初始化函数 Direct3DCreate8 创建接口 GetAdapterIdentifier 获得设备信息,在这里可以查询设备能够做到什么 PRESENT_PARAMETER 参数的填写 CreateDevice 创建设备 _AdjustWindow 这个函数原来在window模块里已经考虑过,在这里

hge source explor 0x5 input module

Input Module 前面提到输入事件,那么对输入事件分类,分类如下 /* ** HGE Input Event type constants */ #define INPUT_KEYDOWN 1 #define INPUT_KEYUP 2 #define INPUT_MBUTTONDOWN 3 #define INPUT_MBUTTONUP 4 #define INPUT_MOUSEMOVE 5 #define INPUT_MOUSEWHEEL 6 接下来看每个函数 _InputInit

HGE source explor 0x0

本文准备开始HGE游戏引擎的代码阅读,其实我已经阅读完HGE的代码了,这里将准备再重新阅读代码.阅读代码将准备将代码拆开阅读,按每种功能分开来阅读,分别准备如下: 游戏的窗口 对于任意一个程序来说,一个窗口都是必须的,所以游戏的最基本的也是一个窗口.那么我们找到HGE关于游戏窗口的部分,详细了解这部分.(窗口君:我是一切的基础哦.) 游戏的输入信息 对于一个游戏来说,互动也是必须的,既然要互动那玩家的输入必不可少.在这里我们可以看到HGE关于输入的部分,创建输入的事件然后,当然是等处理.(输入君

hge source explor 0x8 timer

Timer 时间部分,在hge中提供对于fps的控制,时间的控制等. 其中会用到的参数有. hge_impl.h // Timer float fTime; float fDeltaTime; DWORD nFixedDelta; int nFPS; DWORD t0, t0fps, dt; int cfps; 在system.cpp中使用到,用来控制帧率 if(dt >= nFixedDelta) { // fDeltaTime = time step in seconds returned

hge source explor 0x4 input module

Input Module hge中的输入并没有用到Direct Input,在window消息构造输入信息. 对于鼠标和键盘,输入信息用一个结构来处理,hge中的信息事件的结构 /* ** HGE Input Event structure */ struct hgeInputEvent { int type; // event type int key; // key code int flags; // event flags int chr; // character code int w

hge source explor 0xA graphics Ⅰ

Graphics 在这一部分完成初始化DX,并且完成固定流水线,然后在进行渲染. 在这一部分会用到的数据结构和参数有: 参数: D3DPRESENT_PARAMETERS* d3dpp; D3DPRESENT_PARAMETERS d3dppW; D3DPRESENT_PARAMETERS d3dppFS; IDirect3D8* pD3D; IDirect3DDevice8* pD3DDevice; IDirect3DVertexBuffer8* pVB; IDirect3DIndexBuff

hge source explor 0x3 windows module

Windows窗口 在这里继续看窗口相关的函数,前面看到的部分能够生成一个窗口.在hge的代码中,我们可以看到别的函数处理窗口相关的事情,当然不是指的消息处理函数. 在hge中消息处理函数是最主要的函数之一,完成了整个游戏的信息输入. 另外的和窗口相关的函数是 graphics.cpp void HGE_Impl::_AdjustWindow() void HGE_Impl::_Resize(int width, int height) 从函数的名字中可以看到都是处理窗口的变化的函数   实现

hge source explor 0xB graphics Ⅱ

整个graphics.cpp文件可以分成4个部分:内部接口:纹理相关:渲染对象相关:DX初始化等. Texture & Target 关于纹理的部分: CTextureList struct CTextureList { HTEXTURE tex; int width; int height; CTextureList* next; };   Texture_Create(int width, int height) 创建纹理 D3DXCreateTexture创建一个纹理 HTEXTURE C

hge source explor 0xD graphics Ⅳ

外部接口 这里的接口提供给用户进行固定的步骤:BeginScene:自己的渲染:EndScene. 接下来从教程2的渲染顺序来看函数  Gfx_BeginScene(HTARGET targ) 在渲染前的准备工作 TestCooperativeLevel 测试设备是否可用 如果在窗口模式下要检测BackBufferFormat,并更新BPP _GfxRestore 重设dx 检测顶点缓存:如果顶点缓存为不为0,则还未调用EndScene 在当前渲染对象并非参数中的渲染对象时:设置表面.渲染对象.