Пример #1
0
KVOID Kylin::ActSkill::OnTriggered( Factor* pFactor )
{
	// 只有以位置的技能是范围处理
	KFLOAT fRadius = GetRange();
	assert(fRadius);

	KPoint3 kPos = pFactor->GetTranslate();
	
	KVEC<Ogre::Entity*> kEnts;
	
	if ( m_eType == AT_TAR)	
		HitTarget(pFactor->GetTarget());
	else
		OgreUtils::SphereQuery(kPos,fRadius,kEnts,KylinRoot::KR_NPC_MASK);
	
	for (KUINT i =0; i < kEnts.size(); i++)
	{
		if (kEnts[i]->getUserAny().isEmpty())
			continue;

		KUINT uID = Ogre::any_cast<KUINT>(kEnts[i]->getUserAny());
		if (uID != GetHostWorldID())
			HitTarget(uID);
	}
}
Пример #2
0
void CHSMissile::DoCycle()
{
    // Do we need to delete ourselves?
    if (m_delete_me)
    {
        // Remove us from space
        CHSUniverse *cSource;
        cSource = GetUniverse();
        if (cSource)
        {
            cSource->RemoveObject(this);
        }

        // Purge the object representing the missile prior to deallocating
        // memory
        if (hsInterface.ValidObject(GetDbref()))
        {
            hsInterface.DestroyObject(GetDbref());
        }

        return;
    }

    // If we have no target or no parent, remove us from space.
    if (!m_target || !m_pData || !m_target->IsActive())
    {
        hs_log("CHSMissile::DoCycle() Missile Data Invalid - Removing Object.");
        m_delete_me = true;
        return;
    }

    // Do we know how much time is left until we die?
    if (m_timeleft < 0)
    {
        CalculateTimeLeft();
    }
    else
    {
        m_timeleft--;
    }

    // Missile depleted?
    if (0 == m_timeleft)
    {

        m_delete_me = true;
        return;
    }

    // Change the missile heading toward the target
    ChangeHeading();

    // Move us closer to the target.
    MoveTowardTarget();

    // The MoveTowardTarget() checks to see if the missile hits
    // so we just have to check our flag.
    if (m_target_hit)
    {

        // If we aren't designated to miss, apply damage
        if (m_specified_miss != true)
        {
            // BOOM!
            HitTarget();
        }

        m_delete_me = true;     // Delete next time around
    }
}