Пример #1
0
bool RTFformatting::SanitiseBullets(const RTFPCData* pData, CWideString& wsListNumberText) const
{
	USES_CONVERSION;

	bool bUseFontFromListTable = false;

	if (pData == NULL || !pData->HasContent())
		return bUseFontFromListTable;

	const CWideString& cwsInputString = pData->GetContent();

	for (int ii = 0; ii < cwsInputString.GetLength() ; ii++)
	{
		WCHAR w = cwsInputString[ii];
		if (IsBullet(w)||isalpha( w )||isdigit(w))
		{
			wsListNumberText = cwsInputString;

			if (IsBullet(w))
			{
				if (wsListNumberText.GetLength() > 1 && wsListNumberText.GetData()[wsListNumberText.GetLength()-1] == L';')
					wsListNumberText.Left(wsListNumberText, wsListNumberText.GetLength()-1); // only one char for a bullet - this eliminates the ;
				bUseFontFromListTable = true;
			}
			break;
		}
	}

	return bUseFontFromListTable;
}
DWORD GObjectBulletPmp::Update(long idx)
{
    this->Animations[State].ProcAnimation(Game::AnimationTicker::Tick);

    if(this->Animations[State].CurrentFrame == 1 )
    {
        //do the dmg and destroy obj

        for(size_t i = 0; i < Game::ObjectBuffer::Buffer.size() ; i++)
        {
            GObject* Obj = Game::ObjectBuffer::Buffer[i];
            if(IsPlayer(Obj->ObjectType) || IsBullet(Obj->ObjectType)) continue;

            float Distance = Vec3Distance(&this->Position , &Obj->Position);
            if(Distance < this->Radius + Obj->Radius )
            {
                Obj->Health -= Power;
                Game::LastDamage = Power;
            }
        }

    }

    if(this->Animations[State].Ended)
    {
        this->Animations[State].ResetAnimation();
        return OBJECT_DESTROY;
    }

    return OBJECT_IDLE;
}
Пример #3
0
DWORD GObjectDecoreRock::Update(long idx)
{
	for(int i = 0 ; i < Game::ObjectBuffer::Buffer.size() ; i++)
	{
		if(IsBullet(Game::ObjectBuffer::Buffer[i]->ObjectType))
		{
			float Delta = Vec3Distance(&Position , &Game::ObjectBuffer::Buffer[i]->Position);
			if(Delta < Radius + Game::ObjectBuffer::Buffer[i]->Radius)
			{
				Game::ObjectBuffer::DestroyObject(i);
				i--;
			}
		}
	}
			return OBJECT_IDLE;
}
Пример #4
0
void	CMover::CMD_SetRangeAttack( OBJID idTarget, int nPower )
{
	TRACE("CMD_SetRangeAttack(%d, %d)\n", idTarget, nPower );

	if( m_pActMover->IsActAttack() )		// 이미 어택중이면 취소.
		return;

	if( IsDie() )	
		return;								// 죽었을때 사용금지.
	
	ItemProp *pItemProp = GetActiveHandItemProp();
	if( pItemProp == NULL )		
		return;
	
	if( pItemProp->dwItemKind3 != IK3_BOW )	// 들고있는 무기가 보우가 아니면 에러
		return;
	
	if( IsBullet( pItemProp ) == FALSE )
		return;
	
	ClearActParam();
	SetDestObj( idTarget, GetAttackRange( pItemProp->dwAttackRange ), TRUE );		// 이동할 목표물(idTarget)과 그 거리를 설정 
	SetCmd( OBJACT_RANGE_ATTACK, idTarget, nPower, 0 );		// 사정거리가 되었을때 실행할 명령 셋팅.
}