Files
wnsrc/lua/entities/stormfox_weekweather.lua
lifestorm 9c918c46e5 Upload
2024-08-04 23:12:27 +03:00

117 lines
3.5 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/
--]]
AddCSLuaFile()
ENT.Type = "anim"
ENT.Base = "base_anim"
ENT.PrintName = "Weekly display"
ENT.Author = "Nak"
ENT.Purpose = "Weekly weatherdisplay"
ENT.Instructions= "Place it somewhere"
ENT.Category = "StormFox2"
ENT.Editable = true
ENT.Spawnable = true
ENT.AdminOnly = false
ENT.RenderGroup = RENDERGROUP_TRANSLUCENT
function ENT:Initialize()
if SERVER then
self:SetModel( "models/props_phx/rt_screen.mdl" )
self:PhysicsInit( SOLID_VPHYSICS ) -- Make us work with physics,
self:SetMoveType( MOVETYPE_VPHYSICS ) -- after all, gmod is a physics
self:SetSolid( SOLID_VPHYSICS ) -- Toolbox
self:SetUseType( SIMPLE_USE )
self:SetNWBool("hourly", true )
end
end
if SERVER then
function ENT:Use()
self:SetNWBool("hourly", not self:GetNWBool("hourly", true ) )
self:EmitSound("buttons/button14.wav")
end
function ENT:SpawnFunction( ply, tr, ClassName )
if ( !tr.Hit ) then return end
local SpawnPos = tr.HitPos + tr.HitNormal * 16
local ent = ents.Create( ClassName )
ent:SetPos( SpawnPos )
ent:SetAngles(Angle(0,ply:EyeAngles().y + 180,0))
ent:Spawn()
ent:Activate()
return ent
end
else
local function niceName(sName)
sName = string.Replace(sName, "_", " ")
local str = ""
for s in string.gmatch(sName, "[^%s]+") do
str = str .. string.upper(s[1]) .. string.sub(s, 2) .. " "
end
return string.TrimRight(str, " ")
end
local mat = Material("vgui/loading-rotate")
local function DrawDisabled(w,h,s)
surface.SetMaterial(mat)
surface.SetDrawColor(color_white)
surface.DrawTexturedRectRotated(w / 2, h / 2, 50, 50, SysTime() * 300 % 360)
surface.SetFont("SF_Menu_H2")
local t = niceName(language.GetPhrase("addons.preset_disabled")) .. " " .. s
local tw,th = surface.GetTextSize( t )
surface.SetTextColor(color_white)
surface.SetTextPos(w / 2 - tw / 2, h / 2 - th / 2 - 40)
surface.DrawText(t)
end
local function DrawLoading(w,h)
surface.SetMaterial(mat)
surface.SetDrawColor(color_white)
surface.DrawTexturedRectRotated(w / 2, h / 2, 50, 50, SysTime() * 300 % 360)
surface.SetFont("SF_Menu_H2")
local t = niceName(language.GetPhrase("loading"))
local tw,th = surface.GetTextSize( t )
surface.SetTextColor(color_white)
surface.SetTextPos(w / 2 - tw / 2, h / 2 - th / 2 - 40)
surface.DrawText(t .. " " .. string.rep(".", CurTime() % 4))
end
local w,h = 564,325
local sc_mat = Material("stormfox2/entities/weather_display")
local sc_RT = GetRenderTarget( "stormfox2_weekweather", w,h )
local l_update = 0
local function UpdateRTTexture()
if l_update > CurTime() then return end
l_update = CurTime() + 0.5
sc_mat:SetTexture("$basetexture", sc_RT)
render.PushRenderTarget( sc_RT )
render.Clear(0, 0, 0, 255, true, true)
cam.Start2D()
StormFox2.WeatherGen.DrawForecast(w,h, true)
cam.End2D()
render.PopRenderTarget()
end
local r_update = false
function ENT:Draw()
render.MaterialOverrideByIndex(1, sc_mat)
self:DrawModel()
if self:GetPos():DistToSqr(LocalPlayer():GetPos()) > 350000 then return end
render.MaterialOverrideByIndex()
r_update = true
end
-- Updating it inside ENT:Draw causes problems
hook.Add("PostDrawOpaqueRenderables", "StormFox2.Entity.weekweather", function()
if not r_update then return end
r_update = false
UpdateRTTexture()
end)
end