axmol/tests/cpp-tests/Classes/EffekseerTest/EffekseerTest.cpp

220 lines
5.9 KiB
C++
Raw Normal View History

2022-11-01 19:50:43 +08:00
/*******************************************************************************
* Copyright (c) 2013, Esoteric Software
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
#include "EffekseerTest.h"
#include <iostream>
#include <fstream>
#include <string.h>
USING_NS_AX;
//------------------------------------------------------------------
//
// SpineTestScene
//
//------------------------------------------------------------------
EffekseerTests::EffekseerTests()
{
auto fu = FileUtils::getInstance();
_searchPaths = fu->getSearchPaths();
fu->addSearchPath("Effekseer", true);
ADD_TEST_CASE(EffekseerTest);
}
EffekseerTests::~EffekseerTests()
{
FileUtils::getInstance()->setSearchPaths(_searchPaths);
}
EffekseerTest::EffekseerTest() : _title("EffekseerTest") {}
EffekseerTest::~EffekseerTest() {
/**
You will destroy the manager on exit.
*/
manager->release();
}
std::string EffekseerTest::title() const
{
return _title;
}
bool EffekseerTest::init()
{
if (!TestCase::init())
return false;
auto rsize = _director->getOpenGLView()->getDesignResolutionSize();
//auto sprite = Sprite::create("HelloWorld.png");
//sprite->setPosition(Vec2(320, 200));
//this->addChild(sprite, 0);
// for update
this->scheduleUpdate();
/**
efk::EffectManagerのインスタンスを生成します
You create an instance of efk::EffectManager.
efk::EffectManager的實例
efk::EffectManager的实例
*/
manager = efk::EffectManager::create(rsize);
return true;
}
void EffekseerTest::update(float delta)
{
// Effect1
if (count % 300 == 0)
{
/**
You read an effect file with specifying scale.
*/
auto effect = efk::Effect::create("Laser01.efk", 13.0f);
if (effect != nullptr)
{
/**
You generate an emitter, set parameters and add it to the layer.
*/
auto emitter = efk::EffectEmitter::create(manager);
emitter->setEffect(effect);
emitter->setPlayOnEnter(true);
emitter->setRotation3D(cocos2d::Vec3(0, 90, 0));
emitter->setPosition(Vec2(320, 150));
// emitter->setScale(13);
this->addChild(emitter, 0);
// No need (because it uses autorelease after 1.41)
//effect->release();
}
}
// Effect2
if (count % 300 == 120)
{
/**
You read an effect file.
*/
auto effect = efk::Effect::create("Homing_Laser01.efk");
if (effect != nullptr)
{
/**
You generate an emitter, set parameters and add it to the layer.
*/
auto emitter = efk::EffectEmitter::create(manager);
emitter->setEffect(effect);
emitter->setPlayOnEnter(true);
emitter->setPosition(Vec2(320, 150));
emitter->setScale(4);
this->addChild(emitter, 0);
/**
Some parameters are required to set after addChild
AddChildした後に設定する必要があります
*/
emitter->setTargetPosition(cocos2d::Vec3(320, 480, 0));
// No need (because it uses autorelease after 1.41)
//effect->release();
}
}
/**
You update the manager every frame.
*/
manager->update();
count++;
}
void EffekseerTest::visit(cocos2d::Renderer *renderer, const cocos2d::Mat4& parentTransform, uint32_t parentFlags)
{
/**
visitを継承して
You inherit visit and add a process to actually draw the effect.
visit
visit
*/
manager->begin(renderer, _globalZOrder);
cocos2d::Scene::visit(renderer, parentTransform, parentFlags);
manager->end(renderer, _globalZOrder);
}