Difference between revisions of "Script - Zoom"
From FreeSpace Wiki
(Minor code cleanup) |
(Now includes progress bar and control sensitivity) |
||
| Line 8: | Line 8: | ||
$On Mission Start: | $On Mission Start: | ||
[ | [ | ||
| + | -- Some things to tell the script to do something and some default values | ||
runZoomScript = true | runZoomScript = true | ||
zoomValue = 0.1 | zoomValue = 0.1 | ||
normalFOV = 0.75 | normalFOV = 0.75 | ||
| + | transitionTime = 2 | ||
zooming = false | zooming = false | ||
defaultZoomSet = false | defaultZoomSet = false | ||
| + | cameraSet = false | ||
| + | |||
| + | -- Setting the values to be used in the $On Frame: hook | ||
| + | currentProgr = 0 | ||
| + | zoomEndProgress = 100 | ||
| + | |||
| + | zoomingIn = false | ||
| + | zoomedIn = false | ||
| + | |||
| + | zoomingOut = false | ||
| + | zoomedOut = true | ||
| + | |||
| + | -- Constants for drawing the progress | ||
| + | offset_x = 30 | ||
| + | offset_y = 70 | ||
| + | heigth = 8 | ||
| + | width = 80 | ||
| + | |||
| + | stepWidth = width / 100 | ||
| + | |||
| + | -- Settings for the sensitivity | ||
| + | sensitivity = 0.25 | ||
| + | |||
| + | -- The camera which is used for zooming (is initialized in the first $Key Pressed: hook) | ||
| + | cam = nil | ||
| + | |||
| + | function getProgressString() | ||
| + | local progressString = "Zooming" | ||
| + | if zoomingIn then | ||
| + | progressString = progressString .. " in:" | ||
| + | elseif zoomingOut then | ||
| + | progressString = progressString .. " out:" | ||
| + | elseif zoomedIn then | ||
| + | progressString = "Zoomed in:" | ||
| + | elseif zoomedOut then | ||
| + | progressString = "Zoomed out:" | ||
| + | else | ||
| + | progressString = "Zoomed:" | ||
| + | end | ||
| + | return progressString | ||
| + | end | ||
| + | |||
| + | function handleControls() | ||
| + | if zoomingIn or zoomedIn then | ||
| + | local ci = ba.getControlInfo() | ||
| + | ci.Pitch = ci.Pitch * sensitivity | ||
| + | ci.Heading = ci.Heading * sensitivity | ||
| + | ci.Bank = ci.Bank * sensitivity | ||
| + | end | ||
| + | end | ||
| + | |||
| + | function drawProgress() | ||
| + | progressString = getProgressString() | ||
| + | |||
| + | local stringWidth = gr.getStringWidth(progressString); | ||
| + | gr.drawString(progressString,30,70) | ||
| + | local realOffset_x = offset_x + stringWidth + 10 | ||
| + | gr.drawRectangle(realOffset_x, offset_y,realOffset_x + width, offset_y + heigth, zoomedIn) | ||
| + | local frameTime = ba.getFrametime() | ||
| + | |||
| + | local progressLineOffset_x = realOffset_x + stepWidth * currentProgr | ||
| + | gr.drawLine(progressLineOffset_x, offset_y, progressLineOffset_x, offset_y + heigth) | ||
| + | |||
| + | local thisFrameProg = (frameTime / transitionTime) * zoomEndProgress | ||
| + | if zoomingIn then | ||
| + | currentProgr = currentProgr + thisFrameProg | ||
| + | if currentProgr >= 100 then | ||
| + | currentProgr = 100 | ||
| + | zoomingIn = false | ||
| + | zoomedIn = true | ||
| + | end | ||
| + | elseif zoomingOut then | ||
| + | currentProgr = currentProgr - thisFrameProg | ||
| + | if currentProgr <= 0 then | ||
| + | currentProgr = 0 | ||
| + | zoomedOut = true | ||
| + | zoomingOut = false | ||
| + | zooming = false | ||
| + | end | ||
| + | end | ||
| + | gr.drawString("Current: " .. currentProgr) | ||
| + | gr.drawString("Frame: " .. thisFrameProg) | ||
| + | gr.drawString("Zoom End: " .. zoomEndProgress) | ||
| + | end | ||
] | ] | ||
| Line 18: | Line 104: | ||
$On Mission End: | $On Mission End: | ||
[ | [ | ||
| − | runZoomScript = false | + | if runZoomScript then |
| + | runZoomScript = false | ||
| + | if defaultZoomSet then | ||
| + | cam:setFOV(normalFOV) -- Resetting the FOV in case we have not zoomed out completely | ||
| + | end | ||
| + | end | ||
| + | ] | ||
| + | |||
| + | $Application: FS2_Open | ||
| + | $On Frame: | ||
| + | [ | ||
| + | if runZoomScript then | ||
| + | if zooming then | ||
| + | handleControls() | ||
| + | |||
| + | drawProgress() | ||
| + | end | ||
| + | end | ||
] | ] | ||
| + | $KeyPress: d | ||
$State: GS_STATE_GAME_PLAY | $State: GS_STATE_GAME_PLAY | ||
| − | + | $On Key Pressed: | |
| − | $On Key Pressed: [ | + | [ |
if runZoomScript then | if runZoomScript then | ||
| + | if not cameraSet then | ||
| + | if #gr.Cameras > 0 then | ||
| + | cam = gr.Cameras[1] | ||
| + | end | ||
| + | end | ||
if not zooming then | if not zooming then | ||
plr = hv.Player | plr = hv.Player | ||
if plr:isValid() then | if plr:isValid() then | ||
| − | + | if cam:isValid() then | |
| − | + | ||
| − | + | if currentProgr > 0 and currentProgr < 100 then | |
| − | + | stepWidth = width / currentProgr -- Setting the stepWidth in case the zoom may not have been completed | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
| + | |||
| + | zoomEndProgress = 100 | ||
| + | |||
| + | zooming = true | ||
| + | |||
| + | zoomingIn = true | ||
| + | zoomedIn = false | ||
| + | zoomedOut = false | ||
| + | zoomingOut = false | ||
| + | |||
| + | if not defaultZoomSet then | ||
| + | normalFOV = cam.FOV | ||
| + | defaultZoomSet = true | ||
| + | end | ||
| + | zoom = normalFOV * zoomValue | ||
| + | |||
| + | ba.setControlMode(LUA_FULL_CONTROLS) | ||
| + | |||
| + | cam:setFOV(zoom,transitionTime,transitionTime / 2,transitionTime / 4) | ||
end | end | ||
end | end | ||
| Line 45: | Line 167: | ||
] | ] | ||
| − | $On Key Released: [ | + | $KeyPress: d |
| + | $State: GS_STATE_GAME_PLAY | ||
| + | $On Key Released: | ||
| + | [ | ||
if runZoomScript then | if runZoomScript then | ||
if zooming then | if zooming then | ||
plr = hv.Player | plr = hv.Player | ||
if plr:isValid() then | if plr:isValid() then | ||
| − | if | + | if cam:isValid() then |
| − | + | ||
| − | if | + | stepWidth = width / 100 |
| − | + | ||
| − | + | zoomingIn = false | |
| + | zoomingOut = true | ||
| + | zoomedIn = false | ||
| + | zoomedOut = false | ||
| + | |||
| + | if currentProgr > 0 then | ||
| + | zoomEndProgress = currentProgr -- Save the progress we made as we begin to zoom back | ||
end | end | ||
| + | |||
| + | cam:setFOV(normalFOV,transitionTime,transitionTime / 2,transitionTime / 4) | ||
| + | |||
| + | ba.setControlMode(NORMAL_CONTROLS) | ||
end | end | ||
end | end | ||
Revision as of 13:20, 17 July 2010
This script enables you to zoom your view so precise aiming is easier.
Table Entry
- To use create an file called zoom-sct.tbm in your date/tables directory and paste the following code into it:
#Conditional Hooks
$Application: FS2_Open
$On Mission Start:
[
-- Some things to tell the script to do something and some default values
runZoomScript = true
zoomValue = 0.1
normalFOV = 0.75
transitionTime = 2
zooming = false
defaultZoomSet = false
cameraSet = false
-- Setting the values to be used in the $On Frame: hook
currentProgr = 0
zoomEndProgress = 100
zoomingIn = false
zoomedIn = false
zoomingOut = false
zoomedOut = true
-- Constants for drawing the progress
offset_x = 30
offset_y = 70
heigth = 8
width = 80
stepWidth = width / 100
-- Settings for the sensitivity
sensitivity = 0.25
-- The camera which is used for zooming (is initialized in the first $Key Pressed: hook)
cam = nil
function getProgressString()
local progressString = "Zooming"
if zoomingIn then
progressString = progressString .. " in:"
elseif zoomingOut then
progressString = progressString .. " out:"
elseif zoomedIn then
progressString = "Zoomed in:"
elseif zoomedOut then
progressString = "Zoomed out:"
else
progressString = "Zoomed:"
end
return progressString
end
function handleControls()
if zoomingIn or zoomedIn then
local ci = ba.getControlInfo()
ci.Pitch = ci.Pitch * sensitivity
ci.Heading = ci.Heading * sensitivity
ci.Bank = ci.Bank * sensitivity
end
end
function drawProgress()
progressString = getProgressString()
local stringWidth = gr.getStringWidth(progressString);
gr.drawString(progressString,30,70)
local realOffset_x = offset_x + stringWidth + 10
gr.drawRectangle(realOffset_x, offset_y,realOffset_x + width, offset_y + heigth, zoomedIn)
local frameTime = ba.getFrametime()
local progressLineOffset_x = realOffset_x + stepWidth * currentProgr
gr.drawLine(progressLineOffset_x, offset_y, progressLineOffset_x, offset_y + heigth)
local thisFrameProg = (frameTime / transitionTime) * zoomEndProgress
if zoomingIn then
currentProgr = currentProgr + thisFrameProg
if currentProgr >= 100 then
currentProgr = 100
zoomingIn = false
zoomedIn = true
end
elseif zoomingOut then
currentProgr = currentProgr - thisFrameProg
if currentProgr <= 0 then
currentProgr = 0
zoomedOut = true
zoomingOut = false
zooming = false
end
end
gr.drawString("Current: " .. currentProgr)
gr.drawString("Frame: " .. thisFrameProg)
gr.drawString("Zoom End: " .. zoomEndProgress)
end
]
$Application: FS2_Open
$On Mission End:
[
if runZoomScript then
runZoomScript = false
if defaultZoomSet then
cam:setFOV(normalFOV) -- Resetting the FOV in case we have not zoomed out completely
end
end
]
$Application: FS2_Open
$On Frame:
[
if runZoomScript then
if zooming then
handleControls()
drawProgress()
end
end
]
$KeyPress: d
$State: GS_STATE_GAME_PLAY
$On Key Pressed:
[
if runZoomScript then
if not cameraSet then
if #gr.Cameras > 0 then
cam = gr.Cameras[1]
end
end
if not zooming then
plr = hv.Player
if plr:isValid() then
if cam:isValid() then
if currentProgr > 0 and currentProgr < 100 then
stepWidth = width / currentProgr -- Setting the stepWidth in case the zoom may not have been completed
end
zoomEndProgress = 100
zooming = true
zoomingIn = true
zoomedIn = false
zoomedOut = false
zoomingOut = false
if not defaultZoomSet then
normalFOV = cam.FOV
defaultZoomSet = true
end
zoom = normalFOV * zoomValue
ba.setControlMode(LUA_FULL_CONTROLS)
cam:setFOV(zoom,transitionTime,transitionTime / 2,transitionTime / 4)
end
end
end
end
]
$KeyPress: d
$State: GS_STATE_GAME_PLAY
$On Key Released:
[
if runZoomScript then
if zooming then
plr = hv.Player
if plr:isValid() then
if cam:isValid() then
stepWidth = width / 100
zoomingIn = false
zoomingOut = true
zoomedIn = false
zoomedOut = false
if currentProgr > 0 then
zoomEndProgress = currentProgr -- Save the progress we made as we begin to zoom back
end
cam:setFOV(normalFOV,transitionTime,transitionTime / 2,transitionTime / 4)
ba.setControlMode(NORMAL_CONTROLS)
end
end
end
end
]
#End