I wrote the 4-rays method:
BEGIN>>>
import bge
from bge import render
scene = bge.logic.getCurrentScene()
#--------------------------------------------------------------------------------------------------------------------------------------#
def oneTrue(r1, dir1):
#_OBJECTS:
camera = scene.objects["Camera"]
empty = scene.objects["empty"]
#_APPLYING POSITION:
camera.worldPosition = r1.hitPosition
camera.localPosition.x += dir1[0]
camera.localPosition.z += dir1[1]
#--------------------------------------------------------------------------------------------------------------------------------------#
def twoTrue(r1, dir1, r2, dir2):
#_OBJECTS:
camera = scene.objects["Camera"]
empty = scene.objects["empty"]
#_APPLYING ROTATION:
if r1.hitPosition.y <= r2.hitPosition.y:
camera.worldPosition = r1.hitPosition
camera.localPosition.x += dir1[0]
camera.localPosition.z += dir1[1]
else:
camera.worldPosition = r2.hitPosition
camera.localPosition.x += dir2[0]
camera.localPosition.z += dir2[1]
#--------------------------------------------------------------------------------------------------------------------------------------#
def threeTrue(r1, dir1, r2, dir2, r3, dir3):
#_OBJECTS:
camera = scene.objects["Camera"]
empty = scene.objects["empty"]
#_APPLYING ROTATION:
if (r1.hitPosition <= r2.hitPosition) and (r1.hitPosition <= r3.hitPosition):
camera.worldPosition = r1.hitPosition
camera.localPosition.x += dir1[0]
camera.localPosition.z += dir1[1]
elif (r2.hitPosition <= r3.hitPosition):
camera.worldPosition = r2.hitPosition
camera.localPosition.x += dir2[0]
camera.localPosition.z += dir2[1]
else:
camera.worldPosition = r3.hitPosition
camera.localPosition.x += dir3[0]
camera.localPosition.z += dir3[1]
#--------------------------------------------------------------------------------------------------------------------------------------#
def fourTrue(r1, dir1, r2, dir2, r3, dir3, r4, dir4):
#_OBJECTS:
camera = scene.objects["Camera"]
empty = scene.objects["empty"]
#_APPLYING ROTATION:
if (r1.hitPosition <= r2.hitPosition) and (r1.hitPosition <= r2.hitPosition) and (r1.hitPosition <= r4.hitPosition):
camera.worldPosition = r1.hitPosition
camera.localPosition.x += dir1[0]
camera.localPosition.z += dir1[1]
elif (r2.hitPosition <= r3.hitPosition) and (r2.hitPosition <= r4.hitPosition):
camera.worldPosition = r2.hitPosition
camera.localPosition.x += dir2[0]
camera.localPosition.z += dir2[1]
elif (r3.hitPosition <= r4.hitPosition):
camera.worldPosition = r3.hitPosition
camera.localPosition.x += dir3[0]
camera.localPosition.z += dir3[1]
else:
camera.worldPosition = r4.hitPosition
camera.localPosition.x += dir4[0]
camera.localPosition.z += dir4[1]
#OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO#
def main():
#_SENSORS:
ray1 = scene.objects["hátra_ray1_alapja"].getCurrentController().sensors["ray_backwards1"]
ray2 = scene.objects["hátra_ray2_alapja"].getCurrentController().sensors["ray_backwards2"]
ray3 = scene.objects["hátra_ray3_alapja"].getCurrentController().sensors["ray_backwards3"]
ray4 = scene.objects["hátra_ray4_alapja"].getCurrentController().sensors["ray_backwards4"]
#_OBJECTS:
camera = scene.objects["Camera"]
empty = scene.objects["empty"]
#_SETTING RAY DIRECTION: (the difference from "Camera's" position as [x, z] coordinates
dir1 = [-0.6, 0.4]
dir2 = [0.6, 0.4]
dir3 = [-0.6, -0.4]
dir4 = [0.6, -0.4]
#_SETTING RAY ACTIVITY:
r1 = False
r2 = False
r3 = False
r4 = False
if ray1.positive:
r1 = True
if ray2.positive:
r2 = True
if ray3.positive:
r3 = True
if ray4.positive:
r4 = True
#_APPLYING POSITION:
if r1 and not (r2 and r3 and r4): #_active rays: 1
oneTrue(ray1, dir1)
elif r2 and not (r1 and r3 and r4): #_active rays: 2
oneTrue(ray2, dir2)
elif r3 and not (r1 and r2 and r4): #_active rays: 3
oneTrue(ray3, dir3)
elif r4 and not (r1 and r2 and r3): #_active rays: 4
oneTrue(ray4, dir4)
elif r1 and r2 and not (r3 and r4): #_active rays: 1, 2
twoTrue(ray1, dir1, ray2, dir2)
elif r1 and r3 and not (r2 and r4): #_active rays: 1, 3
twoTrue(ray1, dir1, ray3, dir3)
elif r1 and r4 and not (r2 and r3): #_active rays: 1, 4
twoTrue(ray1, dir1, ray4, dir4)
elif r2 and r3 and not (r1 and r4): #_active rays: 2, 3
twoTrue(ray2, dir2, ray3, dir3)
elif r2 and r4 and not (r1 and r3): #_active rays: 2, 4
twoTrue(ray2, dir2, ray3, dir3)
elif r3 and r4 and not (r1 and r2): #_active rays: 3, 4
twoTrue(ray3, dir3, ray4, dir4)
elif r1 and r2 and r3 and not r4: #_active rays: 1, 2, 3
threeTrue(ray1, dir1, ray2, dir2, ray3, dir3)
elif r1 and r2 and r4 and not r3: #_active rays: 1, 2, 4
threeTrue(ray1, dir1, ray2, dir2, ray4, dir4)
elif r1 and r3 and r4 and not r2: #_active rays: 1, 3, 4
threeTrue(ray1, dir1, ray3, dir3, ray4, dir4)
elif r2 and r3 and r4 and not r1: #_active rays: 2, 3, 4
threeTrue(ray2, dir2, ray3, dir3, ray4, dir4)
elif r1 and r2 and r3 and r4: #_active rays: 1, 2, 3, 4
fourTrue(ray1, dir1, ray2, dir2, ray3, dir3, ray4, dir4)
else:
camera.worldPosition = empty.worldPosition
camera.localPosition -= ray1.range
main()
<<<END
But I have a problem:
#_SENSORS:
ray1 = scene.objects["hátra_ray1_alapja"].getCurrentController().sensors["ray_backwards1"]
ray2 = scene.objects["hátra_ray2_alapja"].getCurrentController().sensors["ray_backwards2"]
ray3 = scene.objects["hátra_ray3_alapja"].getCurrentController().sensors["ray_backwards3"]
ray4 = scene.objects["hátra_ray4_alapja"].getCurrentController().sensors["ray_backwards4"]
This just doesn’t work, since those are KX_GameObject-s. If I write it as “bge.logic”, instead of eg. “scene.objects[“hátra_ray1_alapja”]” then it doesn’t work, since those are different objects having those rays in their logics.
So what should I do in order to obtain a sensor in a script that is under an other object’s logic?