// ------------------------------------------------------------------------------------------------ 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; }