⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gm_unit.cpp

📁 混乱竞技场的全套代码,客户端资源可以网上搜
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	//ranged
	inifile.GetString(str, 200, "resource", "ranged" );
	if(str[0]!=0)
	{
		m_ani_ranged.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_ranged.Create(str);
		//m_ani_ranged.SetCache();
	}
	//spell
	inifile.GetString(str, 200, "resource", "spell" );
	if(str[0]!=0)
	{
		m_ani_spell.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_spell.Create(str);
		//m_ani_spell.SetCache();
	}
	//block
	inifile.GetString(str, 200, "resource", "block" );
	if(str[0]!=0)
	{
		m_ani_block.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_block.Create(str);
		//m_ani_block.SetCache();
	}
	//flinch
	inifile.GetString(str, 200, "resource", "flinch" );
	if(str[0]!=0)
	{
		m_ani_flinch.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_flinch.Create(str);
		//m_ani_flinch.SetCache();
	}
	//fidget
	inifile.GetString(str, 200, "resource", "fidget" );
	if(str[0]!=0)
	{
		m_ani_fidget.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_fidget.Create(str);
		//m_ani_fidget.SetCache();
	}
	//begin_walk
	inifile.GetString(str, 200, "resource", "begin_walk" );
	if(str[0]!=0)
	{
		m_ani_begin_walk.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_begin_walk.Create(str);
		//m_ani_begin_walk.SetCache();
	}
	//end_walk
	inifile.GetString(str, 200, "resource", "end_walk" );
	if(str[0]!=0)
	{
		m_ani_end_walk.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_end_walk.Create(str);
		//m_ani_end_walk.SetCache();
	}
	//walk
	inifile.GetString(str, 200, "resource", "walk" );
	if(str[0]!=0)
	{
		m_ani_walk.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_walk.Create(str);
		//m_ani_walk.SetCache();
	}
	//run
	inifile.GetString(str, 200, "resource", "run" );
	if(str[0]!=0)
	{
		m_ani_run.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_run.Create(str);
		//m_ani_run.SetCache();
	}
	//wait
	inifile.GetString(str, 200, "resource", "wait" );
	if(str[0]!=0)
	{
		m_ani_wait.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_wait.Create(str);
		//m_ani_wait.SetCache();
	}
	//death
	inifile.GetString(str, 200, "resource", "death" );
	if(str[0]!=0)
	{
		m_ani_death.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_death.Create(str);
		//m_ani_death.SetCache();
	}

	//death
	inifile.GetString(str, 200, "resource", "arrow" );
	if(str[0]!=0)
	{
		m_ani_arrow.SetGsEngine(m_pWorld->GetGsEngine());
		m_ani_arrow.Create(str);
		//m_ani_death.SetCache();
	}

	SetSprite(m_FlatX, m_FlatY, m_fHeight, &m_ani_wait);
	SetFaceToAngle(m_degree_look_at, 0);
	RunSpriteWait(); 

	m_bRender	= FALSE;

	return TRUE;
}

