mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
218 lines
5.2 KiB
Lua
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
|