Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lua/tardis/interiors/exteriors/legacy_exterior.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ local E = {

Parts = {
door = {
model = "models/drmatt/tardis/exterior/door.mdl",
posoffset=Vector(-28,0,-54.6)
}
},
Expand Down
77 changes: 73 additions & 4 deletions lua/tardis/screens/cl_screen_chameleon.lua
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ TARDIS:AddScreen("Chameleon", {id="chameleon", text="Screens.Chameleon", menu=fa
panel:SetPos(2 * listW + 3 * gap, gap)
panel:SetBackgroundColor(bgcolor)

local preview3D = vgui.Create("DAdjustableModelPanel", panel)
preview3D:SetSize(imS, imS)
preview3D:SetPos(gap3, gap2)

local preview = vgui.Create("DImage", panel)
preview:SetSize(imS, imS)
preview:SetPos(gap3, gap2)
Expand Down Expand Up @@ -140,15 +144,80 @@ TARDIS:AddScreen("Chameleon", {id="chameleon", text="Screens.Chameleon", menu=fa
local function select_exterior(id)
change_id = id
local icon = TARDIS:GetExteriorIcon(id)
local ext_data = TARDIS:CreateExteriorMetadata(id)

preview:SetVisible(icon ~= nil)
if icon then
preview:SetImage(icon)
if screen.is3D2D then -- 3D Preview doesnt work on 3D screens, so icon is used instead as a fallback
preview:SetVisible(icon ~= nil)
if icon then
preview:SetImage(icon)
end
else
preview3D:SetVisible(ext_data ~= nil)
if ext_data then

local basemodel = ext_data.Model
local doormodel = ext_data.Parts.door.model or ext_data.Parts.door.Model -- case sensitive, some extensions have it capitalised, this can be done better but im not sure how
local doorpos = (ext_data.Portal.pos + ext_data.Parts.door.posoffset)
local textures
if ext_data.TextureSets then
textures = ext_data.TextureSets.normal
end

preview3D:SetModel(basemodel)

modelent = preview3D:GetEntity()

local mn, mx = modelent:GetModelBounds()
local size = 0
size = math.max( size, math.abs(mn.x) + math.abs(mx.x) )
size = math.max( size, math.abs(mn.y) + math.abs(mx.y) )
size = math.max( size, math.abs(mn.z) + math.abs(mx.z) )

preview3D:SetFOV( 30 ) -- these are set here so the camera resets when switching to a new exterior
preview3D:SetLookAng( Angle(5,193,0) )
preview3D:SetCamPos( Vector( size*2.2, size/2, size/1.5 ) )


if textures then -- Apply texturesets if they exist
local prefix = textures.prefix or ""
for i,v in ipairs(textures) do
if v[1] == "self" then
modelent:SetSubMaterial(v[2],prefix .. v[3])
end
end
end

if doormodel then
function preview3D:PostDrawModel( ent )
door = ClientsideModel(doormodel)
door:SetPos(doorpos)
if textures then
local prefix = textures.prefix or ""
for i,v in ipairs(textures) do
if v[1] == "door" then
door:SetSubMaterial(v[2],prefix .. v[3])
end
end
end
door:DrawModel()
door:Remove()
end
end

function preview3D:LayoutEntity( ent )
-- overrides the model constantly spinning
end
end
end

end
local function unselect_exterior()
change_id = nil
preview:SetVisible(false)
if screen.is3D2D then
preview:SetVisible(false)
else
preview3D:SetVisible(false)
end
end

function list_categories:OnRowSelected(rowIndex, row)
Expand Down