ENT.Type = "anim" ENT.Base = "base_anim" ENT.Spawnable = false ENT.AdminSpawnable = true ENT.sound = Sound("buttons/combine_button7.wav") ENT.delay = 2 ENT.offset = 44.5 ENT.x = -56 ENT.y = -88 ENT.w = 112 ENT.h = 72 ENT.blocks = { [1] = { {x = 1, y = 1, w = 16, h = 32, command = "1"}, {x = 18, y = 1, w = 16, h = 16, command = "2"}, {x = 35, y = 1, w = 48, h = 16, command = "3"}, {x = 84, y = 1, w = 27, h = 38, command = "4"}, {x = 56, y = 18, w = 27, h = 19, command = "5"}, {x = ENT.w - 8, y = ENT.h - 12, w = 7, h = 11, command = 2, text = "S"}, }, [2] = { {x = 1, y = 2, w = ENT.w - 2, h = 11, command = "6", text = "Scoreboard"}, {x = 1, y = 15, w = ENT.w - 2, h = 11, command = "7", text = "Timer"}, {x = 1, y = 28, w = ENT.w - 2, h = 11, command = "8", text = "Supply"}, }, } function ENT:Cursor(ply) if not ply.cursorTrace then ply:CursorTrace() end local v = self.Entity:WorldToLocal(ply.cursorTrace.HitPos) cursor = {onPanel = false, x = 0, y = 0} if v.x > self.offset - 0.7 and v.x < self.offset then cursor.x = math.Round( v.y * 4 - self.x) cursor.y = math.Round(-v.z * 4 - self.y) if ply.cursorTrace.Entity == self.Entity and cursor.x >= 0 and cursor.y >= 0 and cursor.x < self.w and cursor.y < self.h then cursor.onPanel = 1 end elseif -v.x > self.offset - 0.7 and -v.x < self.offset then cursor.x = math.Round(-v.y * 4 - self.x) cursor.y = math.Round(-v.z * 4 - self.y) if ply.cursorTrace.Entity == self.Entity and cursor.x >= 0 and cursor.y >= 0 and cursor.x < self.w and cursor.y < self.h then cursor.onPanel = 2 end end return cursor end function ENT:CursorOnBlock(cursor, panel, block) if cursor.onPanel == panel and cursor.x >= block.x and cursor.x < block.x + block.w and cursor.y >= block.y and cursor.y < block.y + block.h then return true else return false end end function ENT:Initialize() self.menu = {} self.timer = {} if SERVER then self.Entity:SetModel("models/buildingblocks/blockspawn_1.mdl") self.Entity:PhysicsInit(SOLID_VPHYSICS) self.Entity:SetMoveType(MOVETYPE_VPHYSICS) self.Entity:SetSolid(SOLID_VPHYSICS) local phys = self.Entity:GetPhysicsObject() if phys:IsValid() then phys:EnableMotion(false) end else self.color = team.GetColor(self.Entity:GetSkin()) end end function ENT:Think() local trace = {} trace.start = self.Entity:GetPos() + self.Entity:GetUp() * 32 trace.endpos = self.Entity:GetUp() * 68 + trace.start trace.filter = self.Entity local trace = util.TraceLine(trace) self.cleared = not trace.Hit if SERVER then for _, ply in pairs(player.GetAll()) do local cursor = self:Cursor(ply) if not cursor.onPanel then self.menu[ply] = 1 end end end end function ENT:Use(ply) local cursor = self:Cursor(ply) if not cursor.onPanel then return end for i, block in pairs(self.blocks[self.menu[ply] or 1]) do if self:CursorOnBlock(cursor, cursor.onPanel and cursor.onPanel or -1, block) then if type(block.command) == "number" then self.menu[ply] = block.command elseif (self.timer[ply] or 0) < CurTime() then self.timer[ply] = CurTime() + self.delay if SERVER then GF:SpawnBlock(ply, tonumber(block.command)) end end end end end