107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- luacheck: globals SERVER Hook Keys LuaUserData PlayerInput Character Descriptors
 | |
| -- luacheck: max line length 420
 | |
| if SERVER then return end
 | |
| 
 | |
| local isToggle = true     -- toggle or hold behaviour
 | |
| local smoothZoom = false  -- smooth or step
 | |
| 
 | |
| local zStep = 0.5         -- step size for when smoothZoom=false
 | |
| local zSpeed = 0.02       -- speed for when smoothZoom=true
 | |
| local zMin = 0.35          -- minimum zoom modifier
 | |
| local zMax = 2.5          -- maximum zoom modifier
 | |
| local zStart = 0.35        -- default zoom level
 | |
| 
 | |
| local zKey = Keys.P       -- zoom key
 | |
| local dKey = Keys.NumPad1 -- decrease zoom key
 | |
| local iKey = Keys.NumPad2 -- increase zoom key
 | |
| local rKey = Keys.Back    -- reset zoom key
 | |
| -- customization end
 | |
| --end
 | |
| 
 | |
| local zoomOn = false -- default zoom state
 | |
| local gzsDefault = false
 | |
| zStart = math.max(math.min(zMax, zStart), zMin)
 | |
| local gzsNew = zStart
 | |
| local gzsMin = zMin
 | |
| local gzsMax = zMax
 | |
| local gzsUpd = false
 | |
| 
 | |
| local dHeld = false
 | |
| local iHeld = false
 | |
| local zHeld = false
 | |
| 
 | |
| LuaUserData.MakeFieldAccessible(Descriptors["Barotrauma.Camera"], "globalZoomScale")
 | |
| LuaUserData.MakeMethodAccessible(Descriptors["Barotrauma.Camera"], "CreateMatrices")
 | |
| 
 | |
| Hook.HookMethod("Barotrauma.Camera", "CreateMatrices", function(instance, _)
 | |
| 	gzsDefault = instance.globalZoomScale
 | |
| 	gzsMin = math.max(zMin, gzsDefault * zMin)
 | |
| 	gzsMax = math.min(zMax, gzsDefault * zMax)
 | |
| 	gzsNew = math.max(math.min(gzsMax, gzsDefault * zStart), gzsMin)
 | |
| 	gzsUpd = true
 | |
| 	instance.MinZoom = math.min(gzsMin / 2, instance.MinZoom)
 | |
| 	instance.MaxZoom = math.max(gzsMax * 2, instance.MaxZoom)
 | |
| end, Hook.HookMethodType.After)
 | |
| 
 | |
| Hook.HookMethod("Barotrauma.Character", "ControlLocalPlayer", function(_, ptable)
 | |
| 	gzsUpd = false
 | |
| 	if not gzsDefault then
 | |
| 		ptable.cam.CreateMatrices()
 | |
| 	else
 | |
| 		if not Character.DisableControls and Character.Controlled then
 | |
| 			if zoomOn then
 | |
| 				if PlayerInput.KeyDown(dKey) then
 | |
| 					if smoothZoom then
 | |
| 						gzsNew = math.max(gzsMin, gzsNew * (1 - zSpeed))
 | |
| 						gzsUpd = true
 | |
| 					elseif not dHeld then
 | |
| 						gzsNew = math.max(gzsMin, gzsNew - zStep)
 | |
| 						dHeld = true
 | |
| 						gzsUpd = true
 | |
| 					end
 | |
| 				else
 | |
| 					dHeld = false
 | |
| 				end
 | |
| 				if PlayerInput.KeyDown(iKey) then
 | |
| 					if smoothZoom then
 | |
| 						gzsNew = math.min(gzsMax, gzsNew * (1 + zSpeed))
 | |
| 						gzsUpd = true
 | |
| 					elseif not iHeld then
 | |
| 						gzsNew = math.min(gzsMax, gzsNew + zStep)
 | |
| 						iHeld = true
 | |
| 						gzsUpd = true
 | |
| 					end
 | |
| 				else
 | |
| 					iHeld = false
 | |
| 				end
 | |
| 				if PlayerInput.KeyDown(rKey) then
 | |
| 					gzsNew = gzsDefault * zStart
 | |
| 					gzsUpd = true
 | |
| 				end
 | |
| 			end
 | |
| 			if PlayerInput.KeyDown(zKey) or PlayerInput.Mouse5ButtonClicked() then
 | |
| 				if isToggle then
 | |
| 					if not zHeld then
 | |
| 						zoomOn = not zoomOn
 | |
| 						zHeld = true
 | |
| 						gzsUpd = true
 | |
| 					end
 | |
| 				else
 | |
| 					zoomOn = true
 | |
| 					gzsUpd = true
 | |
| 				end
 | |
| 			elseif isToggle then
 | |
| 				zHeld = false
 | |
| 			elseif zoomOn then
 | |
| 				zoomOn = false
 | |
| 				gzsUpd = true
 | |
| 			end
 | |
| 		else
 | |
| 			zoomOn = false
 | |
| 		end
 | |
| 		if gzsUpd then
 | |
| 			ptable.cam.globalZoomScale = zoomOn and gzsNew or gzsDefault
 | |
| 		end
 | |
| 	end
 | |
| end, Hook.HookMethodType.After)
 |