📄 mhmap.cpp
字号:
if(mapDesc->bSun)
{
VECTOR3 pos;
Normalize(&pos,&mapDesc->SunPos);
pos = pos * mapDesc->SunDistance;
pos = m_ShadowPivotPos;// + pos;
pos.x += 10000;
pos.y -= 2000;
m_SunObject.SetEngObjPosition(&pos);
}
}
DWORD CMHMap::GetTileWidth()
{
if(m_pTileManager)
return m_pTileManager->GetTileWidth();
return 100;
}
BOOL CMHMap::CollisionLine(VECTOR3* pStart,VECTOR3* pEnd, VECTOR3* Target, MAPTYPE MapNum,CObject* pObject)
{
if(m_pTileManager == NULL)
return FALSE;
return m_pTileManager->CollisionLine(pStart, pEnd, Target, MapNum,pObject);
}
BOOL CMHMap::IsInTile(int cellX, int cellY, MAPTYPE MapNum,CObject* pObject)
{
if(m_pTileManager == NULL)
return FALSE;
if(m_pTileManager->IsInTile(cellX, cellY, MapNum, pObject))
{
return TRUE;
}
return FALSE;
}
BOOL CMHMap::CollisionTileCell(int x, int y, MAPTYPE MapNum,CObject* pObject)
{
if(m_pTileManager == NULL)
return FALSE;
if(m_pTileManager->CollisionTile(x, y, MapNum,pObject))
{
return FALSE;
}
return TRUE;
}
BOOL CMHMap::CollisionTilePos(int x, int y, MAPTYPE MapNum,CObject* pObject)
{
if(m_pTileManager == NULL)
return FALSE;
if(m_pTileManager->CollisionTile(int(x/ TILECOLLISON_DETAIL), int(y/ TILECOLLISON_DETAIL), MapNum, pObject))
{
return TRUE;
}
return FALSE;
}
BOOL CMHMap::CollisonCheck(VECTOR3* pStart,VECTOR3* pEnd,VECTOR3* pRtCollisonPos,CObject* pObj)
{
if(m_pTileManager == NULL)
return FALSE;
if(m_pTileManager->CollisonCheck(pStart,pEnd,pRtCollisonPos,pObj) == TRUE)
return TRUE;
return FALSE;
}
void CMHMap::SetShadowPivotPos(VECTOR3* pPivotPos)
{
m_ShadowPivotPos = *pPivotPos;
VECTOR3 pos;
// pos = m_ShadowPivotPos + mapDesc->SunPos;
pos = m_ShadowPivotPos + m_SunPosForShadow;
m_Shadowlight.SetPosition(&pos);
LIGHT_DESC desc;
m_Shadowlight.GetLightDesc(&desc);
desc.v3Point = pos;
desc.v3To = m_ShadowPivotPos;
m_Shadowlight.SetLightDesc(&desc);
}
BOOL CMHMap::LoadMapDesc(BYTE MapNum)
{
char mapdescfile[256];
CMHFile file;
#ifdef _FILE_BIN_
sprintf(mapdescfile,"ini\\MAP%d.bmhm",MapNum);
if(file.Init(mapdescfile,"rb") == FALSE)
return FALSE;
#else
sprintf(mapdescfile,"ini\\MAP%d.mhm",MapNum);
if(file.Init(mapdescfile,"r") == FALSE)
return FALSE;
#endif
char value[64] = {0,};
SAFE_DELETE(mapDesc);
mapDesc = new MAPDESC;
while(1)
{
if(file.IsEOF())
break;
strcpy(value,strupr(file.GetString()));
if(strcmp(value,"*SIGHT") == 0)
{
mapDesc->DefaultSight = file.GetFloat();
}
else if(strcmp(value,"*FOV") == 0)
{
mapDesc->Fov = file.GetFloat();
}
else if(strcmp(value,"*FOG") == 0)
{
mapDesc->fogdesc.bEnable = file.GetBool();
}
else if(strcmp(value,"*BRIGHT") == 0)
{
DWORD dd;
dd = file.GetDword();
mapDesc->Ambient = RGBA_MAKE(dd,dd,dd,dd);
}
else if(strcmp(value,"*FOGCOLOR") == 0)
{
DWORD r,g,b,a;
r = file.GetDword();
g = file.GetDword();
b = file.GetDword();
a = file.GetDword();
mapDesc->fogdesc.dwColor = RGBA_MAKE(r,g,b,a);
}
else if(strcmp(value,"*FOGDENSITY") == 0)
{
mapDesc->fogdesc.fDensity = file.GetFloat();
}
else if(strcmp(value,"*FOGSTART") == 0)
{
mapDesc->fogdesc.fStart = file.GetFloat();
}
else if(strcmp(value,"*FOGEND") == 0)
{
mapDesc->fogdesc.fEnd = file.GetFloat();
}
else if(strcmp(value,"*MAP") == 0)
{
file.GetString(mapDesc->MapFileName);
}
else if(strcmp(value,"*TILE") == 0)
{
file.GetString(mapDesc->TileFileName);
}
else if(strcmp(value,"*SKYMOD") == 0)
{
file.GetString(mapDesc->SkyMod);
}
else if(strcmp(value,"*SKYANM") == 0)
{
file.GetString(mapDesc->SkyAnm);
}
else if(strcmp(value,"*SKYBOX") == 0)
{
mapDesc->bSky = file.GetBool();
}
else if(strcmp(value,"*BGM") == 0)
{
mapDesc->BGMSoundNum = file.GetWord();
}
else if(strcmp(value,"*COLOR") == 0)
{
BYTE r = file.GetByte();
BYTE g = file.GetByte();
BYTE b = file.GetByte();
mapDesc->Ambient = RGBA_MAKE(r,g,b,255);
}
else if(strcmp(value,"*SUNPOS") == 0)
{
mapDesc->SunPos.x = file.GetFloat();
mapDesc->SunPos.y = file.GetFloat();
mapDesc->SunPos.z = file.GetFloat();
float dist = VECTOR3Length( &mapDesc->SunPos );
m_SunPosForShadow = mapDesc->SunPos / dist * 2000; //芭府绰 玫? //馆版焊促 陋酒具?
m_SunPosForShadow.y += 1000;
}
else if(strcmp(value,"*SUNOBJECT") == 0)
{
file.GetString(mapDesc->SunObject);
}
else if(strcmp(value,"*SUN") == 0)
{
mapDesc->bSun = file.GetBool();
}
else if(strcmp(value,"*SUNDISTANCE") == 0)
{
mapDesc->SunDistance = file.GetFloat();
}
else if(strcmp(value,"*BACKCOLOR") == 0)
{
DWORD r,g,b,a;
r = file.GetDword();
g = file.GetDword();
b = file.GetDword();
a = file.GetDword();
mapDesc->backColor = RGBA_MAKE(r,g,b,a);
}
else if(strcmp(value,"*FIXHEIGHT") == 0)
{
mapDesc->bFixHeight = TRUE;
mapDesc->FixHeight = file.GetFloat();
}
else if(strcmp(value,"*CLOUD") == 0)
{
mapDesc->CloudNum = file.GetDword();
}
else if(strcmp(value,"*CLOUDLIST") == 0)
{
file.GetString(mapDesc->CloudListFile);
}
else if(strcmp(value,"*CLOUDHEIGHT") == 0)
{
mapDesc->CloudHMin = file.GetInt();
mapDesc->CloudHMax = file.GetInt();
}
else if(strcmp(value,"*CAMERAFILTER") == 0)
{
file.GetString(mapDesc->CameraFilter);
}
else if(strcmp(value,"*CAMERAFILTERDIST") == 0)
{
mapDesc->CameraFilterDist = file.GetFloat();
}
}
file.Release();
return TRUE;
}
void CMHMap::LoadStaticNpc(MAPTYPE MapNum)
{
MAPTYPE npcMapnum;
char value[256] = {0,};
CMHFile file;
#ifdef _FILE_BIN_
file.Init("Resource/StaticNpc.bin","rb");
#else
file.Init("Resource/StaticNpc.txt","rt");
#endif
if(file.IsInited() == FALSE)
return;
NPC_TOTALINFO tinfo;
BASEOBJECT_INFO binfo;
BASEMOVE_INFO minfo;
DWORD n=0;
char idxbuf[128] = { 0, };
char seps[] = ",";
char* token = NULL;
while(1)
{
if(file.IsEOF())
break;
npcMapnum = file.GetDword();
if(npcMapnum != MapNum)
{
file.GetLine(value,256);
continue;
}
binfo.dwObjectID = STATICNPC_ID_START + n++;
binfo.ObjectState = 0;
tinfo.MapNum = MapNum;
minfo.bMoving = FALSE;
minfo.KyungGongIdx = 0;
minfo.MoveMode = 0;
tinfo.NpcKind = file.GetWord();
file.GetString(binfo.ObjectName);
tinfo.NpcUniqueIdx = file.GetWord();
NPC_LIST* pInfo = GAMERESRCMNGR->GetNpcInfo(tinfo.NpcKind);
if(pInfo)
{
tinfo.NpcJob = pInfo->JobKind;
}
else
{
tinfo.NpcJob = 0;
}
//jop捞 0捞搁 捞抚阑 瘤快磊.
if( tinfo.NpcJob == 0 )
{
binfo.ObjectName[0] = 0;
}
minfo.CurPosition.x = file.GetFloat();
minfo.CurPosition.y = 0;
minfo.CurPosition.z = file.GetFloat();
CNpc* pNpc = OBJECTMGR->AddNpc(&binfo,&minfo,&tinfo);
//规氢.....
float fDir = file.GetFloat();
pNpc->SetAngle( DEGTORAD( fDir ) );
GAMEIN->GetMiniMapDialog()->AddStaticNpcIcon(pNpc);
// Npc Add
QUESTMGR->SetNpcData( pNpc );
}
file.Release();
}
void CMHMap::AddQuestNpc( QUESTNPCINFO* pInfo )
{
if( pInfo->wMapNum != GetMapNum() )
return;
CObject* pObject = OBJECTMGR->GetObject( pInfo->dwObjIdx );
if( pObject )
return;
NPC_TOTALINFO tinfo;
BASEOBJECT_INFO binfo;
BASEMOVE_INFO minfo;
binfo.dwObjectID = STATICNPC_ID_START + m_dwQuestNpcId++;
pInfo->dwObjIdx = binfo.dwObjectID;
binfo.ObjectState = 0;
tinfo.MapNum = pInfo->wMapNum;
minfo.bMoving = FALSE;
minfo.KyungGongIdx = 0;
minfo.MoveMode = 0;
tinfo.NpcKind = pInfo->wNpcKind;
strcpy( binfo.ObjectName, pInfo->sName );
tinfo.NpcUniqueIdx = pInfo->wNpcIdx;
NPC_LIST* pList = GAMERESRCMNGR->GetNpcInfo(tinfo.NpcKind);
if(pInfo)
{
tinfo.NpcJob = pList->JobKind;
}
else
{
tinfo.NpcJob = 0;
}
minfo.CurPosition.x = pInfo->vPos.x;
minfo.CurPosition.y = 0;
minfo.CurPosition.z = pInfo->vPos.z;
CNpc* pNpc = OBJECTMGR->AddNpc(&binfo,&minfo,&tinfo);
//规氢.....
float fDir = pInfo->fDir;
pNpc->SetAngle( DEGTORAD( fDir ) );
GAMEIN->GetMiniMapDialog()->AddStaticNpcIcon(pNpc);
// Npc Add
QUESTMGR->SetNpcData( pNpc );
TARGETSET set;
set.pTarget = pNpc;
EFFECTMGR->StartEffectProcess(eEffect_MonRegen,pNpc,&set,0,pNpc->GetID());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -