Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New animation for player and json system #104

Merged
merged 3 commits into from
Dec 9, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Ignore thumbnails created by windows
Thumbs.db
cocos2d
other
# Ignore files build by Visual Studio
*.obj
*.exe
Expand Down
23 changes: 16 additions & 7 deletions Classes/MainScene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,9 @@ bool MainScene::init() {
//Creating player
_player = Player::create();
const Vec2 playerOrigin { Director::getInstance()->getWinSize() / 2 };
b2Filter filter;
filter.categoryBits = static_cast<uint16>(eColCategory::player);
filter.maskBits = static_cast<uint16>(eColMask::player);
//filter.groupIndex = -1;
_player->getFixtureDef()->filter = filter;
_world->addChild(_player);
_player->getBody()->SetFixedRotation(true);
_player->setName("player");
_player->setPosition(8000, 22000);
_player->setPosition({ 8000, 22000 });
//_player->getBody()->SetBullet(true);

//Camera setup
Expand Down Expand Up @@ -219,7 +213,9 @@ void MainScene::showImGui() {
_player->changeHp(-1);
}
}
//Position
ImGui::Text("Position X: %f Y: %f", _player->getPosition().x, _player->getPosition().y);
//Double jump
ImGui::Text("Double Jump: %i",_player->getJumpCount());
//Player jump
std::string jumpInfo = "None";
Expand All @@ -230,6 +226,19 @@ void MainScene::showImGui() {
else if (_player->getJumpState() == eJumpState::Fall)
jumpInfo = "Fall";
ImGui::Text("JumpInfo: %s", jumpInfo.c_str());
//Player Anim state
std::string animStateInfo = "None";
if (_player->getAnimState() == eAnimState::None)
animStateInfo = "None";
else if (_player->getAnimState() == eAnimState::Move)
animStateInfo = "Move";
else if (_player->getAnimState() == eAnimState::Jump)
animStateInfo = "Jump";
else if (_player->getAnimState() == eAnimState::Fall)
animStateInfo = "Fall";
else if (_player->getAnimState() == eAnimState::Attack)
animStateInfo = "Attack";
ImGui::Text("AnimState: %s", animStateInfo.c_str());

ImGui::TreePop();
}
Expand Down
2 changes: 1 addition & 1 deletion Classes/bullets/BigBullet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ void BigBullet::update(float dt) {

BigBullet* BigBullet::create(cocos2d::Node* world, Vec2 pos, Vec2 dest, b2Filter filter) {
BigBullet* bullet = new (std::nothrow) BigBullet();
if (bullet && bullet->initWithFile("BigBullet.png")) {
if (bullet && bullet->initWithFile("images/BigBullet.png")) {
bullet->initBody(b2BodyType::b2_dynamicBody, 0.f, 0);
bullet->autorelease();
bullet->init();
Expand Down
4 changes: 2 additions & 2 deletions Classes/bullets/FireBullet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ void FireBullet::update(float dt) {

FireBullet* FireBullet::create(cocos2d::Node* world, Vec2 pos, Vec2 dest, b2Filter filter) {
FireBullet* bullet = new (std::nothrow) FireBullet();
if (bullet && bullet->initWithFile("BigFire.png")) {
if (bullet && bullet->initWithFile("images/BigFire.png")) {
bullet->initBody(b2BodyType::b2_dynamicBody, 0.f, 0);
bullet->autorelease();
bullet->init();
Expand Down Expand Up @@ -77,7 +77,7 @@ void FireBlast::update(float dt) {

FireBlast* FireBlast::create(cocos2d::Node* world, Vec2 pos, Vec2 dest, b2Filter filter) {
FireBlast* bullet = new (std::nothrow) FireBlast();
if (bullet && bullet->initWithFile("Fire.png")) {
if (bullet && bullet->initWithFile("images/Fire.png")) {
bullet->initBody(b2BodyType::b2_dynamicBody, 0.f, 0);
bullet->autorelease();
bullet->init();
Expand Down
4 changes: 2 additions & 2 deletions Classes/bullets/IceBullet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ void IceBullet::collideFunc() {

IceBullet* IceBullet::create(cocos2d::Node* world, Vec2 pos, Vec2 dest, b2Filter filter) {
IceBullet* bullet = new (std::nothrow) IceBullet();
if (bullet && bullet->initWithFile("Ice.png")) {
if (bullet && bullet->initWithFile("images/Ice.png")) {
bullet->initBody(b2BodyType::b2_dynamicBody, 0.f, 0);
bullet->autorelease();
bullet->init();
Expand Down Expand Up @@ -87,7 +87,7 @@ void IceBlast::update(float dt) {

IceBlast* IceBlast::create(cocos2d::Node* world, Vec2 pos, Vec2 dest, b2Filter filter) {
IceBlast* bullet = new (std::nothrow) IceBlast();
if (bullet && bullet->initWithFile("IceBlast.png")) {
if (bullet && bullet->initWithFile("images/IceBlast.png")) {
bullet->initBody(b2BodyType::b2_dynamicBody, 0.f, 0);
bullet->autorelease();
bullet->init();
Expand Down
2 changes: 1 addition & 1 deletion Classes/bullets/PlayerHookBullet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ PlayerHookBullet* PlayerHookBullet::create(cocos2d::Node* world, Vec2 pos, Vec2
_hook->setOnRemove();
}
PlayerHookBullet* _hook = new (std::nothrow) PlayerHookBullet();
if (_hook && _hook->initWithFile("Hook.png")) {
if (_hook && _hook->initWithFile("images/Hook.png")) {
_hook->initBody(b2BodyType::b2_dynamicBody, 0.f, 0);
_hook->autorelease();
_hook->init();
Expand Down
11 changes: 6 additions & 5 deletions Classes/contactListener/ContactListener.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,17 @@ void ContactListener::BeginContact(b2Contact* contact) {
if (SpriteA->getFixtureDef()->filter.maskBits == static_cast<uint16>(eColMask::platform) &&
SpriteB->getFixtureDef()->filter.maskBits == static_cast<uint16>(eColMask::player)) {
//Check up and botton collision player with platforms for jumping
const auto playerY = SpriteB->getPosition().y + SpriteA->getTextureRect().getMaxY();
const auto platformY = SpriteA->getPosition().y - SpriteA->getTextureRect().getMaxY();
if (playerY >= platformY) {
static_cast<Player*>(SpriteB)->setJumpState(eJumpState::Fall);
}
const auto playerY2 = SpriteB->getPosition().y;
const auto platformY2 = SpriteA->getPosition().y;
if (playerY2 >= platformY2) {
static_cast<Player*>(SpriteB)->setJumpState(eJumpState::None);
static_cast<Player*>(SpriteB)->setJumpState(eJumpState::None);
}
const auto playerY = SpriteB->getPosition().y + SpriteA->getTextureRect().getMaxY();
const auto platformY = SpriteA->getPosition().y - SpriteA->getTextureRect().getMaxY();
/*if (playerY >= platformY) {
static_cast<Player*>(SpriteB)->setJumpState(eJumpState::Fall);
}*/
}
//Enemy with bullets
if (SpriteA->getFixtureDef()->filter.maskBits == static_cast<uint16>(eColMask::enemy) &&
Expand Down
73 changes: 37 additions & 36 deletions Classes/enemies/Enemy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,44 @@ USING_NS_CC;

int Enemy::id = -1;

Enemy::Enemy(IEnemyBehaviour* behaviour)
Enemy::Enemy(std::string type, IEnemyBehaviour* behaviour)
: IEnemy(behaviour) {
init();
init(type);
}

Enemy::~Enemy() {
}

Enemy* Enemy::create(Node* node, Vec2 pos, std::string type, IEnemyBehaviour* behaviour) {
id++;
Enemy* enemyObj = new (std::nothrow) Enemy(behaviour);
Enemy* enemyObj = new (std::nothrow) Enemy(type, behaviour);
if (enemyObj && enemyObj->initWithFile(enemyObj->_fileName)) {
enemyObj->initBody(b2BodyType::b2_dynamicBody, 1, 0);
enemyObj->autorelease();
b2Filter filt;
filt.categoryBits = static_cast<uint16>(eColCategory::enemy);
filt.maskBits = static_cast<uint16>(eColMask::enemy);
enemyObj->getFixtureDef()->filter = filt;
enemyObj->setName(enemyObj->getName() + std::to_string(id));
node->addChild(enemyObj);
enemyObj->getBody()->SetFixedRotation(true);
enemyObj->setPosition(pos);
enemyObj->createHpLabel();
behaviour->perform(enemyObj, 0.f);
return enemyObj;
}
CC_SAFE_DELETE(enemyObj);
return nullptr;
}

bool Enemy::init(std::string type) {
if (!b2Sprite::init()) {
return false;
}
if (!_behaviour) {
return false;
}
//Json init
rapidjson::Document initFile;
bool bRet = false;
ssize_t size = 0;
Expand All @@ -36,65 +63,39 @@ Enemy* Enemy::create(Node* node, Vec2 pos, std::string type, IEnemyBehaviour* be
const rapidjson::Value& ent = initFile[type.c_str()];
if (ent.HasMember("name")) {
const rapidjson::Value& name = ent["name"];
enemyObj->setName(name.GetString());
setName(name.GetString());
}
if (ent.HasMember("specifications")) {
const rapidjson::Value& valueEnt = ent["specifications"];
if (valueEnt.HasMember("hp") /*and another specs*/) {
const rapidjson::Value& hp = valueEnt["hp"];
enemyObj->setHp(hp.GetInt());
setHp(hp.GetInt());

const rapidjson::Value& speed = valueEnt["speed"];
enemyObj->setSpeed(speed.GetDouble());
setSpeed(speed.GetDouble());

const rapidjson::Value& damage = valueEnt["damage"];
enemyObj->setDamage(damage.GetInt());
setDamage(damage.GetInt());

const rapidjson::Value& attackCooldown = valueEnt["attackCooldown"];
enemyObj->setAttackCooldown(speed.GetDouble());
setAttackCooldown(speed.GetDouble());
}
}
if (ent.HasMember("components")) {
const rapidjson::Value& compEnt = ent["components"];
if (compEnt.HasMember("textureFile") && compEnt.HasMember("animationFile")) {
const rapidjson::Value& fileName = compEnt["textureFile"];
enemyObj->_fileName = fileName.GetString();
_fileName = fileName.GetString();

const rapidjson::Value& animationFile = compEnt["animationFile"];
enemyObj->_animationFile = animationFile.GetString();
_animationFile = animationFile.GetString();
}
}
}

bRet = true;

} while (!bRet);
if (enemyObj && enemyObj->initWithFile(enemyObj->_fileName)) {
enemyObj->initBody(b2BodyType::b2_dynamicBody, 1, 0);
enemyObj->autorelease();
b2Filter filt;
filt.categoryBits = static_cast<uint16>(eColCategory::enemy);
filt.maskBits = static_cast<uint16>(eColMask::enemy);
enemyObj->getFixtureDef()->filter = filt;
enemyObj->setName(enemyObj->getName() + std::to_string(id));
node->addChild(enemyObj);
enemyObj->getBody()->SetFixedRotation(true);
enemyObj->setPosition(pos);
enemyObj->createHpLabel();
behaviour->perform(enemyObj, 0.f);
return enemyObj;
}
CC_SAFE_DELETE(enemyObj);
return nullptr;
}

bool Enemy::init() {
if (!b2Sprite::init()) {
return false;
}
if (!_behaviour) {
return false;
}
setDamaged(false);
setDestroyed(false);

Expand Down
4 changes: 2 additions & 2 deletions Classes/enemies/Enemy.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

class Enemy : public IEnemy {
public:
Enemy(IEnemyBehaviour* behaviour = nullptr);
Enemy(std::string type, IEnemyBehaviour* behaviour = nullptr);
~Enemy();
static Enemy* create(Node* node, Vec2 pos, std::string type, IEnemyBehaviour* behaviour = nullptr);
bool init() override;
bool init(std::string type);
private:
static int id;
};
Expand Down
Loading