/*
BOOL GM_Unit::CreateFromUnit(GM_Unit *pUnit, int x, int y, float h, float eyeshot, float seize, float tall, float face_to_degree )
{
	Cleanup();

	m_FlatX	= x;
	m_FlatY	= y;

	m_fHeight = h;

	m_melee_radius	= pUnit->m_melee_radius;
	m_ranged_radius	= pUnit->m_ranged_radius;


	UpdateRoughPos();

	if(eyeshot==0)
		eyeshot = pUnit->m_eyeshot_x;
	SetEyeshot(eyeshot);
	if(seize==0)
		seize = pUnit->m_seize_x;
	SetSeize(seize);

	if(tall<=0)
		tall	= pUnit->m_tall_rate;
	m_tall_rate	= tall;
	m_alpha		= 1.0f;

	m_degree_look_at	= face_to_degree;

	m_walk_speed	= pUnit->m_walk_speed;
	m_run_speed	= pUnit->m_run_speed;

	if(pUnit->&m_ani_melee)
	{
		&m_ani_melee		= pUnit->&m_ani_melee;
		&m_ani_melee->AddUser();
	}
	if(pUnit->&m_ani_ranged)
	{
		&m_ani_ranged		= pUnit->&m_ani_ranged;
		&m_ani_ranged->AddUser();
	}
	if(pUnit->&m_ani_spell)
	{
		&m_ani_spell		= pUnit->&m_ani_spell;
		&m_ani_spell->AddUser();
	}

	if(pUnit->&m_ani_block)
	{
		&m_ani_block		= pUnit->&m_ani_block;
		&m_ani_block->AddUser();
	}
	if(pUnit->&m_ani_flinch)
	{
		&m_ani_flinch		= pUnit->&m_ani_flinch;
		&m_ani_flinch->AddUser();
	}

	if(pUnit->&m_ani_fidget)
	{
		&m_ani_fidget		= pUnit->&m_ani_fidget;
		&m_ani_fidget->AddUser();
	}

	if(pUnit->&m_ani_begin_walk)
	{
		&m_ani_begin_walk		= pUnit->&m_ani_begin_walk;
		&m_ani_begin_walk->AddUser();
	}
	if(pUnit->&m_ani_end_walk)
	{
		&m_ani_end_walk		= pUnit->&m_ani_end_walk;
		&m_ani_end_walk->AddUser();
	}
	if(pUnit->&m_ani_walk)
	{
		&m_ani_walk		= pUnit->&m_ani_walk;
		&m_ani_walk->AddUser();
	}
	if(pUnit->&m_ani_run)
	{
		&m_ani_run		= pUnit->&m_ani_run;
		&m_ani_run->AddUser();
	}

	if(pUnit->&m_ani_wait)
	{
		&m_ani_wait		= pUnit->&m_ani_wait;
		&m_ani_wait->AddUser();
	}
	if(pUnit->&m_ani_death)
	{
		&m_ani_death		= pUnit->&m_ani_death;
		&m_ani_death->AddUser();
	}
	&m_ani_death		= NULL;

	CGsSprite*	pSprite	= new CGsSprite;
	pSprite->SetSprite(m_FlatX, m_FlatY, m_fHeight, &m_ani_wait, 1000);
	pSprite->SetFaceToAngle(m_degree_look_at, 0, GSANI_ACT_COUNT_LOOP);
	pSprite->RunSpriteWait(); 


	m_apSprite.push_back(pSprite);

	return true;
}
*/


VOID GM_Unit::Cleanup()
{


}






LONG GM_Unit::DoEndWalk()
{
	if(m_ani_end_walk.IsReady())
	{
		SetArriveMeet();
		SetSprite(&m_ani_end_walk);
		RunSpriteWait( 0, 1);
		return 0;
	}
	else
	{
		return -1;
	}
}

LONG GM_Unit::DoWalk()
{
	if(m_ani_walk.IsReady())
	{
		SetSprite(&m_ani_walk);
		RunSprite( GSANI_FRAME_NOCHANGE, GSANI_ACT_COUNT_LOOP);
		return 0;
	}
	else
	{
		return -1;//DoEndWalk();
	}
}

LONG GM_Unit::DoDeath()
{
	if(m_alpha>0)
	{
		m_alpha	-= 0.1f*m_pWorld->GetGsEngine()->m_dwPassTime/5000.0f;
		return 0;
	}
	else
	{
		return -1;
	}
}


VOID GM_Unit::OnWait()
{

}

VOID GM_Unit::OnMove()
{

}

BOOL GM_Unit::CanMelee()
{
	if(m_ani_melee.IsReady())
		return true;
	else
		return false;
}

BOOL GM_Unit::CanRanged()
{
	if(m_ani_ranged.IsReady() && m_ranged_radius>0.0f)
		return true;
	else
		return false;
}



