DirectionalLight::DirectionalLight()
{
	this->m_direction = FLOAT3(0.0f, 0.0f, 0.0f);
	this->m_la = FLOAT3(0.0f, 0.0f, 0.0f);
	this->m_ld = FLOAT3(0.0f, 0.0f, 0.0f);
	this->m_ls = FLOAT3(0.0f, 0.0f, 0.0f);
}
void ChainStrikeClientSkillEffect::update(float _dt)
{
	m_lifetime += _dt;

	m_eTarget = ClientEntityHandler::getEntity(m_target);
	
	FLOAT3 myVec = FLOAT3(0, 0, 0);
	if(m_eTarget)
		myVec = m_eTarget->m_model->getPosition() - FLOAT3(m_orig.x, m_orig.y, m_orig.z);

	D3DXVECTOR3 distanceToTarget(myVec.x, myVec.y, myVec.z);

	float onePercent = 1.0f/(ChainStrikeEffect::TIME_BETWEEN_JUMPS);
	m_percentToTarget += onePercent * _dt;

	D3DXVECTOR3 incY(0, 0.5f, 0);
	if(m_eOrig)
		//m_chainEffect->setOrig(D3DXVECTOR3(m_eOrig->m_model->getPosition().x, m_eOrig->m_model->getPosition().y, m_eOrig->m_model->getPosition().z));
		//m_chainEffect->setOrig(D3DXVECTOR3(m_superPos.x, m_superPos.y + 0.2f,m_superPos.z));
		pe[0]->setPosition(m_orig + (distanceToTarget*m_percentToTarget) + incY);
		pe[1]->setPosition(m_orig + (distanceToTarget*m_percentToTarget) + incY);
		pe[2]->setPosition(m_orig + (distanceToTarget*m_percentToTarget) + incY);
	//else
		//m_lifetime = ChainStrikeEffect::TIME_BETWEEN_JUMPS;
	//if(m_eTarget)
		//m_chainEffect->setTarget(D3DXVECTOR3(m_eTarget->m_model->getPosition().x, m_eTarget->m_model->getPosition().y + 0.2f, m_eTarget->m_model->getPosition().z));
		//m_chainEffect->setTarget(D3DXVECTOR3(m_superPos.x, m_superPos.y, m_superPos.z));
		//pe[1]->setPosition(D3DXVECTOR3(m_superPos.x, m_superPos.y, m_superPos.z));


	

	//m_chainEffect->setCamPos(g_graphicsEngine->getCamera()->getPos());
	//m_chainEffect->setViewProj(g_graphicsEngine->getCamera()->getViewProjectionMatrix());
}
Exemple #3
0
	//----------------------------------------------------------------------------------------------------
	void EERotateByProcess(EEObject* _object, float _time, float _radians, const FLOAT2& _center, float _delay, bool _isInfinite, float _startTime)
	{
		try
		{
			float remainTime = _delay + _time;
			float progress = _startTime;
			float speed = _radians / _time;

			while (1)
			{
				EEThreadSleep(20);
				std::lock_guard<std::mutex> mutex(_object->GetThreadMutex());

				float currTime = (float)EECore::s_EECore->GetTotalTime();
				float deltaTime = currTime - progress;
				progress = currTime;
				if (remainTime <= deltaTime + _time)
				{
					remainTime = _time;
					break;
				}
				else
				{
					remainTime -= deltaTime;
				}
			}

			while (1)
			{
				EEThreadSleep(20);
				std::lock_guard<std::mutex> mutex(_object->GetThreadMutex());

				float currTime = (float)EECore::s_EECore->GetTotalTime();
				float deltaTime = currTime - progress;
				progress = currTime;
				if (remainTime <= deltaTime && !_isInfinite)
				{
					MATRIX rotation = MatrixRotationAxisN(FLOAT3(0.0f, 0.0f, 1.0f), speed * remainTime);
					FLOAT3 position = _object->GetPosition() - _center;
					position *= rotation;
					_object->SetPosition(position + _center);
					remainTime = 0.f;
					return;
				}
				else
				{
					MATRIX rotation = MatrixRotationAxisN(FLOAT3(0.0f, 0.0f, 1.0f), speed * deltaTime);
					FLOAT3 position = _object->GetPosition() - _center;
					position *= rotation;
					_object->SetPosition(position + _center);
					remainTime -= deltaTime;
				}
			}
		}
		catch (boost::thread_interrupted&)
		{
			return;
		}
	}
	//----------------------------------------------------------------------------------------------------
	bool EEProgressbar::Update()
	{
		if (!EEObject::Update())
			return false;

		UpdateObjectState();

		if (m_isPositionDirty)
		{
			m_isPositionDirty = false;
		}

		if (m_isScaleDirty || m_isLocalZOrderDirty || m_isProgressDirty)
		{
			Rect_Float rect(
				-m_quadWidth / 2,
				-m_quadHeight / 2,
				m_quadWidth / 2,
				m_quadHeight / 2
				);

			//the value of the z depends on the progress (the scaled end - the scaled width * (1.0f - the progress)
			rect.z -= (rect.z - rect.x) * (1.0f - m_progress);

			EEQuad2DVertex vertices[4];
			vertices[0].pos = FLOAT3(rect.x, rect.y, m_localZOrder * 0.0001f);
			vertices[0].tex = FLOAT2(0, 0);
			vertices[1].pos = FLOAT3(rect.z, rect.y, m_localZOrder * 0.0001f);
			vertices[1].tex = FLOAT2(m_progress, 0);
			vertices[2].pos = FLOAT3(rect.x, rect.w, m_localZOrder * 0.0001f);
			vertices[2].tex = FLOAT2(0, 1);
			vertices[3].pos = FLOAT3(rect.z, rect.w, m_localZOrder * 0.0001f);
			vertices[3].tex = FLOAT2(m_progress, 1);

			ID3D11DeviceContext *deviceContext = EECore::s_EECore->GetDeviceContext();
			D3D11_MAPPED_SUBRESOURCE mappedResource;
			ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE));
			deviceContext->Map(m_quadVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
			memcpy(mappedResource.pData, vertices, sizeof(vertices));
			deviceContext->Unmap(m_quadVB, 0);

			if (m_isProgressDirty)
			{
				if (m_callbackFunc)
				{
					m_callbackFunc(m_progress);
				}
			}

			m_isScaleDirty = false;
			m_isLocalZOrderDirty = false;
			m_isProgressDirty = false;
		}

		m_progressFrame.Update();

		return true;
	}
Exemple #5
0
	//----------------------------------------------------------------------------------------------------
	bool EECurve2D::Update()
	{
		if (!EEObject::Update())
			return false;

		UpdateObjectState();

		if (m_isPositionDirty)
		{
			m_isPositionDirty = false;
		}

		if (m_isLocalZOrderDirty || m_isCurveDirty)
		{
			std::vector<EECurve2DVertex> vertices(m_curve.size() << 1);
			if (m_curve.size() > 1)
			{
				float halfWidth = m_width / 2;
				float deltaTex = 1.f / m_curve.size();
				for (unsigned int i = 0; i < m_curve.size() - 1; ++i)
				{
					int index = i << 1;
					FLOAT2 vertical = (m_curve[i + 1] - m_curve[i]).GetVertical();
					vertices[index].pos = FLOAT3(m_curve[i] + vertical * halfWidth, m_localZOrder * 0.0001f);
					vertices[index].tex = FLOAT2(m_texRect.x, m_texRect.y + i * deltaTex);
					vertices[index + 1].pos = FLOAT3(m_curve[i] - vertical * halfWidth, m_localZOrder * 0.0001f);
					vertices[index + 1].tex = FLOAT2(m_texRect.z, m_texRect.y + i * deltaTex);
				}
				FLOAT2 vertical = (m_curve[m_curve.size() - 1] - m_curve[m_curve.size() - 2]).GetVertical();
				vertices[vertices.size() - 2].pos = FLOAT3(m_curve.back() + vertical * halfWidth, m_localZOrder * 0.0001f);
				vertices[vertices.size() - 2].tex = FLOAT2(m_texRect.x, m_texRect.w);
				vertices[vertices.size() - 1].pos = FLOAT3(m_curve.back() - vertical * halfWidth, m_localZOrder * 0.0001f);
				vertices[vertices.size() - 1].tex = FLOAT2(m_texRect.z, m_texRect.w);
			}

			if (m_isCurveDirty)
				CreateCurveVertexBuffer();
			if (m_curveVB)
			{
				ID3D11DeviceContext *deviceContext = EECore::s_EECore->GetDeviceContext();
				D3D11_MAPPED_SUBRESOURCE mappedResource;
				ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE));
				deviceContext->Map(m_curveVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
				memcpy(mappedResource.pData, &vertices[0], sizeof(EECurve2DVertex)* vertices.size());
				deviceContext->Unmap(m_curveVB, 0);
			}

			m_isLocalZOrderDirty = false;
			m_isCurveDirty = false;
		}

		return true;
	}
Exemple #6
0
Hero::Hero(HERO_TYPE _heroType, int _playerId) : UnitEntity()
{
	this->m_heroType = _heroType;
	this->m_playerId = _playerId;
	this->m_type = Type::HeroType;
	this->m_obb = new BoundingOrientedBox(XMFLOAT3(this->m_position.x, this->m_position.y, this->m_position.z), XMFLOAT3(0.5f, 0.5f, 0.5f), XMFLOAT4(0.0f, 0.0f, 0.0f, 1.0f));
	this->m_position = FLOAT3(0.0f, 0.0f, 0.0f);
	this->m_nextPosition = this->m_position;
	this->m_reachedPosition = true;
	this->m_attackCooldown = 0.0f;
	this->m_attackRange = 5.0f;
	this->m_hasTarget = false;
	this->m_startPos=FLOAT3(0.0,0.0,0.0);
	this->m_weaponType = WEAPON_TYPE::NO_WEAPON;
	this->m_alive = true;
}
Exemple #7
0
//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow)
int main(int _argc, char** _argv)
{
	EEDesc desc;
	desc.applicationName = L"Emerald";	//窗口名称
	desc.isFullScreen = false;			//是否全屏
	desc.width = 800;					//窗口宽度
	desc.height = 450;					//窗口高度
	desc.isSSAA = true;					//是开启抗锯齿
	desc.isVsync = false;				//是否垂直同步
	EEInitialize(desc);

	EETexture bgTex(L"Texture\\主界面\\主界面背景.jpg");
	EETexture button2Tex(L"Texture/主界面/模式标签/生涯模式.png");
	EEFont helloworld(FLOAT3(100.0f, 100.0f, 0.0f), EEColor::YELLOW, L"hello world");
	EELineEditer *lineEditer = new EELineEditer(Rect_Float(200.f, 300.f, 300.f, 350.f), bgTex, EEColor::BLACK);
	EELineEditer *lineEditer2 = new EELineEditer(Rect_Float(400.f, 300.f, 500.f, 350.f), bgTex, EEColor::BLACK);

	while (EERun())
	{
		EEBeginScene(EEColor::BLACK);
		EEShowFPSInTitle(L"- -");

		lineEditer->Process();
		lineEditer2->Process();
		helloworld.Process();

		EEEndScene();
	}

	EEShutdown();
	return 0;
}
Exemple #8
0
	//----------------------------------------------------------------------------------------------------
	bool EEQuad2D::Update()
	{
		if (!EEObject::Update())
			return false;

		UpdateObjectState();

		if (m_isPositionDirty)
		{
			m_isPositionDirty = false;
		}

		if (m_isScaleDirty || m_isLocalZOrderDirty || m_isTexRectDirty)
		{
			Rect_Float rect(
				-m_quadWidth / 2,
				-m_quadHeight / 2,
				m_quadWidth / 2,
				m_quadHeight / 2
				);

			EEQuad2DVertex quadVertices[4];
			quadVertices[0].pos = FLOAT3(rect.x, rect.y, m_localZOrder * 0.0001f);
			quadVertices[0].tex = FLOAT2(m_texRect.x, m_texRect.y);
			quadVertices[1].pos = FLOAT3(rect.z, rect.y, m_localZOrder * 0.0001f);
			quadVertices[1].tex = FLOAT2(m_texRect.z, m_texRect.y);
			quadVertices[2].pos = FLOAT3(rect.x, rect.w, m_localZOrder * 0.0001f);
			quadVertices[2].tex = FLOAT2(m_texRect.x, m_texRect.w);
			quadVertices[3].pos = FLOAT3(rect.z, rect.w, m_localZOrder * 0.0001f);
			quadVertices[3].tex = FLOAT2(m_texRect.z, m_texRect.w);

			ID3D11DeviceContext *deviceContext = EECore::s_EECore->GetDeviceContext();
			D3D11_MAPPED_SUBRESOURCE mappedResource;
			ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE));
			deviceContext->Map(m_quadVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
			memcpy(mappedResource.pData, quadVertices, sizeof(quadVertices));
			deviceContext->Unmap(m_quadVB, 0);

			m_isScaleDirty = false;
			m_isLocalZOrderDirty = false;
			m_isTexRectDirty = false;
		}

		return true;
	}
Exemple #9
0
	//----------------------------------------------------------------------------------------------------
	void EEQuad2D::SetRect(const Rect_Float& _rect)
	{
		m_position = FLOAT3((_rect.x + _rect.z) / 2, (_rect.y + _rect.w) / 2, 0.0f);
		m_quadRect = _rect;
		m_quadWidth = _rect.z - _rect.x;
		m_quadHeight = _rect.w - _rect.y;
		m_isPositionDirty = true;
		m_isScaleDirty = true;
	}
Exemple #10
0
	//----------------------------------------------------------------------------------------------------
	EEQuad2D::EEQuad2D(const Rect_Float &_rect)
		:
		EEObject2D(FLOAT3((_rect.x + _rect.z) / 2, (_rect.y + _rect.w) / 2, 0.0f)),
		m_quadRect(_rect),
		m_quadWidth(_rect.z - _rect.x),
		m_quadHeight(_rect.w - _rect.y),
		m_quadVB(NULL)
	{
		InitializeQuad2D();

		CreateQuadVertexBuffer();
	}
Exemple #11
0
//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow)
int main(int _argc, char** _argv)
{
	EEDesc desc;
	desc.applicationName = L"Emerald";	//窗口名称
	desc.isFullScreen = false;			//是否全屏
	desc.width = 800;					//窗口宽度
	desc.height = 450;					//窗口高度
	desc.isSSAA = true;					//是开启抗锯齿
	desc.isVsync = false;				//是否垂直同步
	EEInitialize(desc);

	EEBitmap bitmap1 = EEGetFontBitmap(L'啊');
	EEBitmap bitmap2 = EEGetFontBitmap(L'呀');
	EEBitmap bitmap3 = EEGetFontBitmap(L'?');
	EEBitmap bitmap = EEBitmapCombineHorizontal(bitmap1, bitmap2);
	//bitmap = EEBitmapCombineHorizontal(bitmap, bitmap3);
	//bitmap.Resize(500, 500);
	//std::vector<EEBitmap> bitmaps;
	//EEBitmapDivideVertical(bitmap, 3, bitmaps);
	//EETexture fonttex(bitmaps[1]);
	EEQuad2D quad0(Rect_Float(0, 0, (float)bitmap.GetWidth(), (float)bitmap.GetHeight()), bitmap);
	quad0.SetLocalZOrder(10.0f);

	EEBitmap bitmap11 = EEGetFontBitmap(L"大家好!呀\n呀\'呀呀?");
	EEQuad2D quad1(Rect_Float(0, 200, (float)bitmap11.GetWidth(), (float)bitmap11.GetHeight() + 200), bitmap11);
	quad1.SetLocalZOrder(10.0f);

	EETexture bgTex(L"Texture\\Project Diva Freedom\\01\\选歌条.png");
	EEFont helloworld(FLOAT3(100.0f, 100.0f, 0.0f), EEColor::YELLOW, L"hello world");
	helloworld.AddText(L'1');
	EELineEditor *lineEditor = new EELineEditor(Rect_Float(200.f, 300.f, 300.f, 350.f), bgTex, EEColor::BLACK);
	EELineEditor *lineEditor2 = new EELineEditor(Rect_Float(400.f, 300.f, 500.f, 350.f), bgTex, EEColor::BLACK);
	EETextEditor *textEditor = new EETextEditor(Rect_Float(300.f, 100.f, 400.f, 150.f), bgTex, EEColor::BLACK);

	while (EERun())
	{
		EEBeginScene(EEColor::BLACK);
		EEShowFPSInTitle(L"- -");

		quad0.Process();
		quad1.Process();
		lineEditor->Process();
		lineEditor2->Process();
		helloworld.Process();
		textEditor->Process();

		EEEndScene();
	}

	EEShutdown();
	return 0;
}
Exemple #12
0
	//----------------------------------------------------------------------------------------------------
	EEQuad2D::EEQuad2D(const Rect_Float &_rect, ID3D11ShaderResourceView* _tex)
		:
		EEObject2D(FLOAT3((_rect.x + _rect.z) / 2, (_rect.y + _rect.w) / 2, 0.0f)),
		m_quadRect(_rect),
		m_quadWidth(_rect.z - _rect.x),
		m_quadHeight(_rect.w - _rect.y),
		m_quadVB(NULL)
	{
		InitializeQuad2D();

		SetTexture(_tex);
		SetIsUseColor(false);
		SetIsUseTex(true);
		CreateQuadVertexBuffer();
	}
Exemple #13
0
	//----------------------------------------------------------------------------------------------------
	EEFont::EEFont(const float _width, float height, const EEColor& _color, wchar_t* _text)
		:
		EEQuad2D(FLOAT3(0.f, 0.f, 0.f), _width, height, _color),
		m_text(_text),
		m_isTextDirty(true),
		m_isDynamic(false),
		m_isAdaptive(true),
		m_adaptivePos(1.f, 1.f)
	{
		InitializeFont();

		SetColor(_color);
		SetIsUseColor(true);
		SetIsUseTex(true);
	}
Exemple #14
0
DIVANote::DIVANote(const Note& _note, double _totalTime, double singleTime, EETexture& _nodeTex, EETexture& _stripTex)
	:
	EEQuad2D(FLOAT3((float)_note.x, (float)_note.y, 0.f), EEGetWidth() / 20.f, EEGetHeight() / 11.f, _nodeTex),

	m_type(_note.key < NOTE_NUM ? NOTETYPE_NORMAL : NOTETYPE_STRIP),
	m_key(_note.key),
	m_x(_note.x),
	m_y(_note.y),
	m_tailx(_note.tailx),
	m_taily(_note.taily),
	m_note(FLOAT3((float)_note.tailx, (float)_note.taily, 0.f), EEGetWidth() / 20.f, EEGetHeight() / 11.f, _nodeTex),
	m_stripNote(FLOAT3((float)_note.tailx, (float)_note.taily, 0.f), EEGetWidth() / 20.f, EEGetHeight() / 11.f, _nodeTex),
	m_strip(_stripTex),

	m_state(DIVA_NOTE_DEFAULT),
	m_actionTime(0.1),
	m_totalTime(_totalTime),
	m_restTime(_totalTime),

	m_totalDuration(_note.duration * singleTime),
	m_restDuration(_note.duration * singleTime)
{
	m_strip.SetWidth(EEGetWidth() / 30.f);
}
Exemple #15
0
void Mission::createMission(string type, float x, float z, int startwave, int endwave,string missionName)
{
	this->startWave=startwave;
	this->endWave=endwave;
	this->m_position=FLOAT3(x,0.0f,z);
	this->missionName=missionName;

	//if(EntityHandler::getServerEntity(this->bossId) != NULL)
	{
		if(type=="bigBadBoss")
		{
			this->missionType=MissionType::BBB;
		}
		if(type=="bigBadChar")
		{
			this->missionType=MissionType::BBC;
		}
	}
	int k=0;
}
void DeathClientSkillEffect::update(float dt)
{
	this->m_lifetime = this->m_lifetime - dt;
	
	Entity *e = ClientEntityHandler::getEntity(this->m_masterId);
	if(e != NULL)
	{
		if(e->m_type == ServerEntity::HeroType)
		{
			this->m_model->setGlowAlpha((LIFETIME  -  m_lifetime ) * 0.5f);
		}
	}

	if(this->m_model != NULL)
	{
		if(this->m_sink == true)
		{
			if(this->m_lifetime < 1.5f)
			{
				FLOAT3 pos = this->m_model->getPosition();
				pos.y = pos.y - dt;
				this->m_model->setPosition(pos);
			}
		}
		else
		{
			this->m_model->move(D3DXVECTOR3(0.0f, dt / 5.0f, 0.0f));

			if(this->m_lifetime <= 5.0f)
			{
				this->m_model->setAlpha(max(this->m_model->getAlpha() - dt / 4.0f, 0.0f));
			}
			else if(this->m_lanternLight != NULL)
			{
				this->m_lanternLight->setPosition(this->m_model->getLeftHandPosition(), FLOAT3(0.0f, 1.0f, 0.0f));
				this->m_lanternLight->setDiffuseColor(this->m_lanternLight->getDiffuseColor() - (this->m_originalDiffuse / 5.0f) * dt);
				this->m_lanternLight->setSpecularColor(this->m_lanternLight->getSpecularColor() - (this->m_originalSpecular / 5.0f) * dt);
			}
		}
	}
}
Exemple #17
0
Hero::Hero() : UnitEntity()
{
	this->m_type = Type::HeroType;
	this->m_obb = new BoundingOrientedBox(XMFLOAT3(this->m_position.x, this->m_position.y, this->m_position.z), XMFLOAT3(0.5f, 0.5f, 0.5f), XMFLOAT4(0.0f, 0.0f, 0.0f, 1.0f));
	this->m_nextPosition = this->m_position;
	this->m_reachedPosition = true;
	this->m_attackCooldown = 0.0f;
	this->m_attackRange = 5.0f;
	this->m_hasTarget = false;
	this->m_baseMovementSpeed = 3.1f;
	this->m_movementSpeed = this->m_baseMovementSpeed;
	this->m_baseAttackSpeed = 1.0f;
	this->m_attackSpeed = this->m_baseAttackSpeed;
	this->increaseStrength(5);
	this->increaseAgility(2);
	this->increaseWits(1);
	this->increaseFortitude(4);
	this->m_startPos=FLOAT3(0.0,0.0,0.0);
	this->m_weaponType = WEAPON_TYPE::NO_WEAPON;
	this->m_alive = true;
}
//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iCmdshow)
int main(int _argc, char** _argv)
{
	EEDesc desc;
	desc.applicationName = L"Emerald";	//窗口名称
	desc.isFullScreen = false;			//是否全屏
	desc.width = 800;					//窗口宽度
	desc.height = 450;					//窗口高度
	desc.isSSAA = true;					//是开启抗锯齿
	desc.isVsync = false;				//是否垂直同步
	EEInitialize(desc);

	EEAnimationEmitter *emitter = new EEAnimationEmitter();
	std::vector<EEAnimationFrame*> target = emitter->GetAnimation()->GetFrames();

	EETexture button1Tex(L"Texture/Project Diva Freedom\\主界面\\默认主题/自由模式.png");
	EEButton addItem(EE_BUTTON_SCALE, Rect_Float((float)EEGetWidth() * 0.03f, (float)EEGetHeight() * 0.8489f, (float)EEGetWidth() * 0.1075f, (float)EEGetHeight() * 0.9856f), 1.3f, 0.2f, 0.2f, button1Tex);
	EEComboBox *combo = new EEComboBox(Rect_Float(100.f, 300.f, 200.f, 320.f), EEColor::WHITE, EEColor::BLACK);

	while (EERun())
	{
		EEBeginScene(EEColor::BLACK);

		addItem.Process();
		combo->Process();
		if (EEIsMouseInput())
		{
			EEGetMouse();
			emitter->Emit(FLOAT3(EEGetMousePosition(), 0.0f));
		}
		emitter->Process();

		EEEndScene();
	}
	SAFE_DELETE(emitter);

	EEShutdown();
	return 0;
}
HypnoticStareEffect::HypnoticStareEffect(unsigned int _affectedUnit, unsigned int _casterId, int _wits)
{
	m_affectedUnit = _affectedUnit;
	this->m_obb = NULL;
	this->m_bs = new BoundingSphere();
	m_visible = false;
	m_type = OtherType;

	m_timer = _wits*2;
	m_mentalDamage = _wits;
	m_movementSpeed = EnigmaticPresenceEffect::MOVEMENT_SPEED_FACTOR*_wits;
	
	ServerEntity* affectedUnit = EntityHandler::getServerEntity(m_affectedUnit);
	if(affectedUnit)
	{
		((UnitEntity*)affectedUnit)->alterMentalDamage(m_mentalDamage);
		((UnitEntity*)affectedUnit)->alterMovementSpeed(m_movementSpeed);
		((Enemy*)affectedUnit)->setTargetType(UnitEntity::EnemyType);
		this->m_messageQueue->pushOutgoingMessage(new CreateActionTargetMessage(
			Skill::HYPNOTIC_STARE, _casterId, affectedUnit->getId(), FLOAT3(m_timer, 0, 0))); // Set position.x to the duration so we use it as that instead mohahhaha >:D
	}
	else
		this->m_messageQueue->pushOutgoingMessage(new RemoveServerEntityMessage(0, EntityHandler::getId(), this->m_id));
}
Exemple #20
0
	//----------------------------------------------------------------------------------------------------
	bool EEPoints2D::Update()
	{
		if (!EEObject::Update())
			return false;

		UpdateObjectState();

		if (m_isPositionDirty)
		{
			m_isPositionDirty = false;
		}

		if (m_isScaleDirty || m_isLocalZOrderDirty || m_isPointsDirty)
		{
			std::vector<EEPoints2DVertex> vertices(m_points.size());
			for (unsigned int i = 0; i < m_points.size(); ++i)
			{
				vertices[i].pos = FLOAT3(m_points[i], m_localZOrder * 0.0001f);
			}

			if (m_isPointsDirty)
				CreatePointsVertexBuffer();
			ID3D11DeviceContext *deviceContext = EECore::s_EECore->GetDeviceContext();
			D3D11_MAPPED_SUBRESOURCE mappedResource;
			ZeroMemory(&mappedResource, sizeof(D3D11_MAPPED_SUBRESOURCE));
			deviceContext->Map(m_pointsVB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
			memcpy(mappedResource.pData, &vertices[0], vertices.size() * sizeof(EEPoints2DVertex));
			deviceContext->Unmap(m_pointsVB, 0);

			m_isScaleDirty = false;
			m_isLocalZOrderDirty = false;
			m_isPointsDirty = false;
		}

		return true;
	}
Exemple #21
0
	//----------------------------------------------------------------------------------------------------
	bool EECylinder::CreateCylinderBuffer()
	{
		float radiusDelta = (m_bottomRadius - m_topRadius) / m_stack;
		float heightDelta = m_height / m_stack;
		int perRow = m_slice + 1;
		int rows = m_stack + 1;
		float topY = m_height * 0.5f;

		m_vertexCount = perRow * rows + 2 * (m_slice + 2);
		std::vector<EECylinderVertex> vertices(m_vertexCount);
		int index = 0;
		for (int i = 0; i < rows; ++i)
		{
			float tmpY = topY - heightDelta * i;
			float tmpRadius = m_topRadius + i * radiusDelta;
			for (int j = 0; j < perRow; ++j)
			{
				float theta = EE_2PI * j / m_slice;
				index = i * perRow + j;
				vertices[index].pos = FLOAT3(tmpRadius*cos(theta), tmpY, tmpRadius*sin(theta));
				vertices[index].normal = FLOAT3(cos(theta), (m_bottomRadius - m_topRadius) / m_height, sin(theta)).GetNormalization();
				vertices[index].tex = FLOAT2(1.f*j / m_slice, 1.f*i / m_stack);
			}
		}
		// top
		++index;
		for (int i = 0; i < m_slice + 1; ++i)
		{
			float theta = EE_2PI * i / m_slice;
			float x = m_topRadius * cosf(theta);
			float y = m_height * 0.5f;
			float z = m_topRadius * sinf(theta);
			float u = x / m_height + 0.5f;
			float v = z / m_height + 0.5f;
			vertices[index].pos = FLOAT3(x, y, z);
			vertices[index].normal = FLOAT3(0.f, 1.f, 0.f);
			vertices[index++].tex = FLOAT2(u, v);
		}
		vertices[index].pos = FLOAT3(0.f, m_height * 0.5f, 0.f);
		vertices[index].normal = FLOAT3(0.f, 1.f, 0.f);
		vertices[index++].tex = FLOAT2(0.5f, 0.5f);
		// bottom
		for (int i = 0; i < m_slice + 1; ++i)
		{
			float theta = EE_2PI * i / m_slice;
			float x = m_bottomRadius * cosf(theta);
			float y = -m_height * 0.5f;
			float z = m_bottomRadius * sinf(theta);
			float u = x / m_height + 0.5f;
			float v = z / m_height + 0.5f;
			vertices[index].pos = FLOAT3(x, y, z);
			vertices[index].normal = FLOAT3(0.f, -1.f, 0.f);
			vertices[index++].tex = FLOAT2(u, v);
		}
		vertices[index].pos = FLOAT3(0.f, -m_height * 0.5f, 0.f);
		vertices[index].normal = FLOAT3(0.f, -1.f, 0.f);
		vertices[index++].tex = FLOAT2(0.5f, 0.5f);
		SAFE_RELEASE(m_objectVB);
		D3D11_BUFFER_DESC vbDesc = { 0 };
		vbDesc.ByteWidth = sizeof(EECylinderVertex)* vertices.size();
		vbDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		vbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
		vbDesc.MiscFlags = 0;
		vbDesc.StructureByteStride = 0;
		vbDesc.Usage = D3D11_USAGE_DYNAMIC;
		D3D11_SUBRESOURCE_DATA vbData;
		vbData.pSysMem = &vertices[0];
		vbData.SysMemPitch = 0;
		vbData.SysMemSlicePitch = 0;
		if (FAILED(EECore::s_EECore->GetDevice()->CreateBuffer(&vbDesc, &vbData, &m_objectVB)))
		{
			MessageBoxW(NULL, L"CreateVertexBuffer failed!", L"Error", MB_OK);
			return false;
		}

		m_indexCount = m_slice * m_stack * 6 + m_slice * 6;
		std::vector<unsigned int> indices(m_indexCount);
		index = 0;
		for (int i = 0; i < m_stack; ++i)
		{
			for (int j = 0; j < m_slice; ++j)
			{
				indices[index] = i * perRow + j;
				indices[index + 1] = (i + 1) * perRow + j + 1;
				indices[index + 2] = (i + 1) * perRow + j;
				indices[index + 3] = i * perRow + j;
				indices[index + 4] = i * perRow + j + 1;
				indices[index + 5] = (i + 1) * perRow + j + 1;

				index += 6;
			}
		}
		// top
		int start = perRow * rows;
		int center = perRow * rows + m_slice + 1;
		for (int i = 0; i < m_slice; ++i)
		{
			indices[index++] = center;
			indices[index++] = start + i + 1;
			indices[index++] = start + i;
		}
		// bottom
		start = perRow * rows + m_slice + 2;
		center = perRow * rows + 2 * (m_slice + 2) - 1;
		for (int i = 0; i < m_slice; ++i)
		{
			indices[index++] = center;
			indices[index++] = start + i;
			indices[index++] = start + i + 1;
		}
		SAFE_RELEASE(m_objectIB);
		D3D11_BUFFER_DESC ibDesc = { 0 };
		ibDesc.ByteWidth = sizeof(UINT)* indices.size();
		ibDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
		ibDesc.CPUAccessFlags = 0;
		ibDesc.MiscFlags = 0;
		ibDesc.StructureByteStride = 0;
		ibDesc.Usage = D3D11_USAGE_IMMUTABLE;
		D3D11_SUBRESOURCE_DATA ibData;
		ibData.pSysMem = &indices[0];
		ibData.SysMemPitch = 0;
		ibData.SysMemSlicePitch = 0;
		if (FAILED(EECore::s_EECore->GetDevice()->CreateBuffer(&ibDesc, &ibData, &m_objectIB)))
		{
			MessageBoxW(NULL, L"CreateIndexBuffer failed!", L"Error", MB_OK);
			return false;
		}

		return true;
	}
void ArrowClientSkillEffect::update(float _dt)
{
	Entity* target = ClientEntityHandler::getEntity(m_targetId);
	if(target && target->m_health > 0)
	{
		D3DXVECTOR3 newPos = D3DXVECTOR3(m_graphicalEffect->getPosition().x, m_graphicalEffect->getPosition().y, m_graphicalEffect->getPosition().z);
		this->m_particleSystem->setPosition(newPos);

		FLOAT3 dist = target->m_model->getPosition()-m_graphicalEffect->getPosition();
		FLOAT3 movement = dist/dist.length()*RangedAttack::VELOCITY*_dt;

		if(dist.length() > movement.length())
		{
			m_graphicalEffect->move(movement);
			m_graphicalEffect->setRotation(FLOAT3(atan2(-movement.x, -movement.z), 0.0f, 0.0f));
		}
		else
		{
			m_active = false;
			if(target->m_type == UnitEntity::EnemyType)
			{
				int sound;

				switch(random(0, 2))
				{
				case 0:
					sound = createSoundHandle("enemy/Monster_Imp_Damage_0.wav", false, false);
					break;
				case 1:
					sound = createSoundHandle("enemy/Monster_Imp_Damage_1.wav", false, false);
					break;
				case 2:
					sound = createSoundHandle("enemy/Monster_Imp_Damage_2.wav", false, false);
					break;
				}
					
				SpeechManager::speak(m_targetId, sound); // The unit must be killed on the client before on the server for this sound solution to actually work.
				deactivateSound(sound);
			}
			else if(target->m_type == UnitEntity::HeroType)
			{
				int sound;

				switch(target->m_subtype)
				{
				case Hero::RED_KNIGHT:
					switch(random(0, 2))
					{
					case 0:
						sound = createSoundHandle("red_knight/RedKnight_Damage_0.wav", false, false);
						break;
					case 1:
						sound = createSoundHandle("red_knight/RedKnight_Damage_1.wav", false, false);
						break;
					case 2:
						sound = createSoundHandle("red_knight/RedKnight_Damage_2.wav", false, false);
						break;
					}
					break;
				case Hero::ENGINEER:
					switch(random(0, 2))
					{
					case 0:
						sound = createSoundHandle("engineer/Engineer_Damage_0.wav", false, false);
						break;
					case 1:
						sound = createSoundHandle("engineer/Engineer_Damage_1.wav", false, false);
						break;
					case 2:
						sound = createSoundHandle("engineer/Engineer_Damage_2.wav", false, false);
						break;
					}
					break;
				case Hero::THE_MENTALIST:
					switch(random(0, 2))
					{
					case 0:
						sound = createSoundHandle("mentalist/Mentalist_Damage_0.wav", false, false);
						break;
					case 1:
						sound = createSoundHandle("mentalist/Mentalist_Damage_1.wav", false, false);
						break;
					case 2:
						sound = createSoundHandle("mentalist/Mentalist_Damage_2.wav", false, false);
						break;
					}
					break;
				case Hero::OFFICER:
					switch(random(0, 2))
					{
					case 0:
						sound = createSoundHandle("officer/Officer_Damage_0.wav", false, false);
						break;
					case 1:
						sound = createSoundHandle("officer/Officer_Damage_1.wav", false, false);
						break;
					case 2:
						sound = createSoundHandle("officer/Officer_Damage_2.wav", false, false);
						break;
					}
					break;
				case Hero::DOCTOR:
					switch(random(0, 2))
					{
					case 0:
						sound = createSoundHandle("doctor/Doctor_Damage_0.wav", false, false);
						break;
					case 1:
						sound = createSoundHandle("doctor/Doctor_Damage_1.wav", false, false);
						break;
					case 2:
						sound = createSoundHandle("doctor/Doctor_Damage_2.wav", false, false);
						break;
					}
					break;
				}

				SpeechManager::speak(m_targetId, sound); // The unit must be killed on the client before on the server for this sound solution to actually work.
				deactivateSound(sound);
			}
		}
	}
	else
	{
		m_active = false;
	}
}
void ClientHandler::update(float _dt)
{
    this->m_state->update(_dt);
    if(this->m_state->isDone())
    {
        State* tempState = this->m_state;

        switch(this->m_state->nextState())
        {
        case State::INTRO:
            this->m_state = new IntroState();
            break;
        case State::MAIN_MENU:
            if(tempState->getType() == State::END || tempState->getType() == State::LORE)
            {
                m_menuMusic = createSoundHandle("music/menu.wav", true, false);
                loopSound(m_menuMusic);
            }
            else if(tempState->getType() == State::LOBBY)
            {
                ClientEntityHandler::removeAllEntities();
                this->m_client->disconnect();
                delete this->m_serverThread;
                this->m_serverThread = NULL;
            }

            this->m_state = new MainMenuState();
            break;
        case State::CREATE_GAME:
            this->m_state = new CreateGameState();
            break;
        case State::JOIN_GAME:
            this->m_state = new JoinGameState(this->m_client);
            break;
        case State::LOBBY:
            if(tempState->getType() == State::CREATE_GAME)
            {
                CreateGameState *tempCreateState = (CreateGameState*)tempState;

                this->m_serverThread = new ServerThread(tempCreateState->getPort(), tempCreateState->getMapName());
                this->m_serverThread->Launch();

                this->m_client->connect(tempCreateState->getIP(), tempCreateState->getPort());

                //sends le player name, code 1337, hardcoded
                sf::Packet playerName;
                playerName << (int)NetworkMessage::setPlayerName << tempCreateState->getPlayerName();
                this->m_client->sendPacket(playerName);
            }
            else
            {
                JoinGameState *tempJoinState = (JoinGameState*)tempState;
                //sends le player name, code 1337, hardcoreporn
                sf::Packet playerName;
                playerName << (int)NetworkMessage::setPlayerName << tempJoinState->getPlayerName();
                this->m_client->sendPacket(playerName);
            }

            this->m_state = new LobbyState(this->m_client);
            break;
        case State::LORE:
            stopSound(m_menuMusic);
            deactivateSound(m_menuMusic);
            this->m_state = new LoreState();
            break;
        case State::GAME:
            if(tempState->getType() == State::LOADING)
            {
                LoadingState *tempLoadingState = (LoadingState*)tempState;
                this->m_state = new GameState(this->m_client, tempLoadingState->getMapName());
            }
            else
            {
                this->m_state = new GameState(this->m_client, "levelone");
            }
            break;
        case State::SETTINGS:
            this->m_state = new SettingsState();
            break;
        case State::CREDITS:
            this->m_state = new CreditState();
            break;
        case State::END:
            ClientEntityHandler::removeAllEntities();
            this->m_client->disconnect();
            delete this->m_serverThread;
            this->m_serverThread = NULL;
            this->m_state = new EndState(((GameState*)tempState)->getEndGameMessage(),((GameState*)tempState)->getMissionEndMessage());
            break;
        case State::LOADING:
            stopSound(m_menuMusic);
            deactivateSound(m_menuMusic);

            {
                LobbyState *tempLobbyState = (LobbyState*)tempState;
                string temp = tempLobbyState->getMapName();
                delete tempState;
                tempState = NULL;
                this->m_state = new LoadingState(m_client, temp);
            }
            break;
        case State::EXIT:
            this->m_state = NULL;
            PostQuitMessage(WM_QUIT);
            break;
        }

        delete tempState;
    }

    D3DXVECTOR3 camPos = g_graphicsEngine->getCamera()->getPos();
    updateSoundEngine(FLOAT3(camPos.x, camPos.y, camPos.z));

    g_mouse->update(); // Must be last! WHY?! - Because otherwise the mouse buttons will NEVER be "pressed"
    g_keyboard->update();
}
Exemple #24
0
	//-----------------------------------------------------------------------
	bool FontClass::Print(FLOAT _posX, FLOAT _posY, const FLOAT4& _color, const char* _info)
	{
		float fontPosX = (_posX / (float)m_width) * 2.0f - 1.0f;
		float fontPosY = 1.0f - (_posY / (float)m_height) * 2.0f;
		float deltaX = 2.0f / (float)m_width;
		float deltaY = -32.0f / (float)m_height;
		float fontWidth = 0.0f;
		float fontHeight = fontPosY + deltaY;


		int length = (int)strlen(_info);

		std::vector<FontVertex> vertices(6 * length);

		int index(0), letter(0);
		for (int i = 0; _info[i] != '\0'; ++i)
		{
			letter = ((int)_info[i]) - 32;
			if (letter == 0)
			{
				fontPosX = fontPosX + 3 * deltaX;
			}
			else
			{
				fontWidth = fontPosX + m_fontData[letter].size * deltaX;

				vertices[index].pos = FLOAT3(fontPosX, fontPosY, 0.0f);
				vertices[index].tex = FLOAT2(m_fontData[letter].left, 0.0f);
				index++;
				vertices[index].pos = FLOAT3(fontWidth, fontHeight, 0.0f);
				vertices[index].tex = FLOAT2(m_fontData[letter].right, 1.0f);
				index++;
				vertices[index].pos = FLOAT3(fontPosX, fontHeight, 0.0f);
				vertices[index].tex = FLOAT2(m_fontData[letter].left, 1.0f);
				index++;

				vertices[index].pos = FLOAT3(fontPosX, fontPosY, 0.0f);
				vertices[index].tex = FLOAT2(m_fontData[letter].left, 0.0f);
				index++;
				vertices[index].pos = FLOAT3(fontWidth, fontPosY, 0.0f);
				vertices[index].tex = FLOAT2(m_fontData[letter].right, 0.0f);
				index++;
				vertices[index].pos = FLOAT3(fontWidth, fontHeight, 0.0f);
				vertices[index].tex = FLOAT2(m_fontData[letter].right, 1.0f);
				index++;

				fontPosX = fontPosX + m_fontData[letter].size * deltaX + deltaX;
			}
		}

		ID3D11Buffer *fontVB;

		D3D11_BUFFER_DESC vbDesc = { 0 };
		vbDesc.ByteWidth = sizeof(FontVertex) * vertices.size();
		vbDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		vbDesc.CPUAccessFlags = 0;
		vbDesc.MiscFlags = 0;
		vbDesc.StructureByteStride = 0;
		vbDesc.Usage = D3D11_USAGE_IMMUTABLE;

		D3D11_SUBRESOURCE_DATA vbData;
		vbData.pSysMem = &vertices[0];
		vbData.SysMemPitch = 0;
		vbData.SysMemSlicePitch = 0;

		if (FAILED(m_device->CreateBuffer(&vbDesc, &vbData, &fontVB)))
		{
			MessageBox(NULL, L"CreateVertexBuffer failed!", L"Error", MB_OK);
			return false;
		}

		SetFontParameters(_color);
		m_deviceContext->PSSetShaderResources(0, 1, &m_fontTex);

		m_deviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
		m_deviceContext->IASetInputLayout(m_fontIL);
		UINT stride = sizeof(FontVertex);
		UINT offset = 0;
		m_deviceContext->IASetVertexBuffers(0, 1, &fontVB, &stride, &offset);
		m_deviceContext->IASetIndexBuffer(NULL, DXGI_FORMAT_R32_UINT, 0);
		m_deviceContext->VSSetShader(m_fontVS, NULL, 0);
		m_deviceContext->PSSetShader(m_fontPS, NULL, 0);

		m_deviceContext->Draw(vertices.size(), 0);

		SAFE_RELEASE(fontVB);
		return true;
	}
Exemple #25
0
void Hero::setNextPosition(FLOAT3 _nextPosition)
{
	if(this->m_alive == true)
	{
		if(g_pathfinder->sameGridPosition(FLOAT2(this->m_position.x, this->m_position.z), FLOAT2(_nextPosition.x, _nextPosition.z)) == false)
		{
			this->m_path = g_pathfinder->getPath(FLOAT2(this->m_position.x, this->m_position.z), FLOAT2(_nextPosition.x, _nextPosition.z));

			if(this->m_path.nrOfPoints > 1)
			{
				this->m_nextPosition = FLOAT3(this->m_path.points[1].x, 0.0f, this->m_path.points[1].y);
				//this->m_startPos= FLOAT3(this->m_path.points[0].x, 0.0f, this->m_path.points[0].y);
				this->m_goalPosition = _nextPosition;
				this->m_pathCounter = 2;
				this->m_reachedPosition = false;
				this->m_hasTarget = false;
				this->m_target = NULL;
				this->m_reallyReachedPosition = false;

				this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
				this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::MOVE, this->m_id, this->m_position));
			}
			else if(this->m_path.nrOfPoints == 1)
			{
				//this->m_startPos= this->m_nextPosition;
				this->m_nextPosition = _nextPosition;
				this->m_goalPosition = _nextPosition;
				this->m_pathCounter = 1;
				this->m_reachedPosition = false;
				this->m_hasTarget = false;
				this->m_target = NULL;
				this->m_reallyReachedPosition = false;

				this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
				this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::MOVE, this->m_id, this->m_position));
			}
			else
			{
				this->m_path = Path();
				this->m_pathCounter = 0;
				this->m_reachedPosition = true;
				this->m_hasTarget = false;
				this->m_target = NULL;
				this->m_reallyReachedPosition = true;
				this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::IDLE, this->m_id, this->m_position));
				//this->m_startPos= m_nextPosition;

				this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
			} 
		}
		else
		{
			this->m_path = Path();
			this->m_pathCounter = 0;
			this->m_reachedPosition = true;
			this->m_nextPosition = m_position;
			this->m_hasTarget = false;
			this->m_target = NULL;
			this->m_reallyReachedPosition = true;
			this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::IDLE, this->m_id, this->m_position));
			//this->m_startPos= m_nextPosition;

			this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
		}
	}
}
Exemple #26
0
void Hero::updateSpecificUnitEntity(float dt)
{
	if(this->m_health > 0)
	{
		//Handle incoming messages
		Message *m;

		while(this->m_messageQueue->incomingQueueEmpty() == false)
		{
			m = this->m_messageQueue->pullIncomingMessage();

			if(m->type == Message::Collision)
			{
				//this->m_position = FLOAT3(0.0f, 0.0f, 0.0f);
			}

			delete m;
		}

		if(this->m_attackCooldown > 0.0f)
		{
			this->m_attackCooldown = this->m_attackCooldown - dt;
		}
		if(this->m_hasTarget == true)
		{
			ServerEntity *se = EntityHandler::getServerEntity(this->m_target);

			if(se == NULL)
			{
				this->m_hasTarget = false;
				this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::IDLE, this->m_id, this->m_position));
			}
			else
			{
				FLOAT3 distance = se->getPosition() - this->m_position;
				this->m_rotation.x = atan2(-distance.x, -distance.z);

				//If the hero is in range, KILL IT!
				if(se != NULL)
				{
					if((se->getPosition() - this->m_position).length() <= this->m_regularAttack->getRange())
					{
						if(this->m_attackCooldown <= 0.0f)
						{
							//this->m_messageQueue->pushOutgoingMessage(new CreateActionTargetMessage(Skill::ATTACK, this->m_id, se->getId(), this->m_position));
							//EntityHandler::addEntity(new Arrow((m_position-se->getPosition()).length(), se->getId(), m_id));
							//this->dealDamage(se, this->m_physicalDamage, this->m_mentalDamage); // dont
							this->attack(this->m_target);
							this->m_attackCooldown = this->m_attackSpeed;
							this->m_nextPosition = this->m_position;
							this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
						}

						if(this->m_reachedPosition == false)
						{
							this->m_reachedPosition = true;
							this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::IDLE, this->m_id, this->m_position));
						}
					}
					else //Otherwise you should find a way to get to the enemy
					{
						if(this->m_reachedPosition == true)
						{
							this->m_path = g_pathfinder->getPath(FLOAT2(this->m_position.x, this->m_position.z), FLOAT2(se->getPosition().x, se->getPosition().z));

							if(this->m_path.nrOfPoints > 0)
							{
								this->m_pathCounter = 1;
								this->m_nextPosition = FLOAT3(this->m_path.points[0].x, 0.0f, this->m_path.points[0].y);
								this->m_reachedPosition = false;
								this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::MOVE, this->m_id, this->m_position));
								this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
							}
						}
						else //Move along the path
						{
							distance = this->m_nextPosition - this->m_position;

							if(distance.length() - 0.125f > this->m_movementSpeed * dt)
							{
								distance = distance / distance.length();
								this->m_position = this->m_position + (distance * this->m_movementSpeed * dt);
								this->m_rotation.x = atan2(-distance.x, -distance.z);
							}
							else
							{
								if(this->m_pathCounter < this->m_path.nrOfPoints)
								{
									this->m_nextPosition = FLOAT3(this->m_path.points[this->m_pathCounter].x, 0.0f, this->m_path.points[this->m_pathCounter].y);
									this->m_pathCounter++;
									this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
								}
								else if(this->m_reachedPosition == false)
								{
									this->m_position = this->m_nextPosition;
									this->m_reachedPosition = true;
									this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::IDLE, this->m_id, this->m_position));
									this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
									this->m_messageQueue->pushOutgoingMessage(new UpdateEntityMessage(this->getId(),this->getPosition().x,this->getPosition().z,this->getRotation().x,0.0f,0.0f,0.0f,0.0f,this->getMovementSpeed()));
								}

								this->m_obb->Center = XMFLOAT3(this->m_position.x, this->m_position.y, this->m_position.z);
							}
						}
					}
				}
				else //The target doesn't exist
				{
					this->m_hasTarget = false;
					this->m_reachedPosition = true;
					this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::IDLE, this->m_id, this->m_position));
				}
			}
		}
		else if(this->m_reachedPosition == false)
		{
			FLOAT3 distance = this->m_nextPosition - this->m_position;
			float lol = 0.0f;

			if(this->m_reallyReachedPosition == false)
			{
				lol = 0.125f;
			}

			if(distance.length() - lol > this->m_movementSpeed * dt)
			{
				distance = distance / distance.length();
				this->m_position = this->m_position + (distance * this->m_movementSpeed * dt);
			}
			else
			{
				if(this->m_pathCounter < this->m_path.nrOfPoints)
				{
					this->m_nextPosition = FLOAT3(this->m_path.points[this->m_pathCounter].x, 0.0f, this->m_path.points[this->m_pathCounter].y);
					this->m_pathCounter++;

					this->m_obb->Center = XMFLOAT3(this->m_position.x, this->m_position.y, this->m_position.z);
					this->m_rotation.x = atan2(-distance.x, -distance.z);

					this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
				}
				else
				{
					this->m_nextPosition = this->m_position;
					this->m_reachedPosition = true;
					//this->m_startPos= m_nextPosition;
					this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
					this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::IDLE, this->m_id, this->m_position));
				}
			}

			this->m_obb->Center = XMFLOAT3(this->m_position.x, this->m_position.y, this->m_position.z);
			this->m_rotation.x = atan2(-distance.x, -distance.z);
		}
	}
	else if(this->m_alive == true)
	{
		this->m_messageQueue->pushOutgoingMessage(new CreateActionMessage(Skill::DEATH, this->m_id, this->m_position));
		this->m_position = FLOAT3(-1000.0f, 0.0f, -1000.0f);
		this->m_hasTarget = NULL;
		this->m_reachedPosition = true;
		this->m_messageQueue->pushOutgoingMessage(this->getUpdateEntityMessage());
		this->m_messageQueue->pushOutgoingMessage(new HeroDiedMessage(this->m_id, this->m_playerId));
		this->m_alive = false;
	}
}
Exemple #27
0
	//----------------------------------------------------------------------------------------------------
	void EERotateYXProcess(EEObject* _object, float _time, float _radiansYX, float _delay, bool _isInfinite, float _startTime)
	{
		try
		{
			float remainTime = _delay + _time;
			float progress = _startTime;
			float speed = _radiansYX / _time;

			while (1)
			{
				EEThreadSleep(20);
				std::lock_guard<std::mutex> mutex(_object->GetThreadMutex());

				float currTime = (float)EECore::s_EECore->GetTotalTime();
				float deltaTime = currTime - progress;
				progress = currTime;
				if (remainTime <= deltaTime + _time)
				{
					remainTime = _time;
					break;
				}
				else
				{
					remainTime -= deltaTime;
				}
			}

			while (1)
			{
				EEThreadSleep(20);
				std::lock_guard<std::mutex> mutex(_object->GetThreadMutex());

				float currTime = (float)EECore::s_EECore->GetTotalTime();
				float deltaTime = currTime - progress;
				progress = currTime;
				if (remainTime <= deltaTime && !_isInfinite)
				{
					FLOAT3 finalCenter = _object->GetFinalCenter();
					MATRIX centerToOrigin = MatrixTranslation(-finalCenter.x, -finalCenter.y, 0.0f);
					MATRIX rotation = MatrixRotationAxisN(FLOAT3(0.0f, 0.0f, 1.0f), speed * remainTime);
					MATRIX originToCenter = MatrixTranslation(finalCenter.x, finalCenter.y, 0.0f);
					_object->SetRotation(_object->GetRotation() * centerToOrigin * rotation * originToCenter);
					remainTime = 0.f;
					return;
				}
				else
				{
					FLOAT3 finalCenter = _object->GetFinalCenter();
					MATRIX centerToOrigin = MatrixTranslation(-finalCenter.x, -finalCenter.y, 0.0f);
					MATRIX rotation = MatrixRotationAxisN(FLOAT3(0.0f, 0.0f, 1.0f), speed * deltaTime);
					MATRIX originToCenter = MatrixTranslation(finalCenter.x, finalCenter.y, 0.0f);
					_object->SetRotation(_object->GetRotation() * centerToOrigin * rotation * originToCenter);
					remainTime -= deltaTime;
				}
			}
		}
		catch (boost::thread_interrupted&)
		{
			return;
		}
	}
Exemple #28
0
	//----------------------------------------------------------------------------------------------------
	FLOAT3 Rand_FLOAT3()
	{
		return FLOAT3((float)(rand() / double(RAND_MAX)), (float)(rand() / double(RAND_MAX)), (float)(rand() / double(RAND_MAX)));
	}
Exemple #29
0
bool DIVANote::Update(double _deltaTime)
{
	m_restTime -= _deltaTime;

	// Normal
	if (m_type == NOTETYPE_NORMAL)
	{
		// Hit time
		if (abs(m_restTime) <= m_actionTime && m_state == DIVA_NOTE_DEFAULT)
		{
			if (EEGetKeyHit(DIVAConfig::GetKeyMap(m_key)))
			{
				m_state = DIVA_NOTE_COOL;
			}
		}
		// Missed
		else if (m_restTime + m_actionTime <= 0 && m_state == DIVA_NOTE_DEFAULT)
		{
			m_state = DIVA_NOTE_WORST;
		}

		float percent = (float)(m_totalTime - m_restTime) / m_totalTime;
		m_note.SetPosition(FLOAT3(percent * (m_x - m_tailx) + m_tailx, percent * (m_y - m_taily) + m_taily, 0.f));

		Process();
		m_strip.Process();
		m_note.Process();
	}
	// Strip
	else
	{
		if (m_restTime < 0)
		{
			m_restDuration = m_totalDuration + m_restTime;
		}

		// Hit time
		if (abs(m_restTime) <= m_actionTime && m_state == DIVA_NOTE_DEFAULT)
		{
			if (EEGetKeyHit(DIVAConfig::GetKeyMap(m_key)))
			{
				m_state = DIVA_NOTE_COOL;
			}
		}
		// Missed
		else if (m_restTime + m_actionTime <= 0 && m_state == DIVA_NOTE_DEFAULT)
		{
			m_state = DIVA_NOTE_WORST;
		}
		// Strip time
		else if (m_restDuration > m_actionTime && m_state != DIVA_NOTE_DEFAULT)
		{
			m_state = DIVA_NOTE_STRIP_DEFAULT;
			if (!EEIsKeyDown(DIVAConfig::GetKeyMap(m_key)))
				m_state = DIVA_NOTE_STRIP_WORST;
		}
		// Release time
		else if (abs(m_restDuration) <= m_actionTime && m_state != DIVA_NOTE_DEFAULT)
		{
			if (!EEIsKeyDown(DIVAConfig::GetKeyMap(m_key)))
				m_state = DIVA_NOTE_STRIP_COOL;
		}
		// Missed
		else if (m_restDuration + m_actionTime <= 0)
		{
			if (EEIsKeyDown(DIVAConfig::GetKeyMap(m_key)))
				m_state = DIVA_NOTE_STRIP_WORST;
		}

		float percent = (float)(m_totalTime - m_restTime) / m_totalTime;
		if (percent > 1.f)
			percent = 1.f;
		FLOAT2 vertical = (FLOAT2(m_x, m_y) - FLOAT2(m_tailx, m_taily)).GetVertical() * 30.f;
		FLOAT2 center1 = (FLOAT2(m_x, m_y) - FLOAT2(m_tailx, m_taily)) / 3.f + FLOAT2(m_tailx, m_taily) - vertical;
		FLOAT2 center2 = (FLOAT2(m_x, m_y) - FLOAT2(m_tailx, m_taily)) * 2 / 3.f + FLOAT2(m_tailx, m_taily) + vertical;
		std::vector<FLOAT2> pointsData;
		for (float t = percent - m_restDuration / m_totalTime; t < percent; t += 0.001f)
			pointsData.push_back(EEBezier(FLOAT2(m_tailx, m_taily), center1, center2, FLOAT2(m_x, m_y), t));

		if (pointsData.size())
		{
			m_stripNote.SetPositionXY(pointsData.front());
			m_note.SetPositionXY(pointsData.back());
		}
		else
			m_note.SetPositionXY(FLOAT2(m_x, m_y));
		m_strip.SetCurve(pointsData);

		Process();
		m_strip.Process();
		m_note.Process();
		m_stripNote.Process();
	}

	return true;
}
DeathClientSkillEffect::DeathClientSkillEffect(unsigned int _masterId, FLOAT3 _position)
{
	this->m_masterId = _masterId;
	this->m_lifetime = LIFETIME;
	this->m_sink = false;
	this->m_model = NULL;
	this->m_lanternLight = NULL;

	Entity *e = ClientEntityHandler::getEntity(this->m_masterId);
	
	
	//g_graphicsEngine->createPointLight(_position, FLOAT3(1.0f, 1.0f, 1.0f), FLOAT3(1.0f, 1.0f, 1.0f), FLOAT3(1.0f, 1.0f, 1.0f), 5.0f, true, false, FLOAT3(0.0f, 1.0f, 0.0f));

	if(e != NULL)
	{
		this->m_model = g_graphicsEngine->createModel(e->m_model, false);
		this->m_model->setPosition(_position);
		this->m_model->setScale(e->m_model->getScale());
		this->m_model->getAnimation()->Play("death", true);
		this->m_model->setGlowIndex("glowIntensity1");
		this->m_model->SetHat(e->m_model->getHat());
		this->m_model->SetLeftHand(e->m_model->getLeftHand());
		this->m_model->SetRightHand(e->m_model->getRightHand());

		m_model->setColor(D3DXVECTOR4(0, 1, 1, 0.4f));
		if(e->m_type == ServerEntity::EnemyType)
		{
			this->m_sink = true;
			m_model->setColor(D3DXVECTOR4(1, 0, 0, 0.4f));
		}
		

		if(e->m_lanternLight != NULL)
		{
			this->m_lanternLight = g_graphicsEngine->createPointLight(this->m_model->getLeftHandPosition(), e->m_lanternLight->getAmbientColor(), e->m_lanternLight->getDiffuseColor(), e->m_lanternLight->getSpecularColor(), e->m_lanternLight->getRadius(), true, false, FLOAT3(0.0f, 1.0f, 0.0f));
			this->m_originalDiffuse = this->m_lanternLight->getDiffuseColor();
			this->m_originalSpecular = this->m_lanternLight->getSpecularColor();
		}

		// Play death sound.
		int sound;
		switch(e->m_type)
		{
		case ServerEntity::HeroType:
			switch(e->m_subtype)
			{
			case Hero::RED_KNIGHT:
				switch(random(0, 2))
				{
				case 0:
					sound = createSoundHandle("red_knight/RedKnight_Death_0.wav", false, true, e->m_startPos);
					break;
				case 1:
					sound = createSoundHandle("red_knight/RedKnight_Death_1.wav", false, true, e->m_startPos);
					break;
				case 2:
					sound = createSoundHandle("red_knight/RedKnight_Death_2.wav", false, true, e->m_startPos);
					break;
				}
				break;
			case Hero::ENGINEER:
				switch(random(0, 2))
				{
				case 0:
					sound = createSoundHandle("engineer/Engineer_Death_0.wav", false, true, e->m_startPos);
					break;
				case 1:
					sound = createSoundHandle("engineer/Engineer_Death_1.wav", false, true, e->m_startPos);
					break;
				case 2:
					sound = createSoundHandle("engineer/Engineer_Death_2.wav", false, true, e->m_startPos);
					break;
				}
				break;
			case Hero::THE_MENTALIST:
				switch(random(0, 2))
				{
				case 0:
					sound = createSoundHandle("mentalist/Mentalist_Death_0.wav", false, true, e->m_startPos);
					break;
				case 1:
					sound = createSoundHandle("mentalist/Mentalist_Death_1.wav", false, true, e->m_startPos);
					break;
				case 2:
					sound = createSoundHandle("mentalist/Mentalist_Death_2.wav", false, true, e->m_startPos);
					break;
				}
				break;
			case Hero::OFFICER:
				switch(random(0, 2))
				{
				case 0:
					sound = createSoundHandle("officer/Officer_Death_0.wav", false, true, e->m_startPos);
					break;
				case 1:
					sound = createSoundHandle("officer/Officer_Death_1.wav", false, true, e->m_startPos);
					break;
				case 2:
					sound = createSoundHandle("officer/Officer_Death_2.wav", false, true, e->m_startPos);
					break;
				}
				break;
			case Hero::DOCTOR:
				switch(random(0, 2))
				{
				case 0:
					sound = createSoundHandle("doctor/Doctor_Death_0.wav", false, true, e->m_startPos);
					break;
				case 1:
					sound = createSoundHandle("doctor/Doctor_Death_1.wav", false, true, e->m_startPos);
					break;
				case 2:
					sound = createSoundHandle("doctor/Doctor_Death_2.wav", false, true, e->m_startPos);
					break;
				}
				break;
			}
			break;

		case ServerEntity::EnemyType:
			switch(e->m_subtype)
			{
			case Enemy::IMP:
				sound = createSoundHandle("enemy/Monster_Imp_Death_0.wav", false, true, e->m_startPos);
				break;
			case Enemy::SHADE:
				sound = createSoundHandle("enemy/Monster_Shade_Death_0.wav", false, true, e->m_startPos);
				break;
			case Enemy::FROST_DEMON:
				sound = createSoundHandle("enemy/Monster_Frost_Death_0.wav", false, true, e->m_startPos);
				break;
			case Enemy::SPITTING_DEMON:
				sound = createSoundHandle("enemy/Monster_Spitting_Death_0.wav", false, true, e->m_startPos);
				break;
			case Enemy::HELLFIRE_STEED:
				sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos);
				break;
			case Enemy::SOUL_EATER_STEED:
				sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos);
				break;
			case Enemy::THUNDERSTEED:
				sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos);
				break;
			case Enemy::BRUTE_STEED:
				sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos);
				break;
			case Enemy::BOSS:
				sound = createSoundHandle("enemy/Beast_Dying_0.wav", false, true, e->m_startPos);
				break;
			}
			break;
		}

		SpeechManager::speakUltimate(_masterId, sound);
		deactivateSound(sound);
	}
}