void HardwareController::createNewHardwareMappingEvent(int channel_number, std::unordered_map<string, string>& settings)
{
    string trigger = settings["trigger"];
    
    HardwareMappingEvent event;
    event.compare_operator = HardwareMappingEvent::Change;
    if (trigger.startswith("<"))
    {
        event.compare_operator = HardwareMappingEvent::Decrease;
        trigger = trigger.substr(1).strip();
    }
    if (trigger.startswith(">"))
    {
        event.compare_operator = HardwareMappingEvent::Increase;
        trigger = trigger.substr(1).strip();
    }
    event.trigger_variable = trigger;
    event.channel_nr = channel_number;
    event.runtime = settings["runtime"].toFloat();
    event.triggered = false;
    event.previous_value = 0.0;
    
    event.effect = createEffect(settings);
    if (event.effect)
    {
        LOG(DEBUG) << "New hardware event: " << event.channel_nr << ":" << event.trigger_variable << " " << event.compare_operator;
        events.push_back(event);
    }
}
Esempio n. 2
0
void Screen::initD3D()
{
	//do all D3D initialization
	if (!createSCandDevice())
	{
		_badInit = true;
		return;
	}
	createRT();
	createVP();
	createDS();
	createSM();
	createSSAO();
	createEffect();
	parseEffect();
	createVL();
	//create the light
	light = new AMLight(D3DXVECTOR3(0.0f, 0.0f, -1.0f));
	//set up the physics engine
	physics.setup(30, settings.getGravityMul());
	_pDebug = new AMPhysicsDebug(d3ddev, effectTech);
	//only wireframe supported for physics debug
	_pDebug->setDebugMode(AMPhysicsDebug::DBG_DrawWireframe);
	physics.getWorld()->setDebugDrawer(_pDebug);
}
Esempio n. 3
0
void ShadowMapRenderer::Init()
{
	createEffect();
	createGaussianBlurQuadVB();
	createRendertargetDepthStencil();
	createTextures();
}
Esempio n. 4
0
void Tree::init(const char* filename, ID3D11Device* g_device, ID3D11DeviceContext* g_context)
{
	
	Mesh::init(filename, g_device, g_context);
	
	_leaves.init("", g_device, g_context);

	//////////////////////////
	bFire = false;

	m_numSubsets = 1;

	//////////////////////////
	


	createEffect("../Desert_Island/shaders/tree.fxo", g_device);

	fx_m_World				= getFX()->GetVariableByName("m_World")->AsMatrix();
	fx_m_WorldViewProj		= getFX()->GetVariableByName("m_WorldViewProj")->AsMatrix();
	fx_m_L_ViewProj			= getFX()->GetVariableByName("m_L_ViewProj")->AsMatrix();
	
	fx_tex_shadow_map		= getFX()->GetVariableByName("tex_shadow_map")->AsShaderResource();

	fx_lights				= getFX()->GetVariableByName("lights");

	fx_num_lights			= getFX()->GetVariableByName("num_lights")->AsScalar();

	fx_pEye					= getFX()->GetVariableByName("pEye")->AsVector();
	fx_bShadowed			= getFX()->GetVariableByName("bShadowed")->AsScalar();
	fx_bUsePCSS				= getFX()->GetVariableByName("bUsePCSS")->AsScalar();

	///////////

	HRESULT hr = D3DX11CreateShaderResourceViewFromFile(g_dev(), L"../Desert_island/media/tree_heightmap.jpg", 0, 0, &srv_heightmap, 0);
	if (FAILED(hr))
		MessageBoxA(0, "Error creating tree heightmap srv", 0, 0);

	
	
	///////////

	// Input layout - Vertex IA
	D3D11_INPUT_ELEMENT_DESC vertex_layout[] = {
		{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
        { "NORMAL", 0,  DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "TANGENT", 0,  DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "TEX_COORDS", 0,  DXGI_FORMAT_R32G32_FLOAT, 0, 36, D3D11_INPUT_PER_VERTEX_DATA, 0 }
	};

	D3DX11_PASS_DESC passDesc;
	ID3DX11EffectTechnique* tech = getFX()->GetTechniqueByIndex(0);
	tech->GetPassByIndex(0)->GetDesc(&passDesc);

	hr = createInputLayout(g_dev(), vertex_layout, 4, passDesc.pIAInputSignature, passDesc.IAInputSignatureSize);
	if (FAILED(hr))
		MessageBoxA(0, "Error creating tree IA", 0, 0);

}
Esempio n. 5
0
void Form::setNode(Node* node)
{
    // If the user wants a custom node then we need to create a 3D quad
    if (node && node != _node)
    {
        // Set this Form up to be 3D by initializing a quad.
        float x2 = _bounds.width;
        float y2 = _bounds.height;
        float vertices[] =
        {
            0, y2, 0,   0, _v1,
            0, 0, 0,    0, 0,
            x2, y2, 0,  _u2, _v1,
            x2, 0, 0,   _u2, 0
        };
        VertexFormat::Element elements[] =
        {
            VertexFormat::Element(VertexFormat::POSITION, 3),
            VertexFormat::Element(VertexFormat::TEXCOORD0, 2)
        };
        Mesh* mesh = Mesh::createMesh(VertexFormat(elements, 2), 4, false);
        GP_ASSERT(mesh);
        mesh->setPrimitiveType(Mesh::TRIANGLE_STRIP);
        mesh->setVertexData(vertices, 0, 4);

        _nodeQuad = Model::create(mesh);
        SAFE_RELEASE(mesh);
        GP_ASSERT(_nodeQuad);

        // Create the effect and material
        Effect* effect = createEffect();
        GP_ASSERT(effect);
        _nodeMaterial = Material::create(effect);

        GP_ASSERT(_nodeMaterial);
        _nodeQuad->setMaterial(_nodeMaterial);
        _nodeMaterial->release();
        node->setModel(_nodeQuad);
        _nodeQuad->release();

        // Bind the WorldViewProjection matrix.
        _nodeMaterial->setParameterAutoBinding("u_worldViewProjectionMatrix", RenderState::WORLD_VIEW_PROJECTION_MATRIX);

        // Bind the texture from the framebuffer and set the texture to clamp
        Texture::Sampler* sampler = Texture::Sampler::create(_frameBuffer->getRenderTarget()->getTexture());
        GP_ASSERT(sampler);
        sampler->setWrapMode(Texture::CLAMP, Texture::CLAMP);
        _nodeMaterial->getParameter("u_texture")->setValue(sampler);
        sampler->release();

        RenderState::StateBlock* rsBlock = _nodeMaterial->getStateBlock();
        rsBlock->setDepthWrite(true);
        rsBlock->setBlend(true);
        rsBlock->setBlendSrc(RenderState::BLEND_SRC_ALPHA);
        rsBlock->setBlendDst(RenderState::BLEND_ONE_MINUS_SRC_ALPHA);
    }
    _node = node;
}
Esempio n. 6
0
SkyBox::SkyBox()
:mVertexBuffer(NULL)
,mIndexBuffer(NULL)
,mCubeTex(NULL)
{
	if(!effect)
		createEffect();

	build();
}
Esempio n. 7
0
//-----------------------------------------------------------------------
void EffectObject::createRenderInstance(System* system)
{
    assert(system);

    PlacementObject::createRenderInstance(system);

    if (!mEffectName.empty())
    {
        createEffect();
    }
}
Esempio n. 8
0
bool EffectBaseTest::init()
{
    if(TestCase::init())
    {
        LayerColor *background = LayerColor::create( Color4B(32,128,32,255) );
        this->addChild(background,-20);
        if(isRectEffect())
        {
            Size visibleSize = Director::getInstance()->getVisibleSize();
            Rect gridRect = Rect(visibleSize.width * 0.2,
                                 visibleSize.height * 0.2,
                                 visibleSize.width * 0.6,
                                 visibleSize.height * 0.6);
            _gridNodeTarget = NodeGrid::create(gridRect);
        }
        else
        {
            _gridNodeTarget = NodeGrid::create();
        }
        addChild(_gridNodeTarget, 0);
        _gridNodeTarget->runAction(createEffect(3));
        
        auto bg = Sprite::create(s_back3);
        _gridNodeTarget->addChild(bg, 0);
        bg->setPosition(VisibleRect::center());
        
        auto grossini = Sprite::create(s_pathSister2);
        _gridNodeTarget->addChild(grossini, 1);
        grossini->setPosition(VisibleRect::left().x+VisibleRect::getVisibleRect().size.width/3,VisibleRect::center().y);
        auto sc = ScaleBy::create(2, 5);
        auto sc_back = sc->reverse();
        grossini->runAction( RepeatForever::create(Sequence::create(sc, sc_back, nullptr) ) );
        
        auto tamara = Sprite::create(s_pathSister1);
        _gridNodeTarget->addChild(tamara, 1);
        tamara->setPosition(VisibleRect::left().x+2*VisibleRect::getVisibleRect().size.width/3,VisibleRect::center().y);
        auto sc2 = ScaleBy::create(2, 5);
        auto sc2_back = sc2->reverse();
        tamara->runAction( RepeatForever::create(Sequence::create(sc2, sc2_back, nullptr)) );
        
        schedule( CC_SCHEDULE_SELECTOR(EffectBaseTest::checkAnim) );
        
        return true;
    }
    return false;
}
Esempio n. 9
0
bool 
ShaderD3D11::create()
{
    free();


    std::string includeStream;
    if (IShader::includeFilePathName().length() > 0)
    if (std::unique_ptr<typename DataStream> fileStream =
        std::unique_ptr<typename DataStream>(AssetManager::assetManager()->openStream(IShader::includeFilePathName())))
    {
        size_t fileSize = fileStream->size();
        char* buffer = new char[fileSize + 1];
        memset(buffer, 0, fileSize + 1);
        fileStream->read(buffer, fileSize);
        includeStream = buffer;
        delete[] buffer;
    }

    std::string shaderStream;
    if (std::unique_ptr<typename DataStream> fileStream =
        std::unique_ptr<typename DataStream>(AssetManager::assetManager()->openStream(IShader::filePathName())))
    {
        size_t fileSize = fileStream->size();
        char* buffer = new char[fileSize + 1];
        memset(buffer, 0, fileSize + 1);
        fileStream->read(buffer, fileSize);
        shaderStream = buffer; 
        delete[] buffer;
    }

    setShaderStream((includeStream+shaderStream).c_str());

    if (createEffect ())
    {
        D3DX11_EFFECT_DESC desc;
        if (SUCCEEDED (_effect->effect()->GetDesc (&desc)))
        {
            enumerateTechniques (desc, _verbose);
            enumerateVariables (desc, _verbose);
            passVariables();
            return true;
        }
    }
    return false;
}
Esempio n. 10
0
//-----------------------------------------------------------------------
void EffectObject::setEffectName( const Ogre::String &name )
{
    if (mEffectName != name)
    {
        if (mEffect)
        {
            destroyEffect();
        }

        mEffectName = name;

        if (!mEffectName.empty())
        {
            createEffect();
        }
    }
}
void MonsterBehaviorPattern::update(float delta) {
	if (GameData::getInstance()->getIsInTutorial() == false) {
		timer += delta;
	}	
	if (maxTimer < timer) {
		timer = 0;
		decisionBehavior();
	}

	if (!isOneAnimationAttack && attackTimer < timer) {
		isOneAnimationAttack = true;
		attackToHero();
	}

	if (!isOneAttackEffect && attackTimer < timer) {
		isOneAttackEffect = true;
		createEffect();
	}
}
void HardwareController::createNewHardwareMappingState(int channel_number, std::unordered_map<string, string>& settings)
{
    string condition = settings["condition"];
    
    HardwareMappingState state;
    state.variable = condition;
    state.compare_operator = HardwareMappingState::Greater;
    state.compare_value = 0.0;
    state.channel_nr = channel_number;
    
    for(HardwareMappingState::EOperator compare_operator : {HardwareMappingState::Less, HardwareMappingState::Greater, HardwareMappingState::Equal, HardwareMappingState::NotEqual})
    {
        string compare_string = "<";
        switch(compare_operator)
        {
        case HardwareMappingState::Less: compare_string = "<"; break;
        case HardwareMappingState::Greater: compare_string = ">"; break;
        case HardwareMappingState::Equal: compare_string = "=="; break;
        case HardwareMappingState::NotEqual: compare_string = "!="; break;
        }
        if (condition.find(compare_string) > -1)
        {
            state.variable = condition.substr(0, condition.find(compare_string)).strip();
            state.compare_operator = compare_operator;
            state.compare_value = condition.substr(condition.find(compare_string) + 1).strip().toFloat();
        }
    }
    
    state.effect = createEffect(settings);
    
    if (state.effect)
    {
        LOG(DEBUG) << "New hardware state: " << state.channel_nr << ":" << state.variable << " " << state.compare_operator << " " << state.compare_value;
        states.push_back(state);
    }
}
/*!
  Invoked when a firing action is finished.

  Turns hit effects on, checks whether someone was hit, etc.
  */
void CcfQmlBaseScenario::firingActionFinished(int index, qreal targetX, qreal targetY) {
    QObject *unit = mUnits.at(index);

    if (unit->getInt("currentOrder") != -1) {
        // TODO: remove use of effect for smoke and attack - and optimise it away.
        QObject *effect = createEffect(mZoomArea);
        if (effect == 0)
            return;

        mEffects.append(effect);
        QString scheduledOperation;
        unit->metaObject()->invokeMethod(unit, "operation", Qt::DirectConnection, Q_RETURN_ARG(QString, scheduledOperation));

        if (scheduledOperation == "Attack") {
            effect->set("animationString", "gun_fire");
            // Check, whether a unit was hit.
            QObject *hitee = 0;
            hitee = unitAt(targetX, targetY);

            if ((hitee != 0)
                    && (hitee->property("unitIndex").isValid() == true)
                    && (hitee->property("unitType").isValid() == true)) {
                invoke(hitee, "hit", Q_ARG(QObject *, unit), Q_ARG(qreal, targetX), Q_ARG(qreal, targetY));
            }
Esempio n. 14
0
HRESULT MyApp::buildFX() 
{
	if (!createEffect((PATH_SHADERS+string("vs_alien.fxo")).c_str(), &m_fxAlienVS))
		MessageBoxA(0, "Error creating AlienVS effect", 0, 0);

	if (!createEffect((PATH_SHADERS+string("gs_alien.fxo")).c_str(), &m_fxAlienGS))
		MessageBoxA(0, "Error creating AlienGS effect", 0, 0);
	
	if (!createEffect((PATH_SHADERS+string("explosion.fxo")).c_str(), &m_fxExplosion))
		MessageBoxA(0, "Error creating Explosion effect", 0, 0);
	
	if (!createEffect((PATH_SHADERS+string("implicit.fxo")).c_str(), &m_fxImplicit))
		MessageBoxA(0, "Error creating Implicit effect", 0, 0);

	if (!createEffect((PATH_SHADERS+string("quads.fxo")).c_str(), &m_fxQuads))
		MessageBoxA(0, "Error creating quads effect", 0, 0);

	if (!createEffect((PATH_SHADERS+string("dynamicTerrain.fxo")).c_str(), &m_fxDynamicTerrain))
		MessageBoxA(0, "Error creating dynamic terrain effect", 0, 0);


    // Vertex Input Layout
	D3D11_INPUT_ELEMENT_DESC layout[] = {
        { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
        { "NORMAL", 0,  DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "TANGENT", 0,  DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "TEX_COORDS", 0,  DXGI_FORMAT_R32G32_FLOAT, 0, 36, D3D11_INPUT_PER_VERTEX_DATA, 0 }
    };

	D3DX11_PASS_DESC passDesc;
	ID3DX11EffectTechnique* tech;
	tech = m_fxAlienVS->GetTechniqueByIndex(0);
	HRESULT hr = tech->GetPassByIndex(0)->GetDesc(&passDesc);

	hr = _dxDev->CreateInputLayout(layout, 4, passDesc.pIAInputSignature, passDesc.IAInputSignatureSize, &_inputLayout);
	if (FAILED(hr))
		MessageBoxA(0, "Error creating input layout", 0, 0);

	return S_OK;
}
Esempio n. 15
0
ActionInterval* getAction()
{
    auto pEffect = createEffect(actionIdx, 3);

    return pEffect;
} 
ActionInterval* getAction()
{
    ActionInterval* pEffect = createEffect(0, 0.25f);

    return pEffect;
}
Esempio n. 17
0
void HardwareController::handleConfig(string section, std::unordered_map<string, string> settings)
{
    if (section == "[hardware]")
    {
        HardwareOutputDevice* device = nullptr;
        
        if (settings["device"] == "")
            LOG(ERROR) << "No device definition in [hardware] section";
        else if (settings["device"] == "DMX512SerialDevice")
            device = new DMX512SerialDevice();
        else if (settings["device"] == "EnttecDMXProDevice")
            device = new EnttecDMXProDevice();
        else if (settings["device"] == "VirtualOutputDevice")
            device = new VirtualOutputDevice();
        if (device)
        {
            if (!device->configure(settings))
            {
                LOG(ERROR) << "Failed to configure device: " << settings["device"];
                delete device;
            }else{
                LOG(INFO) << "New hardware device: " << settings["device"] << " with: " << device->getChannelCount() << " channels";
                devices.push_back(device);
            }
        }
    }else if(section == "[channel]")
    {
        if (settings["channel"] == "" || settings["name"] == "")
            LOG(ERROR) << "Incorrect properties in [channel] section";
        else{
            channel_mapping[settings["name"]] = settings["channel"].toInt();
            LOG(INFO) << "Channel #" << settings["channel"] << ": " << settings["name"];
        }
    }else if(section == "[channels]")
    {
        for(std::pair<string, string> item : settings)
        {
            channel_mapping[item.first] = item.second.toInt();
            LOG(INFO) << "Channel #" << item.second << ": " << item.first;
        }
    }else if(section == "[state]")
    {
        string condition = settings["condition"];
        
        HardwareMappingState state;
        state.variable = condition;
        state.compare_operator = HardwareMappingState::Greater;
        state.compare_value = 0.0;
        state.channel_nr = -1;
        if (channel_mapping.find(settings["target"]) != channel_mapping.end())
            state.channel_nr = channel_mapping[settings["target"]];
        
        for(HardwareMappingState::EOperator compare_operator : {HardwareMappingState::Less, HardwareMappingState::Greater, HardwareMappingState::Equal, HardwareMappingState::NotEqual})
        {
            string compare_string = "<";
            switch(compare_operator)
            {
            case HardwareMappingState::Less: compare_string = "<"; break;
            case HardwareMappingState::Greater: compare_string = ">"; break;
            case HardwareMappingState::Equal: compare_string = "=="; break;
            case HardwareMappingState::NotEqual: compare_string = "!="; break;
            }
            if (condition.find(compare_string) > -1)
            {
                state.variable = condition.substr(0, condition.find(compare_string)).strip();
                state.compare_operator = compare_operator;
                state.compare_value = condition.substr(condition.find(compare_string) + 1).strip().toFloat();
            }
        }
        
        if (state.channel_nr < 0)
        {
            LOG(ERROR) << "Unknown target channel in hardware.ini: " << settings["target"];
        }else{
            state.effect = createEffect(settings);
            
            if (state.effect)
            {
                LOG(DEBUG) << "New hardware state: " << state.channel_nr << ":" << state.variable << " " << state.compare_operator << " " << state.compare_value;
                states.push_back(state);
            }
        }
    }else if(section == "[event]")
    {
        string trigger = settings["trigger"];
        
        HardwareMappingEvent event;
        event.compare_operator = HardwareMappingEvent::Change;
        if (trigger.startswith("<"))
        {
            event.compare_operator = HardwareMappingEvent::Decrease;
            trigger = trigger.substr(1).strip();
        }
        if (trigger.startswith(">"))
        {
            event.compare_operator = HardwareMappingEvent::Increase;
            trigger = trigger.substr(1).strip();
        }
        event.trigger_variable = trigger;
        event.channel_nr = -1;
        event.runtime = settings["runtime"].toFloat();
        event.triggered = false;
        event.previous_value = 0.0;
        
        if (channel_mapping.find(settings["target"]) != channel_mapping.end())
            event.channel_nr = channel_mapping[settings["target"]];
        
        if (event.channel_nr < 0)
        {
            LOG(ERROR) << "Unknown target channel in hardware.ini: " << settings["target"];
        }else{
            event.effect = createEffect(settings);
            if (event.effect)
            {
                LOG(DEBUG) << "New hardware event: " << event.channel_nr << ":" << event.trigger_variable << " " << event.compare_operator;
                events.push_back(event);
            }
        }
    }else{
        LOG(ERROR) << "Unknown section in hardware.ini: " << section;
    }
}
Esempio n. 18
0
/**
* Game update function
* @param pStream the packet stream to write state data to (if playing multiplayer)
*/
void Game::update(PacketStream* pStream) {

	//cout << "update" << endl;

	// timer
	g_timeNow = s3eTimerGetMs();
	g_deltaTime = float( (g_timeNow - g_prevTime) * 0.001 );
	// Time since last packet was sent
	timeSinceLastSend += g_timeNow - g_prevTime;
	g_prevTime = g_timeNow;

	if(mStage == Constants::INGAME) {

		for(int i = 0; i < bufferSize; i++) {
	
			mMessageReceived[i] = 0;
			mMessageSent[i] = 0;
		}

		if(mPlayer->getHealth() <= 0) {
			mPlayer->loadCheckpoint = true;
			mPlayer->mPos = CIwSVec2(mCheckpoint.x, mCheckpoint.y);

			// Create respawn effect
			CIwSVec2 screenCentre = CIwSVec2((int16)Iw2DGetSurfaceWidth() >> 1, (int16)Iw2DGetSurfaceHeight() >> 1);
			CIwSVec2 pos = screenCentre + (CIwSVec2(int16(mCheckpoint.x*8), -int16(mCheckpoint.y*8)));

			createEffect(CIwSVec2(pos.x, pos.y), 10, "Images/respawn.png", 1.0f);
		}

		if(mSpawnPickup == true) {
		
			mLevel->createPickup(mPickupSpawnType, mPickupSpawnPoint.x, mPickupSpawnPoint.y);
			mSpawnPickup = false;
		}

		if(!mPaused) {
			mTimeTaken += g_deltaTime;
		}

		// Sync clients if multiplayer
		if(mMultiplayer) {

			// Packet rate modification
			if(timeSinceLastSend >= 1000/30) {

				pStream->writeInt(Constants::UPDATE);

				// Dead reckoning
				if( abs(mDRPlayer->getBody()->GetPosition().Length() - mPlayer->getBody()->GetPosition().Length()) >= 1 ) {

					pStream->writeInt(Constants::DRUPDATE);
					mPlayer->serialize(pStream);
					mRDXVel = mPlayer->getBody()->GetLinearVelocity().x;

					mDRPlayer->getBody()->SetTransform(mPlayer->getBody()->GetPosition(), 0.0f);
					mDRPlayer->getBody()->SetLinearVelocity(b2Vec2(mRDXVel, mPlayer->getBody()->GetLinearVelocity().y));
				}
				else {
					pStream->writeInt(Constants::UPDATE);
				}

				if(mHost) {
					// Serialize level
					mLevel->serialize(pStream);
				}

				pStream->writeChar('\0');
				pStream->toCharArray(mMessageSent);
				mMessageSent[strlen(mMessageSent)-1] = '\0';

				//cout << "SENDING: " << mMessageSent << endl;
				// Send data
				s3eSocketSendTo(mSock, mMessageSent, strlen(mMessageSent), 0, &mDest_addr);

				timeSinceLastSend = 0;
			}

			// Recieve data
			mBytesRecieved = s3eSocketRecvFrom(mSock, mMessageReceived, sizeof(mMessageReceived), 0, &mDest_addr);
		

			if(mBytesRecieved != -1) {
				cout << "RECIEVING: " << mMessageReceived << endl;
				pStream->fromCharArray(mMessageReceived);

				int type;
				pStream->readInt(type);

				while (type) {
					cout << "checking message types" << endl;
					if(type == Constants::UPDATE) {

						int updateType;
						pStream->readInt(updateType);

						if(updateType == Constants::DRUPDATE) {

							mOtherPlayer->deserialize(pStream);
							mRecRDXVel = mOtherPlayer->getBody()->GetLinearVelocity().x;
						}
						else {
							if(!mHost) {
								// Deserialize the level
								mLevel->deserialize(pStream);
							}
						}
					}
					else if(type == Constants::DESTROY) {
					
						int id;
						pStream->readInt(id);

						mLevel->killEnemy(id);
					}
					else if(type == Constants::DESTROYPICKUP) {
					
						int id;
						pStream->readInt(id);

						mLevel->destroyPickup(id);
					}
					else if(type == Constants::CREATEPICKUP) {
					
						int type, x, y, id;
						pStream->readInt(type);
						pStream->readInt(id); // Clients sends -1
						pStream->readInt(x);
						pStream->readInt(y);

						mLevel->createPickup(type, x, y);

						if(mHost) {
							// Send create to peer
							// Send Id of created pickup
							PacketStream s;
							s.writeInt(Constants::CREATEPICKUP);
							s.writeInt(mLevel->getPickups().back()->getID());
							s.writeInt(type);
							s.writeFloat(x);
							s.writeFloat(y);
							s.writeChar('\0');

							char message[10];
							s.toCharArray(message);
							message[strlen(message)-1] = '\0';

							s3eSocketSendTo(mSock, message, strlen(message), 0, &mDest_addr);
						}
						else {
							// Set id of pickup if client if client
							mLevel->getPickups().back()->setID(id);
						}
					}
					else if(type == Constants::CREATECRATE) {
				
						int type, id;
						float x, y;
						//pStream->readInt(id);
						pStream->readInt(type);
						pStream->readFloat(x);
						pStream->readFloat(y);

						if(mHost) {
						
							mLevel->createCrate(type, x, y);
							crateSpawned = true;

							PacketStream s;
							s.writeInt(Constants::CREATECRATE);
							//s.writeInt(mLevel->getCrates().back()->getID());
							s.writeInt(type);
							s.writeFloat(x);
							s.writeFloat(y);
							s.writeChar('\0');

							char message[10];
							s.toCharArray(message);
							message[strlen(message)-1] = '\0';

							//s3eSocketSendTo(mSock, message, strlen(message), 0, mDest_addr);
						}
						else {
							mLevel->createCrate(type, x, y);
							//mLevel->getCrates().back()->setID(id);
							crateSpawned = true;
						}
					}
					else if(type == Constants::TOGGLEPLATFORM) {
						int id;

						pStream->readInt(id);
						mLevel->getActivatablePlatforms().at(id)->toggle();
					}
					else if(type == Constants::ACTION) {

						int action;
						pStream->readInt(action);

						//Punch
						if(action == 0) {
						
							// Play punch animation
							mOtherPlayer->punch();

							vector<Enemy*> enemies = mLevel->getEnemies();
							b2Body* player = mOtherPlayer->getBody();

							for(int i = 0; i < enemies.size(); i++) {				
								if( abs((enemies.at(i)->getBody()->GetPosition() - player->GetPosition()).Length()) <= 10) {
									short direction = 1;

									if(enemies.at(i)->getBody()->GetPosition().x < player->GetPosition().x) {
										direction = -1;
									}

									b2Vec2 force = b2Vec2(50000*direction, 0);
									enemies.at(i)->getBody()->ApplyForce(force, enemies.at(i)->getBody()->GetWorldCenter());
									enemies.at(i)->ApplyDamage(mOtherPlayer->getMeleeStr());

									CIwSVec2 screenCentre = CIwSVec2((int16)Iw2DGetSurfaceWidth() >> 1, (int16)Iw2DGetSurfaceHeight() >> 1);

									b2Transform t = enemies.at(i)->getBody()->GetTransform();
									CIwSVec2 pos = screenCentre + (CIwSVec2(int16(t.p.x*8), -int16(t.p.y*8)));

									createEffect(pos, 8 , "Images/blood.png", 1.0f);
								}
							}
						}
						//Kick
						else if(action == 1) {
Esempio n. 19
0
CCIntervalAction* getAction()
{
	CCIntervalAction* pEffect = createEffect(actionIdx, 3);

	return pEffect;
} 
Esempio n. 20
0
void StateBuffTrigger::execute(StateBase* parent)
{
    auto battle = getBattleInfo();

    if (this->stage != 1) {
        BatSeqBuffTrigger* tg = new BatSeqBuffTrigger;
        tg->buffId = buff->bid;
        tg->petUid = buff->belongs.owner;
        battle->pushSeq(shared_ptr<ISeq>(tg));
    }

    shared_ptr<FireBuff> fireInfo(new FireBuff);
    assign(fireInfo.get(), buff, buff->keyBuff, 0);
    fireInfo->parent = nullptr;
    fireInfo->origin = battle->topSkill() != nullptr ? battle->topSkill().get() : nullptr;
    battle->pushSkill(fireInfo);

    for (auto subsk : buff->keyBuff->subs) {
        fireInfo->targets = battle->getTargets(fireInfo->origin, buff->belongs.owner, subsk->target, subsk->parent.lock()->target);
        for (int i=0; i<fireInfo->targets.size(); i++) {
            if (this->stage == subsk->triggerStage) {
                int dstuid = fireInfo->targets[i];
                if (getBattleInfo()->allPets[dstuid]->isBating) {
                    assign(fireInfo.get(), buff, subsk.get(), dstuid);
                    createEffect(2, subsk->subEffId)->execute();
                }
            }
        }

        battle->checkDead(fireInfo->targets);
    }

    // 以次计算触发的每个效果
    vector<Buff*> triggerSubBuff;
    for (auto sub : buff->keyBuff->subs)
    {
        if (stage == sub->triggerStage) {
            for (auto arg : sub->triggerParams) {
                if (createTriggerCondi(buff->belongs.owner, sub->triggerCondi, arg)->isTrigger(stage, fireInfo->origin)) {
                    triggerSubBuff.push_back(sub.get());
                    break;
                }
            }
        }
    }

    //
    for (auto& it : triggerSubBuff)
    {
        assign(fireInfo.get(), buff, it, 0);
        fireInfo->targets = battle->getTargets(fireInfo->origin, buff->belongs.owner, it->target, it->parent.lock()->target);
        for (int i=0; i<fireInfo->targets.size(); i++) {
            int dstuid = fireInfo->targets[i];
            if (getBattleInfo()->allPets[dstuid]->isBating) {
                assign(fireInfo.get(), buff, it, dstuid);
                createEffect(2, it->subEffId)->execute();
            }
        }
    }

    battle->popSkill();

    exitState();

}
Esempio n. 21
0
bool MyApp::initialise(HINSTANCE hInstance, int cmdShow) 
{
	if (!DxApp::initialise(hInstance, cmdShow, 1024, 768))
		return false;

	// Build FXs
	if (FAILED(buildFX())) {
		MessageBox(hWnd(), L"Cannot create effects", L"Error", MB_OK|MB_ICONERROR);
		return false;
	}

	// Build Geometry
	if (FAILED(buildGeometry())) {
		MessageBox(hWnd(), L"Cannot create geometry", L"Error", MB_OK|MB_ICONERROR);
		return false;
	}

	// Textures
	HRESULT hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("noise_texture.jpg")).c_str(), 0, 0, &m_srvRandom, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading random texture", 0, 0);
		return false;
	}


	// flags for heightmap texture
	D3DX11_IMAGE_LOAD_INFO loadInfo;
	loadInfo.Width = D3DX11_DEFAULT;
	loadInfo.Height = D3DX11_DEFAULT;
	loadInfo.Depth = D3DX11_DEFAULT;
	loadInfo.FirstMipLevel = D3DX11_DEFAULT;
	loadInfo.MipLevels = D3DX11_DEFAULT;
	loadInfo.Usage = (D3D11_USAGE)D3DX11_DEFAULT;
	loadInfo.BindFlags =  D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET; //D3DX11_DEFAULT;
	loadInfo.CpuAccessFlags = loadInfo.MiscFlags = D3DX11_DEFAULT;
	loadInfo.Format = DXGI_FORMAT_R32G32B32A32_FLOAT           ;
	loadInfo.Filter = D3DX11_DEFAULT;
	loadInfo.MipFilter = D3DX11_DEFAULT;
	loadInfo.pSrcInfo = NULL;

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("heightmap.jpg")).c_str(), &loadInfo, 0, &m_srvTerrainHmap, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading terrain heightmap", 0, 0);
		return false;
	}

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("normalmap.bmp")).c_str(), 0, 0, &m_srvTerrainNmap, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading terrain normalmap", 0, 0);
		return false;
	}

	hr = D3DX11CreateShaderResourceViewFromFileA(_dxDev, (PATH_MEDIA+string("space_ship.jpg")).c_str(), 0, 0, &m_srvSpaceship, 0);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error loading spaceship texture", 0, 0);
		return false;
	}
	

	// Dynamic terrain
	ID3D11Resource* resHmap = 0;
	m_srvTerrainHmap->GetResource(&resHmap);

	D3D11_RENDER_TARGET_VIEW_DESC rtd;
	rtd.Format = DXGI_FORMAT_R32G32B32A32_FLOAT           ;
	rtd.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
	rtd.Texture2D.MipSlice = 0;
	hr = _dxDev->CreateRenderTargetView(resHmap, &rtd, &m_rtvDynamicHmap);
	if (FAILED(hr)) {
		MessageBoxA(0, "Error creating hmap rtv", 0, 0);
		return false;
	}
	////////////////////////////////////

	//rs_Wireframe
	D3D11_RASTERIZER_DESC rsd;
	ZeroMemory(&rsd, sizeof(rsd));
	rsd.FillMode = D3D11_FILL_WIREFRAME;
	rsd.CullMode = D3D11_CULL_BACK;
	rsd.DepthClipEnable = true;
	hr = _dxDev->CreateRasterizerState(&rsd, &rs_Wireframe);
	if (FAILED(hr))
		MessageBoxA(0, "error creating rs Wireframe", 0, 0);


	// Camera
	m_camera.setProjection(0.7f, width()/(float)height(), 1.0f, 500.0f);
	m_camera.setPosVector(0.0f, 30.0f, 0.0f);
	m_camera.setRightVector(1.0f, 0.0f, 0.0f);
	m_camera.setUpVector(0.0f,   1.0f, 0.0f);
	m_camera.setLookVector(0.0f, 0.0f, 1.0f);
	

	// myAlien
	myAlien.setPos(0,5,0);
	myAlien.type = AlienTypes::GS_ALIEN;
	myAlien.mesh = alienMesh;

	// Textures/Views for Implicit surfaces
	if (!createImplicitResources())
		return false;

	// Tessellation - control point(s) buffer

		
	//____ check for DX11 support__ 
	if (dx11Support())
	{
		// Single control point vertex buffer
		D3D11_BUFFER_DESC bdsc;
		bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		bdsc.CPUAccessFlags = 0;
		bdsc.MiscFlags = 0;
		bdsc.StructureByteStride = 0;
		bdsc.Usage = D3D11_USAGE_IMMUTABLE;


#ifdef _TESS_INDEX_BUFFER
		// Version 2 : 6 vertices - W/ Index Buffer
		const int numVertices = 6;
		Vertex ctrl_point[numVertices];
		bdsc.ByteWidth = sizeof(Vertex)*numVertices;
		ZeroMemory(ctrl_point, sizeof(Vertex)*numVertices); 

		ctrl_point[0].position = XMFLOAT3( 0.0f,  1.0f,  0.0f); // top
		ctrl_point[1].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);	//       1 ------> 2 (+,+)
		ctrl_point[2].position = XMFLOAT3( 1.0f,  0.0f,  1.0f); //      
		ctrl_point[3].position = XMFLOAT3(-1.0f,  0.0f, -1.0f); // 
		ctrl_point[4].position = XMFLOAT3( 1.0f,  0.0f, -1.0f); // (-,-) 3 ------> 4
		ctrl_point[5].position = XMFLOAT3( 0.0f, -1.0f,  0.0f); // bottom

		UINT indices[24];
		//			top-front
		indices[0] = 0; indices[1] = 4; indices[2] = 3;
		//			top-right
		indices[3] = 0; indices[4] = 2; indices[5] = 4;
		//			top-left
		indices[6] = 0; indices[7] = 3; indices[8] = 1;
		//			top-back
		indices[9] = 0; indices[10] = 1; indices[11] = 2;
		//			bottom-front
		indices[12] = 5; indices[13] = 3; indices[14] = 4;
		//			bottom-right
		indices[15] = 5; indices[16] = 4; indices[17] = 2;
		//			bottom-left
		indices[18] = 5; indices[19] = 1; indices[20] = 3;
		//			bottom-back
		indices[21] = 5; indices[22] = 2; indices[23] = 1;

		D3D11_BUFFER_DESC idsc;
		idsc.BindFlags = D3D11_BIND_INDEX_BUFFER;
		idsc.CPUAccessFlags = 0;
		idsc.MiscFlags = 0;
		idsc.StructureByteStride = 0;
		idsc.Usage = D3D11_USAGE_IMMUTABLE;
		idsc.ByteWidth = sizeof(UINT) * 24;
		
		D3D11_SUBRESOURCE_DATA ibdata;
		ibdata.pSysMem = indices;
		ibdata.SysMemPitch = ibdata.SysMemSlicePitch = 0;

		// create index buffer
		hr = _dxDev->CreateBuffer(&idsc, &ibdata, &m_ibControlPoints);
		

#else
		// Version 1 : 24 vertices - No Index Buffer
		const int numVertices = 3*8;  // triangle list - 8 triangles
		Vertex ctrl_point[numVertices];
		bdsc.ByteWidth = sizeof(Vertex) * numVertices; // three control points
		ZeroMemory(ctrl_point, sizeof(Vertex)*numVertices); // octahedron
		// CW
		// top - front
		ctrl_point[0].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[1].position = XMFLOAT3( 1.0f, 0.0f, -1.0f);
		ctrl_point[2].position = XMFLOAT3(-1.0f, 0.0f, -1.0f);
		// top - right
		ctrl_point[3].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[4].position = XMFLOAT3( 1.0f, 0.0f,  1.0f);
		ctrl_point[5].position = XMFLOAT3( 1.0f, 0.0f, -1.0f);
		// top - left
		ctrl_point[6].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[7].position = XMFLOAT3(-1.0f, 0.0f, -1.0f);
		ctrl_point[8].position = XMFLOAT3( -1.0f, 0.0f, 1.0f);
		// top - back
		ctrl_point[9].position = XMFLOAT3( 0.0f, 1.0f,  0.0f);
		ctrl_point[10].position = XMFLOAT3(-1.0f, 0.0f,  1.0f);
		ctrl_point[11].position = XMFLOAT3( 1.0f, 0.0f,  1.0f);
		
		// bottom - front
		ctrl_point[12].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[13].position = XMFLOAT3(-1.0f,  0.0f, -1.0f);
		ctrl_point[14].position = XMFLOAT3( 1.0f,  0.0f, -1.0f);
		// bottom - right
		ctrl_point[15].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[16].position = XMFLOAT3( 1.0f,  0.0f, -1.0f);
		ctrl_point[17].position = XMFLOAT3( 1.0f,  0.0f,  1.0f);
		// bottom - left
		ctrl_point[18].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[19].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);
		ctrl_point[20].position = XMFLOAT3(-1.0f,  0.0f, -1.0f);
		// bottom - back
		ctrl_point[21].position = XMFLOAT3( 0.0f, -1.0f,  0.0f);
		ctrl_point[22].position = XMFLOAT3( 1.0f,  0.0f,  1.0f);
		ctrl_point[23].position = XMFLOAT3(-1.0f,  0.0f,  1.0f);
#endif
	
		D3D11_SUBRESOURCE_DATA bdata;
		bdata.pSysMem = ctrl_point;
		bdata.SysMemPitch = bdata.SysMemSlicePitch = 0;

		hr = _dxDev->CreateBuffer(&bdsc, &bdata, &m_vbControlPoints);
		if (FAILED(hr)) {
			MessageBoxA(0, "Error creating control points buffer", 0, 0);
			return false;
		}

		// Bezier surface effect
		if (!createEffect((PATH_SHADERS+string("tessBezierSurface.fxo")).c_str(), &m_fxTessBezierSurface))
			MessageBoxA(0, "Error creating bezSurface effect", 0, 0);




		
		// PSP surface effect
		if (!createEffect((PATH_SHADERS+string("tessPSPSurface.fxo")).c_str(), &m_fxTessPSPSurface))
			MessageBoxA(0, "Error creating pspSurface effect", 0, 0);

		// Sphere effect
		if (!createEffect((PATH_SHADERS+string("tessSphere.fxo")).c_str(), &m_fxTessSphere))
			MessageBoxA(0, "Error creating tessSphere effect", 0, 0);

		// Mesh effect
		if (!createEffect((PATH_SHADERS+string("tessMesh.fxo")).c_str(), &m_fxTessMesh))
			MessageBoxA(0, "Error creating tessMesh effect", 0, 0);

		// Terrain effect
		if (!createEffect((PATH_SHADERS+string("tessTerrain.fxo")).c_str(), &m_fxTessTerrain))
			MessageBoxA(0, "Error creating tessMesh effect", 0, 0);
		
		

		///____SINGLE_________

		ZeroMemory(&bdsc, sizeof(bdsc));
		bdsc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		bdsc.ByteWidth = sizeof(Vertex);
		bdsc.Usage = D3D11_USAGE_IMMUTABLE;
		Vertex vSingle[1];
		ZeroMemory(&vSingle, sizeof(vSingle));
		ZeroMemory(&bdata, sizeof(bdata));
		bdata.pSysMem = vSingle;
		hr = _dxDev->CreateBuffer(&bdsc, &bdata, &m_vbSingle);
		if (FAILED(hr)) MessageBoxA(0, "Error creating single VB", 0, 0);

		if (!createEffect((PATH_SHADERS+string("tessSingle.fxo")).c_str(), &m_fxTessSingle))
			MessageBoxA(0, "Error creating tessSingle effect", 0, 0);
		//_____________________
		
	}

	

	mySphere.tessFactor = 5;
	mySphere.radius = 10.0f;

	setupScene();

	// GUI
	TwInit(TW_DIRECT3D11, _dxDev);

	TwWindowSize(width(), height());
	TwBar* myBar;
	myBar = TwNewBar("myBar");
	

	TwAddButton(myBar, "Play", callback_Play, (void*)this, 0);
	TwAddButton(myBar, "Explode", callback_Explode, (void*)this, 0);


	



	// __________GS Alien
	TwAddVarRW(myBar, "Thorn length", TW_TYPE_FLOAT, &glb_fThornLength, "group=GS_Alien min=0.0 max=1.0 step=0.05");


	// __________Selected Tessellated Object
	
	// Partitioning
	TwEnumVal  twTessPartitioning[] = { { TessPartitioning::FRAC_EVEN, "Frac. Even" }, { TessPartitioning::FRAC_ODD, "Frac. Odd" }, 
										{ TessPartitioning::INTEGER, "Integer" }, { TessPartitioning::POW2 , "Pow2" } };

	TwType twTessPartition;
	twTessPartition = TwDefineEnum("TessPartitioning", twTessPartitioning, 4);
	TwAddVarRW(myBar, "Partitioning Method", twTessPartition, &glb_selectedTessPartitioning, "group=Tessellated_Objects");
	
	// Wireframe
	TwAddVarRW(myBar, "Wireframe", TW_TYPE_BOOL8, &glb_tessWireframe, "group=Tessellated_Objects");
	// Inside Factor
	TwAddVarRW(myBar, "Inside Factor", TW_TYPE_FLOAT, &glb_insideTess, "group=Tessellated_Objects min=1 max=64 step=1");
	// Edge Factor
	TwAddVarRW(myBar, "Edge Factor", TW_TYPE_FLOAT, &glb_edgeTess, "group=Tessellated_Objects min=1 max=64 step=1");
	// Common inside/edge factor
	TwAddVarRW(myBar, "Common Factor", TW_TYPE_FLOAT, &glb_SingleTessFactor, "group=Tessellated_Objects min=1 max=64 step=1");
	TwAddVarRW(myBar, "Single Factor", TW_TYPE_BOOL8, &glb_bSingleTessFactor, "");
	/////////////////////
	
	TwAddVarRW(myBar, "Terrain Height", TW_TYPE_FLOAT, &glb_terrainHeight, "group=Terrain min=0.0 max=1.0 step=0.05");
	TwAddVarRW(myBar, "Patches Dimension", TW_TYPE_INT32, &glb_terrainPatchDim, "group=Terrain min=1 max=10 step=1");

	TwAddVarRW(myBar, "Min Tess. Factor", TW_TYPE_FLOAT, &glb_terrainMinTessFactor, "group=Terrain min=1 max=63 step=1");
	TwAddVarRW(myBar, "Max Tess. Factor", TW_TYPE_FLOAT, &glb_terrainMaxTessFactor, "group=Terrain min=1 max=63 step=1");

	TwAddVarRW(myBar, "Min View Dist", TW_TYPE_FLOAT, &glb_terrainMinViewDist, "group=Terrain min=0.0 max=300.0 step=1.05");
	TwAddVarRW(myBar, "Max View Dist", TW_TYPE_FLOAT, &glb_terrainMaxViewDist, "group=Terrain min=0.0 max=300.0 step=1.05");

	TwAddVarRW(myBar, "Debug View", TW_TYPE_BOOL8, &glb_bTerrainDebugView, "group=Terrain");

	// Terrain Editing
	TwAddVarRW(myBar, "Power", TW_TYPE_BOOL8, &glb_bOn, "group=Terrain_Edit");
	TwAddVarRW(myBar, "Additive", TW_TYPE_BOOL8, &glb_bAdditive, "group=Terrain_Edit");
	TwAddVarRW(myBar, "Range", TW_TYPE_FLOAT, &glb_Range, "group=Terrain_Edit min=0.0 max=1.0 step=0.05");

	// Light
	TwAddVarRW(myBar, "Light Direction", TW_TYPE_DIR3F, &glb_lightDir, "");
	TwAddVarRW(myBar, "Light Color", TW_TYPE_COLOR4F, &glb_lightColor, "");

	// Implicit Depth
	TwAddVarRW(myBar, "Implicit Depth", TW_TYPE_INT32, &glb_iImplicitDepth, "group=Implicit min=1 max=3");

	TwAddVarRW(myBar, "Wireframe Mode", TW_TYPE_BOOL8, &glb_bWireframe, "");
	
	TwAddVarRW(myBar, "Sphere From Mesh", TW_TYPE_BOOL8, &glb_bSphereMesh, "");


	return true;
}