diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2009-05-24 08:45:10 +0400 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2009-05-24 08:45:10 +0400 |
commit | 45f2463c833577852b2c9d3c85e435fc25b945bd (patch) | |
tree | 42aae2aedb34e3287d67c0247c994c2656f88286 /release | |
parent | 52b0a2b3dbf5c5e0b930dcaff8647ec1d06e2d3c (diff) |
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.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/textplugin_convert_ge.py | 534 |
1 files changed, 292 insertions, 242 deletions
diff --git a/release/scripts/textplugin_convert_ge.py b/release/scripts/textplugin_convert_ge.py index 043b40252d9..f3b44cdb14b 100644 --- a/release/scripts/textplugin_convert_ge.py +++ b/release/scripts/textplugin_convert_ge.py @@ -39,16 +39,23 @@ Tooltip: 'Attemps to update deprecated usage of game engine API.' # 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 @@ Tooltip: 'Attemps to update deprecated usage of game engine API.' # 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 @@ def replaceGetXYPosition(lines, row, colStart, colEnd, axis): 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 @@ def replaceSetPosition(lines, row, colStart, colEnd, closure): # 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']}, - 'getHeight': {(replaceSimpleGetter, 'height'): ['KX_CameraActuator']}, - 'getHitNormal': {(replaceSimpleGetter, 'hitNormal'): ['KX_MouseFocusSensor', 'KX_RaySensor']}, - 'getHitObject': {(replaceSimpleGetter, 'hitObject'): ['KX_MouseFocusSensor', - 'KX_RaySensor', - 'KX_TouchSensor']}, - 'getHitObjectList': {(replaceSimpleGetter, 'hitObjectList'): ['KX_TouchSensor']}, - 'getHitPosition': {(replaceSimpleGetter, 'hitPosition'): ['KX_MouseFocusSensor', - 'KX_RaySensor']}, - 'getHold1': {(replaceSimpleGetter, 'hold1'): ['SCA_KeyboardSensor']}, - 'getHold2': {(replaceSimpleGetter, 'hold2'): ['SCA_KeyboardSensor']}, - 'getInvert': {(replaceSimpleGetter, 'invert'): ['SCA_ISensor']}, - 'getIpoAdd': {(replaceSimpleGetter, 'useIpoAdd'): ['KX_IpoActuator']}, - 'getIpoAsForce': {(replaceSimpleGetter, 'useIpoAsForce'): ['KX_IpoActuator']}, - 'getKey': {(replaceSimpleGetter, 'key'): ['SCA_KeyboardSensor']}, - 'getLastCreatedObject': {(replaceSimpleGetter, 'objectLastCreated'): ['KX_SCA_AddObjectActuator']}, - 'getLevel': {(replaceSimpleGetter, 'level'): ['SCA_ISensor']}, - 'getLightList': {(replaceSimpleGetter, 'lights'): ['KX_Scene']}, - 'getLooping': {(replaceSimpleGetter, 'looping'): ['KX_SoundActuator']}, - 'getMass': {(replaceSimpleGetter, 'mass'): ['KX_GameObject']}, - 'getMax': {(replaceSimpleGetter, 'max'): ['KX_CameraActuator']}, - 'getMin': {(replaceSimpleGetter, 'min'): ['KX_CameraActuator']}, - 'getName': {(replaceSimpleGetter, 'name'): ['KX_Scene']}, - 'getNumAxes': {(replaceSimpleGetter, 'numAxis'): ['SCA_JoystickSensor']}, - 'getNumButtons': {(replaceSimpleGetter, 'numButtons'): ['SCA_JoystickSensor']}, - 'getNumHats': {(replaceSimpleGetter, 'numHats'): ['SCA_JoystickSensor']}, - 'getObjectList': {(replaceSimpleGetter, 'objects'): ['KX_Scene']}, - 'getOperation': {(replaceSimpleGetter, 'mode'): ['KX_SCA_DynamicActuator']}, - 'getOrientation': {(replaceSimpleGetter, 'worldOrientation'): ['KX_GameObject']}, - 'getOwner': {(replaceSimpleGetter, 'owner'): ['SCA_ILogicBrick']}, - 'getPara1': {(replaceSimpleGetter, 'para1'): ['SCA_RandomActuator']}, - 'getPara2': {(replaceSimpleGetter, 'para2'): ['SCA_RandomActuator']}, - 'getParent': {(replaceSimpleGetter, 'parent'): ['KX_GameObject']}, - 'getPitch': {(replaceSimpleGetter, 'pitch'): ['KX_SoundActuator']}, - 'getPosition': {(replaceSimpleGetter, 'worldPosition'): ['KX_GameObject']}, - 'getPressedKeys': {(replaceSimpleGetter, 'events'): ['SCA_KeyboardSensor']}, - 'getPriority': {(replaceSimpleGetter, 'priority'): ['BL_ShapeActionActuator', - 'BL_ActionActuator']}, - 'getProjectionMatrix': {(replaceSimpleGetter, 'projection_matrix'): ['KX_Camera']}, - 'getProperty': {(replaceSimpleGetter, 'propName'): ['SCA_PropertySensor', - 'SCA_RandomActuator', - 'SCA_PropertyActuator']}, - 'getRayDirection': {(replaceSimpleGetter, 'rayDirection'): ['KX_MouseFocusSensor', - 'KX_RaySensor']}, - 'getRaySource': {(replaceSimpleGetter, 'raySource'): ['KX_MouseFocusSensor']}, - 'getRayTarget': {(replaceSimpleGetter, 'rayTarget'): ['KX_MouseFocusSensor']}, - 'getRepeat': {(replaceSimpleGetter, 'repeat'): ['SCA_DelaySensor']}, - 'getRollOffFactor': {(replaceSimpleGetter, 'rollOffFactor'): ['KX_SoundActuator']}, - 'getScene': {(replaceSimpleGetter, 'scene'): ['KX_SceneActuator']}, - 'getScript': {(replaceSimpleGetter, 'script'): ['SCA_PythonController']}, - 'getSeed': {(replaceSimpleGetter, 'seed'): ['SCA_RandomActuator']}, - 'getStart': {(replaceSimpleGetter, 'frameStart'): ['BL_ShapeActionActuator', - 'KX_IpoActuator', - 'BL_ActionActuator']}, - 'getState': {(replaceSimpleGetter, 'state'): ['SCA_IController', 'KX_GameObject']}, - 'getSubject': {(replaceSimpleGetter, 'subject'): ['KX_NetworkMessageSensor']}, - 'getSubjects': {(replaceSimpleGetter, 'subjects'): ['KX_NetworkMessageSensor']}, - 'getThreshold': {(replaceSimpleGetter, 'threshold'): ['SCA_JoystickSensor']}, - 'getTime': {(replaceSimpleGetter, 'time'): ['KX_SCA_AddObjectActuator', 'KX_TrackToActuator']}, - 'getTouchMaterial': {(replaceSimpleGetter, 'useMaterial'): ['KX_TouchSensor']}, - 'getType': {(replaceSimpleGetter, 'mode'): ['SCA_PropertySensor']}, - 'getUse3D': {(replaceSimpleGetter, 'use3D'): ['KX_TrackToActuator']}, - 'getUseNegPulseMode': {(replaceSimpleGetter, 'useNegPulseMode'): ['SCA_ISensor']}, - 'getUsePosPulseMode': {(replaceSimpleGetter, 'usePosPulseMode'): ['SCA_ISensor']}, - 'getUseRestart': {(replaceSimpleGetter, 'useRestart'): ['KX_SceneActuator']}, - 'getValue': {(replaceSimpleGetter, 'value'): ['SCA_PropertySensor', 'SCA_PropertyActuator']}, - 'getVisible': {(replaceSimpleGetter, 'visible'): ['KX_GameObject']}, - 'getXY': {(replaceSimpleGetter, 'useXY'): ['KX_CameraActuator']}, - 'isConnected': {(replaceSimpleGetter, 'connected'): ['SCA_JoystickSensor']}, - 'isPositive': {(replaceSimpleGetter, 'positive'): ['SCA_ISensor']}, - 'isTriggered': {(replaceSimpleGetter, 'triggered'): ['SCA_ISensor']}, - 'setActuator': {(replaceSimpleSetter, 'actuator'): ['SCA_ActuatorSensor']}, - 'setBlendin': {(replaceSimpleSetter, 'blendIn'): ['BL_ShapeActionActuator', - 'BL_ActionActuator']}, - 'setBlendtime': {(replaceSimpleSetter, 'blendTime'): ['BL_ShapeActionActuator', - 'BL_ActionActuator']}, - 'setBodyType': {(replaceSimpleSetter, 'usePropBody'): ['KX_NetworkMessageActuator']}, - 'setButton': {(replaceSimpleSetter, 'button'): ['SCA_JoystickSensor']}, - 'setCamera': {(replaceSimpleSetter, 'camera'): ['KX_SceneActuator']}, - 'setContinue': {(replaceSimpleSetter, 'useContinue'): ['BL_ActionActuator']}, - 'setDelay': {(replaceSimpleSetter, 'delay'): ['SCA_DelaySensor']}, - 'setDuration': {(replaceSimpleSetter, 'duration'): ['SCA_DelaySensor']}, - 'setEnd': {(replaceSimpleSetter, 'frameEnd'): ['BL_ShapeActionActuator', - 'KX_IpoActuator', - 'BL_ActionActuator']}, - 'setExecutePriority': {(replaceSimpleSetter, 'executePriority'): ['SCA_ILogicBrick']}, - 'setFile': {(replaceSimpleSetter, 'fileName'): ['KX_GameActuator']}, - 'setFilename': {(replaceSimpleSetter, 'fileName'): ['KX_SoundActuator']}, - 'setForceIpoActsLocal': {(replaceSimpleSetter, 'useIpoLocal'): ['KX_IpoActuator']}, - 'setFrame': {(replaceSimpleSetter, 'frame'): ['BL_ShapeActionActuator', 'BL_ActionActuator']}, - 'setFrameProperty': {(replaceSimpleSetter, 'framePropName'): ['BL_ShapeActionActuator', - 'BL_ActionActuator']}, - 'setFrequency': {(replaceSimpleSetter, 'frequency'): ['SCA_ISensor']}, - 'setGain': {(replaceSimpleSetter, 'volume'): ['KX_SoundActuator', 'KX_CDActuator']}, - 'setHeight': {(replaceSimpleSetter, 'height'): ['KX_CameraActuator']}, - 'setHold1': {(replaceSimpleSetter, 'hold1'): ['SCA_KeyboardSensor']}, - 'setHold2': {(replaceSimpleSetter, 'hold2'): ['SCA_KeyboardSensor']}, - 'setInvert': {(replaceSimpleSetter, 'invert'): ['SCA_ISensor']}, - 'setIpoAdd': {(replaceSimpleSetter, 'useIpoAdd'): ['KX_IpoActuator']}, - 'setIpoAsForce': {(replaceSimpleSetter, 'useIpoAsForce'): ['KX_IpoActuator']}, - 'setKey': {(replaceSimpleSetter, 'key'): ['SCA_KeyboardSensor']}, - 'setLevel': {(replaceSimpleSetter, 'level'): ['SCA_ISensor']}, - 'setLooping': {(replaceSimpleSetter, 'looping'): ['KX_SoundActuator']}, - 'setMask': {(replaceSimpleSetter, 'mask'): ['KX_StateActuator']}, - 'setMax': {(replaceSimpleSetter, 'max'): ['KX_CameraActuator']}, - 'setMesh': {(replaceSimpleSetter, 'mesh'): ['KX_SCA_ReplaceMeshActuator']}, - 'setMin': {(replaceSimpleSetter, 'min'): ['KX_CameraActuator']}, - 'setPitch': {(replaceSimpleSetter, 'pitch'): ['KX_SoundActuator']}, - 'setPriority': {(replaceSimpleSetter, 'priority'): ['BL_ShapeActionActuator', - 'BL_ActionActuator']}, - 'setProjectionMatrix': {(replaceSimpleSetter, 'projection_matrix'): ['KX_Camera']}, - 'setProperty': {(replaceSimpleSetter, 'propName'): ['KX_IpoActuator', - 'SCA_PropertySensor', - 'SCA_RandomActuator', - 'SCA_PropertyActuator']}, - 'setRepeat': {(replaceSimpleSetter, 'repeat'): ['SCA_DelaySensor']}, - 'setRollOffFactor': {(replaceSimpleSetter, 'rollOffFactor'): ['KX_SoundActuator']}, - 'setScene': {(replaceSimpleSetter, 'scene'): ['KX_SceneActuator']}, - 'setScript': {(replaceSimpleSetter, 'script'): ['SCA_PythonController']}, - 'setSeed': {(replaceSimpleSetter, 'seed'): ['SCA_RandomActuator']}, - 'setStart': {(replaceSimpleSetter, 'frameStart'): ['BL_ShapeActionActuator', - 'KX_IpoActuator', - 'BL_ActionActuator']}, - 'setState': {(replaceSimpleSetter, 'state'): ['KX_GameObject']}, - 'setSubject': {(replaceSimpleSetter, 'subject'): ['KX_NetworkMessageActuator']}, - 'setSubjectFilterText': {(replaceSimpleSetter, 'subject'): ['KX_NetworkMessageSensor']}, - 'setThreshold': {(replaceSimpleSetter, 'threshold'): ['SCA_JoystickSensor']}, - 'setTime': {(replaceSimpleSetter, 'time'): ['KX_SCA_AddObjectActuator', 'KX_TrackToActuator']}, - 'setToPropName': {(replaceSimpleSetter, 'propName'): ['KX_NetworkMessageActuator']}, - 'setType': {(replaceSimpleSetter, 'mode'): ['SCA_PropertySensor']}, - 'setUse3D': {(replaceSimpleSetter, 'use3D'): ['KX_TrackToActuator']}, - 'setUseNegPulseMode': {(replaceSimpleSetter, 'useNegPulseMode'): ['SCA_ISensor']}, - 'setUsePosPulseMode': {(replaceSimpleSetter, 'usePosPulseMode'): ['SCA_ISensor']}, - 'setUseRestart': {(replaceSimpleSetter, 'useRestart'): ['KX_SceneActuator']}, - 'setValue': {(replaceSimpleSetter, 'value'): ['SCA_PropertySensor', 'SCA_PropertyActuator']}, - 'setXY': {(replaceSimpleSetter, 'useXY'): ['KX_CameraActuator']} + '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 + 'getDamping': (replaceSimpleGetter, 'damping'), # KX_ObjectActuator + '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 + 'getForceLimitX': (replaceSimpleGetter, 'forceLimitX'), # KX_ObjectActuator + 'getForceLimitY': (replaceSimpleGetter, 'forceLimitY'), # KX_ObjectActuator + 'getForceLimitZ': (replaceSimpleGetter, 'forceLimitZ'), # KX_ObjectActuator + '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 + 'getHeight': (replaceSimpleGetter, 'height'), # KX_CameraActuator + 'getHitNormal': (replaceSimpleGetter, 'hitNormal'), # KX_MouseFocusSensor, KX_RaySensor + 'getHitObject': (replaceSimpleGetter, 'hitObject'), # KX_MouseFocusSensor, KX_RaySensor, KX_TouchSensor + 'getHitObjectList': (replaceSimpleGetter, 'hitObjectList'), # KX_TouchSensor + 'getHitPosition': (replaceSimpleGetter, 'hitPosition'), # KX_MouseFocusSensor, KX_RaySensor + 'getHold1': (replaceSimpleGetter, 'hold1'), # SCA_KeyboardSensor + 'getHold2': (replaceSimpleGetter, 'hold2'), # SCA_KeyboardSensor + 'getInvert': (replaceSimpleGetter, 'invert'), # SCA_ISensor + 'getIpoAdd': (replaceSimpleGetter, 'useIpoAdd'), # KX_IpoActuator + 'getIpoAsForce': (replaceSimpleGetter, 'useIpoAsForce'), # KX_IpoActuator + 'getKey': (replaceSimpleGetter, 'key'), # SCA_KeyboardSensor + 'getLastCreatedObject': (replaceSimpleGetter, 'objectLastCreated'), # KX_SCA_AddObjectActuator + 'getLevel': (replaceSimpleGetter, 'level'), # SCA_ISensor + 'getLightList': (replaceSimpleGetter, 'lights'), # KX_Scene + 'getLooping': (replaceSimpleGetter, 'looping'), # KX_SoundActuator + 'getMass': (replaceSimpleGetter, 'mass'), # KX_GameObject + 'getMax': (replaceSimpleGetter, 'max'), # KX_CameraActuator + 'getMin': (replaceSimpleGetter, 'min'), # KX_CameraActuator + 'getName': (replaceSimpleGetter, 'name'), # KX_Scene + 'getNumAxes': (replaceSimpleGetter, 'numAxis'), # SCA_JoystickSensor + 'getNumButtons': (replaceSimpleGetter, 'numButtons'), # SCA_JoystickSensor + 'getNumHats': (replaceSimpleGetter, 'numHats'), # SCA_JoystickSensor + 'getObjectList': (replaceSimpleGetter, 'objects'), # KX_Scene + 'getOperation': (replaceSimpleGetter, 'mode'), # KX_SCA_DynamicActuator + 'getOrientation': (replaceSimpleGetter, 'worldOrientation'), # KX_GameObject + 'getOwner': (replaceSimpleGetter, 'owner'), # SCA_ILogicBrick + 'getPara1': (replaceSimpleGetter, 'para1'), # SCA_RandomActuator + 'getPara2': (replaceSimpleGetter, 'para2'), # SCA_RandomActuator + 'getParent': (replaceSimpleGetter, 'parent'), # KX_GameObject + 'getPID': (replaceSimpleGetter, 'pid'), # KX_ObjectActuator + 'getPitch': (replaceSimpleGetter, 'pitch'), # KX_SoundActuator + 'getPosition': (replaceSimpleGetter, 'worldPosition'), # KX_GameObject + 'getPressedKeys': (replaceSimpleGetter, 'events'), # SCA_KeyboardSensor + 'getPriority': (replaceSimpleGetter, 'priority'), # BL_ShapeActionActuator, BL_ActionActuator + 'getProjectionMatrix': (replaceSimpleGetter, 'projection_matrix'), # KX_Camera + 'getProperty': (replaceSimpleGetter, 'propName'), # SCA_PropertySensor, SCA_RandomActuator, SCA_PropertyActuator + 'getRayDirection': (replaceSimpleGetter, 'rayDirection'), # KX_MouseFocusSensor, KX_RaySensor + 'getRaySource': (replaceSimpleGetter, 'raySource'), # KX_MouseFocusSensor + 'getRayTarget': (replaceSimpleGetter, 'rayTarget'), # KX_MouseFocusSensor + 'getRepeat': (replaceSimpleGetter, 'repeat'), # SCA_DelaySensor + 'getRollOffFactor': (replaceSimpleGetter, 'rollOffFactor'), # KX_SoundActuator + 'getScene': (replaceSimpleGetter, 'scene'), # KX_SceneActuator + 'getScript': (replaceSimpleGetter, 'script'), # SCA_PythonController + 'getSeed': (replaceSimpleGetter, 'seed'), # SCA_RandomActuator + 'getStart': (replaceSimpleGetter, 'frameStart'), # BL_ShapeActionActuator, KX_IpoActuator, BL_ActionActuator + 'getState': (replaceSimpleGetter, 'state'), # SCA_IController, KX_GameObject + 'getSubject': (replaceSimpleGetter, 'subject'), # KX_NetworkMessageSensor + 'getSubjects': (replaceSimpleGetter, 'subjects'), # KX_NetworkMessageSensor + 'getThreshold': (replaceSimpleGetter, 'threshold'), # SCA_JoystickSensor + 'getTime': (replaceSimpleGetter, 'time'), # KX_SCA_AddObjectActuator, KX_TrackToActuator + 'getTouchMaterial': (replaceSimpleGetter, 'useMaterial'), # KX_TouchSensor + 'getType': (replaceSimpleGetter, 'mode'), # SCA_PropertySensor + 'getUse3D': (replaceSimpleGetter, 'use3D'), # KX_TrackToActuator + 'getUseNegPulseMode': (replaceSimpleGetter, 'useNegPulseMode'), # SCA_ISensor + 'getUsePosPulseMode': (replaceSimpleGetter, 'usePosPulseMode'), # SCA_ISensor + 'getUseRestart': (replaceSimpleGetter, 'useRestart'), # KX_SceneActuator + 'getValue': (replaceSimpleGetter, 'value'), # SCA_PropertySensor, SCA_PropertyActuator + 'getVisible': (replaceSimpleGetter, 'visible'), # KX_GameObject + 'getXY': (replaceSimpleGetter, 'useXY'), # KX_CameraActuator + 'isConnected': (replaceSimpleGetter, 'connected'), # SCA_JoystickSensor + 'isPositive': (replaceSimpleGetter, 'positive'), # SCA_ISensor + 'isTriggered': (replaceSimpleGetter, 'triggered'), # SCA_ISensor + 'setActuator': (replaceSimpleSetter, 'actuator'), # SCA_ActuatorSensor + 'setBlendin': (replaceSimpleSetter, 'blendIn'), # BL_ShapeActionActuator, BL_ActionActuator + 'setBlendtime': (replaceSimpleSetter, 'blendTime'), # BL_ShapeActionActuator, BL_ActionActuator + 'setBodyType': (replaceSimpleSetter, 'usePropBody'), # KX_NetworkMessageActuator + 'setBody': (replaceSimpleSetter, 'body'), # KX_NetworkMessageActuator + 'setButton': (replaceSimpleSetter, 'button'), # SCA_JoystickSensor + 'setCamera': (replaceSimpleSetter, 'camera'), # KX_SceneActuator + 'setContinue': (replaceSimpleSetter, 'useContinue'), # BL_ActionActuator + 'setDamping': (replaceSimpleSetter, 'damping'), # KX_ObjectActuator + 'setDelay': (replaceSimpleSetter, 'delay'), # SCA_DelaySensor + 'setDuration': (replaceSimpleSetter, 'duration'), # SCA_DelaySensor + 'setEnd': (replaceSimpleSetter, 'frameEnd'), # BL_ShapeActionActuator, KX_IpoActuator, BL_ActionActuator + 'setExecutePriority': (replaceSimpleSetter, 'executePriority'), # SCA_ILogicBrick + 'setFile': (replaceSimpleSetter, 'fileName'), # KX_GameActuator + 'setFilename': (replaceSimpleSetter, 'fileName'), # KX_SoundActuator + 'setForceIpoActsLocal': (replaceSimpleSetter, 'useIpoLocal'), # KX_IpoActuator + 'setFrame': (replaceSimpleSetter, 'frame'), # BL_ShapeActionActuator, BL_ActionActuator + 'setFrameProperty': (replaceSimpleSetter, 'framePropName'), # BL_ShapeActionActuator, BL_ActionActuator + 'setFrequency': (replaceSimpleSetter, 'frequency'), # SCA_ISensor + 'setGain': (replaceSimpleSetter, 'volume'), # KX_SoundActuator, KX_CDActuator + 'setHeight': (replaceSimpleSetter, 'height'), # KX_CameraActuator + 'setHold1': (replaceSimpleSetter, 'hold1'), # SCA_KeyboardSensor + 'setHold2': (replaceSimpleSetter, 'hold2'), # SCA_KeyboardSensor + 'setInvert': (replaceSimpleSetter, 'invert'), # SCA_ISensor + 'setIpoAdd': (replaceSimpleSetter, 'useIpoAdd'), # KX_IpoActuator + 'setIpoAsForce': (replaceSimpleSetter, 'useIpoAsForce'), # KX_IpoActuator + 'setKey': (replaceSimpleSetter, 'key'), # SCA_KeyboardSensor + 'setLevel': (replaceSimpleSetter, 'level'), # SCA_ISensor + 'setLooping': (replaceSimpleSetter, 'looping'), # KX_SoundActuator + 'setMask': (replaceSimpleSetter, 'mask'), # KX_StateActuator + 'setMax': (replaceSimpleSetter, 'max'), # KX_CameraActuator + 'setMesh': (replaceSimpleSetter, 'mesh'), # KX_SCA_ReplaceMeshActuator + 'setMin': (replaceSimpleSetter, 'min'), # KX_CameraActuator + 'setPitch': (replaceSimpleSetter, 'pitch'), # KX_SoundActuator + 'setPriority': (replaceSimpleSetter, 'priority'), # BL_ShapeActionActuator, BL_ActionActuator + 'setProjectionMatrix': (replaceSimpleSetter, 'projection_matrix'), # KX_Camera + 'setProperty': (replaceSimpleSetter, 'propName'), # KX_IpoActuator, SCA_PropertySensor, SCA_RandomActuator, SCA_PropertyActuator + 'setRepeat': (replaceSimpleSetter, 'repeat'), # SCA_DelaySensor + 'setRollOffFactor': (replaceSimpleSetter, 'rollOffFactor'), # KX_SoundActuator + 'setScene': (replaceSimpleSetter, 'scene'), # KX_SceneActuator + 'setScript': (replaceSimpleSetter, 'script'), # SCA_PythonController + 'setSeed': (replaceSimpleSetter, 'seed'), # SCA_RandomActuator + 'setStart': (replaceSimpleSetter, 'frameStart'), # BL_ShapeActionActuator, KX_IpoActuator, BL_ActionActuator + 'setState': (replaceSimpleSetter, 'state'), # KX_GameObject + 'setSubject': (replaceSimpleSetter, 'subject'), # KX_NetworkMessageActuator + 'setSubjectFilterText': (replaceSimpleSetter, 'subject'), # KX_NetworkMessageSensor + 'setThreshold': (replaceSimpleSetter, 'threshold'), # SCA_JoystickSensor + 'setTime': (replaceSimpleSetter, 'time'), # KX_SCA_AddObjectActuator, KX_TrackToActuator + 'setToPropName': (replaceSimpleSetter, 'propName'), # KX_NetworkMessageActuator + 'setType': (replaceSimpleSetter, 'mode'), # SCA_PropertySensor + 'setUse3D': (replaceSimpleSetter, 'use3D'), # KX_TrackToActuator + 'setUseNegPulseMode': (replaceSimpleSetter, 'useNegPulseMode'), # SCA_ISensor + 'setUsePosPulseMode': (replaceSimpleSetter, 'usePosPulseMode'), # SCA_ISensor + 'setUseRestart': (replaceSimpleSetter, 'useRestart'), # KX_SceneActuator + 'setValue': (replaceSimpleSetter, 'value'), # SCA_PropertySensor, SCA_PropertyActuator + 'setXY': (replaceSimpleSetter, 'useXY'), # KX_CameraActuator # Unimplemented! - #'getLinearVelocity': {(replaceSimpleGetter, 'linearVelocity'): ['KX_SCA_AddObjectActuator']}, - #'setLinearVelocity': {(replaceSimpleSetter, 'linearVelocity'): ['KX_SCA_AddObjectActuator']}, - #'getAngularVelocity': {(replaceSimpleGetter, 'angularVelocity'): ['KX_SCA_AddObjectActuator']}, - #'setAngularVelocity': {(replaceSimpleSetter, 'angularVelocity'): ['KX_SCA_AddObjectActuator']}, - #'setAction': {(replaceSimpleSetter, 'action'): ['BL_ShapeActionActuator', 'BL_ActionActuator']}, - #'set': {(replaceSimpleSetter, 'visibility'): ['KX_VisibilityActuator']}, - #'getIndex': {(replaceSimpleGetter, 'index'): ['SCA_JoystickSensor']}, - #'getMesh': {(replaceSimpleGetter, 'mesh'): ['KX_SCA_ReplaceMeshActuator']}, - #'getObject': {(replaceSimpleGetter, 'object'): ['KX_SCA_AddObjectActuator', - # 'KX_CameraActuator', - # 'KX_TrackToActuator', - # 'KX_ParentActuator']}, - #'setIndex': {(replaceSimpleSetter, 'index'): ['SCA_JoystickSensor']}, - #'setObject': {(replaceSimpleSetter, 'object'): ['KX_SCA_AddObjectActuator', - # 'KX_CameraActuator', - # 'KX_TrackToActuator', - # 'KX_ParentActuator']}, - #'setOperation': {(replaceSimpleSetter, 'mode'): ['KX_SCA_DynamicActuator'], - # (replaceSimpleSetter, 'operation'): ['KX_StateActuator']}, + 'getLinearVelocity': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_GameObject']), + 'setLinearVelocity': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_GameObject']), + 'getAngularVelocity': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_GameObject']), + 'setAngularVelocity': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_GameObject']), + 'setAction': (notImplemented, ['BL_ShapeActionActuator', 'BL_ActionActuator']), + 'set': (notImplemented, ['KX_VisibilityActuator', 'KX_IpoActuator']), + 'getIndex': (notImplemented, ['SCA_JoystickSensor']), + 'getMesh': (notImplemented, ['KX_SCA_ReplaceMeshActuator']), + 'getObject': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_CameraActuator', 'KX_TrackToActuator', 'KX_ParentActuator']), + 'setIndex': (notImplemented, ['SCA_JoystickSensor']), + 'setObject': (notImplemented, ['KX_SCA_AddObjectActuator', 'KX_CameraActuator', 'KX_TrackToActuator', 'KX_ParentActuator']), + 'setOperation': (notImplemented, ['KX_SCA_DynamicActuator', 'KX_StateActuator']), + 'position': (notImplemented, ['KX_GameObject', 'KX_SoundActuator']), + 'orientation': (notImplemented, ['KX_GameObject', 'KX_SoundActuator']), + 'getDRot': (notImplemented, ['KX_ObjectActuator']), + 'setDRot': (notImplemented, ['KX_ObjectActuator']), + 'getDLoc': (notImplemented, ['KX_ObjectActuator']), + 'setDLoc': (notImplemented, ['KX_ObjectActuator']), + 'getTorque': (notImplemented, ['KX_ObjectActuator']), + 'getTorque': (notImplemented, ['KX_ObjectActuator']), + 'getForce': (notImplemented, ['KX_ObjectActuator']), + 'setForce': (notImplemented, ['KX_ObjectActuator']), } -def convert248to249(lines, log = True, logErrors = True): +def convert248to249(lines, log = True, logErrors = True, fileName = None): # Regular expression for finding attributes. For the string 'a.b', this # returns three groups: ['a.b', 'a.', 'b']. The last is the attribute name. attrRegex = re.compile(r'\.\s*' # Dot r'([a-zA-Z_]\w*)') # Identifier + fileIdStr = "" + if fileName: + fileIdStr = fileName + ": " row = 0 - sourceRow = 0 col = 0 nconverted = 0 nerrors = 0 @@ -650,51 +714,34 @@ def convert248to249(lines, log = True, logErrors = True): attrName = match.group(1) if attributeRenameDict.has_key(attrName): # name is deprecated. - conversionDict = attributeRenameDict[attrName] - - if len(conversionDict.keys()) > 1: - # Ambiguous! Can't convert. - print "ERROR: source line %d, ambiguous conversion:" % sourceRow + func, closure = attributeRenameDict[attrName] + try: + # Convert! + func(lines, row, match.start(1), match.end(1), closure) + except ConversionError as e: + # Insert a comment saying the conversion failed. + print "ERROR: %sline %d, %s: %s\n" % ( + fileIdStr, row + 1, attrName, e) if logErrors: - lines.insert(row, "##248## ERROR: ambiguous conversion.\n") + lines.insert(row, + "##248## ERROR: %s: %s\n" % + (attrName, e)) row = row + 1 - for conversion in conversionDict.keys(): - _, newAttrName = conversion - classes = conversionDict[conversion] - print "\t%s -> %s (classes %s)" % (attrName, newAttrName, classes) - if logErrors: - lines.insert(row, "##248##%s -> %s (classes %s)\n" % - (attrName, newAttrName, classes)) - row = row + 1 nerrors = nerrors + 1 - else: - # Conversion is well-defined. Execute. - func, newAttrName = conversionDict.keys()[0] - try: - func(lines, row, match.start(1), match.end(1), newAttrName) - except ConversionError as e: - # Insert a comment saying the conversion failed. - print "ERROR: source line %d, %s: %s\n" % ( - sourceRow, attrName, e) - if logErrors: - lines.insert(row, - "##248## ERROR: %s: %s\n" % - (attrName, e)) - row = row + 1 - nerrors = nerrors + 1 - else: - changed = True - nconverted = nconverted + 1 + changed = True + nconverted = nconverted + 1 # Search the rest of this line. col = match.start(1) + if changed and log: + # Insert a comment to showing difference in lines. if originalLine[-1] != '\n': originalLine = originalLine + '\n' lines.insert(row, "##248##%s" % originalLine) row = row + 1 + row = row + 1 - sourceRow = sourceRow + 1 col = 0 return nconverted, nerrors @@ -774,12 +821,15 @@ def runAsTextPlugin(): Blender.SaveUndoState('Convert BGE 2.49') for txt in texts: + bufName = txt.name + if txt.lib: + bufName = txt.lib + '/' + bufName lines = txt.asLines() for i in range(0, len(lines)): if not lines[i].endswith('\n'): lines[i] = lines[i] + '\n' - nc, ne = convert248to249(lines) + nc, ne = convert248to249(lines, fileName = bufName) nconverted = nconverted + nc nerrors = nerrors + ne txt.clear() |