Beispiel #1
0
Hero::Hero(Game* game_n) : Sprite(game_n), Collidable(game_n) {
	game = game_n;
	setTileset("assets\\spaceship2.png");
	setAnimation(LOOP, 0, 0, 12.f);
	flags |= ACTIVE;
	pos[1] += 300.f;

	AABB local;
	local.min.set(0.f, 0.f);
	local.max.set(INT_INFO(this, INT_SIZE_X), INT_INFO(this, INT_SIZE_Y));
	Collidable::setParams(local, 40.f);

	game->addNode(this);

	shootDelay = 1.f;
	shootProj = 0;
	
	weapon = new ProjectileWeapon(game);
	weapon->setPositionLookup(&pos);
	weapon->setPositionTranslation(size+vec2(25.f, 7.5f));

	setCollisionCallback(&colevent);
	colevent.hasCollided = false;

	shield = new Sprite(game);
	shield->setTileset("assets\\shield.png");
	shield->setFrame(0);
	shield->flags &= ACTIVE;
	game->addNode(shield, this);
	shieldPower = 100.f;
	shieldShowTimer = 0.f;
	dying = false;
	score = 0;
}
Beispiel #2
0
bool Physics3DCollisionCallbackDemo::init()
{
    if (!Physics3DTestDemo::init())
        return false;

    {
        Physics3DRigidBodyDes rbDes;

        float scale = 2.0f;
        std::vector<Vec3> trianglesList = Bundle3D::getTrianglesList("Sprite3DTest/boss.c3b");
        for (auto& it : trianglesList) {
            it *= scale;
        }

        rbDes.mass = 0.0f;
        rbDes.shape = Physics3DShape::createMesh(&trianglesList[0], (int)trianglesList.size() / 3);
        auto rigidBody = Physics3DRigidBody::create(&rbDes);
        auto component = Physics3DComponent::create(rigidBody);
        auto sprite = Sprite3D::create("Sprite3DTest/boss.c3b");
        sprite->addComponent(component);
        sprite->setRotation3D(Vec3(-90.0f, 0.0f, 0.0f));
        sprite->setScale(scale);
        sprite->setCameraMask((unsigned short)CameraFlag::USER1);
        this->addChild(sprite);
        //preload
        //
        rigidBody->setCollisionCallback([=](const Physics3DCollisionInfo &ci){
            if (!ci.collisionPointList.empty()){
                if (ci.objA->getMask() != 0){
                    auto ps = PUParticleSystem3D::create("Particle3D/scripts/mp_hit_04.pu");
                    ps->setPosition3D(ci.collisionPointList[0].worldPositionOnB);
                    ps->setScale(0.05f);
                    ps->startParticleSystem();
                    ps->setCameraMask(2);
                    this->addChild(ps);
                    ps->runAction(Sequence::create(DelayTime::create(1.0f), CallFunc::create([=](){
                        ps->removeFromParent();
                    }), nullptr));
                    ci.objA->setMask(0);
                }
            }
            //CCLOG("------------BoxB Collision Info------------");
            //CCLOG("Collision Point Num: %d", ci.collisionPointList.size());
            //for (auto &iter : ci.collisionPointList){
            //	CCLOG("Collision Position On A: (%.2f, %.2f, %.2f)", iter.worldPositionOnA.x, iter.worldPositionOnA.y, iter.worldPositionOnA.z);
            //	CCLOG("Collision Position On B: (%.2f, %.2f, %.2f)", iter.worldPositionOnB.x, iter.worldPositionOnB.y, iter.worldPositionOnB.z);
            //	CCLOG("Collision Normal On B: (%.2f, %.2f, %.2f)", iter.worldNormalOnB.x, iter.worldNormalOnB.y, iter.worldNormalOnB.z);
            //}
            //CCLOG("------------BoxB Collision Info------------");
        });
    }

    physicsScene->setPhysics3DDebugCamera(_camera);
    return true;
}
Beispiel #3
0
    void Flag::setCollisionTriangleSelector(irr::scene::ISceneManager* a_SceneManager, irr::scene::ITriangleSelector* a_TriangleSelector) 
    {
        auto animator = a_SceneManager->createCollisionResponseAnimator(a_TriangleSelector, m_FlagNode, { 1.25f, 1.f, 1.25f });
        m_Collider = new Collider(animator);
        m_Collider->setCallback([this](irr::scene::ISceneNode* a_CollidedNode)
        {
            if(Player* player = dynamic_cast<Player*>(a_CollidedNode->getParent())) 
            {
                captureFlag(player);
                return true;
            }
            else if(a_CollidedNode->getID() == 1) 
			{
                //Failed to get player class from attached node.
                return true;
            }
            return false;
        });
        animator->setCollisionCallback(m_Collider);
        m_FlagNode->addAnimator(animator);
    }