Hi I have a few questions and problems going on in my code. Code will be posted below.
- Problem, When I move my camera using the same code with my cube and push down as I look at the floor the cube seems to just go right tho it while if I do the same with my camera it doesnt, if I switch the code around that is.
–> working 2. Adding to problem 1 with question, Also I think I need to change self.usertoon.setPos(self.usertoon.getPos() - camleftright*(elapsed*25)) with self.usertoon.setPos(self.usertoon.getPos() - userleftright(elapsed25)) but it seems to make my cube to not work when I do, why is this so?
-
Question, Maybe my collision not setup right, but I want to “push” the cube when my camera collision is set up too, how would I go about this?
-
Question, Last, how would I go about setting up a array or list to setup a new loadModelCopy for when say someone else log on into my game? I have test code but it doesnt seem to work and cause my game to “pause” when used. -so it may be a little mess up-
#(1,2,3) 1:leftright,2:forwardbackwords,3:updown
import direct.directbase.DirectStart #Initialize Panda and create a window
import random, sys, os, math, time, threading, socket #libs
from direct.gui.OnscreenText import OnscreenText
from direct.task.Task import Task #Task run
from pandac.PandaModules import Fog
from pandac.PandaModules import *
from pandac.PandaModules import Shader
from pandac.PandaModules import Point3,Vec4
from pandac.PandaModules import NodePath
from pandac.PandaModules import CollisionTraverser,CollisionNode
from pandac.PandaModules import CollisionHandlerQueue,CollisionRay
from direct.showbase.DirectObject import DirectObject
#-----------------------------------------------------
class World(DirectObject):
def __init__(self):
self.zone = "town"
self.loadzone()
self.camera()
self.Collisions()
self.Controls()
self.connect()
######################### Key movement ########################################
def Controls(self):
self.keyMap = {"left":0, "right":0, "forward":0, "back":0, "fps":0, "fullscreen":0}
# Accept the control keys for movement
self.accept("escape", sys.exit)
self.accept("arrow_left", self.setKey, ["left",1])
self.accept("arrow_right", self.setKey, ["right",1])
self.accept("arrow_up", self.setKey, ["forward",1])
self.accept("arrow_down", self.setKey, ["back",1])
self.accept("`", self.setKey, ["fps",1])
self.accept("+", self.setKey, ["fullscreen",1])
self.accept("arrow_left-up", self.setKey, ["left",0])
self.accept("arrow_right-up", self.setKey, ["right",0])
self.accept("arrow_up-up", self.setKey, ["forward",0])
self.accept("arrow_down-up", self.setKey, ["back",0])
self.accept("`-up", self.setKey, ["fps",0])
self.accept("+-up", self.setKey, ["fullscreen",0])
taskMgr.add(self.move,"moveTask")
# taskMgr.add(self.askfor,"connectionTask")
###############################################################################
#Game state variables
self.prevtime = 0
self.runforward = 0
self.runback = 0
self.FrameRateMeter = 0
self.jump = 0
self.full = 1
self.userlist = []
###############################################################################
def connect(self):
self.client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.client.connect (("76.215.140.97", 5000))
self.Name = "Mradr"
self.Password = "123"
self.send="namepass"+" "+self.Name+" "+self.Password
self.client.send(self.send)
###############################################################################
#def askfor(self):
# if self.client.recv(1024) == "":
# print "not nothing"
# return task.again
# self.read = self.client.recv(1024)
# self.data = self.read.split()
# print self.data
#if "connected" in self.read:
# if not self.data[1] in self.userlist:
# self.userlist.append(self.data[1])
# self.userlist.index(self.data[1]) = loader.loadModelCopy("towns/cube")
# self.userlist.index(self.data[1]).reparentTo(render)
# elif "isoffline" in self.read:
# self.userlist.remove(self.data[1])
# else:
# print self.read
# return task.again
###############################################################################
def loadzone(self):
#Load the first environment model town.egg
self.environ = loader.loadModel("towns/a1")
self.usertoon = loader.loadModelCopy("towns/cube")
self.environ.reparentTo(render)
self.usertoon.reparentTo(render)
self.environ.setScale(0.015,0.015,0.015)
self.environ.setPos(0,0,0)
self.usertoon.setScale(0.015,0.015,0.015)
self.usertoon.setPos(0,10,5)
###############################################################################
def camera(self):
base.disableMouse()
if self.zone == self.zone:
base.camera.setPos(0,0,10)
base.camLens.setFar(700)
#self.myFog = Fog("Fog Name")
#self.myFog.setColor(167,162,154)
#self.myFog.setExpDensity(.0001)
#render.setFog(self.myFog)
base.setBackgroundColor(0,0,0) #167,162,154
elif self.zone == "towns/controlroom":
base.camera.setPos(0,0,115)
base.camLens.setFar(2000)
self.infoText['text']='Control Room'
base.setBackgroundColor(0,0,0)
elif self.zone == "towns/dg1":
base.camera.setPos(0,0,115)
base.camLens.setFar(5000)
self.infoText['text']='Dg1'
self.myFog = Fog("Fog Name")
self.myFog.setColor(167,162,154)
self.myFog.setExpDensity(.001)
render.setFog(self.myFog)
base.setBackgroundColor(167,162,154)
###############################################################################
def Collisions(self):
base.cTrav = CollisionTraverser()
base.pusher = CollisionHandlerPusher()
base.pusher.setHorizontal(False)
#cnodePath = base.camera.attachNewNode(CollisionNode('camera'))
#cnodePath.node().addSolid(CollisionSphere(0, 0, 0, 2))
cnodePath2 = self.usertoon.attachNewNode(CollisionNode('cube'))
cnodePath2.node().addSolid(CollisionSphere(0, 0, 0, 5))
#base.pusher.addCollider(cnodePath,base.camera,base.drive.node())
base.pusher.addCollider(cnodePath2,self.usertoon,base.drive.node())
#base.cTrav.addCollider(cnodePath,base.pusher)
base.cTrav.addCollider(cnodePath2,base.pusher)
###############################################################################
#Records the state of the arrow keys
def setKey(self, key, value):
self.keyMap[key] = value
def move(self, task):
elapsed = task.time - self.prevtime
camleftright = base.camera.getNetTransform().getMat().getRow3(0)
camforwardback = base.camera.getNetTransform().getMat().getRow3(1)
userleftright = self.usertoon.getNetTransform().getMat().getRow3(0) #test code
userforwardback = self.usertoon.getNetTransform().getMat().getRow3(1) #test code
if (self.keyMap["left"]!=0):
base.camera.setPos(base.camera.getPos() - camleftright*(elapsed*25))
self.usertoon.setPos(self.usertoon.getPos() - camleftright*(elapsed*25))
if (self.keyMap["right"]!=0):
base.camera.setPos(base.camera.getPos() + camleftright*(elapsed*25))
self.usertoon.setPos(self.usertoon.getPos() + camleftright*(elapsed*25))
if (self.keyMap["forward"]!=0):
if self.runforward == 0:
base.camera.setPos(base.camera.getPos() + camforwardback*(elapsed*25))
self.usertoon.setPos(self.usertoon.getPos() + camforwardback*(elapsed*25))
self.runforward = 1
elif self.runforward == 1:
base.camera.setPos(base.camera.getPos() + camforwardback*(elapsed*25))
self.usertoon.setPos(self.usertoon.getPos() + camforwardback*(elapsed*25))
if (self.keyMap["forward"]!=1):
if self.runforward == 1:
self.runforward = 0
if (self.keyMap["back"]!=0):
if self.runback == 0:
base.camera.setPos(base.camera.getPos() - camforwardback*(elapsed*25))
self.usertoon.setPos(self.usertoon.getPos() - camforwardback*(elapsed*25))
self.runback = 1
elif self.runback == 1:
base.camera.setPos(base.camera.getPos() - camforwardback*(elapsed*25))
self.usertoon.setPos(self.usertoon.getPos() - camforwardback*(elapsed*25))
if (self.keyMap["back"]!=1):
if self.runback == 1:
self.runback = 0
if (self.keyMap["fps"]!=0):
time.sleep(.2)
if self.FrameRateMeter == 0:
base.setFrameRateMeter(1)
self.FrameRateMeter = 1
elif self.FrameRateMeter == 1:
base.setFrameRateMeter(0)
self.FrameRateMeter = 0
if (self.keyMap["fullscreen"]!=0):
time.sleep(.2)
props = WindowProperties()
if self.full == 0:
props.setFullscreen(False)
props.setUndecorated(False)
props.setOrigin(200,150)
props.setSize(800,600)
self.full = 1
elif self.full == 1:
props.setFullscreen(True)
props.setOrigin(0,0)
props.setSize(1280,1024)
self.full = 0
base.win.requestProperties(props)
if self.usertoon.getZ() > -100:
self.usertoon.setZ(self.usertoon.getZ()-.0505)
self.md = base.win.getPointer(0)
self.x = self.md.getX()
self.y = self.md.getY()
if base.win.movePointer(0, base.win.getXSize()/2, base.win.getYSize()/2):
base.camera.setP(base.camera.getP() - (self.y - base.win.getYSize()/2)*0.4)
base.camera.setH(base.camera.getH() - (self.x - base.win.getXSize()/2)*0.4)
#store camrea pos
startpos = base.camera.getPos()
self.prevtime = task.time
return Task.cont
###############################################################################
World()
run()
[/u]