1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/entities/gmod_track_sign/cl_init.lua
g_brzhezinskiy 1d05caf866 init
2021-01-02 12:51:45 +03:00

218 lines
5.2 KiB
Lua

include("shared.lua")
surface.CreateFont("MetrostroiSubway_StationFont1", {
font = "Arial",
size = 96,
weight = 0,
blursize = 0,
scanlines = 0,
antialias = true,
underline = false,
italic = false,
strikeout = false,
symbol = false,
rotary = false,
shadow = false,
additive = false,
outline = false,
extended = true
})
surface.CreateFont("MetrostroiSubway_StationFont2", {
font = "Times New Roman",
size = 128,
weight = 0,
antialias = true,
extended = true
})
surface.CreateFont("MetrostroiSubway_StationList1", {
font = "Arial",
size = 28,
weight = 1000,
antialias = true,
extended = true
})
surface.CreateFont("MetrostroiSubway_StationList2", {
font = "Arial",
size = 28,
weight = 0,
antialias = true,
extended = true
})
surface.CreateFont("MetrostroiSubway_StationList3", {
font = "Arial",
size = 28,
weight = 0,
antialias = true,
extended = true
})
function ENT:Initialize()
self:SetRenderBounds(
Vector(-16,-768,-64),
Vector(16,768,64))
end
local P1 = -2
local P2 = 3
function ENT:DrawStation(x,y,ID,currentStation,R1,G1,B1,W,H,text1,text2,text3)
local R2 = 225
local G2 = 205
local B2 = 0
if currentStation then
local R,G,B = R2,G2,B2
R2,G2,B2 = R1,G1,B1
R1,G1,B1 = R,G,B
end
self.LastColor = self.LastColor or Color(R1,G1,B1,255)
surface.SetDrawColor(0,0,0,255)
surface.DrawRect(x+P1,y,W-P1*2,H)
surface.SetDrawColor(R1,G1,B1,255)
surface.DrawRect(x+P1+P2,y+P2,W-P1*2-P2*2,H-P2*2)
local cx = x+W*0.1
local cy = y+H*0.5
local N = 10
local radius = 23
local step = 2*math.pi/N
local vertexBuffer = { {}, {}, {} }
surface.SetDrawColor(255,255,255,255)
for i=1,N do
vertexBuffer[1].x = cx + radius*math.sin(step*(i+0))
vertexBuffer[1].y = cy + radius*math.cos(step*(i+0))
vertexBuffer[2].x = cx
vertexBuffer[2].y = cy
vertexBuffer[3].x = cx + radius*math.sin(step*(i+1))
vertexBuffer[3].y = cy + radius*math.cos(step*(i+1))
surface.DrawPoly(vertexBuffer)
end
draw.Text({
text = text1,
font = "MetrostroiSubway_StationList3",
pos = { x+W*0.1, y+H*0.5},
xalign = TEXT_ALIGN_CENTER,
yalign = TEXT_ALIGN_CENTER,
color = Color(0,0,0,255)})
draw.Text({
text = text2,
font = "MetrostroiSubway_StationList1",
pos = { x+W*0.55, y+H*0.25},
xalign = TEXT_ALIGN_CENTER,
yalign = TEXT_ALIGN_CENTER,
color = Color(0,0,0,255)})
draw.Text({
text = text3,
font = "MetrostroiSubway_StationList2",
pos = { x+W*0.55, y+H*0.75},
xalign = TEXT_ALIGN_CENTER,
yalign = TEXT_ALIGN_CENTER,
color = Color(0,0,0,255)})
end
function ENT:Draw()
local pos = self:LocalToWorld(Vector(4,0,16))
local ang = self:LocalToWorldAngles(Angle(0,90,90))
cam.Start3D2D(pos, ang, 0.50)
--surface.SetDrawColor(255,255,255,255)
--surface.DrawRect(0, 0, 256, 320)
draw.Text({
text = self:GetNW2String("Name","Error"),
font = "MetrostroiSubway_StationFont2",--..self:GetNW2Int("Style",1),
pos = { 0, 0 },
xalign = TEXT_ALIGN_CENTER,
yalign = TEXT_ALIGN_CENTER,
color = Color(0,0,0,255)})
cam.End3D2D()
local pos = self:LocalToWorld(Vector(4,0,-32))
local ang = self:LocalToWorldAngles(Angle(0,90,90))
cam.Start3D2D(pos, ang, 0.125)
draw.NoTexture()
local N = self:GetNW2Int("StationList#")
local W = 320
local H = 64
local X = -N*W*0.5
self.LastColor = nil
for i=1,N do
local x = X+W*(i-1)
local ID = self:GetNW2Int("StationList"..i.."[ID]")
local currentStation = (self:GetNW2Int("ID") == ID)
local R1 = self:GetNW2Int("StationList"..i.."[R]")
local G1 = self:GetNW2Int("StationList"..i.."[G]")
local B1 = self:GetNW2Int("StationList"..i.."[B]")
self:DrawStation(x,0,ID,currentStation,R1,G1,B1,W,H,
self:GetNW2String("StationList"..i.."[ID]"),
self:GetNW2String("StationList"..i.."[Name1]"),
self:GetNW2String("StationList"..i.."[Name2]"))
-- Draw change
if self:GetNW2Int("Change2") == tonumber(self:GetNW2String("StationList"..i.."[ID]")) then
local Nc = self:GetNW2Int("Change2List#")
local ChangeStation = self:GetNW2Int("Change2ID")
local N2 = 0
for j=1,Nc do
if self:GetNW2Int("Change2List"..j.."[ID]") < ChangeStation then
N2 = N2 + 1
end
end
for j=1,Nc do
local ID = self:GetNW2Int("Change2List"..j.."[ID]")
local R2 = self:GetNW2Int("Change2List"..j.."[R]")
local G2 = self:GetNW2Int("Change2List"..j.."[G]")
local B2 = self:GetNW2Int("Change2List"..j.."[B]")
local H2 = H*0.85
local y = 0
if j <= N2
then y = -H2*(N2-j+1)
else y = 0+H+H2*(j-N2-1)
end
self:DrawStation(x,y,ID,false,R2,G2,B2,W,H2,
self:GetNW2String("Change2List"..j.."[ID]"),
self:GetNW2String("Change2List"..j.."[Name1]"),
self:GetNW2String("Change2List"..j.."[Name2]"))
end
end
end
-- Inner part of arrow
local arrow = {
{ x = 0, y = 0 },
{ x = 0, y = H },
{ x = -H/2, y = H/2 },
}
for k,v in ipairs(arrow) do
v.x = v.x - (N*0.5)*W - 2
end
surface.SetDrawColor(Color(0,0,0,255))
surface.DrawPoly(arrow)
-- Outer part of arrow
arrow = {
{ x = -P2, y = 2*P2 },
{ x = -P2, y = H-2*P2 },
{ x = -H/2+P2, y = H/2 },
}
for k,v in ipairs(arrow) do
v.x = v.x - (N*0.5)*W
end
surface.SetDrawColor(self.LastColor or Color(0,0,0,0))
surface.DrawPoly(arrow)
cam.End3D2D()
end