mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
151 lines
4.3 KiB
Lua
151 lines
4.3 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
ENT.IconVehicleLocked = Material( "lvs/locked.png" )
|
|
|
|
LVS:AddHudEditor( "SeatSwitcher", ScrW() - 360, 10, 350, 30, 350, 30, "SEAT SWITCHER",
|
|
function( self, vehicle, X, Y, W, H, ScrX, ScrY, ply )
|
|
if not vehicle.LVSHudPaintSeatSwitcher then return end
|
|
vehicle:LVSHudPaintSeatSwitcher( X, Y, W, H, ScrX, ScrY, ply )
|
|
end
|
|
)
|
|
|
|
function ENT:LVSHudPaintSeatSwitcher( X, Y, w, h, ScrX, ScrY, ply )
|
|
local pSeats = self:GetPassengerSeats()
|
|
local SeatCount = table.Count( pSeats )
|
|
|
|
if SeatCount <= 0 then return end
|
|
|
|
pSeats[0] = self:GetDriverSeat()
|
|
|
|
draw.NoTexture()
|
|
|
|
local HasAI = self:GetAI()
|
|
local MySeat = ply:GetVehicle():GetNWInt( "pPodIndex", -1 )
|
|
|
|
local Passengers = {}
|
|
for _, player in pairs( player.GetAll() ) do
|
|
if player:lvsGetVehicle() == self then
|
|
local Pod = player:GetVehicle()
|
|
Passengers[ Pod:GetNWInt( "pPodIndex", -1 ) ] = player:GetName()
|
|
end
|
|
end
|
|
|
|
if HasAI then
|
|
Passengers[1] = "[AI] "..self.PrintName
|
|
|
|
for _, Pod in pairs( self:GetPassengerSeats() ) do
|
|
if IsValid( Pod:GetDriver() ) then continue end
|
|
|
|
local weapon = Pod:lvsGetWeapon()
|
|
|
|
if not IsValid( weapon ) then continue end
|
|
|
|
Passengers[ weapon:GetPodIndex() ] = "[AI] Gunner"
|
|
end
|
|
end
|
|
|
|
ply.SwitcherTime = ply.SwitcherTime or 0
|
|
ply._lvsoldPassengers = ply._lvsoldPassengers or {}
|
|
|
|
local Time = CurTime()
|
|
for k, v in pairs( Passengers ) do
|
|
if ply._lvsoldPassengers[k] ~= v then
|
|
ply._lvsoldPassengers[k] = v
|
|
ply.SwitcherTime = Time + 2
|
|
end
|
|
end
|
|
for k, v in pairs( ply._lvsoldPassengers ) do
|
|
if not Passengers[k] then
|
|
ply._lvsoldPassengers[k] = nil
|
|
ply.SwitcherTime = Time + 2
|
|
end
|
|
end
|
|
for _, v in pairs( LVS.pSwitchKeysInv ) do
|
|
if input.IsKeyDown(v) then
|
|
ply.SwitcherTime = Time + 2
|
|
end
|
|
end
|
|
|
|
local Hide = ply.SwitcherTime > Time
|
|
|
|
ply.smHider = ply.smHider and (ply.smHider + ((Hide and 1 or 0) - ply.smHider) * RealFrameTime() * 15) or 0
|
|
|
|
local Alpha1 = 135 + 110 * ply.smHider
|
|
local HiderOffset = 270 * ply.smHider
|
|
local xPos = w - 35
|
|
local yPos = Y - (SeatCount + 1) * 30 + h + 5
|
|
|
|
local SwapY = false
|
|
local SwapX = false
|
|
|
|
local xHider = HiderOffset
|
|
|
|
if X < (ScrX * 0.5 - w * 0.5) then
|
|
SwapX = true
|
|
xPos = 0
|
|
xHider = 0
|
|
end
|
|
|
|
if Y < (ScrY * 0.5 - h * 0.5) then
|
|
SwapY = true
|
|
yPos = Y - h
|
|
end
|
|
|
|
for _, Pod in pairs( pSeats ) do
|
|
if not IsValid( Pod ) then continue end
|
|
|
|
local I = Pod:GetNWInt( "pPodIndex", -1 )
|
|
|
|
if I <= 0 then continue end
|
|
|
|
if I == MySeat then
|
|
draw.RoundedBox(5, X + xPos - xHider, yPos + I * 30, 35 + HiderOffset, 25, Color(LVS.ThemeColor.r, LVS.ThemeColor.g, LVS.ThemeColor.b,100 + 50 * ply.smHider) )
|
|
else
|
|
draw.RoundedBox(5, X + xPos - xHider, yPos + I * 30, 35 + HiderOffset, 25, Color(0,0,0,100 + 50 * ply.smHider) )
|
|
end
|
|
|
|
if Hide then
|
|
if Passengers[I] then
|
|
draw.DrawText( Passengers[I], "LVS_FONT_SWITCHER", X + 40 + xPos - xHider, yPos + I * 30 + 2.5, Color( 255, 255, 255, Alpha1 ), TEXT_ALIGN_LEFT )
|
|
else
|
|
draw.DrawText( "-", "LVS_FONT_SWITCHER", X + 40 + xPos - xHider, yPos + I * 30 + 2.5, Color( 255, 255, 255, Alpha1 ), TEXT_ALIGN_LEFT )
|
|
end
|
|
|
|
draw.DrawText( "["..I.."]", "LVS_FONT_SWITCHER", X + 17 + xPos - xHider, yPos + I * 30 + 2.5, Color( 255, 255, 255, Alpha1 ), TEXT_ALIGN_CENTER )
|
|
else
|
|
if Passengers[I] then
|
|
draw.DrawText( "[^"..I.."]", "LVS_FONT_SWITCHER", X + 17 + xPos - xHider, yPos + I * 30 + 2.5, Color( 255, 255, 255, Alpha1 ), TEXT_ALIGN_CENTER )
|
|
else
|
|
draw.DrawText( "["..I.."]", "LVS_FONT_SWITCHER", X + 17 + xPos - xHider, yPos + I * 30 + 2.5, Color( 255, 255, 255, Alpha1 ), TEXT_ALIGN_CENTER )
|
|
end
|
|
end
|
|
|
|
if not self:GetlvsLockedStatus() then continue end
|
|
|
|
local xLocker = SwapX and 35 + HiderOffset or -25 - HiderOffset
|
|
|
|
if SwapY then
|
|
if I == 1 then
|
|
surface.SetDrawColor( 255, 255, 255, 255 )
|
|
surface.SetMaterial( self.IconVehicleLocked )
|
|
surface.DrawTexturedRect( X + xPos + xLocker, yPos + I * 30, 25, 25 )
|
|
end
|
|
else
|
|
if I == SeatCount then
|
|
surface.SetDrawColor( 255, 255, 255, 255 )
|
|
surface.SetMaterial( self.IconVehicleLocked )
|
|
surface.DrawTexturedRect( X + xPos + xLocker, yPos + I * 30, 25, 25 )
|
|
end
|
|
end
|
|
end
|
|
end
|