Example #1
0
void DIALRecord::IsMisc(bool value)
    {
    if(value)
        DATA.value = eMisc;
    else if(IsMisc())
        DATA.value = eTopic;
    }
BOOL GObjectBullet::Collision(D3DXVECTOR3 NewPosition,long ObjectIndex)
{
    BOOL Result = 0;
    GObject* Obj2 = Game::ObjectBuffer::Buffer[ObjectIndex];

    if(IsMisc(Obj2->ObjectType)) return 0 ;

    int distance = (int)sqrt((float)((NewPosition.x - Obj2->Position.x)*(NewPosition.x - Obj2->Position.x) + (NewPosition.y - Obj2->Position.y)*(NewPosition.y - Obj2->Position.y)));
    Result = distance < (int)(Radius + Obj2->Radius) ;

    return Result ;
}
Example #3
0
////////////////////////////////////////////////////
//Update
DWORD GObjectEnemySniper::Update(long idx)
{
	if(Health <= 0)
	{
		State = 2;
	}

	BOOL IsAttacking = State == 1;
	BOOL IsDieing = State == 2;

	if(IsDieing)
	{
		Animations[2].ProcAnimation(Game::AnimationTicker::Tick);
		if(Animations[2].Ended)
		{
			Game::ObjectBuffer::SpawnObject(OBJECT_MISC_COIN , this->Position , 0);
			int i = rand()% 100 + 1 ;
			if(i > 95)
			{
					Game::ObjectBuffer::SpawnObject(OBJECT_MISC_AID , this->Position  , 0);
			}
			return OBJECT_DESTROY;
		}
		return OBJECT_IDLE;
	}

	if(IsAttacking)
	{
		Animations[1].ProcAnimation(Game::AnimationTicker::Tick);
		if(Animations[1].CurrentFrame == 2)
		{
			D3DXVECTOR3 BulletPosition = Position;
			BulletPosition.x += Facing*10.f;
			BulletPosition.y += sinf( float(rand()%6280)/1000.f  - 6.28f)*7.f - 3.5f;
			Game::ObjectBuffer::SpawnObject(OBJECT_BULLET_SNIPER , BulletPosition , &Facing);
		}
		if(Animations[1].Ended)
		{
			Animations[1].ResetAnimation();
			D3DXVECTOR3 BulletPosition = Position;
			BulletPosition.x += Facing*10.f;
			Game::ObjectBuffer::SpawnObject(OBJECT_BULLET_SNIPER , BulletPosition , &Facing);
			RandDir = D3DXVECTOR3(0,0,0);
			State = 0;
		}
		return OBJECT_IDLE;
	}

	if(State == 0)
	{
		if(RandDir == D3DXVECTOR3(0,0,0))
		{
			this->RandDir.x = (float) (rand()% 100);
			this->RandDir.y = (float) (rand()% 100);
			float xdir = (float) (rand()% 100) - 50.f; xdir /= fabsf(xdir);
			float ydir = (float) (rand()% 100) - 50.f; ydir /= fabsf(ydir);

			this->RandDir.x *= xdir;
			this->RandDir.y *= ydir;

			this->RandDir.z = 0;
			D3DXVec3Normalize(&this->RandDir , &this->RandDir);
		}
		
		if(timeGetTime() - Time > 3000)
		{
			State = 1;
			Time = timeGetTime();
			return OBJECT_IDLE;		
		}

		D3DXVECTOR3 NewPos = Position + RandDir*CurrentSpeed;
		this->AdjustPositionToWorld(NewPos);

		bool IsPositionAcceptable = 1;
		for(size_t i = 0 ; i < Game::ObjectBuffer::Buffer.size() ; i++)
		{
			if(i == idx)continue;
			if(IsMisc(Game::ObjectBuffer::Buffer[i]->ObjectType))continue;
			IsPositionAcceptable = IsPositionAcceptable && !this->Collision(NewPos , i) ;
		}
		if(IsPositionAcceptable)
		{
			if(Position.x < NewPos.x)Facing = 1.f;
			else Facing = -1.f;
			float PosDelta = Vec3Distance(&Position , &NewPos);
			Position = NewPos;
			Animations[0].ProcAnimation(Game::AnimationTicker::Tick);
			if(PosDelta < BaseSpeed*0.8f)
			{
				 RandDir.x *= -1.f;
				 RandDir.y *= -1.f;
			}
		}
		else RandDir = D3DXVECTOR3(0,0,0);
	}//end if(State == 0)

	return OBJECT_IDLE;
}