VOID GM_Unit::RunAI()		
{ 
	//碰撞检测
	DoTestHit();
/*
	GM_Unit* ptr_unit_aim	= (GM_Unit*)m_pWorld->GetObject(m_aim_unit);
	GM_Unit* ptr_unit_lead	= (GM_Unit*)m_pWorld->GetObject(m_lead_unit);
	if(ptr_unit_aim)
	{
		ptr_unit_aim;
		if(TestRange(m_melee_radius, ptr_unit_aim))
		{
			if(CanMelee())//可以攻击
			{
				PlyMeleeTo(ptr_unit_aim->m_FlatX, ptr_unit_aim->m_FlatY, 1);
				return;
			}
			else
			{//逃跑
				//PlyWalkTo((m_fPosX-m_pUnitEnemy->m_fPosX));
			}
		}
		
		if(TestRange(m_ranged_radius, ptr_unit_aim))
		{
			if(CanRanged())//可以射击
			{
				PlyRanged(ptr_unit_aim->m_fPosX, ptr_unit_aim->m_fPosY-60);
				//GS_Magic_ChainLighting*	pChainLighting	= new GS_Magic_ChainLighting(m_pScene, this, m_pUnitEnemy);
				//pChainLighting->PlyCast();
				return;
			}
			
		}
	}

	if(ptr_unit_aim)
	{
		//if(TestEyeshot(m_pUnitEnemy))
		{//在视野范围内
			if(CanMelee() || CanRanged())
			{//靠近目标
				PlyWalkTo(ptr_unit_aim->m_FlatX, ptr_unit_aim->m_FlatY);
				DoTestHit();
			}
		}
		//else
		{//目标逃掉了
		//	m_pUnitEnemy	= NULL;
		//	RunAI();
		}
	}
	else
	{//寻找目标
		OBJ_MAP	map;
		m_pWorld->GetRangeDirectionObject(map, m_FlatX, m_FlatY, m_eyeshot_x, this);
		OBJ_MAP::iterator it	= map.begin();
		while(it!=map.end())
		{
			if(it->second->IsUnit())
			{
				GM_Unit* pUnit	= (GM_Unit*)it->second;
				if((m_relation[pUnit->m_force] & GSRELATION_BASE) == GSRELATION_ENEMY)
				{
					ptr_unit_aim	= pUnit;
					m_aim_unit		= ptr_unit_aim->GetID();
					break;
				}
			}
			it++;
		}
		map.clear();
	}

	switch(m_ai_type) 
	{
	case UNIT_AI_NONE:
		{
		}
		break;
	case UNIT_AI_PASSIVE:
		{
		}
		break;
	case UNIT_AI_WARLIKE:
		{
		}
		break;
	default:
	}
*/


}



VOID GM_Unit::DoTestHit()
{
	//CGsAnimation* pAni = m_apSprite[0]->GetAnimation();
	if(IsMoveing())
	{
		OBJ_MAP	map;
		m_pWorld->GetRangeAngleObject(map, m_FlatX, m_FlatY, m_seize_x, this);
		if(map.size()!=0)
		{
			OBJ_MAP::iterator it	= map.begin();
			float fa	= D3DXToRadian(GetFaceToDegree());
			float fmin	= fa;
			float fmax	= fa+const_2_PI;
			while(it!=map.end())
			{
				float fb = const_PI_DIV_2 + it->first;
				float fc = const_2_PI + it->first - const_PI_DIV_2;
				if(fc<fmin)
				{
					fb += const_2_PI;
					fc += const_2_PI;
				}
				else if(fb>fmax)
				{
					fb -= const_2_PI;
					fc -= const_2_PI;
				}
				if(fmin < fb)
					fmin = fb;
				if(fmax > fc)
				{
					fmax = fc;
				}
				if(fmax<fmin)
				{
					PlyWait();
					map.clear();
					return;
				}
				//if(it->second->IsUnit())
				//{
				//	GM_Unit* pUnit	= (GM_Unit*)it->second;
				//}
				it++;
			}
			map.clear();
			if(fmin - fa > fa + const_2_PI - fmax)
			{
				PlyWalk(D3DXToDegree(fmax));
			}
			else
			{
				PlyWalk(D3DXToDegree(fmin));
			}
		}
	}
}


BOOL GM_Unit::IsWaiting()
{
	if(m_pAnimation)
	{
		if(m_pAnimation==&m_ani_wait)
			return TRUE;
	}
	return FALSE;
}

BOOL GM_Unit::is_death()
{
	return m_pAnimation==&m_ani_death;
}


BOOL GM_Unit::is_melee()
{
	return m_pAnimation==&m_ani_melee;
}

BOOL GM_Unit::is_fidget()
{
	return m_pAnimation==&m_ani_fidget;

}

BOOL GM_Unit::is_wait()
{
	return m_pAnimation==&m_ani_wait;

}

BOOL GM_Unit::is_flinch()
{
	return m_pAnimation==&m_ani_flinch;

}

BOOL GM_Unit::is_walk()
{
	return (m_pAnimation==&m_ani_walk||m_pAnimation==&m_ani_begin_walk||m_pAnimation==&m_ani_end_walk);

}
BOOL GM_Unit::is_ranged()
{
	return m_pAnimation==&m_ani_ranged;

}
BOOL GM_Unit::is_spell()
{
	return m_pAnimation==&m_ani_spell;

}
BOOL GM_Unit::is_block()
{
	return m_pAnimation==&m_ani_block;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -