Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module ( "ms" , package.seeall )
- daynight = daynight or {}
- local fog = ents.FindByClass("env_fog_controller")[1]
- local sun = ents.FindByClass("env_sun")[1]
- local light = ents.FindByClass("light_environment")[1]
- local shadow = ents.FindByClass("shadow_control")[1]
- local skypos = Vector(-11760,12800,12800)
- --print(fog, sun, light, shadow)
- hook.Add("InitPostEntity", "DayNight:InitPostEntity", function()
- fog = ents.FindByClass("env_fog_controller")[1]
- sun = ents.FindByClass("env_sun")[1]
- light = ents.FindByClass("light_environment")[1]
- shadow = ents.FindByClass("shadow_control")[1]
- if SERVER then daynight.Moon = daynight.GetMoon() end
- end)
- if SERVER then return end
- --- SKYBOX COLOR CHANGING
- local ft,lf,rt,up,bk,dn
- local appr=math.Approach
- local from=1
- local skyname=GetConVarString'sv_skyname'
- ft = Material('skybox/'..tostring(skyname)..'ft')
- lf = Material('skybox/'..tostring(skyname)..'lf')
- rt = Material('skybox/'..tostring(skyname)..'rt')
- up = Material('skybox/'..tostring(skyname)..'up')
- bk = Material('skybox/'..tostring(skyname)..'bk')
- dn = Material('skybox/'..tostring(skyname)..'dn')
- function FadeSkyBox(target,speed)
- if up:IsError() || lf:IsError() || ft:IsError() || rt:IsError() || bk:IsError() then error("Skybox "..skyname.." not found") end
- local set=ft.SetMaterialVector -- FIXME: TEXTURE IS RESET |:
- local vector = Vector(0)
- local function Changer()
- from=appr(from,target,speed)
- vector.x = from
- vector.y = from
- vector.z = from
- set(ft,'$color', vector)
- set(lf,'$color', vector)
- set(rt,'$color', vector)
- set(up,'$color', vector)
- set(bk,'$color', vector)
- set(dn,'$color', vector)
- if from==target then hook.Remove("Think", "FadeSkyBox") end
- end
- if !speed then
- speed=256
- Changer()
- return
- end
- hook.Add("Think", "FadeSkyBox", Changer)
- end
- timer.Create("DayNight:FadeSkybox",0.1,0,function()
- FadeSkyBox(GetGlobalFloat("DayNight:SkyBox", 1),0.01)
- local moon = GetGlobalEntity("DayNight:Moon")
- if IsValid(moon) then
- moon:SetModelScale(Vector()*GetGlobalFloat("DayNight:MoonSize", 30))
- end
- end)
- daynight.Stars = {}
- daynight.AmountOfStars = 100
- for i=1, daynight.AmountOfStars do
- daynight.Stars[i] = {
- pos = Angle(math.random(360),math.random(360),math.random(360)):Forward() * 1000,
- x = math.random() * 10 + 1,
- y = math.random() * 10 + 1,
- color = HSVToColor(math.random(360), 0.2,1),
- }
- local pos = daynight.Stars[i].pos
- daynight.Stars[i]._pos = Vector(pos.x,pos.y,pos.z)
- end
- local material = Material("particle/fire")
- local prevsunangle = Angle(0)
- local data
- local speed = 0
- hook.Add("PostDrawOpaqueRenderables", "DayNight:DrawStars", function()
- local fade = GetGlobalFloat("DayNight:SkyBox", 1) * -1 + 1
- if fade < 0.15 then return end
- local suninfo = util.GetSunInfo()
- local angle = suninfo.direction:Angle()
- local delta = prevsunangle - angle
- delta = Angle(math.abs(delta.p), math.abs(delta.y), math.abs(delta.r))
- local moon = GetGlobalEntity("DayNight:Moon")
- if IsValid(moon) then
- local time = CurTime() * 2
- moon:SetRenderAngles(Angle(time,time,time))
- end
- render.SetMaterial(material)
- for i=1, daynight.AmountOfStars do
- data = daynight.Stars[i]
- data.pos:Rotate(delta)
- render.DrawSprite( skypos + data.pos, data.x*fade, data.y*fade, data.color)
- end
- prevsunangle = util.GetSunInfo().direction:Angle()
- end)
Advertisement
Add Comment
Please, Sign In to add comment