mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
116
lua/entities/stormfox_weekweather.lua
Normal file
116
lua/entities/stormfox_weekweather.lua
Normal file
@@ -0,0 +1,116 @@
|
||||
--[[
|
||||
| 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
|
||||
|
||||
Reference in New Issue
Block a user