Advertisement
loon4tic

Panda3D TT (fixed)

Dec 15th, 2016
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.29 KB | None | 0 0
  1. # im not teaching you how to run this yet
  2. # op: http://pastebin.com/gMBW76Hi
  3.  
  4. import sys, os
  5. from time import strftime
  6. from direct.interval.IntervalGlobal import *
  7. from math import pi, sin, cos
  8. from panda3d.core import NodePath, TextNode
  9. from direct.gui.OnscreenText import OnscreenText
  10. from pandac.PandaModules import WindowProperties
  11. from direct.showbase.DirectObject import DirectObject
  12. from direct.showbase.ShowBase import ShowBase
  13. from direct.interval.SoundInterval import SoundInterval
  14. from direct.actor.Actor import Actor
  15. from thread import start_new_thread as createThread
  16. from time import sleep as wait
  17. from direct.gui.DirectButton import DirectButton
  18. from direct.task import Task
  19. from panda3d.core import CollisionTraverser,CollisionNode
  20. from panda3d.core import CollisionHandlerQueue,CollisionRay
  21. from panda3d.core import Filename,AmbientLight,DirectionalLight
  22. from panda3d.core import PandaNode,NodePath,Camera,TextNode
  23. from panda3d.core import Vec3,Vec4,BitMask32
  24. from pandac.PandaModules import Texture, TextureStage, CardMaker
  25.  
  26.  
  27. class base(ShowBase):
  28.  
  29.     def logger(self, operator, message):
  30.         self.loggerTime = strftime(':%m-%d-%Y %H:%M:%S')
  31.         try:
  32.             self.loggedText = self.logFile.read()
  33.             self.newLoggedText = self.loggedText + "\n%s %s: %s" % (self.loggerTime,
  34.                                                                     operator,
  35.                                                                     message)
  36.             self.logFile.write(self.newLoggedText)
  37.             print "%s %s: %s" % (self.loggerTime,
  38.                                  operator,
  39.                                  message)
  40.             self.logFile.flush()
  41.         except Exception, err:
  42.             print "Error writing log file! %s." % str(err)
  43.  
  44.    
  45.     def updateZ(self):
  46.         self.camera.setZ(self.camera.getZ()+0.1)
  47.         self.localAvatar.setZ(self.localAvatar.getZ()+0.1)
  48.  
  49.  
  50.     def logNotifier(self):
  51.         while True:
  52.             self.seconds = self.seconds + 5
  53.             self.logger("GameStatus",
  54.                         "Game ran %s seconds without any errors." % str(self.seconds))
  55.             wait(5)
  56.  
  57.  
  58.     def __init__(self):
  59.        
  60.         self.time = strftime('%m-%d-%Y_%H.%M.%S')
  61.         self.logFile = file("%s.log" % self.time,
  62.                         "w+b")
  63.         self.logFile.write("Starting CartoonTown...")
  64.        
  65.         self.seconds = 0
  66.    
  67.         ShowBase.__init__(self)
  68.         self.logger("GameStart",
  69.                     "ShowBase has been initialized!")
  70.    
  71.         class textures:
  72.             bg = loader.loadTexture('phase_3.5/maps/toontown_central_tutorial_palette_4amla_1.jpg')
  73.         base.textures = textures()
  74.         self.logger("Loader",
  75.                     "All textures have been loaded!")
  76.    
  77.         class models:
  78.             baseModel = loader.loadModel('phase_4/models/neighborhoods/toontown_central.bam')
  79.             s_book = loader.loadModel('phase_3.5/models/gui/sticker_open_close_gui.bam')
  80.         base.models = models()
  81.         self.logger("Loader",
  82.                     "All models have been loaded!")
  83.        
  84.         self.localAvatar = Actor("phase_6/models/char/pluto-1000.bam",
  85.                                  {"stand":"phase_6/models/char/pluto-stand.bam",
  86.                                  "sit":"phase_6/models/char/pluto-sit.bam",
  87.                                  "walk":"phase_6/models/char/pluto-walk.bam",
  88.                                  "neutral":"phase_6/models/char/pluto-neutral.bam"})
  89.         self.logger("Actor",
  90.                     "The local avatar has been loaded!")
  91.    
  92.         self.keyMap = {"left":0,
  93.                         "right":0,
  94.                         "forward":0,
  95.                         "backward":0,
  96.                         "cam-left":0,
  97.                         "cam-right":0}
  98.         self.logger("KeyMapper",
  99.                     "The keys have been mapped!")
  100.    
  101.         self.cstitle = WindowProperties()
  102.         self.cstitle.setTitle('CartoonTown')
  103.         self.win.requestProperties(self.cstitle)
  104.         self.logger("WindowManager",
  105.                     "The requested window properities have been applied!")
  106.    
  107.         base.models.baseModel.setPos(0, 120, -12)
  108.         base.models.baseModel.setScale(.4)
  109.         base.models.baseModel.reparentTo(render)
  110.         self.logger("Render",
  111.                     "The playground %s has been loaded!" % str(base.models.baseModel))
  112.    
  113.         self.localAvatar.reparentTo(render)
  114.         self.localAvatar.setScale(.4)
  115.         self.localAvatar.setPos(0, 100, -12.5)
  116.         self.localAvatar.setHpr(0, 0, 0)
  117.         self.localAvatar.loop("neutral")
  118.         self.logger("Actor",
  119.                     "The local avatar has been loaded into its place!")
  120.    
  121.         self.screenStage = TextureStage('screen')
  122.         self.screenStage.setMode(TextureStage.MDecal)
  123.         self.screenTexture = Texture()
  124.         self.buffer = self.win.makeTextureBuffer("screen buffer",
  125.                                              self.win.getXSize(),
  126.                                              self.win.getYSize(),
  127.                                              self.screenTexture, True)
  128.         self.bufferCam = self.makeCamera(self.buffer,
  129.                                      lens=self.cam.node().getLens())
  130.         cm = CardMaker('screencard')
  131.         cm.setFrameFullscreenQuad()
  132.         cm.setHasUvs(True)
  133.         screenCard = render2d.attachNewNode(cm.generate())
  134.         screenCard.setTexture(base.textures.bg)
  135.         screenCard.setTexture(self.screenStage, self.screenTexture)
  136.         self.logger("Render",
  137.                     "The render's background texture has been loaded!")
  138.    
  139.         self.music = loader.loadMusic("phase_4/audio/bgm/TC_nbrhood.mid")
  140.         self.music.setLoop(True)
  141.         self.music.play()
  142.         self.logger("Loader",
  143.                     "The music has been loaded!")
  144.    
  145.         self.floater = NodePath(PandaNode("floater"))
  146.         self.floater.reparentTo(render)
  147.         self.logger("PandaBase",
  148.                     "The collisionspheres have been applied to the models!")
  149.    
  150.         #self.accept("escape", sys.exit)
  151.         self.accept("arrow_left", self.setKey, ["left",1])
  152.         self.accept("arrow_right", self.setKey, ["right",1])
  153.         self.accept("arrow_up", self.setKey, ["backward",1])
  154.         self.accept("arrow_down", self.setKey, ["forward",1])
  155.         self.accept("a", self.setKey, ["cam-left",1])
  156.         self.accept("s", self.setKey, ["cam-right",1])
  157.         self.accept("arrow_left-up", self.setKey, ["left",0])
  158.         self.accept("arrow_right-up", self.setKey, ["right",0])
  159.         self.accept("arrow_up-up", self.setKey, ["backward",0])
  160.         self.accept("arrow_down-up", self.setKey, ["forward",0])
  161.         self.accept("a-up", self.setKey, ["cam-left",0])
  162.         self.accept("s-up", self.setKey, ["cam-right",0])
  163.         self.logger("KeyMapper",
  164.                     "The keys have been assigned to their respective functions!")
  165.    
  166.         taskMgr.add(self.move,"moveTask")
  167.         self.logger("TaskMgr",
  168.                     "The function 'self.move' has been added to the Task Manager as 'moveTask'!")
  169.    
  170.         self.isMoving = False
  171.    
  172.         self.disableMouse()
  173.         self.camera.setPos(self.localAvatar.getX(),
  174.                            self.localAvatar.getY() + +20,
  175.                            self.localAvatar.getZ() + 2)
  176.         self.camera.setHpr(180, 90, 0)
  177.         self.logger("Render",
  178.                     "The camera position has been updated!")
  179.  
  180.  
  181.         self.cTrav = CollisionTraverser()
  182.  
  183.  
  184.         self.localAvatarGroundRay = CollisionRay()
  185.         self.localAvatarGroundRay.setOrigin(0,0,1000)
  186.         self.localAvatarGroundRay.setDirection(0,0,-1)
  187.         self.localAvatarGroundCol = CollisionNode('localAvatarRay')
  188.         self.localAvatarGroundCol.addSolid(self.localAvatarGroundRay)
  189.         self.localAvatarGroundCol.setFromCollideMask(BitMask32.bit(0))
  190.         self.localAvatarGroundCol.setIntoCollideMask(BitMask32.allOff())
  191.         self.localAvatarGroundColNp = self.localAvatar.attachNewNode(self.localAvatarGroundCol)
  192.         self.localAvatarGroundHandler = CollisionHandlerQueue()
  193.         self.cTrav.addCollider(self.localAvatarGroundColNp, self.localAvatarGroundHandler)
  194.         self.logger("Render",
  195.                     "Collisions have been applied to the actor 'localAvatar'!")
  196.  
  197.  
  198.         self.camGroundRay = CollisionRay()
  199.         self.camGroundRay.setOrigin(0,0,1000)
  200.         self.camGroundRay.setDirection(0,0,-1)
  201.         self.camGroundCol = CollisionNode('camRay')
  202.         self.camGroundCol.addSolid(self.camGroundRay)
  203.         self.camGroundCol.setFromCollideMask(BitMask32.bit(0))
  204.         self.camGroundCol.setIntoCollideMask(BitMask32.allOff())
  205.         self.camGroundColNp = self.camera.attachNewNode(self.camGroundCol)
  206.         self.camGroundHandler = CollisionHandlerQueue()
  207.         self.cTrav.addCollider(self.camGroundColNp, self.camGroundHandler)
  208.         self.logger("Render",
  209.                     "Collisions have been applied to the model 'baseModel'!")
  210.    
  211.    
  212.         ambientLight = AmbientLight("ambientLight")
  213.         ambientLight.setColor(Vec4(.3, .3, .3, 1))
  214.         directionalLight = DirectionalLight("directionalLight")
  215.         directionalLight.setDirection(Vec3(-5, -5, -5))
  216.         directionalLight.setColor(Vec4(1, 1, 1, 1))
  217.         directionalLight.setSpecularColor(Vec4(1, 1, 1, 1))
  218.         render.setLight(render.attachNewNode(ambientLight))
  219.         render.setLight(render.attachNewNode(directionalLight))
  220.         self.logger("Render",
  221.                     "Lights have been changed to 'ambientLight'!")
  222.  
  223.         DirectButton(text = "Z+", pos = (0, 0, 0.9), command = self.updateZ, scale = 0.1)
  224.  
  225.        
  226.         createThread(self.logNotifier, ())
  227.  
  228.  
  229.  
  230.     def setKey(self, key, value):
  231.         self.keyMap[key] = value
  232.         if value == 0:
  233.             self.logger("KeyMapper",
  234.                         "Key %s was released!" % key)
  235.         elif value == 1:
  236.             self.logger("KeyMapper",
  237.                         "Key %s was pressed!" % key)
  238.  
  239.  
  240.    
  241.     def move(self, task):
  242.        
  243.         self.camera.lookAt(self.localAvatar)
  244.         if (self.keyMap["cam-left"]!=0):
  245.             self.camera.setX(self.camera, -20 * globalClock.getDt())
  246.         if (self.keyMap["cam-right"]!=0):
  247.             self.camera.setX(self.camera, +20 * globalClock.getDt())
  248.        
  249.  
  250.        
  251.         startpos = self.localAvatar.getPos()
  252.        
  253.  
  254.        
  255.         if (self.keyMap["left"]!=0):
  256.             self.localAvatar.setH(self.localAvatar.getH() + 300 * globalClock.getDt())
  257.         if (self.keyMap["right"]!=0):
  258.             self.localAvatar.setH(self.localAvatar.getH() - 300 * globalClock.getDt())
  259.         if (self.keyMap["forward"]!=0):
  260.             self.localAvatar.setY(self.localAvatar, -25 * globalClock.getDt())
  261.         if (self.keyMap["backward"]!=0):
  262.             self.localAvatar.setY(self.localAvatar, +25 * globalClock.getDt())
  263.        
  264.  
  265.        
  266.         if (self.keyMap["forward"]!=0) or (self.keyMap["backward"]!=0) or (self.keyMap["left"]!=0) or (self.keyMap["right"]!=0):
  267.             if self.isMoving is False:
  268.                 self.localAvatar.loop("walk")
  269.                 self.isMoving = True
  270.         else:
  271.             if self.isMoving:
  272.                 self.localAvatar.stop()
  273.                 self.localAvatar.loop("neutral")
  274.                 self.isMoving = False
  275.        
  276.  
  277.        
  278.         camvec = self.localAvatar.getPos() - self.camera.getPos()
  279.         camvec.setZ(0)
  280.         camdist = camvec.length()
  281.         camvec.normalize()
  282.         if (camdist > 10.0):
  283.             self.camera.setPos(self.camera.getPos() + camvec*(camdist-10))
  284.             camdist = 10.0
  285.         if (camdist < 5.0):
  286.             self.camera.setPos(self.camera.getPos() - camvec*(5-camdist))
  287.             camdist = 5.0
  288.    
  289.        
  290.         self.cTrav.traverse(render)
  291.        
  292.  
  293.        
  294.         entries = []
  295.         for i in range(self.localAvatarGroundHandler.getNumEntries()):
  296.             entry = self.localAvatarGroundHandler.getEntry(i)
  297.             entries.append(entry)
  298.         entries.sort(lambda x,y: cmp(y.getSurfacePoint(render).getZ(),
  299.                                      x.getSurfacePoint(render).getZ()))
  300.         if (len(entries)>0) and (entries[0].getIntoNode().getName() == "toontown_central"):
  301.             self.localAvatar.setZ(entries[0].getSurfacePoint(render).getZ())
  302.         else:
  303.             pass
  304. #self.localAvatar.setPos(startpos)
  305.  
  306.        
  307.         entries = []
  308.         for i in range(self.camGroundHandler.getNumEntries()):
  309.             entry = self.camGroundHandler.getEntry(i)
  310.             entries.append(entry)
  311.         entries.sort(lambda x,y: cmp(y.getSurfacePoint(render).getZ(),
  312.                                      x.getSurfacePoint(render).getZ()))
  313.         if (len(entries)>0) and (entries[0].getIntoNode().getName() == "toontown_central"):
  314.             self.camera.setZ(entries[0].getSurfacePoint(render).getZ()+1.0)
  315.         if (self.camera.getZ() < self.localAvatar.getZ() + 2.0):
  316.             self.camera.setZ(self.localAvatar.getZ() + 2.0)
  317.  
  318.        
  319.         self.floater.setPos(self.localAvatar.getPos())
  320.         self.floater.setZ(self.localAvatar.getZ() + 2.0)
  321.         self.camera.lookAt(self.floater)
  322.        
  323.         return task.cont
  324.  
  325.  
  326.  
  327. base = base()
  328. base.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement