📄 gameunitmgr.cpp
字号:
// GameUnitMgr.cpp: implementation of the GameUnitMgr class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GameUnitMgr.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GameUnitMgr::GameUnitMgr()
{
m_seed = UID_SEED_BEGIN;
difficulty_level = 0;
}
GameUnitMgr::~GameUnitMgr()
{
}
uint32 GameUnitMgr::new_uid()
{
while(m_game_unit_map.find(m_seed)!=m_game_unit_map.end())
{
m_seed++;
if(m_seed>UID_SEED_END)
{
m_seed = UID_SEED_BEGIN;
}
}
return m_seed++;
}
GAME_UNIT* GameUnitMgr::get_game_unit(uint32 uid)
{
GAME_UNIT_MAP::iterator it = m_game_unit_map.find(uid);
if(it!=m_game_unit_map.end())
{
return &it->second;
}
return NULL;
}
GAME_UNIT* GameUnitMgr::create_unit()
{
uint32 uid = new_uid();
GAME_UNIT* p = &m_game_unit_map[uid];
memset(p, 0, sizeof(GAME_UNIT));
p->uid = uid;
return p;
}
bool GameUnitMgr::LoadCFG(const char *strCFG)
{
CFG cfg;
if(FALSE==cfg.open(strCFG))
return FALSE;
m_aMonster.clear();
difficulty_level = cfg.GetFloat("main", "difficulty", "1.0f");
if(difficulty_level<0.5f)
difficulty_level = 0.5f;
char str[100];
for(int i=0; i<10000; i++)
{
sprintf(str, "monster_%d", i+1);
GAME_MONSTER game_monster;
game_monster.unit_type = cfg.GetLong(str, "unit_type");
if(game_monster.unit_type==0)
break;
game_monster.nick_name = cfg.GetString(str, "nick_name");
//base
game_monster.base_level = cfg.GetLong(str, "base_level");
game_monster.base_experience = cfg.GetLong(str, "base_experience");
game_monster.base_life = cfg.GetLong(str, "base_life")*difficulty_level;
game_monster.base_mana = cfg.GetLong(str, "base_mana")*difficulty_level;
game_monster.base_damage = cfg.GetLong(str, "base_damage");
game_monster.base_strength = cfg.GetLong(str, "base_strength");
game_monster.base_agility = cfg.GetLong(str, "base_agility", "20");
game_monster.base_magic = cfg.GetLong(str, "base_magic", "20");
//生成配置
game_monster.pos_x = cfg.GetLong(str, "pos_x");
game_monster.pos_y = cfg.GetLong(str, "pos_y");
game_monster.base_revive_time = cfg.GetLong(str, "base_revive_time"); //毫秒
//使用ai处理的频率
game_monster.base_ai_time = cfg.GetLong(str, "base_ai_time");
game_monster.base_eye_shot = cfg.GetLong(str, "base_eye_shot");
game_monster.ai_time = float(rand())/(RAND_MAX+1)*game_monster.base_ai_time;;
game_monster.revive_time = float(rand())/(RAND_MAX+1)*game_monster.base_revive_time;
for(int j=0; j<5; j++)
{
char str_temp[20];
sprintf(str_temp, "magic_%d", j+1);
game_monster.magics[j] = cfg.GetLong(str, str_temp);
if(game_monster.magics[j]==0)
{
game_monster.magics[j] = game_monster.magics[(int)(j*float(rand())/(RAND_MAX+1))];
}
sprintf(str_temp, "skill_%d", j+1);
game_monster.skills[j] = cfg.GetLong(str, str_temp);
if(game_monster.skills[j]==0)
{
game_monster.skills[j] = game_monster.skills[(int)(j*float(rand())/(RAND_MAX+1))];
}
}
m_aMonster.push_back(game_monster);
GAME_MONSTER g_m = game_monster;
m_aMonster.push_back(g_m);
// GAME_MONSTER g_m_1 = game_monster;
// m_aMonster.push_back(g_m_1);
// GAME_MONSTER g_m_2 = game_monster;
// m_aMonster.push_back(g_m_2);
}
return TRUE;
}
LONG GameUnitMgr::DoUpdate()
{
return 0;
}
void GameUnitMgr::delete_unit(uint32 uid)
{
GAME_UNIT_MAP::iterator it = m_game_unit_map.find(uid);
if(it!=m_game_unit_map.end())
{
m_game_unit_map.erase(it);
}
}
uint16 GameUnitMgr::query_monster_magic(uint32 uid)
{
GAME_UNIT* pUnit = get_game_unit(uid);
if(pUnit==NULL)
return 0;
return m_aMonster[pUnit->monster_index].magics[(int)(5*float(rand())/(RAND_MAX+1))];
}
uint16 GameUnitMgr::query_monster_skill(uint32 uid)
{
GAME_UNIT* pUnit = get_game_unit(uid);
if(pUnit==NULL)
return 0;
return m_aMonster[pUnit->monster_index].skills[(int)(5*float(rand())/(RAND_MAX+1))];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -