コード例 #1
0
ファイル: items.cpp プロジェクト: BugsBunny1605/N-Client
void CItems::RenderLaser(const struct CNetObj_Laser *pCurrent)
{
	vec2 Pos = vec2(pCurrent->m_X, pCurrent->m_Y);
	vec2 From = vec2(pCurrent->m_FromX, pCurrent->m_FromY);
	vec2 Dir = normalize(Pos-From);

	float Ticks = Client()->GameTick() + Client()->IntraGameTick() - pCurrent->m_StartTick;
	float Ms = (Ticks/50.0f) * 1000.0f;
	float a = Ms / m_pClient->m_Tuning.m_LaserBounceDelay;
	a = clamp(a, 0.0f, 1.0f);
	float Ia = 1-a;

	vec2 Out, Border;

	Graphics()->BlendNormal();
	Graphics()->TextureSet(-1);

	//vec4 inner_color(0.15f,0.35f,0.75f,1.0f);
	//vec4 outer_color(0.65f,0.85f,1.0f,1.0f);

	vec4 OuterColor(0.075f, 0.075f, 0.25f, 1.0f);
	vec4 InnerColor(0.5f, 0.5f, 1.0f, 1.0f);

    int EventID = m_pClient->m_pLua->m_pEventListener->CreateEventStack();
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(From.x);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(From.y);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(Pos.x);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(Pos.y);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(a);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(OuterColor.r);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(OuterColor.g);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(OuterColor.b);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(OuterColor.a);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(InnerColor.r);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(InnerColor.g);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(InnerColor.b);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(InnerColor.a);
    m_pClient->m_pLua->m_pEventListener->OnEvent("OnRenderLaser");
    if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[0].IsNumeric() == false || m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[0].GetInteger() == 0)
    {
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[1].IsNumeric())
            OuterColor.r = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[1].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[2].IsNumeric())
            OuterColor.g = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[2].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[3].IsNumeric())
            OuterColor.b = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[3].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[4].IsNumeric())
            OuterColor.a = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[4].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[5].IsNumeric())
            InnerColor.r = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[5].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[6].IsNumeric())
            InnerColor.g = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[6].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[7].IsNumeric())
            InnerColor.b = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[7].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[8].IsNumeric())
            InnerColor.a = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[8].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[9].IsNumeric())
            a = clamp(m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[9].GetFloat(), 0.0f, 1.0f);
        Ia = 1-a; //re-evalute
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[10].IsNumeric())
            From.x = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[10].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[11].IsNumeric())
            From.y = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[11].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[12].IsNumeric())
            Pos.x = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[12].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[13].IsNumeric())
            Pos.y = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[13].GetFloat();
		Dir = normalize(Pos-From);

        Graphics()->QuadsBegin();
        // do outline
        Graphics()->SetColor(OuterColor.r, OuterColor.g, OuterColor.b, OuterColor.a);
        Out = vec2(Dir.y, -Dir.x) * (7.0f*Ia);

        IGraphics::CFreeformItem Freeform(
                From.x-Out.x, From.y-Out.y,
                From.x+Out.x, From.y+Out.y,
                Pos.x-Out.x, Pos.y-Out.y,
                Pos.x+Out.x, Pos.y+Out.y);
        Graphics()->QuadsDrawFreeform(&Freeform, 1);

        // do inner
        Out = vec2(Dir.y, -Dir.x) * (5.0f*Ia);
        Graphics()->SetColor(InnerColor.r, InnerColor.g, InnerColor.b, InnerColor.a); // center

        Freeform = IGraphics::CFreeformItem(
                From.x-Out.x, From.y-Out.y,
                From.x+Out.x, From.y+Out.y,
                Pos.x-Out.x, Pos.y-Out.y,
                Pos.x+Out.x, Pos.y+Out.y);
        Graphics()->QuadsDrawFreeform(&Freeform, 1);

        Graphics()->QuadsEnd();
    }

	// render head
    Graphics()->BlendNormal();
    Graphics()->TextureSet(g_pData->m_aImages[IMAGE_PARTICLES].m_Id);

    EventID = m_pClient->m_pLua->m_pEventListener->CreateEventStack();
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(From.x);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(From.y);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(Pos.x);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(Pos.y);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(a);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(OuterColor.r);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(OuterColor.g);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(OuterColor.b);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(OuterColor.a);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(InnerColor.r);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(InnerColor.g);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(InnerColor.b);
    m_pClient->m_pLua->m_pEventListener->GetParameters(EventID)->FindFree()->Set(InnerColor.a);
    m_pClient->m_pLua->m_pEventListener->OnEvent("OnRenderLaserHead");
    if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[0].IsNumeric() == false || m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[0].GetInteger() == 0)
    {
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[1].IsNumeric())
            OuterColor.r = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[1].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[2].IsNumeric())
            OuterColor.g = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[2].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[3].IsNumeric())
            OuterColor.b = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[3].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[4].IsNumeric())
            OuterColor.a = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[4].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[5].IsNumeric())
            InnerColor.r = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[5].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[6].IsNumeric())
            InnerColor.g = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[6].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[7].IsNumeric())
            InnerColor.b = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[7].GetFloat();
        if (m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[8].IsNumeric())
            InnerColor.a = m_pClient->m_pLua->m_pEventListener->GetReturns(EventID)->m_aVars[8].GetFloat();

		Graphics()->QuadsBegin();

		int Sprites[] = {SPRITE_PART_SPLAT01, SPRITE_PART_SPLAT02, SPRITE_PART_SPLAT03};
		RenderTools()->SelectSprite(Sprites[Client()->GameTick()%3]);
		Graphics()->QuadsSetRotation(Client()->GameTick());
		Graphics()->SetColor(OuterColor.r, OuterColor.g, OuterColor.b, OuterColor.a);
		IGraphics::CQuadItem QuadItem(Pos.x, Pos.y, 24, 24);
		Graphics()->QuadsDraw(&QuadItem, 1);
		Graphics()->SetColor(InnerColor.r, InnerColor.g, InnerColor.b, InnerColor.a);
		QuadItem = IGraphics::CQuadItem(Pos.x, Pos.y, 20, 20);
		Graphics()->QuadsDraw(&QuadItem, 1);
		Graphics()->QuadsEnd();
	}

	Graphics()->BlendNormal();
}
コード例 #2
0
ファイル: items.cpp プロジェクト: Ryozuki/TeeSmash
void CItems::RenderLaser(const struct CNetObj_Laser *pCurrent)
{
	vec2 Pos = vec2(pCurrent->m_X, pCurrent->m_Y);
	vec2 From = vec2(pCurrent->m_FromX, pCurrent->m_FromY);
	vec2 Dir = normalize(Pos-From);

	float Ticks = Client()->GameTick() + Client()->IntraGameTick() - pCurrent->m_StartTick;
	float Ms = (Ticks/50.0f) * 1000.0f;
	float a = Ms / m_pClient->m_Tuning.m_LaserBounceDelay;
	a = clamp(a, 0.0f, 1.0f);
	float Ia = 1-a;

	vec2 Out, Border;

	Graphics()->BlendNormal();
	Graphics()->TextureSet(-1);
	Graphics()->QuadsBegin();

	//vec4 inner_color(0.15f,0.35f,0.75f,1.0f);
	//vec4 outer_color(0.65f,0.85f,1.0f,1.0f);

	// do outline
	vec4 OuterColor(0.075f, 0.075f, 0.25f, 1.0f);
	Graphics()->SetColor(OuterColor.r, OuterColor.g, OuterColor.b, 1.0f);
	Out = vec2(Dir.y, -Dir.x) * (7.0f*Ia);

	IGraphics::CFreeformItem Freeform(
			From.x-Out.x, From.y-Out.y,
			From.x+Out.x, From.y+Out.y,
			Pos.x-Out.x, Pos.y-Out.y,
			Pos.x+Out.x, Pos.y+Out.y);
	Graphics()->QuadsDrawFreeform(&Freeform, 1);

	// do inner
	vec4 InnerColor(0.5f, 0.5f, 1.0f, 1.0f);
	Out = vec2(Dir.y, -Dir.x) * (5.0f*Ia);
	Graphics()->SetColor(InnerColor.r, InnerColor.g, InnerColor.b, 1.0f); // center

	Freeform = IGraphics::CFreeformItem(
			From.x-Out.x, From.y-Out.y,
			From.x+Out.x, From.y+Out.y,
			Pos.x-Out.x, Pos.y-Out.y,
			Pos.x+Out.x, Pos.y+Out.y);
	Graphics()->QuadsDrawFreeform(&Freeform, 1);

	Graphics()->QuadsEnd();

	// render head
	{
		Graphics()->BlendNormal();
		Graphics()->TextureSet(g_pData->m_aImages[IMAGE_PARTICLES].m_Id);
		Graphics()->QuadsBegin();

		int Sprites[] = {SPRITE_PART_SPLAT01, SPRITE_PART_SPLAT02, SPRITE_PART_SPLAT03};
		RenderTools()->SelectSprite(Sprites[Client()->GameTick()%3]);
		Graphics()->QuadsSetRotation(Client()->GameTick());
		Graphics()->SetColor(OuterColor.r, OuterColor.g, OuterColor.b, 1.0f);
		IGraphics::CQuadItem QuadItem(Pos.x, Pos.y, 24, 24);
		Graphics()->QuadsDraw(&QuadItem, 1);
		Graphics()->SetColor(InnerColor.r, InnerColor.g, InnerColor.b, 1.0f);
		QuadItem = IGraphics::CQuadItem(Pos.x, Pos.y, 20, 20);
		Graphics()->QuadsDraw(&QuadItem, 1);
		Graphics()->QuadsEnd();
	}

	Graphics()->BlendNormal();
}
コード例 #3
0
ファイル: items.cpp プロジェクト: Enyltyn/AllTheHaxx
void CItems::RenderLaser(const struct CNetObj_Laser *pCurrent)
{
	vec3 RGB;
	vec2 Pos = vec2(pCurrent->m_X, pCurrent->m_Y);
	vec2 From = vec2(pCurrent->m_FromX, pCurrent->m_FromY);
	vec2 Dir = normalize(Pos-From);

	float Ticks = Client()->GameTick() + Client()->IntraGameTick() - pCurrent->m_StartTick;
	float Ms = (Ticks/50.0f) * 1000.0f;
	float a = Ms / m_pClient->m_Tuning[g_Config.m_ClDummy].m_LaserBounceDelay;
	a = clamp(a, 0.0f, 1.0f);
	float Ia = 1-a;

	vec2 Out, Border;

	Graphics()->BlendNormal();
	Graphics()->TextureSet(-1);
	Graphics()->QuadsBegin();

	//vec4 inner_color(0.15f,0.35f,0.75f,1.0f);
	//vec4 outer_color(0.65f,0.85f,1.0f,1.0f);

	// do outline
	RGB = HslToRgb(vec3(g_Config.m_ClLaserOutlineHue / 255.0f, g_Config.m_ClLaserOutlineSat / 255.0f, g_Config.m_ClLaserOutlineLht / 255.0f));
	vec4 OuterColor(RGB.r, RGB.g, RGB.b, 1.0f);
	Graphics()->SetColor(OuterColor.r, OuterColor.g, OuterColor.b, 1.0f);
	Out = vec2(Dir.y, -Dir.x) * (7.0f*Ia);

	IGraphics::CFreeformItem Freeform(
			From.x-Out.x, From.y-Out.y,
			From.x+Out.x, From.y+Out.y,
			Pos.x-Out.x, Pos.y-Out.y,
			Pos.x+Out.x, Pos.y+Out.y);
	Graphics()->QuadsDrawFreeform(&Freeform, 1);

	// do inner
	RGB = HslToRgb(vec3(g_Config.m_ClLaserInnerHue / 255.0f, g_Config.m_ClLaserInnerSat / 255.0f, g_Config.m_ClLaserInnerLht / 255.0f));
	vec4 InnerColor(RGB.r, RGB.g, RGB.b, 1.0f);
	Out = vec2(Dir.y, -Dir.x) * (5.0f*Ia);
	Graphics()->SetColor(InnerColor.r, InnerColor.g, InnerColor.b, 1.0f); // center

	Freeform = IGraphics::CFreeformItem(
			From.x-Out.x, From.y-Out.y,
			From.x+Out.x, From.y+Out.y,
			Pos.x-Out.x, Pos.y-Out.y,
			Pos.x+Out.x, Pos.y+Out.y);
	Graphics()->QuadsDrawFreeform(&Freeform, 1);

	Graphics()->QuadsEnd();

	//H-Client
	CServerInfo Info;
	Client()->GetServerInfo(&Info);
	if(!str_find_nocase(Info.m_aGameType, "race") && !str_find_nocase(Info.m_aGameType, "ddnet") && length(Pos-From) != 0 && Pos != From)
	{
		vec2 cPos = From;
		for (int i=0; i<length(From-Pos); i++)
		{
			m_pClient->m_pEffects->LaserTrail(cPos, Dir, InnerColor);
			cPos += Dir;
		}
	}
	//

	// render head
	{
		Graphics()->BlendNormal();
		Graphics()->TextureSet(g_pData->m_aImages[IMAGE_PARTICLES].m_Id);
		Graphics()->QuadsBegin();

		int Sprites[] = {SPRITE_PART_SPLAT01, SPRITE_PART_SPLAT02, SPRITE_PART_SPLAT03};
		RenderTools()->SelectSprite(Sprites[Client()->GameTick()%3]);
		Graphics()->QuadsSetRotation(Client()->GameTick());
		Graphics()->SetColor(OuterColor.r, OuterColor.g, OuterColor.b, 1.0f);
		IGraphics::CQuadItem QuadItem(Pos.x, Pos.y, 24, 24);
		Graphics()->QuadsDraw(&QuadItem, 1);
		Graphics()->SetColor(InnerColor.r, InnerColor.g, InnerColor.b, 1.0f);
		QuadItem = IGraphics::CQuadItem(Pos.x, Pos.y, 20, 20);
		Graphics()->QuadsDraw(&QuadItem, 1);
		Graphics()->QuadsEnd();
	}

	Graphics()->BlendNormal();
}