//Lua script originally written by Dabir, modified to make horizontal springs work//
CV_RegisterVar({
    name = "springlock2",
    defaultvalue = "25",
    flags = CV_SHOWMODIF,
    PossibleValue = {MIN = 1, MAX = 70}
    })

local springtime = 0

local function springBounceLock(thing, tmthing)
    local p = tmthing.player
    if not p
        return
    end
    
	--Doom collision detection checks just x and y values by default, add z value check--
	if abs(thing.z-tmthing.z)/FRACUNIT > 25
		return
	end
	
	--Different values for different spring types
	if thing.type == MT_BLUEHORIZ
		p.springlock2 = 2
		springtime = 2
	elseif thing.type == MT_YELLOWHORIZ
		p.springlock2 = 20
		springtime = 2
	elseif thing.type == MT_REDHORIZ
		p.springlock2 = 40
		springtime = 2
	elseif thing.type == MT_REDDIAG
		p.springlock2 = 40
	elseif thing.type == MT_YELLOWDIAG
		p.springlock2 = 25
	elseif thing.type == MT_BLUEDIAG
		p.springlock2 = 10
	else
		return
	end
end

addHook("MobjCollide", springBounceLock, MT_REDHORIZ)
addHook("MobjCollide", springBounceLock, MT_YELLOWHORIZ)
addHook("MobjCollide", springBounceLock, MT_BLUEHORIZ)

addHook("MobjCollide", springBounceLock, MT_REDDIAG)
addHook("MobjCollide", springBounceLock, MT_YELLOWDIAG)
addHook("MobjCollide", springBounceLock, MT_BLUEDIAG)

addHook("PreThinkFrame", function()
    for player in players.iterate()
        -- Existence check
        if not(player.mo and player.mo.valid)
            continue
        end
		
        -- Controls not locked
		if (player.springlock2 == nil) or (player.springlock2 <= 0) then
			return
		end
		
		-- Lock controls this frame
		player.cmd.forwardmove = 0
		player.cmd.sidemove = 0
		player.cmd.angleturn = 0
		
		-- Run timer down 2x if sneakers
		if player.powers[pw_sneakers]
			player.springlock2 = max($-2, 0)
		else
			player.springlock2 = $-1
		end
    end
end)

//addHook("MobjThinker", function()
//	for player in players.iterate()
//        -- Existence check
//        if not(player.mo and player.mo.valid)
//            continue
//        end
//		
//		 -- Controls not locked
//		if not(player.springlock2 == nil) -- the variable does not have a valid number when the level starts
//		
//			if player.springlock2 <= 0
//				continue
//			else
//				if springtime > 0
//					player.mo.momz = FRACUNIT*2
//					springtime = springtime-1
//				end
//			end
//		end
//	end
//end)
