Revision: 20372
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20372
Author:   dfelinto
Date:     2009-05-24 06:45:10 +0200 (Sun, 24 May 2009)

Log Message:
-----------
Patch #18815: BGE: More updates to deprecation documentation and 2.49 
conversion script by Alex Frases(z0r)

 - Fixed some deprecation warnings in documentation.
 - Added more conversions to script.
 - Added more attributes to script todo list.
 - Print out name of text buffer when encountering an error in batch mode.
 - Refactor: Simplified attribute map.
 - Added notImplemented function to print warnings for missing conversions. 
References documentation.

Modified Paths:
--------------
    trunk/blender/release/scripts/textplugin_convert_ge.py
    trunk/blender/source/gameengine/PyDoc/GameTypes.py

Modified: trunk/blender/release/scripts/textplugin_convert_ge.py
===================================================================
--- trunk/blender/release/scripts/textplugin_convert_ge.py      2009-05-24 
01:55:24 UTC (rev 20371)
+++ trunk/blender/release/scripts/textplugin_convert_ge.py      2009-05-24 
04:45:10 UTC (rev 20372)
@@ -39,16 +39,23 @@
 # recommended that you review all changes after running this script.
 #
 # TODO: The following attributes are either ambiguous or need special 
processing
-# to handle parameters.
+# to handle parameters. Deprecated attributes that map to multiple target
+# attributes will require a refactor of the main conversion loop in the
+# convert248to249 function: currently, it doesn't allow any conversion to
+# advance the row index by more than one.
 #
-# getLinearVelocity  (KX_SCA_AddObjectActuator)
+# getLinearVelocity  (KX_SCA_AddObjectActuator, KX_ObjectActuator)
 #                    Conflicts with KX_GameObject.
-# setLinearVelocity  (KX_SCA_AddObjectActuator)
+#                    Maps to multiple attributes.
+# setLinearVelocity  (KX_SCA_AddObjectActuator, KX_ObjectActuator)
 #                    Conflicts with KX_GameObject.
-# getAngularVelocity (KX_SCA_AddObjectActuator)
+#                    Maps to multiple attributes.
+# getAngularVelocity (KX_SCA_AddObjectActuator, KX_ObjectActuator)
 #                    Conflicts with KX_GameObject.
-# setAngularVelocity (KX_SCA_AddObjectActuator)
+#                    Maps to multiple attributes.
+# setAngularVelocity (KX_SCA_AddObjectActuator, KX_ObjectActuator)
 #                    Conflicts with KX_GameObject.
+#                    Maps to multiple attributes.
 # setAction          (BL_ShapeActionActuator, BL_ActionActuator)
 #                    `reset' argument has no conversion target.
 # set                (KX_VisibilityActuator, KX_IpoActuator)
@@ -69,6 +76,26 @@
 #                    KX_GameObject.
 # setOperation       (KX_SCA_DynamicActuator, KX_StateActuator)
 #                    Ambiguous: different target names.
+# getDRot            (KX_ObjectActuator)
+#                    Maps to multiple attributes.
+# setDRot            (KX_ObjectActuator)
+#                    Arguments map to multiple attributes.
+# getDLoc            (KX_ObjectActuator)
+#                    Maps to multiple attributes.
+# setDLoc            (KX_ObjectActuator)
+#                    Arguments map to multiple attributes.
+# getTorque          (KX_ObjectActuator)
+#                    Maps to multiple attributes.
+# setTorque          (KX_ObjectActuator)
+#                    Arguments map to multiple attributes.
+# getForce           (KX_ObjectActuator)
+#                    Maps to multiple attributes.
+# setForce           (KX_ObjectActuator)
+#                    Arguments map to multiple attributes.
+# position           (KX_GameObject)
+#                    Conflicts with KX_SoundActuator.
+# orientation        (KX_GameObject)
+#                    Conflicts with KX_SoundActuator.
 #
 
 import string
@@ -268,7 +295,9 @@
        lines[row] = replaceSubstr(lines[row], colStart, colEnd, 'position')
 
 def replaceRename(lines, row, colStart, colEnd, newName):
