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

}