#### Topic: rotate the object?

hi all!
how to rotate the object in the direction of another entity only on the Y axis (lua)?

#### Re: rotate the object?

You can use the look-at behavior :
- create an invisible object called "dummy"
- add a look-at behavior to your first object and set the target to the dummy
- in script, set the dummy X and Z position to be the X and Z position of the object you want to point at
- set the dummy Y position to 0 or to your first object Y position

Or use some math in pure lua, but it's more complicated (this example rotate on Z axis) :

``````-- get 2d vector length
function getLength2d(vec)

return math.sqrt(vec[1]*vec[1] + vec[2]*vec[2])

end

-- normalize 2d vector
function normalize2d(vec)

length = getLength2d(vec)
vec[1] = vec[1] / length
vec[2] = vec[2] / length
return vec

end

-- lookAt
function lookAt(object, dir, rotSpeed)

-- compute object X dir and Y dir
rot = getRotation(object)

sinZ = math.sin(zAngle)
cosZ = math.cos(zAngle)

YDir = normalize2d({sinZ, -cosZ})
XDir = {-YDir[2], YDir[1]}

-- dot products for orientation and angle
ori = (dir[1]*XDir[1] + dir[2]*XDir[2])
angle = math.acos(dir[1]*YDir[1] + dir[2]*YDir[2])

if ori < 0 then
angle = - angle
end

rotate(object, {0, 0, 1}, math.deg(angle) * rotSpeed)

end``````

#### Re: rotate the object?

Thanks anael! This is exactly what I need.

#### Re: rotate the object?

I have not function lookAt(). What am I doing wrong?
--onSceneUpdate()
dir = getPosition(object2)
lookAt(object1, dir, 1)

Last edited by ant0n (2014-07-07 09:44:16)

#### Re: rotate the object?

look-at is a behavior :
select your object in the editor > go to behavior tab > add a look-at behavior > set the name of the target

(except is you use the script I gave before, in this case copy/paste it on top of your script)

#### Re: rotate the object?

I don't use behavior, I use Lua function.
I copied all three functions:

``````function getLength2d(vec)
...
end
function normalize2d(vec)
...
end
function lookAt(object, dir, rotSpeed)
...
end
obj1 = getObject("obj1")
obj2 = getObject("obj2")

function onSceneUpdate()
dir = getPosition(obj2)
lookAt(obj1, dir, 1)
end``````

nothing happens.

#### Re: rotate the object?

``````obj1 = getObject("obj1")
obj2 = getObject("obj2")

function onSceneUpdate()

dir = normalize(getPosition(obj2) - getPosition(obj1))
lookAt(obj1, dir, 1)

end``````