-       """Replace an identifier with another, e.g. foo.getBar() -> foo.getBaz()
+       """Replace an identifier with another, e.g.
+       foo.getBar() -> foo.getBaz()
+       foo.bar -> foo.baz
        
        The identifier being replaced must be on line `row' and between 
`colStart'
        and `colEnd'."""
@@ -402,233 +431,268 @@
        # It's probably a KX_GameObject.
        replaceSimpleSetter(lines, row, colStart, colEnd, 'localPosition')
 
+def replaceSplitProperty(lines, row, colStart, colEnd, (newGetter, newSetter)):
+       '''Some property attributes behave differently when being written to or 
read
+       from. Try to determine the operation, and replace accordingly. E.G.
+       o.position = foo -> o.localPosition = foo   # set
+       foo = o.position -> foo = o.worldPosition   # get
+
+       This implementation can not handle cases where the object is returned 
from
+       a function, e.g.
+       foo = bar.getObject().position # Error!
+
+       Raises a ConversionError if the operation can't be determined, or if the
+       object is returned from a function.'''
+       assnRegex = re.compile(r'(=\s*)?' # Getter
+                                                       r'[a-zA-Z_]\w*' # 
Object identifier
+                                                       
r'\.([a-zA-Z_][a-zA-Z0-9_.]*)+' # Trailing attributes
+                                                       r'(\s*=)?') # Setter
+       match = assnRegex.search(lines[row])
+       
+       if not match:
+               raise ConversionError, "Can't determine operation (getting or 
setting)."
+
+       setting = False
+       getting = False
+       if match.group(1):
+                       getting = True
+       if match.group(3):
+                       setting = True
+       if (getting and setting) or ((not getting) and (not setting)):
+                       raise ConversionError, "Can't determine operation 
(getting or setting)."
+
+       if getting:
+                       replaceRename(lines, row, colStart, colEnd, newGetter)
+       else:
+                       replaceRename(lines, row, colStart, colEnd, newSetter)
+
+def notImplemented(lines, row, colStart, colEnd, classNames):
+       message = "Conversion not implemented. See documentation for " +\
+                 string.join(classNames, ', ')
+       raise ConversionError, message
+
 #
 # Deprecated attribute information. The format is:
-# deprecatedAttributeName: {(conversionFunction, closure): classList}
+# deprecatedAttributeName: (conversionFunction, closure)
 # Usually the closure will be the name of the superceding attribute.
 #
-# If an attribute maps to more than one function/attribute pair, the conversion
-# is ambiguous and can't be performed.
+# Since each deprecated attribute can appear in this dictionary only once, it 
is
+# the conversion function's responsibility to resolve ambiguity.
 #
 attributeRenameDict = {
  # Special cases
- 'addActiveActuator': {(replaceAddActiveActuator, None): []},
- 'getActuator': {(replaceGetActuator, None): ['SCA_IController', 
'SCA_ActuatorSensor']},
- 'getXPosition': {(replaceGetXYPosition, '0'): ['SCA_MouseSensor']},
- 'getYPosition': {(replaceGetXYPosition, '1'): ['SCA_MouseSensor']},
- 'setOrientation': {(replaceSetOrientation, None): ['KX_GameObject', 
'KX_SoundActuator']},
- 'setPosition': {(replaceSetPosition, None): ['KX_GameObject', 
'KX_SoundActuator']},
+ 'addActiveActuator': (replaceAddActiveActuator, None), # 
+ 'getActuator': (replaceGetActuator, None), # SCA_IController, 
SCA_ActuatorSensor
+ 'getXPosition': (replaceGetXYPosition, '0'), # SCA_MouseSensor
+ 'getYPosition': (replaceGetXYPosition, '1'), # SCA_MouseSensor
+ 'setOrientation': (replaceSetOrientation, None), # KX_GameObject, 
KX_SoundActuator
+ 'setPosition': (replaceSetPosition, None), # KX_GameObject, KX_SoundActuator
 
  # Keyed getters/setters
- 'getSensor': {(replaceKeyedGetter, 'sensors'): ['SCA_IController']},
+ 'getSensor': (replaceKeyedGetter, 'sensors'), # SCA_IController
 
  # Multi-arg -> List setter
- 'setAxis': {(replaceArgsWithListSetter, 'axis'): ['SCA_JoystickSensor']},
- 'setHat': {(replaceArgsWithListSetter, 'hat'): ['SCA_JoystickSensor']},
- 'setVelocity': {(replaceArgsWithListSetter, 'velocity'): 
['KX_SoundActuator']},
+ 'setAxis': (replaceArgsWithListSetter, 'axis'), # SCA_JoystickSensor
+ 'setForceLimitX': (replaceArgsWithListSetter, 'forceLimitX'), # 
KX_ObjectActuator
+ 'setForceLimitY': (replaceArgsWithListSetter, 'forceLimitY'), # 
KX_ObjectActuator
+ 'setForceLimitZ': (replaceArgsWithListSetter, 'forceLimitZ'), # 
KX_ObjectActuator
+ 'setHat': (replaceArgsWithListSetter, 'hat'), # SCA_JoystickSensor
+ 'setPID': (replaceArgsWithListSetter, 'pid'), # KX_ObjectActuator
+ 'setVelocity': (replaceArgsWithListSetter, 'velocity'), # KX_SoundActuator
 
  # Straight rename
- 'getButtonValue': {(replaceRename, 'getButtonActiveList'): 
['SCA_JoystickSensor']},
+ 'getButtonValue': (replaceRename, 'getButtonActiveList'), # SCA_JoystickSensor
 
+ # Split properties
+ 'scaling': (replaceSplitProperty, ('worldScaling', 'localScaling')), # 
KX_GameObject
+
  # Simple getters/setters
- 'getSensors': {(replaceSimpleGetter, 'sensors'): ['SCA_IController']},
- 'getActuators': {(replaceSimpleGetter, 'actuators'): ['SCA_IController']},
- 'enableViewport': {(replaceSimpleSetter, 'useViewport'): ['KX_Camera']},
- 'getAction': {(replaceSimpleGetter, 'action'): ['BL_ShapeActionActuator', 
'BL_ActionActuator']},
- 'getAxis': {(replaceSimpleGetter, 'axis'): ['SCA_JoystickSensor']},
- 'getAxisValue': {(replaceSimpleGetter, 'axisValues'): ['SCA_JoystickSensor']},
- 'getBlendin': {(replaceSimpleGetter, 'blendIn'): ['BL_ShapeActionActuator',
-                                                   'BL_ActionActuator']},
- 'getBodies': {(replaceSimpleGetter, 'bodies'): ['KX_NetworkMessageSensor']},
- 'getButton': {(replaceSimpleGetter, 'button'): ['SCA_JoystickSensor']},
- 'getCamera': {(replaceSimpleGetter, 'camera'): ['KX_SceneActuator']},
- 'getConeOrigin': {(replaceSimpleGetter, 'coneOrigin'): ['KX_RadarSensor']},
- 'getConeTarget': {(replaceSimpleGetter, 'coneTarget'): ['KX_RadarSensor']},
- 'getContinue': {(replaceSimpleGetter, 'useContinue'): ['BL_ActionActuator']},
- 'getCurrentlyPressedKeys': {(replaceSimpleGetter, 'events'): 
['SCA_KeyboardSensor']},
- 'getDelay': {(replaceSimpleGetter, 'delay'): ['SCA_DelaySensor']},
- 'getDistribution': {(replaceSimpleGetter, 'distribution'): 
['SCA_RandomActuator']},
- 'getDuration': {(replaceSimpleGetter, 'duration'): ['SCA_DelaySensor']},
- 'getEnd': {(replaceSimpleGetter, 'frameEnd'): ['BL_ShapeActionActuator',
-                                                'KX_IpoActuator',
-                                                'BL_ActionActuator']},
- 'getExecutePriority': {(replaceSimpleGetter, 'executePriority'): 
['SCA_ILogicBrick']},
- 'getFile': {(replaceSimpleGetter, 'fileName'): ['KX_GameActuator']},
- 'getFilename': {(replaceSimpleGetter, 'fileName'): ['KX_SoundActuator']},
- 'getForceIpoActsLocal': {(replaceSimpleGetter, 'useIpoLocal'): 
['KX_IpoActuator']},
- 'getFrame': {(replaceSimpleGetter, 'frame'): ['BL_ShapeActionActuator', 
'BL_ActionActuator']},
- 'getFrameMessageCount': {(replaceSimpleGetter, 'frameMessageCount'): 
['KX_NetworkMessageSensor']},
- 'getFrameProperty': {(replaceSimpleGetter, 'framePropName'): 
['BL_ShapeActionActuator',
-                                                               
'BL_ActionActuator']},
- 'getFrequency': {(replaceSimpleGetter, 'frequency'): ['SCA_ISensor']},
- 'getGain': {(replaceSimpleGetter, 'volume'): ['KX_SoundActuator', 
'KX_CDActuator']},
- 'getHat': {(replaceSimpleGetter, 'hat'): ['SCA_JoystickSensor']},

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to