diff --git a/extensions/community/Skew2D.json b/extensions/community/Skew2D.json new file mode 100644 index 000000000..1c50997c0 --- /dev/null +++ b/extensions/community/Skew2D.json @@ -0,0 +1,342 @@ +{ + "author": "Game Developer", + "category": "Visual Effect", + "extensionNamespace": "", + "fullName": "Skew2D", + "gdevelopVersion": "", + "helpPath": "https://pixijs.download/dev/docs/utils.Transform.html", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXNrZXctbW9yZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMi41LDExTDEwLjQxLDIwSDUuNUw3LjU5LDExSDEyLjVNMTUsOUg2TDMsMjJIMTJMMTUsOU0yMSw2TDE3LDJWNUg5VjdIMTdWMTBMMjEsNloiIC8+PC9zdmc+", + "name": "Skew2D", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/d1d36fa9263f970531afbd53ea4703353188bc871551780fd7d87768ad2e50cf_skew-more.svg", + "shortDescription": "Actions and conditions for modifying the skew (shear) of 2D objects.\n", + "version": "0.0.1", + "description": [ + "add skew" + ], + "origin": { + "identifier": "Skew2D", + "name": "gdevelop-extension-store" + }, + "tags": [ + "2D", + "Visual Effects", + "Graphics" + ], + "authorIds": [ + "sXdoMxxHF7hAXkEPRO8oZcfnBgC2", + "ZAQ6cbLJW6ZcBQERMymnsWO25WF3" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [ + { + "description": "Get the horizontal X skew value.", + "fullName": "Skew X value", + "functionType": "Expression", + "getterName": "SkewX", + "name": "SkewX", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = objects[0];", + "", + "if (!object) {", + " eventsFunctionContext.returnValue = 0;", + " return;", + "}", + "", + "try {", + " const rendererObject = object.getRendererObject();", + " ", + " if (rendererObject && rendererObject.skew) {", + " // PixiJS uses radians, convert to degrees for GDevelop user", + " eventsFunctionContext.returnValue = gdjs.toDegrees(rendererObject.skew.x);", + " } else {", + " eventsFunctionContext.returnValue = 0;", + " }", + "} catch (error) {", + " eventsFunctionContext.returnValue = 0;", + "}" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Get the vertical Y skew value.", + "fullName": "Skew Y value", + "functionType": "Expression", + "getterName": "SkewY", + "name": "SkewY", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = objects[0];", + "", + "if (!object) {", + " eventsFunctionContext.returnValue = 0;", + " return;", + "}", + "", + "try {", + " const rendererObject = object.getRendererObject();", + " ", + " if (rendererObject && rendererObject.skew) {", + " // PixiJS uses radians, convert to degrees for GDevelop user", + " eventsFunctionContext.returnValue = gdjs.toDegrees(rendererObject.skew.y);", + " } else {", + " eventsFunctionContext.returnValue = 0;", + " }", + "} catch (error) {", + " eventsFunctionContext.returnValue = 0;", + "}" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Sets the X skew value for the object (in degrees).", + "fullName": "Set Skew X", + "functionType": "Action", + "name": "SetSkewX", + "sentence": "Set the X skew of _Object_ to _Value_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument('Value');", + "", + "if (!object) {", + " return;", + "}", + "", + "try {", + " const rendererObject = object.getRendererObject();", + " ", + " if (rendererObject && rendererObject.skew) {", + " // GDevelop events use degrees, PixiJS uses radians. Convert.", + " rendererObject.skew.x = gdjs.toRad(value);", + " }", + "} catch (error) {", + " console.error('2D Skew X Action Error:', error);", + "}" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "objectList" + }, + { + "description": "New X skew value (in degrees)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Sets the Y skew value for the object (in degrees).", + "fullName": "Set Skew Y", + "functionType": "Action", + "name": "SetSkewY", + "sentence": "Set the Y skew of _Object_ to _Value_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument('Value');", + "", + "if (!object) {", + " return;", + "}", + "", + "try {", + " const rendererObject = object.getRendererObject();", + " ", + " if (rendererObject && rendererObject.skew) {", + " // GDevelop events use degrees, PixiJS uses radians. Convert.", + " rendererObject.skew.y = gdjs.toRad(value);", + " }", + "} catch (error) {", + " console.error('2D Skew Y Action Error:', error);", + "}" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "objectList" + }, + { + "description": "New Y skew value (in degrees)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Compare the object's X skew (in degrees).", + "fullName": "Skew X", + "functionType": "Condition", + "name": "SkewXCondition", + "sentence": "The X skew of _Object_ is _Operator_ _Value_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = objects[0];", + "const operator = eventsFunctionContext.getArgument('Operator');", + "const value = eventsFunctionContext.getArgument('Value');", + "", + "if (!object) {", + " eventsFunctionContext.returnValue = false;", + " return;", + "}", + "", + "try {", + " const rendererObject = object.getRendererObject();", + " ", + " if (rendererObject && rendererObject.skew) {", + " // Get skew in degrees to compare with the user-provided value (in degrees)", + " const currentSkew = gdjs.toDegrees(rendererObject.skew.x);", + " eventsFunctionContext.returnValue = gdjs.evtTools.common.compare(currentSkew, operator, value);", + " } else {", + " // If skew property is missing, assume 0 for comparison", + " eventsFunctionContext.returnValue = gdjs.evtTools.common.compare(0, operator, value);", + " }", + "} catch (error) {", + " eventsFunctionContext.returnValue = false;", + "}" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "objectList" + }, + { + "description": "Comparison operator", + "name": "Operator", + "type": "operator" + }, + { + "description": "Value to compare (in degrees)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Compare the object's Y skew (in degrees).", + "fullName": "Skew Y", + "functionType": "Condition", + "name": "SkewYCondition", + "sentence": "The Y skew of _Object_ is _Operator_ _Value_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = objects[0];", + "const operator = eventsFunctionContext.getArgument('Operator');", + "const value = eventsFunctionContext.getArgument('Value');", + "", + "if (!object) {", + " eventsFunctionContext.returnValue = false;", + " return;", + "}", + "", + "try {", + " const rendererObject = object.getRendererObject();", + " ", + " if (rendererObject && rendererObject.skew) {", + " // Get skew in degrees to compare with the user-provided value (in degrees)", + " const currentSkew = gdjs.toDegrees(rendererObject.skew.y);", + " eventsFunctionContext.returnValue = gdjs.evtTools.common.compare(currentSkew, operator, value);", + " } else {", + " // If skew property is missing, assume 0 for comparison", + " eventsFunctionContext.returnValue = gdjs.evtTools.common.compare(0, operator, value);", + " }", + "} catch (error) {", + " eventsFunctionContext.returnValue = false;", + "}" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "objectList" + }, + { + "description": "Comparison operator", + "name": "Operator", + "type": "operator" + }, + { + "description": "Value to compare (in degrees)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [] +} \ No newline at end of file