--Global variable
--set touch move parameters
Sensitivity = 0.005
--invert = -1 -> is inverted
Invert = 1
Threshold=3.5
-- Plane Contrain
Xmin = -0.87
Xmax = 0.87
-- Plane Top Bottom Constrain
Ymin = -1.50
Ymax = 1.30
--filter movement so plane will only move towards center if touchs edge
function edgeMoveFilter(limitSignal,oldX)
if limitSignal == -1 and oldX > 0 then
return oldX
elseif limitSignal == -1 and oldX < 0 then
return 0
elseif limitSignal == 1 and oldX >0 then
return 0
elseif limitSignal ==1 and oldX <0 then
return oldX
end
return 0
end
--check if over boundary on Y axis
function YoverLimit(obj,cameraObj)
local vec3 = obj:getPosition()
local cameraV = cameraObj:getLinearVelocity()
--get camero position
local cameraP = cameraObj:getPosition()
--calculate bottom edge ;ocation
local nextYmin = cameraP.y+Ymin
--calculate top edge location
local nextYmax = cameraP.y+Ymax
--check whether plane is on edge and return signals
if vec3.y < nextYmin then
return -1
elseif vec3.y > nextYmax then
return 1
else
return 0
end
end
--endNew-----------
function XoverLimit(obj)
local vec3 = obj:getPosition()
if vec3.x < Xmin then
return -1
elseif vec3.x > Xmax then
return 1
else
return 0
end
end
function printPosition(obj)
local vec3 = obj:getPosition()
dPrintf("position x: " .. vec3.x)
dPrintf("position y: " .. vec3.y)
dPrintf("position z: " .. vec3.z)
end
function velocityCap(v,vmax)
if (v>vmax) then
return vmax
elseif (v < -vmax) then
return -vmax
else return v
end
end
******planeTouchMove.lua****************
mouse=OgreKit.Mouse()
scene = OgreKit.getActiveScene()
play = scene:getObject("plane")
--new--get camera objcet
camera = scene:getObject("Camera")
--end new---------------------------
logicM = OgreKit.LogicManager()
myLogicObject = logicM:getObject("plane")
mySensor = myLogicObject:getSensor("Collision")
maxVelocity=0.08
mouse:capture()
--print current plane posistion on screen
--printPosition(play)
--using threshold to filter out unwanted small touch movement
if ((mouse.xrel>Threshold or mouse.xrel<-Threshold)or(mouse.yrel>Threshold or mouse.yrel<-Threshold)and (not(play.touchBoundary))) then
velocityY=velocityCap((mouse.yrel) * Sensitivity, maxVelocity)
velocityX=velocityCap((mouse.xrel) * Sensitivity, maxVelocity)
--new----------------------
--check if plane over screen boundary
limitSignalX = XoverLimit(play)
limitSignalY = YoverLimit(play,camera)
--the X Y directions are swap as the screen is in landscape
if limitSignalX==0 and limitSignalY == 0 then
--when plane is inside boundary
play:translate(-velocityY* Invert,-velocityX * Invert,0)
else
--when plane touches boundary it can only move away from boundrary
newY = edgeMoveFilter(limitSignalX,-velocityY * Invert)
newX = edgeMoveFilter(limitSignalY,-velocityX * Invert)
play:translate(newY,newX,0)
end
--end new---------------------
end