![]() |
#1
|
|||
|
|||
Avatars in an array and link/unlink
I was wondering if I can get some assistance on this. I created a program that introduces 3 avatars to a user. The user then shoots the avatar by clicking on the avatar that his "holding" a weapon. The 3 avatars can have either a gun in hand, a cell phone in hand or a camera around his/her neck.
Once an avatar is shot, the avatar is supposed to unlink with the object and come back w/ another object. The problem i'm having is that only the last avatar is working. I've tried changing which avatar is last and removing an avatar, leaving only 1 or 2, and what i've noticed is that anytime i remove or change the avatar order, only the last avatar functions correctly. I've gone over the code many times and can't figure out the problem. PLEASE HELP. I've included the relavent parts of the code for your reference. To get the weapons: Code:
def GetWeapon(avatar,number): global link, objectlink if number == 0: #weapons to use objectlink = viz.add(viz.GROUP) #for gun gun = objectlink.add('M16M203.WRL') avatar.gun = gun gun.scale(.0005,.0005,.0005) objectlink.link(hand) elif number == 1: objectlink = viz.add(viz.GROUP) #for phone phone = objectlink.add('C:\Program Files\Vizard25\resources/phone.3ds') #avatar.phone = phone phone.scale(1.5,1.5,1.5) phone.rotate(-90,0,-90) phone.translate(0,0.03,0.02) objectlink.link(hand) else: objectlink = viz.add(viz.GROUP) #for camera camera = objectlink.add('camera.WRL') #avatar.camera = camera camera.scale(.0005,.0005,.0005) camera.translate(0,-.25,.17) camera.rotate(180) objectlink.link(neck) Code:
for x in range(0,3): if x == 0: male = viz.add(people[x]) male.scale(.11,.11,.11) # male.face(faces[0]) hand = male.getbone('skel_HandRF') neck = male.getbone('skel_Neck') GetWeapon(male,0) #phonelink.link(hand) male.tag = 0 male.threatening = TRUE male.appearance = 0 male.facepic = 0 elif x == 1: male = viz.add(people[1]) male.scale(.11,.11,.11) # male.visible(0,'gz_mstky_headlat.cmf') # male.face(faces[2]) hand = male.getbone('skel_HandRF') neck = male.getbone('skel_Neck') GetWeapon(male,1) #cameralink.link(neck) male.tag = 1 male.threatening = FALSE male.appearance = 0 male.facepic = 0 elif x ==2: male = viz.add(people[0]) male.scale(.11,.11,.11) male.visible(0,'gz_mave_headwht.cmf') male.face(faces[0]) hand = male.getbone('skel_HandRF') neck = male.getbone('skel_Neck') GetWeapon(male,2) #gunlink.link(hand) #male.face(faces[1]) male.tag = 2 male.threatening = FALSE male.appearance = 0 male.facepic = 0 male.translate(3*x,-10,10) male.rotate(180) #Add the avatar to the waiting and lemming list waitlist.append(male) characters.append(male) Code:
def RemoveAvatar(avatar): global avatarCount, objectlink avatar.visible(0) #Hide avatar avatar.speed(1) #Restore speed # THIS ONE MIGHT WORK! # objectlink.unlink() objectlink.translate(0,0,10) characters.remove(avatar) #Remove from list dead_list.append(avatar) #Add to dead list # objectlink.unlink() # GetWeapon(deadlist[0],weaponchoice) avatarCount += 1 print 'avatar count is: ', avatarCount def RestoreAvatar(): global keyindex, weaponchoice, objectlink objectlink.unlink() if weaponchoice > 3: weaponchoice = 0 print 'weapon choice is',weaponchoice if len(dead_list): print "avatar restored" avatar = dead_list.pop() #Ressurrect dead avatar weaponchoice += 1 GetWeapon(avatar,weaponchoice) avatar.visible(1) #Make it visible characters.append(avatar) #Add it to avatar list Code:
def MoveBullet(bullet,elapsed): global avatarsHit, autospawn, soldierCount, maleCount, femaleCount, threatCount, nonthreatCount #get the bullet's current position pos = bullet.get(viz.POSITION) #calculate the balls future position based on it's velocity futurePos = pos + (bullet.vector * elapsed) #Check if bullet intersected with anything info = viz.intersect(pos,futurePos) if info.intersected: if info.object in characters: info.object.disable(viz.COLLISION) #print "in characters" if info.object.tag == 0: soldierCount += 1 if info.object.threatening == TRUE: threatCount += 1 elif info.threatening == FALSE: nonthreatCount += 1 elif info.object.tag == 1: maleCount += 1 if info.object.threatening == TRUE: threatCount += 1 elif info.object.threatening == FALSE: nonthreatCount += 1 elif info.object.tag == 2: femaleCount += 1 if info.object.threatening == TRUE: threatCount += 1 elif info.object.threatening == FALSE: nonthreatCount += 1 avatarsHit = avatarsHit + 1 viz.playsound('arrgh.wav') WaitThenFreeze = vizact.sequence( vizact.waittime(info.object.getduration(6)-.85), vizact.speed_node(0) ) info.object.execute(6) info.object.clear(viz.ALL) info.object.clear(viz.CURRENT_ACTION) info.object.add(WaitThenFreeze) #Add the action to the avatar RemoveAvatarAction = vizact.call(RemoveAvatar,info.object) info.object.add(RemoveAvatarAction) #Add action to remove avatar bullet.visible(0) bullet.active = 0 #Update balls positions bullet.translate(futurePos.get()) |
Thread Tools | |
Display Modes | Rate This Thread |
|
|