void EnemyComponent::draw(sf::RenderWindow& win) { if (clock.getElapsedTime().asSeconds() - lastHit > hitFrequency) { for (b2ContactEdge* edge = getOwner()->body->GetContactList(); edge; edge = edge->next) { b2Body* bodya = edge->contact->GetFixtureA()->GetBody(); b2Body* bodyb = edge->contact->GetFixtureB()->GetBody(); GameObject* playa = getOwner()->getWorld()->getPlayer(); if (bodyb == playa->body) { GameObject* g = (GameObject*)playa->body->GetUserData(); HealthComponent* h = (HealthComponent*)g->getComponent<HealthComponent>(); h->takeDamage(damage); soundManager::getSound().playPlayerGrunt(); lastHit = clock.getElapsedTime().asSeconds(); } } } }
void MouseMovementComponent::update(sf::Time& tpf) { b2Vec2 charPosition = Convert::box2dToWorld(getOwner()->body->GetPosition()); swordRect.setPosition(charPosition.x+20, charPosition.y+40); if (!sf::Mouse::isButtonPressed(sf::Mouse::Left)) return; sword = true; sf::Vector2i position = sf::Mouse::getPosition(window); b2Vec2 mousePosition = b2Vec2( camera->getPosition().x + position.x, camera->getPosition().y + position.y); b2Vec2 toTarget = mousePosition - charPosition; if (mousePosition.x < charPosition.x) { direction = true; } else direction = false; float angle = atan2f(-toTarget.x, toTarget.y); //getOwner()->body->SetTransform(getOwner()->body->GetPosition(), angle); // miltä alueelta etsitään b2Vec2 lower = Convert::worldToBox2d(charPosition - b2Vec2(32.f, 32.f)); b2Vec2 upper = Convert::worldToBox2d(charPosition + b2Vec2(32.f, 32.f)); b2AABB area; area.lowerBound = lower; area.upperBound = upper; ClosestGameObjectsCallback query; world.getBoxWorld()->QueryAABB(&query, area); // TODO tee kolmio ja eti GameObject *owner = getOwner(); std::for_each(query.bodies.begin(), query.bodies.end(), [owner,angle](b2Body* body) { if (body != owner->body && body->GetUserData() != NULL) { GameObject* other = (GameObject*)body->GetUserData(); HealthComponent* component = (HealthComponent*)other->getComponent<HealthComponent>(); if (component != NULL) { component->takeDamage(20); /* b2PolygonShape triangle; float f = 8.f; b2Vec2 verts[3] = { Convert::worldToBox2d(0, -f), Convert::worldToBox2d(f, f), Convert::worldToBox2d(-f, f) }; b2Rot rotation; rotation.Set(angle); for (int i = 0; i < 3; i++) { verts[i] = b2Mul(rotation, verts[i]); } triangle.Set(verts, 3); if (b2TestOverlap(&triangle, 0, other->body->GetFixtureList()->GetShape(), 0, body->GetTransform(), other->body->GetTransform())) { component->takeDamage(2); }*/ } } }); }