BehaviorTree::BEHAVIOR_STATUS MoveTowardNode::execute(void* p_agent) { if (m_target == nullptr || m_target->getId() == 0) { return BehaviorTree::BT_FAILURE; } auto entity = static_cast<ECS::Entity*>(p_agent); auto parentCRender = entity->get<RenderComponent>(); auto parentSprite = dynamic_cast<sf::Sprite*>(parentCRender->drawable); auto targetCRender = m_target->get<RenderComponent>(); auto targetSprite = dynamic_cast<sf::Sprite*>(targetCRender->drawable); auto dx = targetSprite->getPosition().x - parentSprite->getPosition().x; auto dy = targetSprite->getPosition().y - parentSprite->getPosition().y; auto parentCPhysics = entity->get<PhysicsComponent>(); auto parentBody = parentCPhysics->body; auto moved = false; if (abs(dx) > m_leashDistance) { auto sign = dx < 0 ? -1 : 1; parentBody->ApplyLinearImpulse(b2Vec2(m_speed * sign, 0), parentBody->GetWorldCenter(), true); moved = true; } if (abs(dy) > m_leashDistance) { auto sign = dy < 0 ? -1 : 1; parentBody->ApplyLinearImpulse(b2Vec2(0, m_speed * sign), parentBody->GetWorldCenter(), true); moved = true; } return moved ? BehaviorTree::BT_RUNNING : BehaviorTree::BT_SUCCESS; }
void cBoundingVolume::DrawEdges(const cVector3f& avLightPos,float afLightRange, iLowLevelGraphics *apLowLevelGraphics) { cShadowVolumeBV *pVolume = GetShadowVolume(avLightPos, afLightRange, false); apLowLevelGraphics->SetBlendActive(true); apLowLevelGraphics->SetBlendFunc(eBlendFunc_One,eBlendFunc_One); apLowLevelGraphics->SetDepthWriteActive(false); tVertexVec vVtx; vVtx.resize(4); for(int capplane=0; capplane<mShadowVolume.mlCapPlanes; capplane++) { mShadowVolume.mvPlanes[capplane].CalcNormal(); apLowLevelGraphics->DrawLine(GetWorldCenter(),GetWorldCenter() + mShadowVolume.mvPlanes[capplane].normal*-0.5f, cColor(1,1,1,1)); } int lPlane = mShadowVolume.mlCapPlanes; for(int quad = 0; quad < (int)pVolume->mvPoints.size(); quad+=4) { for(int i=0; i<4; i++) vVtx[i].pos = pVolume->mvPoints[quad+i]; apLowLevelGraphics->DrawQuad(vVtx,cColor(0.2f,0,0.2f)); cVector3f vCenter = (vVtx[1].pos + vVtx[0].pos)*0.5f; mShadowVolume.mvPlanes[lPlane].CalcNormal(); apLowLevelGraphics->DrawLine(vCenter,vCenter + mShadowVolume.mvPlanes[lPlane].normal*-0.5f, cColor(1,1,1,1)); lPlane++; } apLowLevelGraphics->SetBlendActive(false); apLowLevelGraphics->SetDepthWriteActive(true); }