All pastes #419035 Raw Edit

Stuff

public python v1 · immutable
·published 2007-04-01 00:20 UTC
rendered paste body
# -*- indent-tabs-mode: t -*-# Soya 3D tutorial# Copyright (C) 2004 Jean-Baptiste LAMY## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA# mouse-1: 3D mouse cursor# In this lesson, you'll learn how to display a 3D mouse cursor.# See the raypicking-2 tuto for more mouse-oriented tutorials.import sys, os,time,os.path, soya, soya.cube, soya.sdlconst, randomsoya.init()soya.path.append(os.path.join(os.path.dirname(sys.argv[0]), "data"))# Creates the scene.scene = soya.World()class HotSpot(soya.CoordSyst):    def __init__(self,parent,distance=1,function=None,angle=None):        soya.CoordSyst.__init__(self,parent)        #self.triggered = 0        self.distance = distance        self.function = function        #self.onceda = 0        self.angle = angle        self.hit_time = 0        self.actors = [cube,bluecube,redcube,cube1,cube2,cube3]        self._front_vector = soya.Vector(self,0,0,-1)        self._tmp_vector   = soya.Vector(self)        print "Created a hotspot"    def begin_round(self):                distance = self.distance        #print self.x,self.y,self.z        if self.angle is None:            #print "asfd"            for actor in self.actors:                #print "asfd1"                if self.distance_to(actor) <= self.distance:                    print actor                    scene.remove(actor)                    #self.function(actor)        else:            print "asfd"            tmp_vector = self._tmp_vector            front_vector = self._front_vector             angle = self.angle            for actor in actors:                if self.distance_to(actor) <= distance:                    tmp_vector.set_start_end(self,actor)                    if tmp_vector.angle_to(front_vector) <= angle:                        print "asdfgg"                        #self.function(actor) class Cursor(soya.Body):	def __init__(self, parent, model = None):                #self.world = soya.World()		soya.Body.__init__(self, parent, model)		#self.world.add(hotspot)		hotspot.x = self.x		hotspot.y = self.y		hotspot.z = self.z		self.speed = soya.Vector(self, 0.0, 0.0, -1.3)		self.movea = 0		self.timer = 0		self.timeb = 0	def begin_round(self):		soya.Body.begin_round(self)		hotspot.x = self.x		hotspot.y = self.y		hotspot.z = self.z		# Processes the events		if self.movea == 1:                                        self.timeb = time.time()                    #print "if ok"                    while self.timeb - self.timer > 0.5:                        #print "if ok"                        self.set_xyz(0,0,-0.2)                        self.movea =0                    #    print "timer"                                                break                    self.add_mul_vector(1,self.speed)		for event in soya.process_event():			if event[0] == soya.sdlconst.MOUSEBUTTONDOWN:                            self.timer = time.time()                            self.movea =1                            			if event[0] == soya.sdlconst.MOUSEMOTION:                                if self.movea == 0:                                                                        self.mouse_pos = camera.coord2d_to_3d(event[1], event[2], self.z-4)# only 4 works...???                                    #print self.mouse_pos                                    self.move(self.mouse_pos)				green = soya.Material(); green.diffuse = (0.0, 0.0, 1.0, 1.0)red = soya.Material(); red.diffuse = (1.0, 0.0, 0.0, 1.0)blue = soya.Material(); blue.diffuse = (0.0, 1.0, 0.0, 1.0)cursorworld = soya.World(scene)yscene =soya.World()gcube = soya.cube.Cube(None, green).to_model()bcube = soya.cube.Cube(None, blue).to_model()rcube = soya.cube.Cube(None, red).to_model()bluecube = soya.Body(scene,bcube)redcube =  soya.Body(scene,rcube)bluecube.z = -5.5bluecube.x = 1.5redcube.z = -5.5redcube.x = -1.5cubes = [gcube,bcube,rcube]cube = soya.Body(scene, cubes[random.randrange(0,3)])cube.x = random.randrange(-8,8)cube.y = random.randrange(-8,8)cube.z = -5cube1 = soya.Body(scene, cubes[random.randrange(0,3)])cube1.x = random.randrange(-8,8)cube1.y = random.randrange(-8,8)cube1.z = -5cube2 = soya.Body(scene, cubes[random.randrange(0,3)])cube2.x = random.randrange(-8,8)cube2.y = random.randrange(-8,8)cube2.z = -5cube3 = soya.Body(scene, cubes[random.randrange(0,3)])cube3.x = random.randrange(-8,8)cube3.y = random.randrange(-8,8)cube3.z = -5def hi():    print "hi"hotspot = HotSpot(scene,1)#block = soya.cube.Cube(None, green).to_model()a =Cursor(cursorworld, soya.cube.Cube(None, green).to_model())# Adds a light.light = soya.Light(scene)light.set_xyz(0.0, 0.2, 1.0)# Creates a camera.camera = soya.Camera(scene)camera.set_xyz(0.0, 0.0, 4.0)camera.fov = 100.0soya.set_root_widget(camera)# Main looptry:	soya.MainLoop(scene).main_loop()except:	soya.render(); soya.screenshot().resize((320, 240)).save(os.path.join(os.path.dirname(sys.argv[0]), "results", os.path.basename(sys.argv[0])[:-3] + ".jpeg"))