mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-26 13:12:30 -06:00
70 lines
2.8 KiB
Python
70 lines
2.8 KiB
Python
from direct.directnotify import DirectNotifyGlobal
|
|
from direct.distributed.DistributedObjectAI import DistributedObjectAI
|
|
from direct.distributed.ClockDelta import *
|
|
import ButterflyGlobals
|
|
import random
|
|
|
|
class DistributedButterflyAI(DistributedObjectAI):
|
|
notify = DirectNotifyGlobal.directNotify.newCategory("DistributedButterflyAI")
|
|
|
|
def __init__(self, air):
|
|
DistributedObjectAI.__init__(self, air)
|
|
self.area = 0
|
|
self.playground = 0
|
|
self.stateIndex = 0
|
|
self.curIndex = 0
|
|
self.destIndex = 0
|
|
self.time = 0
|
|
self.timestamp = 0
|
|
|
|
def generate(self):
|
|
ButterflyGlobals.generateIndexes(self.doId, self.playground)
|
|
fr = ButterflyGlobals.getFirstRoute(self.playground, self.area, self.doId)
|
|
self.b_setState(ButterflyGlobals.FLYING, fr[1], fr[3], fr[4], globalClockDelta.getRealNetworkTime())
|
|
taskMgr.doMethodLater(fr[4], self.__land, 'landButterfly%i' % self.doId, [])
|
|
|
|
def __land(self):
|
|
ttl = random.uniform(0, ButterflyGlobals.MAX_LANDED_TIME)
|
|
self.b_setState(ButterflyGlobals.LANDED, self.curIndex, self.destIndex, ttl, globalClockDelta.getRealNetworkTime())
|
|
taskMgr.doMethodLater(ttl, self.__fly, 'flyButterfly%i' % self.doId, [])
|
|
|
|
def __fly(self):
|
|
next = ButterflyGlobals.getNextPos(ButterflyGlobals.ButterflyPoints[self.playground][self.area][self.destIndex], self.playground, self.area, self.doId)
|
|
|
|
self.b_setState(ButterflyGlobals.FLYING, self.destIndex, next[1], next[2], globalClockDelta.getRealNetworkTime())
|
|
taskMgr.doMethodLater(next[2], self.__land, 'landButterfly%i' % self.doId, [])
|
|
|
|
def setArea(self, playground, area):
|
|
self.area = area
|
|
self.playground = playground
|
|
|
|
def d_setArea(self, playground, area):
|
|
self.sendUpdate('setArea', [playground, area])
|
|
|
|
def b_setArea(self, playground, area):
|
|
self.setArea(playground, area)
|
|
self.d_setArea(playground, area)
|
|
|
|
def getArea(self):
|
|
return [self.playground, self.area]
|
|
|
|
def setState(self, stateIndex, curIndex, destIndex, time, timestamp):
|
|
self.stateIndex = stateIndex
|
|
self.curIndex = curIndex
|
|
self.destIndex = destIndex
|
|
self.time = time
|
|
self.timestamp = timestamp
|
|
|
|
def d_setState(self, stateIndex, curIndex, destIndex, time, timestamp):
|
|
self.sendUpdate('setState', [stateIndex, curIndex, destIndex, time, timestamp])
|
|
|
|
def b_setState(self, stateIndex, curIndex, destIndex, time, timestamp):
|
|
self.setState(stateIndex, curIndex, destIndex, time, timestamp)
|
|
self.d_setState(stateIndex, curIndex, destIndex, time, timestamp)
|
|
|
|
def getState(self):
|
|
return [self.stateIndex, self.curIndex, self.destIndex, self.time, self.timestamp]
|
|
|
|
def avatarEnter(self):
|
|
pass
|
|
|