--[[
| 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/
--]]

-- Copyright © 2022-2072, Nak, https://steamcommunity.com/id/Nak2/
-- All Rights Reserved. Not allowed to be reuploaded.
local NikNaks = NikNaks
do
	local file_Open, file_Exists = file.Open, file.Exists
	local cache = {}

	--- Returns the model's hull size.
	--- @param name string
	--- @return Vector MinVec
	--- @return Vector MaxVec
	function NikNaks.ModelSize( name )
		if cache[name] then
			return Vector( cache[name][1] ), Vector( cache[name][2] )
		end

		if not file_Exists( name, "GAME" ) then
			cache[name] = { NikNaks.vector_zero, NikNaks.vector_zero }
			return Vector( cache[name][1] ), Vector( cache[name][2] )
		end

		local f = file_Open( name, "r", "GAME" )

		f:Seek( 104 )

		local hullMin = Vector( f:ReadFloat(), f:ReadFloat(), f:ReadFloat() )
		local hullMax = Vector( f:ReadFloat(), f:ReadFloat(), f:ReadFloat() )

		f:Close()

		cache[name] = { hullMin, hullMax }
		return Vector( hullMin ), Vector( hullMax )
	end
end

do
	local util_GetModelMeshes, Material = util.GetModelMeshes, Material

	--- Returns the materials used for this model. This can be expensive, so cache the result.
	--- @param name any
	--- @param lod? number
	--- @param bodygroupMask? number
	--- @return table
	function NikNaks.ModelMaterials( name, lod, bodygroupMask )
		local data = util_GetModelMeshes( name, lod or 0, bodygroupMask or 0 )
		if not data then return {} end

		local t = {}
		for i = 1, #data do
			local mat = data[i]["material"]

			if mat then
				table.insert( t, Material( mat ) )
			end
		end

		return t
	end
end
