
import direct.directbase.DirectStart  #Initialize Panda and create a window
from pandac.PandaModules import *     #Contains most of Panda's modules
from direct.gui.DirectGui import *    #Imports Gui objects we use for putting
from direct.task import Task
from direct.showbase.DirectObject import DirectObject

import sys, pdb
def addTitle(text):
    return OnscreenText(text=text, style=1, fg=(1,1,1,1),
	                pos=(1.3,-0.95), align=TextNode.ARight, scale = .07)


class World(DirectObject):                          #Our main class
    def __init__(self):                 #The initialization method caused when a
        self.mytext = OnscreenText("Panda3D: Tutorial 1 - Solar System",
        style=1, fg=(1,1,1,1), pos=(0.8,-0.95), scale = .07)
        base.setBackgroundColor(0, 0, 0)

        base.disableMouse()
    
        camera.setPos ( 0, 0, 45 )
    
        camera.setHpr ( 0, -90, 0 )

        self.sizescale = 2
        self.prevtime = 0
        self.sun = loader.loadModelCopy("models/planet_sphere")
        #Now we repeat our other steps
        self.sun.reparentTo(render)
        self.sun_tex = loader.loadTexture("models/sun_1k_tex.jpg")
        self.sun.setTexture(self.sun_tex, 1)
        self.sun.setScale(2 * self.sizescale) #The sun is really much bigger than

        self.accept("h", self.controlFun, ["h",True])
        self.accept("h-up", self.controlFun, ["h",False])
        self.accept("p", self.controlFun, ["p",True])
        self.accept("p-up", self.controlFun, ["p",False])
        self.accept("r", self.controlFun, ["r",True])
        self.accept("r-up", self.controlFun, ["r",False])

        
        self.kDown = {"h":False, "p":False, "r":False}
        taskMgr.add(self.move,"cameraMoveTask")
        
        
    def move(self, task):
        elapsed = task.time - self.prevtime
        speed = 60 
        if self.kDown['h']:
            self.sun.setH(self.sun.getH() + (elapsed*speed)) 
        if self.kDown['p']:
            self.sun.setP(self.sun.getP() + (elapsed*speed)) 
        if self.kDown['r']:
            self.sun.setR(self.sun.getR() + (elapsed*speed)) 
        self.prevtime = task.time
        return Task.cont
   
    def controlFun(self, key, bDown):
        self.kDown[key] = bDown

    
w = World()
#As usual - run() must be called before anything can be shown on screen
run()


