| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/env python
2 #
3 # The Vision Egg: MouseTargetServer
4 #
5 # Copyright (C) 2001-2003 Andrew Straw.
6 # Author: Andrew Straw <astraw@users.sourceforge.net>
7 # URL: <http://www.visionegg.org/>
8 #
9 # Distributed under the terms of the GNU Lesser General Public License
10 # (LGPL). See LICENSE.TXT that came with this file.
11 #
12 # $Id$
13
14 """Handle mouse-controlled small targets (server-side)"""
15
16 import VisionEgg, string
17 import VisionEgg.ParameterTypes as ve_types
18
19 __version__ = VisionEgg.release_name
20 __cvs__ = string.split('$Revision$')[1]
21 __date__ = string.join(string.split('$Date$')[1:3], ' ')
22 __author__ = 'Andrew Straw <astraw@users.sourceforge.net>'
23
24 import sys, os, math
25 import VisionEgg.Core
26 import VisionEgg.FlowControl
27 import VisionEgg.MoreStimuli
28 import VisionEgg.PyroHelpers
29 import Pyro.core
30 import pygame, pygame.locals
31
32 from VisionEgg.PyroApps.MouseTargetGUI import MouseTargetMetaParameters
33
34 # Variables to store the mouse position
35 mouse_position = (320.0, 240.0)
36 last_mouse_position = (0.0,0.0)
37
38 # target size global variables
39 target_w = 50.0
40 target_h = 10.0
41
42 # key state global variables
43 up = 0
44 down = 0
45 left = 0
46 right = 0
47
49 global up, down, left, right
50 if event.key == pygame.locals.K_UP:
51 up = 1
52 elif event.key == pygame.locals.K_DOWN:
53 down = 1
54 elif event.key == pygame.locals.K_RIGHT:
55 right = 1
56 elif event.key == pygame.locals.K_LEFT:
57 left = 1
58
60 global up, down, left, right
61 if event.key == pygame.locals.K_UP:
62 up = 0
63 elif event.key == pygame.locals.K_DOWN:
64 down = 0
65 elif event.key == pygame.locals.K_RIGHT:
66 right = 0
67 elif event.key == pygame.locals.K_LEFT:
68 left = 0
69
70 handle_event_callbacks = [(pygame.locals.KEYDOWN, keydown),
71 (pygame.locals.KEYUP, keyup)]
72
75 global screen_global
76 screen_global = screen
77 # get stimulus
78 assert( stimuli[0][0] == '2d_overlay')
79 target = stimuli[0][1]
80
81 Pyro.core.ObjBase.__init__(self)
82 self.meta_params = MouseTargetMetaParameters()
83 if not isinstance(screen,VisionEgg.Core.Screen):
84 raise ValueError("Expecting instance of VisionEgg.Core.Screen")
85 if not isinstance(presentation,VisionEgg.FlowControl.Presentation):
86 raise ValueError("Expecting instance of VisionEgg.FlowControl.Presentation")
87 if not isinstance(target,VisionEgg.MoreStimuli.Target2D):
88 raise ValueError("Expecting instance of VisionEgg.MoreStimuli.Target2D")
89
90 self.screen = screen
91 self.p = presentation
92 self.stim = target
93
94 self.p.add_controller(target,'position', TargetPositionController())
95 self.p.add_controller(target,'size', VisionEgg.FlowControl.FunctionController(during_go_func=get_target_size,
96 between_go_func=get_target_size) )
97 self.p.add_controller(target,'orientation', TargetOrientationController() )
98 self.mouse_position_controller = MousePositionController()
99 self.p.add_controller(None,None,self.mouse_position_controller)
100 self.orig_event_handlers = self.p.parameters.handle_event_callbacks
101 self.p.parameters.handle_event_callbacks = handle_event_callbacks
102
103 self.update() # set stimulus parameters to initial defaults
104
106 self.p.parameters.handle_event_callbacks = self.orig_event_handlers
107 self.p.remove_controller(None,None,self.mouse_position_controller)
108 self.p.remove_controller(self.stim,'position')
109 self.p.remove_controller(self.stim,'size')
110 self.p.remove_controller(self.stim,'orientation')
111
114
116 if isinstance(new_parameters, MouseTargetMetaParameters):
117 self.meta_params = new_parameters
118 else:
119 raise ValueError("Argument to set_parameters must be instance of MouseTargetMetaParameters")
120 self.update()
121
123 stim_params = self.stim.parameters # shorthand
124 meta_params = self.meta_params # shorthand
125
126 # colors
127 stim_params.color = meta_params.color
128 self.screen.parameters.bgcolor = meta_params.bgcolor
129
132 #self.p.parameters.enter_go_loop = 1
133
135 self.p.parameters.quit = 1
136
138 return MouseTargetExperimentMetaController
139
143
146
147 ########################
148 # Define controllers #
149 ########################
150
153 global mouse_position
154 VisionEgg.FlowControl.Controller.__init__(self,
155 return_type=ve_types.get_type(None),
156 eval_frequency=VisionEgg.FlowControl.Controller.EVERY_FRAME)
157 self.between_go_eval = self.during_go_eval
158
160 # Convert pygame mouse position to OpenGL position
161 global mouse_position, last_mouse_position, screen_global
162 just_current_pos = mouse_position
163 (x,y) = pygame.mouse.get_pos()
164 y = screen_global.size[1]-y
165 mouse_position = (x,y)
166 if just_current_pos != mouse_position:
167 last_mouse_position = just_current_pos
168 return None
169
172 global mouse_position
173 VisionEgg.FlowControl.Controller.__init__(self,
174 return_type=ve_types.Sequence2(ve_types.Real),
175 eval_frequency=VisionEgg.FlowControl.Controller.EVERY_FRAME)
176 self.between_go_eval = self.