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

pace = pace or {}

-- for the default models
resource.AddWorkshop("104691717")

pace.luadata = include("pac3/libraries/luadata.lua")
pace.Parts = pace.Parts or {}
pace.Errors = {}

do
	util.AddNetworkString("pac.TogglePartDrawing")

	function pac.TogglePartDrawing(ent, b, who) --serverside interface to clientside function of the same name
		net.Start("pac.TogglePartDrawing")
		net.WriteEntity(ent)
		net.WriteBit(b)
		if not who then
			net.Broadcast()
		else
			net.Send(who)
		end
	end
end

function pace.CanPlayerModify(ply, ent)
	if not IsValid(ply) or not IsValid(ent) then
		return false
	end

	if ply == ent then
		return true
	end

	if game.SinglePlayer() then
		return true
	end

	if ent.CPPICanTool and ent:CPPICanTool(ply, "paint") then
		return true
	end

	if ent.CPPIGetOwner and ent:CPPIGetOwner() == ply then
		return true
	end

	do
		local tr = util.TraceLine({ start = ply:EyePos(), endpos = ent:WorldSpaceCenter(), filter = ply })
		if tr.Entity == ent and hook.Run("CanTool", ply, tr, "paint") == true then
			return true
		end
	end

	return false
end

include("util.lua")
include("wear.lua")
include("wear_filter.lua")
include("bans.lua")
include("spawnmenu.lua")
include("show_outfit_on_use.lua")

do
	util.AddNetworkString("pac_in_editor")

	net.Receive("pac_in_editor", function(_, ply)
		ply:SetNW2Bool("pac_in_editor", net.ReadBit() == 1)
	end)

	util.AddNetworkString("pac_in_editor_posang")

	net.Receive("pac_in_editor_posang", function(_, ply)
		if not ply.pac_last_editor_message then
			ply.pac_last_editor_message = 0
		end
		if ply.pac_last_editor_message > CurTime() then return end
		ply.pac_last_editor_message = CurTime() + 0.2

		local pos = net.ReadVector()
		local ang = net.ReadAngle()
		local part_pos = net.ReadVector()

		net.Start("pac_in_editor_posang", true)
			net.WriteEntity(ply)
			net.WriteVector(pos)
			net.WriteAngle(ang)
			net.WriteVector(part_pos)
		net.SendPVS(ply:GetPos())
	end)
end


CreateConVar("has_pac3_editor", "1", {FCVAR_NOTIFY})

resource.AddSingleFile("materials/icon64/pac3.png")
