143 lines
4.7 KiB
Python
143 lines
4.7 KiB
Python
|
import rxactor
|
||
|
|
||
|
# Flockinfo not working at the moment. - Tuco
|
||
|
|
||
|
import sys
|
||
|
import clr
|
||
|
asm = clr.LoadAssemblyByName('OpenSim.Region.ScriptEngine.Common')
|
||
|
Vector3 = asm.OpenSim.Region.ScriptEngine.Common.LSL_Types.Vector3
|
||
|
|
||
|
import random
|
||
|
import math
|
||
|
import sampleflockmember
|
||
|
|
||
|
class FlockInfo(rxactor.Actor):
|
||
|
|
||
|
def GetScriptClassName():
|
||
|
return "sampleflockinfo.FlockInfo"
|
||
|
|
||
|
def EventCreated(self):
|
||
|
super(self.__class__,self).EventCreated()
|
||
|
self.StartLoc = Vector3(0,0,0)
|
||
|
self.BoidsInFlock = 0
|
||
|
self.BoidMinDist = 1.33
|
||
|
self.BoidMaxSpeed = 20
|
||
|
|
||
|
self.Center = Vector3(0,0,0)
|
||
|
self.AVGVel = Vector3(0,0,0)
|
||
|
self.TargetVec = Vector3(0,0,0)
|
||
|
|
||
|
self.ModifyCenterBias = 1.0
|
||
|
self.CenterBiasCounter = 0
|
||
|
self.MyBoids = []
|
||
|
self.MyBoidIds = []
|
||
|
self.bActive = False
|
||
|
|
||
|
def EventTouch(self,vAvatar):
|
||
|
try:
|
||
|
if not self.bActive:
|
||
|
self.StartLoc = self.llGetPos()
|
||
|
self.SetNewTarget()
|
||
|
self.BoidsInFlock = 0
|
||
|
del self.MyBoidIds[:]
|
||
|
|
||
|
for i in range(0, 4):
|
||
|
tempang = random.random()*2*math.pi
|
||
|
x = math.sin(tempang) * 5
|
||
|
y = math.cos(tempang) * 5
|
||
|
spawnloc = self.llGetPos() + Vector3(x,y,0)
|
||
|
tempboidid = self.SpawnActor(spawnloc,0,True,"sampleflockmember.FlockMember")
|
||
|
if(tempboidid != 0):
|
||
|
self.MyBoidIds.insert(0,tempboidid)
|
||
|
else:
|
||
|
print "Failed spawning flockmember!!!!!!!!!!"
|
||
|
|
||
|
for j in self.MyBoidIds:
|
||
|
tempboid = self.MyWorld.AllActors[j]
|
||
|
self.AddToFlock(tempboid)
|
||
|
|
||
|
for j in self.MyBoidIds:
|
||
|
tempboid = self.MyWorld.AllActors[j]
|
||
|
self.AddToFlock(tempboid)
|
||
|
|
||
|
self.BoidsInFlock = len(self.MyBoids)
|
||
|
self.SetTimer(0.1,True)
|
||
|
|
||
|
for k in self.MyBoids:
|
||
|
k.Activate()
|
||
|
|
||
|
self.bActive = True
|
||
|
else:
|
||
|
while len(self.MyBoids) > 0:
|
||
|
self.RemoveFromFlock(self.MyBoids[0])
|
||
|
|
||
|
self.SetTimer(0,False)
|
||
|
self.bActive = False
|
||
|
except:
|
||
|
print "FlockInfo.EventTouch", sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]
|
||
|
|
||
|
def EventTimer(self):
|
||
|
self.CountAVGs()
|
||
|
|
||
|
if(self.CenterBiasCounter != 0):
|
||
|
self.CenterBiasCounter = self.CenterBiasCounter + 1
|
||
|
if(self.CenterBiasCounter > 20):
|
||
|
self.ModifyCenterBias = 1.0
|
||
|
self.CenterBiasCounter = 0
|
||
|
|
||
|
if(random.random() < 0.01 and self.CenterBiasCounter == 0):
|
||
|
self.ModifyCenterBias = -1.0
|
||
|
self.CenterBiasCounter = 1
|
||
|
|
||
|
if(random.random() < 0.01):
|
||
|
self.SetNewTarget()
|
||
|
|
||
|
def GetCurrentTarget(self):
|
||
|
return self.TargetVec
|
||
|
|
||
|
def SetNewTarget(self):
|
||
|
try:
|
||
|
tempang = random.random()*2*math.pi
|
||
|
x = math.sin(tempang) * 7
|
||
|
y = math.cos(tempang) * 7
|
||
|
self.TargetVec = self.StartLoc + Vector3(x,y,0)
|
||
|
self.llSetPos(self.TargetVec)
|
||
|
except:
|
||
|
print "FlockInfo.SetNewTarget", sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]
|
||
|
|
||
|
def AddToFlock(self, vNew):
|
||
|
try:
|
||
|
if(vNew.MyFlock == self):
|
||
|
return
|
||
|
if(vNew.MyFlock != None):
|
||
|
vNew.MyFlock.RemoveFromFlock(vNew)
|
||
|
|
||
|
self.MyBoids.insert(0,vNew)
|
||
|
vNew.MyFlock = self
|
||
|
except:
|
||
|
print "FlockInfo.AddToFlock", sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]
|
||
|
|
||
|
def RemoveFromFlock(self,vRemoved):
|
||
|
try:
|
||
|
for i in self.MyBoids:
|
||
|
if(i == vRemoved):
|
||
|
self.MyBoids.remove(i)
|
||
|
i.Deactivate()
|
||
|
return
|
||
|
print "Unable to remove boid from flock."
|
||
|
except:
|
||
|
print "FlockInfo.RemoveFromFlock", sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]
|
||
|
|
||
|
def CountAVGs(self):
|
||
|
try:
|
||
|
self.Center = Vector3(0,0,0)
|
||
|
self.AVGVel = Vector3(0,0,0)
|
||
|
|
||
|
for i in self.MyBoids:
|
||
|
self.Center = self.Center + i.llGetPos()
|
||
|
self.AVGVel = self.AVGVel + i.Velocity
|
||
|
except:
|
||
|
print "FlockInfo.CountAVGs", sys.exc_info()[0],sys.exc_info()[1],sys.exc_info()[2]
|
||
|
|
||
|
|