145 lines
5.5 KiB
Python
145 lines
5.5 KiB
Python
|
"""Undocumented Module"""
|
||
|
|
||
|
__all__ = []
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
from direct.showbase.ShowBase import ShowBase
|
||
|
from . import DirectGuiGlobals
|
||
|
from .DirectGui import *
|
||
|
#from whrandom import *
|
||
|
from random import *
|
||
|
|
||
|
base = ShowBase()
|
||
|
|
||
|
# EXAMPLE CODE
|
||
|
# Load a model
|
||
|
smiley = loader.loadModel('models/misc/smiley')
|
||
|
|
||
|
# Here we specify the button's command
|
||
|
def dummyCmd(index):
|
||
|
print('Button %d POW!!!!' % index)
|
||
|
|
||
|
# Define some commands to bind to enter, exit and click events
|
||
|
def shrink(db):
|
||
|
db['text2_text'] = 'Hi!'
|
||
|
taskMgr.remove('shrink')
|
||
|
taskMgr.remove('expand')
|
||
|
# Get a handle on the geometry for the rollover state
|
||
|
rolloverSmiley = db.component('geom2')
|
||
|
rolloverSmiley.setScale(db.component('geom0').getScale()[0])
|
||
|
rolloverSmiley.lerpScale(.1, .1, .1, 1.0, blendType = 'easeInOut',
|
||
|
task = 'shrink')
|
||
|
|
||
|
def expand(db):
|
||
|
db['text0_text'] = 'Bye!'
|
||
|
taskMgr.remove('shrink')
|
||
|
taskMgr.remove('expand')
|
||
|
db.component('geom0').setScale(db.component('geom2').getScale()[0])
|
||
|
db.component('geom0').lerpScale(1, 1, 1, 1, blendType = 'easeInOut',
|
||
|
task = 'expand')
|
||
|
db.component('geom2').clearColor()
|
||
|
|
||
|
def ouch(db):
|
||
|
taskMgr.remove('shrink')
|
||
|
taskMgr.remove('expand')
|
||
|
taskMgr.remove('runAway')
|
||
|
db.component('geom0').setScale(db.component('geom2').getScale()[0])
|
||
|
db.component('geom1').setScale(db.component('geom2').getScale()[0])
|
||
|
db['text2_text'] = 'Ouch!'
|
||
|
db['geom2_color'] = (1, 0, 0, 1)
|
||
|
newX = -1.0 + random() * 2.0
|
||
|
newZ = -1.0 + random() * 2.0
|
||
|
db.lerpPos(Point3(newX, 0, newZ), 1.0, task = 'runAway',
|
||
|
blendType = 'easeOut')
|
||
|
|
||
|
dl = DirectFrame(image = 'models/maps/noise.rgb')
|
||
|
dl.setScale(.5)
|
||
|
|
||
|
# Create a button with a background image, smiley as a geometry element,
|
||
|
# and a text overlay, set a different text for the four button states:
|
||
|
# (normal, press, rollover, and disabled), set scale = .15, and relief raised
|
||
|
dbArray = []
|
||
|
for i in range(10):
|
||
|
db = DirectButton(parent = dl,
|
||
|
image = 'models/maps/noise.rgb',
|
||
|
geom = smiley,
|
||
|
text = ('Hi!', 'Ouch!', 'Bye!', 'ZZZZ!'),
|
||
|
scale = .15, relief = 'raised',
|
||
|
# Here we set an option for a component of the button
|
||
|
geom1_color = (1, 0, 0, 1),
|
||
|
# Here is an example of a component group option
|
||
|
text_pos = (.6, -.8),
|
||
|
# Set audio characteristics
|
||
|
clickSound = DirectGuiGlobals.getDefaultClickSound(),
|
||
|
rolloverSound = DirectGuiGlobals.getDefaultRolloverSound()
|
||
|
)
|
||
|
|
||
|
# You can set component or component group options after a gui item
|
||
|
# has been created
|
||
|
db['text_scale'] = 0.5
|
||
|
db['command'] = lambda i = i: dummyCmd(i)
|
||
|
|
||
|
# Bind the commands
|
||
|
db.bind(DirectGuiGlobals.ENTER, lambda x, db = db: shrink(db))
|
||
|
db.bind(DirectGuiGlobals.EXIT, lambda x, db = db: expand(db))
|
||
|
db.bind(DirectGuiGlobals.B1PRESS, lambda x, db = db: ouch(db))
|
||
|
# Pop up placer when button 2 is pressed
|
||
|
db.bind(DirectGuiGlobals.B3PRESS, lambda x, db = db: db.place())
|
||
|
|
||
|
dbArray.append(db)
|
||
|
|
||
|
# To get rid of button and clear out hooks call:
|
||
|
# db.destroy()
|
||
|
|
||
|
# DIRECT ENTRY EXAMPLE
|
||
|
def printEntryText(text):
|
||
|
print('Text: %s' % (text))
|
||
|
|
||
|
# Here we create an entry, and specify everything up front
|
||
|
# CALL de1.get() and de1.set('new text') to get and set entry contents
|
||
|
de1 = DirectEntry(initialText = 'Hello, how are you?',
|
||
|
image = 'models/maps/noise.rgb',
|
||
|
image_pos = (4.55, 0, -2.55),
|
||
|
image_scale = (5.5, 1, 4),
|
||
|
command = printEntryText,
|
||
|
pos = (-1.1875, 0, 0.879167),
|
||
|
scale = 0.0707855,
|
||
|
cursorKeys = 1,
|
||
|
)
|
||
|
|
||
|
# DIRECT DIALOG EXAMPLE
|
||
|
def printDialogValue(value):
|
||
|
print('Value: %s' % (value))
|
||
|
|
||
|
simpleDialog = YesNoDialog(text = 'Simple',
|
||
|
command = printDialogValue)
|
||
|
|
||
|
customValues = YesNoDialog(text = 'Not Quite So Simple',
|
||
|
buttonValueList = ['Yes', 'No'],
|
||
|
command = printDialogValue)
|
||
|
|
||
|
|
||
|
fancyDialog = YesNoDialog(text = 'Testing Direct Dialog',
|
||
|
geom = smiley,
|
||
|
geom_scale = .1,
|
||
|
geom_pos = (-0.3, 0, 0),
|
||
|
command = printDialogValue)
|
||
|
|
||
|
customDialog = DirectDialog(text = 'Pick a number',
|
||
|
buttonTextList = [str(i) for i in range(10)],
|
||
|
buttonValueList = range(10),
|
||
|
command = printDialogValue)
|
||
|
|
||
|
|
||
|
|
||
|
# NOTE: There are some utility functions which help you get size
|
||
|
# of a direct gui widget. These can be used to position and scale an
|
||
|
# image after you've created the entry. scale = (width/2, 1, height/2)
|
||
|
print('BOUNDS: %s' % de1.getBounds())
|
||
|
print('WIDTH: %s' % de1.getWidth())
|
||
|
print('HEIGHT: %s' % de1.getHeight())
|
||
|
print('CENTER: %s' % (de1.getCenter(),))
|
||
|
|
||
|
base.run()
|