// ------------------------------------------------------------------------------------------------
void ProjectileBase :: Update(float timeDelta)
{
    // Pre-Conditions:
    assert(IsActive() && "ProjectileBase::Update IsActive()");

    if(IsActive())
    {
		updateEvent->Process(this);

		if(isMoving)
		{
			Vector2df nextPos = Pos() + Heading() * speed * timeDelta;

			if(Game()->CheckCollisionWithChars(nextPos + Heading() * radius))
			{
				hitPos = nextPos + Heading() * radius;
				hitCharEvent->Process(this);
			}

			if(Game()->IsPosSolid(nextPos + Heading() * radius))
			{
				hitPos = nextPos + Heading() * radius;
				hitSolidEvent->Process(this);
			}

			SetPos(nextPos);
		}

		DecreaseLife(timeDelta);
    }

    // Post-Conditions
    assert(Pos().x >= MAP_MIN_POS_X && Pos().x < MAP_MAX_POS_X && "ProjectileBase::Update Pos().x >= MAP_MIN_POS_X && Pos().x < MAP_MAX_POS_X");
    assert(Pos().y >= MAP_MIN_POS_Y && Pos().y < MAP_MAX_POS_Y && "ProjectileBase::Update Pos().y >= MAP_MIN_POS_Y && Pos().y < MAP_MAX_POS_Y");
} // ----------------------------------------------------------------------------------------------
bool cAnimatedCharacter::CollidesBullet(std::vector<float> Position) {
	if (life > 0 && Position[1] < model.GetMaxY() && sqrt((x-Position[0])*(x-Position[0])+(z-Position[2])*(z-Position[2])) < radius) {
		DecreaseLife();
		if (life <= 0) StartDisappearing();
		return true;
	}
	return false;
}