All pastes #827156 Raw Edit

Something

public text v1 · immutable
#827156 ·published 2007-12-21 16:38 UTC
rendered paste body
objectdef brain
{
variable point3f Sav
variable uint Thought=0
variable point3f Destination 
variable bool Iam=0
variable int WaitForIt=${Math.Calc[${LavishScript.RunningTime}+(250*1)]}

method Initialize()
{
This:ImHere
;Self Test
This:SelfTest

}

method ErrorCycle()
{
;Upper brain needs a nap
Controlo.ErrorON:Set[1]
	do
	{
	}
	while ${Script[robot](exists)}
Controlo.ErrorON:Set[0]
}

method SelfTest()
{
echo Right ${body.Right5metersBlocked}

echo Left ${body.Left5metersBlocked}

echo Eyes ${eyes.Blocked}
}

	
method	PureImpulse()
{
if ${Iam}
Iam:Set[0]
}

method Motivate(float gohereX,float gohereY,float gohereZ)
{
echo GOX ${gohereX} GOY ${gohereY}
Destination.X:Set[${gohereX}]
Destination.Y:Set[${gohereY}]
Destination.Z:Set[${gohereZ}]
;face ${gohereX} ${gohereY}
Iam:Set[1]


}


	method Think()
	{
	
	if ${Math.Distance[${Me.X},${Me.Y},${Me.Z},${Destination.X},${Destination.Y},${Destination.Z}]}<5
		{
		
		Iam:Set[0]
		
	}
		
		;if ${Math.Distance[${Me.X},${Me.Y},${Me.Z},${Sav.X},${Sav.Y},${Sav.Z}]}>5
		;	{
			
		;	This:ImHere
		;	}
		
		
		
		
		
if ${body.moving}&&!${Thought}==0
	{
	
	
		if ${mybrain.Iam}
		{
			
			
			move forward
			}
			Thought:Set[0]
			echo "FORWARD!"
			return
	}
	
		
	if !${body.moving}&&!${Thought}==1
	  {
		if ${mybrain.Iam}
		{
	   move backward
	   }	   
	    echo "BACK!"
	    Thought:Set[1]
	    
	    
	   
	  }
	
	
	if ${Thought}==0&&!${body.moving}
		{
			
			
		if !${body.Left5metersBlocked}
		{
		echo "Back right"
		Face -heading ${Math.Calc[${Me.Heading}-10]}
		
		}
		
		if !${body.Right5metersBlocked}
		{
		Face -heading ${Math.Calc[${Me.Heading}+15]}
		echo "back left"
		
	}
		
	if ${body.Right5metersBlocked}&&${body.Left5metersBlocked}
	{
	Face -heading ${Math.Calc[${Me.Heading}-180*100%36000/100]}
  
	}
		Thought:Set[0]
		return
	}
	
	
	
	if ${eyes.Blocked}&&${Iam}
	{
	
	if !${body.Ground}&&${Iam}
	{
	echo "NO FUCKING GROUND"
	move -stop
	;face ${Destination.X} ${Destination.Y}
	
	}
	
	
	if !${body.Left5metersBlocked}
	{
	;move left
	;if !${body.Ground}
	Face -heading ${Math.Calc[${Me.Heading}-10]}
	;move left
	return
	}
	
	if !${body.Right5metersBlocked}
	{
	;move right
	Face -heading ${Math.Calc[${Me.Heading}+10]}
	;if !${body.Ground}
	;Face -heading ${Math.Calc[${Me.Heading}+50]}
	;move right
	Thought:Set[1]
	return
	
	
	}
	
	if ${body.Right5metersBlocked}&&${body.Left5metersBlocked}
	{
	;variable int reverse
	;reverse:Set[${Math.Calc[${Me.Heading}-180]}]
	;if ${reverse}<0
	;reverse:Set[${Math.Calc[${reverse}+360]}]
	;echo ${reverse}
	;move -stop
	;Face -heading ${Math.Calc[${Me.Heading}+10]}
	;face ${Destination.X} ${Destination.Y}
	Face -heading ${Math.Calc[${Me.Heading}-180]}
	;wowpress jump
	;Script[fnrobot]:End
	
	return
	}

	
	}
	
	
	;
	;Hrm where is the destination
	
	 ;if ${LavishScript.RunningTime}<${WaitForIt}
	; {
	 ;echo "in ${Time.Timestamp}"
	 
	
	
		;if ${Math.Distance[${Me.X},${Me.Y},${Me.Z},${SavX},${SavY},${SavZ}]}>7
		;{
		;Face -heading ${Math.Calc[${Me.Heading}+3]}
		;This:ImHere
		;}
		;look ahead turn random left or right if blocked
		
		
		
		
		
		;WaitForIt:Set[${Math.Calc[${LavishScript.RunningTime}+(1000*1)]}]
		;}
		
		 
	
	}
	 
	method ImHere()
	{
	Sav.X:Set[${Me.X}]
	Sav.Y:Set[${Me.Y}]
	Sav.Z:Set[${Me.Z}]

	}
	
}
objectdef bodyo
{
variable bool moving
variable point3f StoredLocation
variable uint FeelAhead=3
	
	method Initialize()
	{
	This:ImHere
	}
	method Feel()
	{
	
	;echo ${Me.X} ${Me.Y}
	; ${Math.Distance[${Me.X},${Me.Y},${This.StoredLocation.X},${This.StoredLoction.Y}]}
			if ${Math.Distance[${Me.X},${Me.Y},${StoredLocation.X},${StoredLocation.Y}]}>1
			{
			
			This.moving:Set[1]
			StoredLocation.X:Set[${Me.X}]
			StoredLocation.Y:Set[${Me.Y}]
			StoredLocation.Z:Set[${Me.Z}]
			mybrain.WaitForIt:Set[${Math.Calc[${LavishScript.RunningTime}+(250*1)]}]
		  }
		  else
		  {
		  moving:Set[0]
		  }
	  }
	  
	  member Left5metersBlocked()
	  {
	  
	  variable point3f FeelPoint
	  variable float bearing 
	  bearing:Set[${Math.Calc[${Me.Heading}-45]}]
			if ${bearing}<360
	  	bearing:Set[${Math.Calc[${bearing}+360]}]
	   FeelPoint.X:Set[ ${Me.X} + ${Math.Cos[${Math.Calc[${bearing}]}].Precision[6]} * ${FeelAhead} ]
		 FeelPoint.Y:Set[ ${Me.Y} - ${Math.Sin[${Math.Calc[${bearing}]}].Precision[6]} * ${FeelAhead} ]
		 
		 ;echo Left X :${FeelPoint.X} Y : ${FeelPoint.Y} heading ${Me.Heading} Distance ${Math.Distance[${Me.X},${Me.Y},${FeelPoint.X},${FeelPoint.Y}]}
		 
		   if ${Me.IsPathObstructed[${FeelPoint.X},${FeelPoint.Y},${Math.Calc[${Me.Z}]},10]} 
	  {
	  echo "Left BLIND"
	  return 1
	  
	  }
	  ;echo "I SEE"
	  return 0
		 
	  }
	  
	  member Right5metersBlocked()
	  {
	  
	  variable point3f FeelPoint
	  variable float bearing 
	  variable float radians
	 
	  bearing:Set[${Math.Calc[${Me.Heading}+45]}]
	  if ${bearing}>360
	  	bearing:Set[${Math.Calc[${bearing}-360]}]
	 
	 

	   FeelPoint.X:Set[ ${Me.X} + ${Math.Cos[${Math.Calc[${bearing}]}].Precision[6]} * ${FeelAhead} ]
		 FeelPoint.Y:Set[ ${Me.Y} - ${Math.Sin[${Math.Calc[${bearing}]}].Precision[6]} * ${FeelAhead} ]
		 
		 echo Right X :${FeelPoint.X} Y : ${FeelPoint.Y} heading ${Me.Heading} new bearing ${bearing} Distance ${Math.Distance[${Me.X},${Me.Y},${FeelPoint.X},${FeelPoint.Y}]}
		 
		if ${Me.IsPathObstructed[${FeelPoint.X},${FeelPoint.Y},${Math.Calc[${Me.Z}]},10]} 
	  {
	  echo "Right BLIND"
	  return 1
	  
	  }
	  echo "Right Good"
	  return 0
		 
		 ;Script[test]:End
	  }
	  member Ground()
	  {
	  
	  variable point3f FeelPoint
	 
	 

	   FeelPoint.X:Set[ ${Me.X} + ${Math.Cos[${Me.Heading}].Precision[6]} * 5 ]
		 FeelPoint.Y:Set[ ${Me.Y} - ${Math.Sin[${Me.Heading}].Precision[6]} * 5 ]
		 
		 echo Right X :${FeelPoint.X} Y : ${FeelPoint.Y} heading ${Me.Heading} new bearing ${bearing} Distance ${Math.Distance[${Me.X},${Me.Y},${FeelPoint.X},${FeelPoint.Y}]}
		 
		if ${Me.IsPathObstructed[${FeelPoint.X},${FeelPoint.Y},${Math.Calc[${Me.Z}-3]},5]} 
	  {
	  echo "Heres ground"
	  return 1
	  
	  }
	  echo "no ground"
	  return 0
		 
		 ;Script[test]:End
	  }
	  
	  method ImHere()
	  {
	  StoredLocation.X:Set[${Me.X}]
		StoredLocation.Y:Set[${Me.Y}]
		StoredLocation.Z:Set[${Me.Z}]
	  }
	  
	;ok give me a chance to move
		
	
}
objectdef consciouso
{
;I want cheese
;whats the map

member Left(float X,float Y)
	  {
	  
	  variable point3f FeelPoint
	  variable float bearing 
	  bearing:Set[${Math.Calc[${Me.Heading}-45]}]
			if ${bearing}<360
	  	bearing:Set[${Math.Calc[${bearing}+360]}]
	   FeelPoint.X:Set[ ${X} + ${Math.Cos[${Math.Calc[${bearing}]}].Precision[6]} * ${Look} ]
		 FeelPoint.Y:Set[ ${Y} - ${Math.Sin[${Math.Calc[${bearing}]}].Precision[6]} * ${Look} ]
		 
		 ;echo Left X :${FeelPoint.X} Y : ${FeelPoint.Y} heading ${Me.Heading} Distance ${Math.Distance[${Me.X},${Me.Y},${FeelPoint.X},${FeelPoint.Y}]}
		 
		   if ${Me.IsPathObstructed[${FeelPoint.X},${FeelPoint.Y},${Math.Calc[${Me.Z}]},10]} 
	  {
	  echo "Left BLIND"
	  return 1
	  
	  }
	  ;echo "I SEE"
	  return 0
		 
	  }
	  
	  member Right(float X,float Y)
	  {
	  
	  variable point3f FeelPoint
	  variable float bearing 
	  variable float radians
	 
	  bearing:Set[${Math.Calc[${Me.Heading}+45]}]
	  if ${bearing}>360
	  	bearing:Set[${Math.Calc[${bearing}-360]}]
	 
	 

	   FeelPoint.X:Set[ ${Me.X} + ${Math.Cos[${Math.Calc[${bearing}]}].Precision[6]} * ${Look} ]
		 FeelPoint.Y:Set[ ${Me.Y} - ${Math.Sin[${Math.Calc[${bearing}]}].Precision[6]} * ${Look} ]
		 
		 echo Right X :${FeelPoint.X} Y : ${FeelPoint.Y} heading ${Me.Heading} new bearing ${bearing} Distance ${Math.Distance[${Me.X},${Me.Y},${FeelPoint.X},${FeelPoint.Y}]}
		 
		if ${Me.IsPathObstructed[${FeelPoint.X},${FeelPoint.Y},${Math.Calc[${Me.Z}]},10]} 
	  {
	  echo "Right BLIND"
	  return 1
	  
	  }
	  echo "Right Good"
	  return 0
		 
		
	  }
	  member ahead(float X,float Y)
	  {
	  SeePoint.X:Set[ ${X} + ${Math.Cos[${Math.Calc[${Me.Heading}]}].Precision[6]} * ${Look} ]
	  SeePoint.Y:Set[ ${Y} - ${Math.Sin[${Math.Calc[${Me.Heading}]}].Precision[6]} * ${Look} ]
	  }
;move towards the cheese please

}

objectdef eyeso
{
variable uint LookAhead=1
variable point3f SeePoint

	member Blocked()
	{
	;variable uint i=${LookAhead}
	;do
	;{
	SeePoint.X:Set[ ${Me.X} + ${Math.Cos[${Math.Calc[${Me.Heading}]}].Precision[6]} * ${LookAhead} ]
	SeePoint.Y:Set[ ${Me.Y} - ${Math.Sin[${Math.Calc[${Me.Heading}]}].Precision[6]} * ${LookAhead} ]
	 ;${i:Dec}
	 ;}
	 ;while ${Me.IsPathObstructed[${SeePoint.X},${SeePoint.Y},${Math.Calc[${Me.Z]},5]}&&${i}<=${LookAhead}&&${i}>0
	 
	 ;if ${i}<4&&${i<0}
	 ;{
	 	;face ${SeePoint.X} ${SeePoint.Y}
	 	;echo Front X :${SeePoint.X} Y : ${SeePoint.Y} heading ${Me.Heading} Distance ${Math.Distance[${Me.X},${Me.Y},${SeePoint.X},${SeePoint.Y}]}
	 	;return
	 	;}
	  
	  
	  if ${Me.IsPathObstructed[${SeePoint.X},${SeePoint.Y},${Math.Calc[${Me.Z}]},10]} 
	  {
	  ;look up
	  if !${Me.IsPathObstructed[${SeePoint.X},${SeePoint.Y},${Math.Calc[${Me.Z}+7]},10]} 
	  {
	  ;move -stop
	  
	  echo "INCLINE"
	  
	  return 2
	  }
	  ;Script[fnrobot]:End
	  	
	  echo "BLIND"
	  return 1
	  
	  }
	  ;echo "I SEE"
	  return 0
	
		
	
	}
}



function main()
{
declare Nerves string global
declare mybrain brain global
declare body bodyo global
;declare Destination point3f global
declare eyes eyeso global

;Destination:Set[10697.55,764.85,1321.47]





Event[OnFrame]:AttachAtom[Pulseon]
 
 do
 {

 }
 while 1
 



}

function atexit()
{
move -stop
}

atom(global) Pulseon()
{

mybrain:Think
conscious:Drive
ears:Balance
mybrain:Do
mybrain:Move
eyes:Look

if ${LavishScript.RunningTime}>${mybrain.WaitForIt}
body:Feel

}