bool Player::onContactBegin(PhysicsContact& contact){
auto node1 = contact.getShapeA()->getBody()->getNode();
auto node2 = contact.getShapeB()->getBody()->getNode();
onContactWinningArea(node1, node2);
onContactWall(node1, node2);
return onContactEnemy(node1, node2) && onContactTerrain(node1, node2);
}
void Player::onContactWall(Node* node1, Node* node2){
if (areThisTwoTypes(node1, node2, PLAYER_TAG, WALL_TAG)){
Player * player = getPlayer(node1, node2);
player->getPhysicsBody()->setVelocity(Point(-350, 500));
}
}
void Player::onContactWinningArea(Node* node1, Node* node2){
if (areThisTwoTypes(node1, node2, PLAYER_TAG, WINNING_AREA)){
Player* player = getPlayer(node1, node2);
player->_winner = true;
}
}
bool Player::areThisTwoTypes(Node* node1, Node* node2, int tag1, int tag2){
return (node1->getTag() == tag1 && node2->getTag() == tag2
|| node2->getTag() == tag1 && node1->getTag() == tag2);
}
Player* Player::getPlayer(Node* node1, Node* node2){
Player* player = nullptr;
if (node1->getTag() == PLAYER_TAG){
player = dynamic_cast(node1);
}
else{
player = dynamic_cast(node2);
}
return player;
}