Somebody can help me with this?
The object 10 is the "player" and it tries to avoid the object 2, that is the "enemy" the AI try to identify. For some reason it is working bizarrely.
for y = 0 to 10 step 2
line 0,y,10,y,rgb(255,255,255)
Next
get image 2,0,0,10,10,1
set text size 40
sync on
sync rate 60
type data_achievement
id as integer
distance as integer
endtype
type sensor
front as data_achievement
left as data_achievement
right as data_achievement
down as data_achievement
action as integer
endtype
enemy as sensor
Color Backdrop 0,0
Make Camera 1
Set Camera fov 1,170
set camera range 1,1,100
Set Camera to image 1,1,640,480
Color Backdrop 1,rgb(255,0,0)
Make Object box 1,100,50,200
Make Object box 2,90,40,300
Move Object down 1,10
perform csg difference 1,2
Delete Object 2
Make Object cube 10,5
position object 10,0,0,0 : point object 10,0,0,100
texture object 1,2
do
drop()
ai()
Set Camera to follow 0,object position x(10),object position y(10),object position z(10),0,30,20,1,0
scroll object texture 1,0,.01
if enemy.front.id > 1 then text 0,0,str$(enemy.front.id)
sync
Loop
function see()
enemy.front.id = Pick Object(1,320,240,1,2)
enemy.front.distance=Get Pick Distance()
enemy.left.id = Pick Object(1,0,240,1,2)
enemy.left.distance=Get Pick Distance()
enemy.right.id =Pick Object(1,640,240,1,2)
enemy.right.distance=Get Pick Distance()
endfunction
function drop()
if object exist(2) = 0 : make object cube 2,10 ; position object 2,rnd(80)-40,0,100 : point object 2,object position x(2),object position y(2),-object position z(2) : endif
if object exist(2) = 1
move object 2,1
if object position z(2) <= -20 or object hit(2,10) = 1 then delete object 2
Endif
Endfunction
function ai()
//move range
left = enemy.left.distance
right= enemy.right.distance
if enemy.front.id > 1
if object position x(enemy.front.id) = object position x(10) then enemy.action = 1
if object position x(enemy.front.id) < object position x(10) then enemy.action = 2
if object position x(enemy.front.id) > object position x(10) then enemy.action = 3
else
enemy.action = 1
endif
if enemy.action = 1 and enemy.front.distance <= 30
if left < right then enemy.action = 2
if left > right then enemy.action = 3
if left = right then enemy.action = rnd(1)+2
endif
if enemy.action = 2 then move object right 10,1
if enemy.action = 3 then move object left 10,1
if action = 4 and left > 5 then enemy.action = 2
if action = 2 and right > 5 then enemy.action = 3
Endfunction
[size=+2]Forever and one[/size]