OpenSimMirror/bin/ScriptEngines/PythonScript/Samples/sampleflockinfo.py

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]