📄 mapinfo.cpp
字号:
return intersect;
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
void CMapInfo::ColRToMobile( RECT &rt, POINT step, CMobileObject **ppmos,
int num, int except, UINT team, bool checkteam,
int &hit )
{
hit = -1;
for ( int i=0; i<num; i++ ) {
if ( i == except || !ppmos[i] ||
( ppmos[i]->GetStat() & OBJSTAT_CADAVER ) )
continue;
if ( checkteam && team == ppmos[i]->m_uiTeamType )
continue;
if ( ColR2R( rt, ppmos[i]->GetRect(), step ) )
hit = i;
}
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
void CMapInfo::ColRToB( POINT <, WidthType wt, POINT step, DWORD block_land,
DWORD &over_land, DWORD remove_land, POINT *ptChanged,
int &changed )
{
BLOCK *pblks[4];
POINT index[4];
int mask[4];
DWORD over_ret, land;
bool bBlocked;
int total = 0;
int bound;
// Boundary test
if ( wt == WIDTH_32 )
bound = g_FrameWidth-32;
else
bound = g_FrameWidth-16;
if ( lt.x < 0 )
lt.x = 0;
else if ( lt.x > bound )
lt.x = bound;
if ( lt.y < 0 )
lt.y = 0;
else if ( lt.y > bound )
lt.y = bound;
// Block Test
do {
// 4 block indices
index[0].x = lt.x / g_FrameSmall;
index[0].y = lt.y / g_FrameSmall;
index[2].x = index[0].x;
index[1].x = index[0].x + 1;
index[3].x = index[1].x;
index[1].y = index[0].y;
index[2].y = index[0].y + 1;
index[3].y = index[2].y;
// 4 masks
if ( wt == WIDTH_32 )
Get4Mask( lt.x, lt.y, mask );
else
Get4Mask16( lt.x, lt.y, mask );
// Test with these 4 blocks
bBlocked = false;
over_ret = 0;
for ( int i=0; i<4; i++ )
{
pblks[i] = m_pBlocks + index[i].y * m_cxBlocks + index[i].x;
if ( mask[i] & pblks[i]->byObstacle ) // overlap
{
land = 1 << pblks[i]->byClass;
if ( land & remove_land ) { // remove
if ( total < changed ) {
pblks[i]->byObstacle &= ~mask[i];
ptChanged[total] = index[i];
}
total++;
}
if ( land & block_land ) { // block
bBlocked = true;
}
if ( land & over_land ) // over, set the bit
over_ret |= land;
}
}
// Block or not
if ( bBlocked ) {
if ( step.x != 0 ) {
while ( lt.x % 16 != 0 )
lt.x -= step.x;
}
else if ( step.y != 0 ) {
while ( lt.y % 16 != 0 )
lt.y -= step.y;
}
} else
break;
} while (true);
// Set return values
changed = total;
over_land = over_ret;
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
void CMapInfo::Get4Mask( int left, int top, int *mask) {
int iver = top % g_FrameSmall,
ihor = left % g_FrameSmall;
// Assign mask array, LT-RT-LB-RB
// All case here.
if ( iver > g_FrameBasis) {
if ( ihor > g_FrameBasis ) { // 1:2:2:4
mask[0] = 2;
mask[1] = 6;
mask[2] = 3;
mask[3] = 15;
} else if ( ihor == g_FrameBasis ) { // 1:1:2:2
mask[0] = 2;
mask[1] = 4;
mask[2] = 3;
mask[3] = 12;
} else if ( ihor > 0 ) { // 2:1:4:2
mask[0] = 6;
mask[1] = 4;
mask[2] = 15;
mask[3] = 12;
} else { // 2:0:4:0
mask[0] = 6;
mask[1] = 0;
mask[2] = 15;
mask[3] = 0;
}
} else if ( iver == g_FrameBasis ) {
if ( ihor > g_FrameBasis ) { // 1:2:1:2
mask[0] = 2;
mask[1] = 6;
mask[2] = 1;
mask[3] = 9;
} else if ( ihor == g_FrameBasis ) { // 1:1:1:1
mask[0] = 2;
mask[1] = 4;
mask[2] = 1;
mask[3] = 8;
} else if ( ihor > 0 ) { // 2:1:2:1
mask[0] = 6;
mask[1] = 4;
mask[2] = 9;
mask[3] = 8;
} else { // 2:0:2:0
mask[0] = 6;
mask[1] = 0;
mask[2] = 9;
mask[3] = 0;
}
} else if ( iver > 0 ) {
if ( ihor > g_FrameBasis ) { // 2:4:1:2
mask[0] = 3;
mask[1] = 15;
mask[2] = 1;
mask[3] = 9;
} else if ( ihor == g_FrameBasis ) { // 2:2:1:1
mask[0] = 3;
mask[1] = 12;
mask[2] = 1;
mask[3] = 8;
} else if ( ihor > 0 ) { // 4:2:2:1
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else { // 4:0:2:0
mask[0] = 15;
mask[1] = 0;
mask[2] = 9;
mask[3] = 0;
}
} else {
if ( ihor > g_FrameBasis ) { // 2:4:0:0
mask[0] = 3;
mask[1] = 15;
mask[2] = 0;
mask[3] = 0;
} else if ( ihor == g_FrameBasis ) { // 2:2:0:0
mask[0] = 3;
mask[1] = 12;
mask[2] = 0;
mask[3] = 0;
} else if ( ihor > 0 ) { // 4:2:0:0
mask[0] = 15;
mask[1] = 12;
mask[2] = 0;
mask[3] = 0;
} else { // 4:0:0:0
mask[0] = 15;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
}
}
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
void CMapInfo::Get4Mask16( int left, int top, int *mask) {
int iver = top % g_FrameSmall,
ihor = left % g_FrameSmall;
// Assign mask array, LT-RT-LB-RB
// All case here.
if ( iver > g_FrameBasis) {
if ( ihor > g_FrameBasis ) { // 1:2:2:4
mask[0] = 2;
mask[1] = 4;
mask[2] = 1;
mask[3] = 8;
} else if ( ihor == g_FrameBasis ) { // 1:1:2:2
mask[0] = 2;
mask[1] = 0;
mask[2] = 1;
mask[3] = 0;
} else if ( ihor > 0 ) { // 2:1:4:2
mask[0] = 6;
mask[1] = 0;
mask[2] = 9;
mask[3] = 0;
} else { // 2:0:4:0
mask[0] = 4;
mask[1] = 0;
mask[2] = 8;
mask[3] = 0;
}
} else if ( iver == g_FrameBasis ) {
if ( ihor > g_FrameBasis ) { // 1:2:1:2
mask[0] = 2;
mask[1] = 4;
mask[2] = 0;
mask[3] = 0;
} else if ( ihor == g_FrameBasis ) { // 1:1:1:1
mask[0] = 2;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
} else if ( ihor > 0 ) { // 2:1:2:1
mask[0] = 6;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
} else { // 2:0:2:0
mask[0] = 4;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
}
} else if ( iver > 0 ) {
if ( ihor > g_FrameBasis ) { // 2:4:1:2
mask[0] = 3;
mask[1] = 12;
mask[2] = 0;
mask[3] = 0;
} else if ( ihor == g_FrameBasis ) { // 2:2:1:1
mask[0] = 3;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
} else if ( ihor > 0 ) { // 4:2:2:1
mask[0] = 15;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
} else { // 4:0:2:0
mask[0] = 12;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
}
} else {
if ( ihor > g_FrameBasis ) { // 2:4:0:0
mask[0] = 1;
mask[1] = 8;
mask[2] = 0;
mask[3] = 0;
} else if ( ihor == g_FrameBasis ) { // 2:2:0:0
mask[0] = 1;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
} else if ( ihor > 0 ) { // 4:2:0:0
mask[0] = 9;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
} else { // 4:0:0:0
mask[0] = 8;
mask[1] = 0;
mask[2] = 0;
mask[3] = 0;
}
}
}
//-----------------------------------------------------------------------------
// Name:
// Desc:
//-----------------------------------------------------------------------------
/*
All case here.
if ( iver > g_FrameBasis) {
if ( ihor > g_FrameBasis ) { // 1:2:2:4
mask[0] = 3;
mask[1] = 15;
mask[2] = 1;
mask[3] = 8;
} else if ( ihor == g_FrameBasis ) { // 1:1:2:2
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else if ( ihor > 0 ) { // 2:1:4:2
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else { // 2:0:4:0
mask[0] = 15;
mask[1] = 0;
mask[2] = 9;
mask[3] = 0;
}
} else if ( iver == g_FrameBasis ) {
if ( ihor > g_FrameBasis ) { // 1:2:1:2
mask[0] = 3;
mask[1] = 15;
mask[2] = 1;
mask[3] = 8;
} else if ( ihor == g_FrameBasis ) { // 1:1:1:1
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else if ( ihor > 0 ) { // 2:1:2:1
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else { // 2:0:2:0
mask[0] = 15;
mask[1] = 0;
mask[2] = 9;
mask[3] = 0;
}
} else if ( iver > 0 ) {
if ( ihor > g_FrameBasis ) { // 2:4:1:2
mask[0] = 3;
mask[1] = 15;
mask[2] = 1;
mask[3] = 8;
} else if ( ihor == g_FrameBasis ) { // 2:2:1:1
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else if ( ihor > 0 ) { // 4:2:2:1
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else { // 4:0:2:0
mask[0] = 15;
mask[1] = 0;
mask[2] = 9;
mask[3] = 0;
}
} else {
if ( ihor > g_FrameBasis ) { // 2:4:0:0
mask[0] = 3;
mask[1] = 15;
mask[2] = 1;
mask[3] = 8;
} else if ( ihor == g_FrameBasis ) { // 2:2:0:0
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else if ( ihor > 0 ) { // 4:2:0:0
mask[0] = 15;
mask[1] = 12;
mask[2] = 9;
mask[3] = 8;
} else { // 4:0:0:0
mask[0] = 15;
mask[1] = 0;
mask[2] = 9;
mask[3] = 0;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -