i changed form the distance measuring to a collision recall…
thx for all the help
# weapons drh 2008
import direct.directbase.DirectStart
from direct.showbase import DirectObject
from pandac.PandaModules import Vec3,Vec4,BitMask32
from direct.task.Task import Task
from direct.interval.IntervalGlobal import *
from pandac.PandaModules import *
import modelLOADER
count = 100
BULLETScount = 500
COLORintervalTIME = 30
cTrav1 = CollisionTraverser()
class WEAPON(DirectObject.DirectObject):
def __init__(self):
print "weapons loaded"
base.setBackgroundColor(0, 0, 0)
self.keyMap = {"d":0,"h":0}
self.accept("mouse1", self.Keys, ["d",1])
self.accept("mouse1-up", self.Keys, ["d",0])
taskMgr.add(self.fire,"fireTask")
def Keys(self, key, value):
self.keyMap[key] = value
def fire(self, task):
for i in range(count):
if self.keyMap["d"]:
proj = [None for ii in range(count)]
proj[ii] = loader.loadModel("projectil")
proj[ii].reparentTo(render)
proj[ii].setScale(.2,.2,.2)
###
###COLLISION
###
modelLOADER.environ.setCollideMask(BitMask32.bit(0))
modelLOADER.enemys[i].setCollideMask(BitMask32.bit(1))
projENEMYRay = CollisionRay()
projENEMYRay.setOrigin(0,0,100)
projENEMYRay.setDirection(0,0,-1)
projENEMYCol = CollisionNode('projRay')
projENEMYCol.addSolid(projENEMYRay)
projENEMYCol.setFromCollideMask(BitMask32.bit(1))
projENEMYCol.setIntoCollideMask(BitMask32.allOff())
projENEMYColNp = proj[ii].attachNewNode(projENEMYCol)
projENEMYQueue = CollisionHandlerQueue()
cTrav1.addCollider(projENEMYColNp, projENEMYQueue)
cTrav1.showCollisions(render)
projENEMYColNp.show()
###
self.proj1 = loader.loadModel("projectil")
self.proj1.reparentTo(render)
self.proj1.setScale(.2,.2,.2)
playerH = modelLOADER.player.getH()
playerP = modelLOADER.player.getP()
X =modelLOADER.player.getX()-.15
Y =modelLOADER.player.getY()
Z =modelLOADER.player.getZ()-0.6
X1 =modelLOADER.player.getX()+.15
Y1 =modelLOADER.player.getY()
Z1 =modelLOADER.player.getZ()-0.6
self.direction1 = modelLOADER.player.getHpr()
proj[ii].setPos(X,Y,Z)
proj[ii].setHpr(self.direction1)
self.proj1.setPos(X1,Y1,Z1)
self.proj1.setHpr(self.direction1)
fireX = LerpPosInterval(proj[ii], BULLETScount,Point3(0,-100,0), other = proj[ii])
fireX.start()
fireX2 = LerpPosInterval(self.proj1, BULLETScount,Point3(0,-100,0), other = self.proj1)
fireX2.start()
fireX1 = LerpColorInterval(proj[ii], COLORintervalTIME, Vec4(0,0,1,1), Vec4(1,.5,0,1))
fireX1.start()
fireX3 = LerpColorInterval(self.proj1, COLORintervalTIME, Vec4(0,0,1,1), Vec4(1,.5,0,1))
fireX3.start()
def COLLISION(task):
for i in range(projENEMYQueue.getNumEntries()):
entry = projENEMYQueue.getEntry(i)
point = entry.getSurfacePoint(entry.getIntoNodePath())
#point1 = entry.getSurfacePoint(getFromNodePath())
#modelLOADER.enemys[i].remove()
print entry
print point
#print point1
return Task.cont
taskMgr.add(COLLISION,"collisionTask")
return Task.cont
we = WEAPON()