gdcore-tools 2.0.0-gd-v5.4.220-autobuild → 2.0.0-gd-v5.5.222-autobuild
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Runtime/Extensions/3D/JsExtension.js +3 -3
- package/dist/Runtime/Extensions/DialogueTree/bondage.js/dist/bondage.d.ts +39 -0
- package/dist/Runtime/Extensions/DialogueTree/dialoguetools.js +2 -2
- package/dist/Runtime/Extensions/DialogueTree/dialoguetools.js.map +2 -2
- package/dist/Runtime/Extensions/Physics2Behavior/JsExtension.js +4 -2
- package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js +1 -1
- package/dist/Runtime/Extensions/Physics2Behavior/physics2runtimebehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Physics3DBehavior/JsExtension.js +64 -10
- package/dist/Runtime/Extensions/Physics3DBehavior/Physics3DRuntimeBehavior.js +1 -1
- package/dist/Runtime/Extensions/Physics3DBehavior/Physics3DRuntimeBehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Physics3DBehavior/PhysicsCharacter3DRuntimeBehavior.js +1 -1
- package/dist/Runtime/Extensions/Physics3DBehavior/PhysicsCharacter3DRuntimeBehavior.js.map +2 -2
- package/dist/Runtime/Extensions/Physics3DBehavior/jolt-physics.d.ts +283 -5
- package/dist/Runtime/Extensions/Physics3DBehavior/jolt-physics.wasm.js +1 -1
- package/dist/Runtime/Extensions/Physics3DBehavior/jolt-physics.wasm.js.map +2 -2
- package/dist/Runtime/Extensions/Physics3DBehavior/jolt-physics.wasm.wasm +0 -0
- package/dist/Runtime/Extensions/TextInput/JsExtension.js +110 -8
- package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js +1 -1
- package/dist/Runtime/Extensions/TextInput/textinputruntimeobject-pixi-renderer.js.map +2 -2
- package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js +1 -1
- package/dist/Runtime/Extensions/TextInput/textinputruntimeobject.js.map +2 -2
- package/dist/Runtime/events-tools/soundtools.js +1 -1
- package/dist/Runtime/events-tools/soundtools.js.map +2 -2
- package/dist/Runtime/types/project-data.d.ts +0 -1
- package/dist/lib/libGD.cjs +1 -1
- package/dist/lib/libGD.wasm +0 -0
- package/dist/loaders.cjs +3 -3
- package/gd.d.ts +44 -24
- package/package.json +1 -1
|
Binary file
|
|
@@ -78,6 +78,18 @@ module.exports = {
|
|
|
78
78
|
} else if (propertyName === 'disabled') {
|
|
79
79
|
objectContent.disabled = newValue === '1';
|
|
80
80
|
return true;
|
|
81
|
+
} else if (propertyName === 'maxLength') {
|
|
82
|
+
objectContent.maxLength = newValue;
|
|
83
|
+
return true;
|
|
84
|
+
} else if (propertyName === 'paddingX') {
|
|
85
|
+
objectContent.paddingX = Math.max(0, parseFloat(newValue));
|
|
86
|
+
return true;
|
|
87
|
+
} else if (propertyName === 'paddingY') {
|
|
88
|
+
objectContent.paddingY = Math.max(0, parseFloat(newValue));
|
|
89
|
+
return true;
|
|
90
|
+
} else if (propertyName === 'textAlign') {
|
|
91
|
+
objectContent.textAlign = newValue;
|
|
92
|
+
return true;
|
|
81
93
|
}
|
|
82
94
|
|
|
83
95
|
return false;
|
|
@@ -200,6 +212,50 @@ module.exports = {
|
|
|
200
212
|
.setLabel(_('Width'))
|
|
201
213
|
.setGroup(_('Border appearance'));
|
|
202
214
|
|
|
215
|
+
objectProperties
|
|
216
|
+
.getOrCreate('paddingX')
|
|
217
|
+
.setValue(
|
|
218
|
+
(objectContent.paddingX !== undefined
|
|
219
|
+
? objectContent.paddingX
|
|
220
|
+
: 2
|
|
221
|
+
).toString()
|
|
222
|
+
)
|
|
223
|
+
.setType('number')
|
|
224
|
+
.setLabel(_('Padding (horizontal)'))
|
|
225
|
+
.setGroup(_('Field appearance'));
|
|
226
|
+
objectProperties
|
|
227
|
+
.getOrCreate('paddingY')
|
|
228
|
+
.setValue(
|
|
229
|
+
(objectContent.paddingY !== undefined
|
|
230
|
+
? objectContent.paddingY
|
|
231
|
+
: 1
|
|
232
|
+
).toString()
|
|
233
|
+
)
|
|
234
|
+
.setType('number')
|
|
235
|
+
.setLabel(_('Padding (vertical)'))
|
|
236
|
+
.setGroup(_('Field appearance'));
|
|
237
|
+
objectProperties
|
|
238
|
+
.getOrCreate('maxLength')
|
|
239
|
+
.setValue((objectContent.maxLength || 0).toString())
|
|
240
|
+
.setType('number')
|
|
241
|
+
.setLabel(_('Max length'))
|
|
242
|
+
.setDescription(
|
|
243
|
+
_(
|
|
244
|
+
'The maximum length of the input value (this property will be ignored if the input type is a number).'
|
|
245
|
+
)
|
|
246
|
+
)
|
|
247
|
+
.setAdvanced(true);
|
|
248
|
+
|
|
249
|
+
objectProperties
|
|
250
|
+
.getOrCreate('textAlign')
|
|
251
|
+
.setValue(objectContent.textAlign || 'left')
|
|
252
|
+
.setType('choice')
|
|
253
|
+
.addExtraInfo('left')
|
|
254
|
+
.addExtraInfo('center')
|
|
255
|
+
.addExtraInfo('right')
|
|
256
|
+
.setLabel(_('Text alignment'))
|
|
257
|
+
.setGroup(_('Field appearance'));
|
|
258
|
+
|
|
203
259
|
return objectProperties;
|
|
204
260
|
};
|
|
205
261
|
textInputObject.content = {
|
|
@@ -216,6 +272,10 @@ module.exports = {
|
|
|
216
272
|
borderWidth: 1,
|
|
217
273
|
readOnly: false,
|
|
218
274
|
disabled: false,
|
|
275
|
+
paddingX: 2,
|
|
276
|
+
paddingY: 1,
|
|
277
|
+
textAlign: 'left',
|
|
278
|
+
maxLength: 0,
|
|
219
279
|
};
|
|
220
280
|
|
|
221
281
|
textInputObject.updateInitialInstanceProperty = function (
|
|
@@ -572,6 +632,22 @@ module.exports = {
|
|
|
572
632
|
.getCodeExtraInformation()
|
|
573
633
|
.setFunctionName('isFocused');
|
|
574
634
|
|
|
635
|
+
object
|
|
636
|
+
.addScopedCondition(
|
|
637
|
+
'IsInputSubmitted',
|
|
638
|
+
_('Input is submitted'),
|
|
639
|
+
_(
|
|
640
|
+
'Check if the input is submitted, which usually happens when the Enter key is pressed on a keyboard, or a specific button on mobile virtual keyboards.'
|
|
641
|
+
),
|
|
642
|
+
_('_PARAM0_ value was submitted'),
|
|
643
|
+
'',
|
|
644
|
+
'res/conditions/surObject24.png',
|
|
645
|
+
'res/conditions/surObject.png'
|
|
646
|
+
)
|
|
647
|
+
.addParameter('object', _('Text input'), 'TextInputObject', false)
|
|
648
|
+
.getCodeExtraInformation()
|
|
649
|
+
.setFunctionName('isSubmitted');
|
|
650
|
+
|
|
575
651
|
object
|
|
576
652
|
.addScopedAction(
|
|
577
653
|
'Focus',
|
|
@@ -627,7 +703,6 @@ module.exports = {
|
|
|
627
703
|
|
|
628
704
|
const DEFAULT_WIDTH = 300;
|
|
629
705
|
const DEFAULT_HEIGHT = 30;
|
|
630
|
-
const TEXT_MASK_PADDING = 2;
|
|
631
706
|
|
|
632
707
|
class RenderedTextInputObjectInstance extends RenderedInstance {
|
|
633
708
|
constructor(
|
|
@@ -741,24 +816,51 @@ module.exports = {
|
|
|
741
816
|
);
|
|
742
817
|
|
|
743
818
|
const borderWidth = object.content.borderWidth || 0;
|
|
819
|
+
const paddingX =
|
|
820
|
+
object.content.paddingX !== undefined
|
|
821
|
+
? Math.min(
|
|
822
|
+
parseFloat(object.content.paddingX),
|
|
823
|
+
width / 2 - borderWidth
|
|
824
|
+
)
|
|
825
|
+
: 2;
|
|
826
|
+
const paddingY =
|
|
827
|
+
object.content.paddingY !== undefined
|
|
828
|
+
? Math.min(
|
|
829
|
+
parseFloat(object.content.paddingY),
|
|
830
|
+
height / 2 - borderWidth
|
|
831
|
+
)
|
|
832
|
+
: 1;
|
|
744
833
|
|
|
745
834
|
// Draw the mask for the text.
|
|
746
|
-
const
|
|
835
|
+
const textOffsetX = borderWidth + paddingX;
|
|
836
|
+
// textOffsetY does not include the paddingY because browsers display the text, even if it is supposed to be cut off by vertical padding.
|
|
837
|
+
const textOffsetY = borderWidth;
|
|
747
838
|
this._pixiTextMask.clear();
|
|
748
839
|
this._pixiTextMask.beginFill(0xdddddd, 1);
|
|
749
840
|
this._pixiTextMask.drawRect(
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
width - 2 *
|
|
753
|
-
height - 2 *
|
|
841
|
+
textOffsetX,
|
|
842
|
+
textOffsetY,
|
|
843
|
+
width - 2 * textOffsetX,
|
|
844
|
+
height - 2 * textOffsetY
|
|
754
845
|
);
|
|
755
846
|
this._pixiTextMask.endFill();
|
|
756
847
|
|
|
757
848
|
const isTextArea = object.content.inputType === 'text area';
|
|
849
|
+
const textAlign = object.content.textAlign
|
|
850
|
+
? object.content.textAlign
|
|
851
|
+
: 'left';
|
|
852
|
+
|
|
853
|
+
if (textAlign === 'left') this._pixiText.position.x = textOffsetX;
|
|
854
|
+
else if (textAlign === 'right')
|
|
855
|
+
this._pixiText.position.x =
|
|
856
|
+
0 + width - this._pixiText.width - textOffsetX;
|
|
857
|
+
else if (textAlign === 'center') {
|
|
858
|
+
this._pixiText.align = 'center';
|
|
859
|
+
this._pixiText.position.x = 0 + width / 2 - this._pixiText.width / 2;
|
|
860
|
+
}
|
|
758
861
|
|
|
759
|
-
this._pixiText.position.x = textOffset;
|
|
760
862
|
this._pixiText.position.y = isTextArea
|
|
761
|
-
?
|
|
863
|
+
? textOffsetY + paddingY
|
|
762
864
|
: height / 2 - this._pixiText.height / 2;
|
|
763
865
|
|
|
764
866
|
// Draw the background and border.
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var gdjs;(function(a){const
|
|
1
|
+
var gdjs;(function(a){const f={text:"text",email:"email",password:"password",number:"number","telephone number":"tel",url:"url",search:"search"},o=(h,t)=>"rgba("+h[0]+","+h[1]+","+h[2]+","+t/255+")";class r{constructor(t,e){this._input=null;this._form=null;this._object=t,this._instanceContainer=e,this._runtimeGame=this._instanceContainer.getGame(),this._createElement()}_createElement(){if(this._input)throw new Error("Tried to recreate an input while it already exists.");this._form=document.createElement("form");const t=this._object.getInputType()==="text area";this._input=document.createElement(t?"textarea":"input"),this._form.style.border="0px",this._form.style.borderRadius="0px",this._form.style.backgroundColor="transparent",this._form.style.position="absolute",this._form.style.pointerEvents="auto",this._form.style.display="none",this._form.style.boxSizing="border-box",this._form.style.textAlign=this._object.getTextAlign(),this._input.autocomplete="off",this._input.style.backgroundColor="white",this._input.style.outline="none",this._input.style.resize="none",this._input.style.border="1px solid black",this._input.style.boxSizing="border-box",this._input.style.width="100%",this._input.style.height="100%",this._input.maxLength=this._object.getMaxLength(),this._input.style.padding=`${this._object.getPaddingY().toFixed(2)}px ${this._object.getPaddingX().toFixed(2)}px`,this._form.appendChild(this._input),this._input.addEventListener("input",()=>{!this._input||this._object.onRendererInputValueChanged(this._input.value)}),this._input.addEventListener("touchstart",()=>{!this._input||document.activeElement!==this._input&&this._input.focus()}),this._form.addEventListener("submit",e=>{e.preventDefault(),this._object.onRendererFormSubmitted()}),this.updateString(),this.updateFont(),this.updatePlaceholder(),this.updateOpacity(),this.updateInputType(),this.updateTextColor(),this.updateFillColorAndOpacity(),this.updateBorderColorAndOpacity(),this.updateBorderWidth(),this.updateDisabled(),this.updateReadOnly(),this.updateTextAlign(),this.updateMaxLength(),this.updatePadding(),this._runtimeGame.getRenderer().getDomElementContainer().appendChild(this._form)}_destroyElement(){!this._input||(this._input.remove(),this._input=null)}onScenePaused(){this._destroyElement()}onSceneResumed(){this._input||this._createElement()}onDestroy(){this._destroyElement()}updatePreRender(){if(!this._input||!this._form)return;if(this._object.isHidden()){this._form.style.display="none";return}{let n=this._instanceContainer,s=this._object,b=!0;do{if(!n.getLayer(s.getLayer()).isVisible()||!s.isVisible()){this._form.style.display="none";return}n instanceof a.CustomRuntimeObjectInstanceContainer?(s=n.getOwner(),n=s.getInstanceContainer()):b=!1}while(b)}const t=a.staticArray(r.prototype.updatePreRender),e=this._instanceContainer.getGame(),i=e.getRenderer(),u=this._instanceContainer.getLayer(this._object.getLayer()),p=u.convertInverseCoords(this._object.x,this._object.y,0,t),d=p[0],l=p[1],c=u.convertInverseCoords(this._object.x+this._object.getWidth(),this._object.y+this._object.getHeight(),0,t),_=c[0],m=c[1];if(_<0||m<0||d>e.getGameResolutionWidth()||l>e.getGameResolutionHeight()){this._form.style.display="none";return}t[0]=d,t[1]=l,i.convertCanvasToDomElementContainerCoords(t,t);const g=t[0],y=t[1];t[0]=_,t[1]=m,i.convertCanvasToDomElementContainerCoords(t,t);const x=t[0],j=t[1],C=x-g,T=j-y;this._form.style.left=g+"px",this._form.style.top=y+"px",this._form.style.width=C+"px",this._form.style.height=T+"px",this._form.style.transform="rotate3d(0,0,1,"+this._object.getAngle()%360+"deg)",this._form.style.textAlign=this._object.getTextAlign(),this._input.style.padding=`${this._object.getPaddingY().toFixed(2)}px ${this._object.getPaddingX().toFixed(2)}px`,this._input.style.fontSize=this._object.getFontSize()*i.getCanvasToDomElementContainerHeightScale()+"px",this._form.style.display="initial"}updateString(){!this._input||(this._input.value=this._object.getString())}updatePlaceholder(){!this._input||(this._input.placeholder=this._object.getPlaceholder())}updateFont(){!this._input||(this._input.style.fontFamily=this._instanceContainer.getGame().getFontManager().getFontFamily(this._object.getFontResourceName()))}updateOpacity(){!this._form||(this._form.style.opacity=(this._object.getOpacity()/255).toFixed(3))}updateInputType(){if(!this._input)return;const t=this._input instanceof HTMLTextAreaElement,e=this._object.getInputType()==="text area";t!==e&&(this._destroyElement(),this._createElement());const i=f[this._object.getInputType()]||"text";this._input.setAttribute("type",i)}updateTextColor(){!this._input||(this._input.style.color=o(this._object._getRawTextColor(),255))}updateFillColorAndOpacity(){!this._input||(this._input.style.backgroundColor=o(this._object._getRawFillColor(),this._object.getFillOpacity()))}updateBorderColorAndOpacity(){!this._input||(this._input.style.borderColor=o(this._object._getRawBorderColor(),this._object.getBorderOpacity()))}updateBorderWidth(){!this._input||(this._input.style.borderWidth=this._object.getBorderWidth()+"px")}updateDisabled(){!this._form||(this._form.disabled=this._object.isDisabled())}updateReadOnly(){!this._form||(this._form.readOnly=this._object.isReadOnly())}updateMaxLength(){const t=this._input;if(!!t){if(this._object.getMaxLength()<=0){t.removeAttribute("maxLength");return}t.maxLength=this._object.getMaxLength()}}updatePadding(){!this._input||(this._input.style.padding=`${this._object.getPaddingY().toFixed(2)}px ${this._object.getPaddingX().toFixed(2)}px`)}updateTextAlign(){if(!this._input)return;const t=this._object.getTextAlign();this._input.style.textAlign=t}isFocused(){return this._input===document.activeElement}focus(){!this._input||this._input.focus()}}a.TextInputRuntimeObjectRenderer=r})(gdjs||(gdjs={}));
|
|
2
2
|
//# sourceMappingURL=textinputruntimeobject-pixi-renderer.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../GDevelop/Extensions/TextInput/textinputruntimeobject-pixi-renderer.ts"],
|
|
4
|
-
"sourcesContent": ["namespace gdjs {\n const userFriendlyToHtmlInputTypes = {\n text: 'text',\n email: 'email',\n password: 'password',\n number: 'number',\n 'telephone number': 'tel',\n url: 'url',\n search: 'search',\n };\n\n const formatRgbAndOpacityToCssRgba = (\n rgbColor: [float, float, float],\n opacity: float\n ) => {\n return (\n 'rgba(' +\n rgbColor[0] +\n ',' +\n rgbColor[1] +\n ',' +\n rgbColor[2] +\n ',' +\n opacity / 255 +\n ')'\n );\n };\n\n class TextInputRuntimeObjectPixiRenderer {\n private _object: gdjs.TextInputRuntimeObject;\n private _input: HTMLInputElement | HTMLTextAreaElement | null = null;\n private _instanceContainer: gdjs.RuntimeInstanceContainer;\n private _runtimeGame: gdjs.RuntimeGame;\n\n constructor(\n runtimeObject: gdjs.TextInputRuntimeObject,\n instanceContainer: gdjs.RuntimeInstanceContainer\n ) {\n this._object = runtimeObject;\n this._instanceContainer = instanceContainer;\n this._runtimeGame = this._instanceContainer.getGame();\n\n this._createElement();\n }\n\n _createElement() {\n if (!!this._input)\n throw new Error('Tried to recreate an input while it already exists.');\n\n const isTextArea = this._object.getInputType() === 'text area';\n this._input = document.createElement(isTextArea ? 'textarea' : 'input');\n this._input.style.border = '1px solid black';\n this._input.autocomplete = 'off';\n this._input.style.borderRadius = '0px';\n this._input.style.backgroundColor = 'white';\n this._input.style.position = 'absolute';\n this._input.style.resize = 'none';\n this._input.style.outline = 'none';\n this._input.style.pointerEvents = 'auto'; // Element can be clicked/touched.\n this._input.style.display = 'none'; // Hide while object is being set up.\n this._input.style.boxSizing = 'border-box'; // Important for iOS, because border is added to width/height.\n\n this._input.addEventListener('input', () => {\n if (!this._input) return;\n\n this._object.onRendererInputValueChanged(this._input.value);\n });\n this._input.addEventListener('touchstart', () => {\n if (!this._input) return;\n\n // Focus directly when touching the input on touchscreens.\n if (document.activeElement !== this._input) this._input.focus();\n });\n\n this.updateString();\n this.updateFont();\n this.updatePlaceholder();\n this.updateOpacity();\n this.updateInputType();\n this.updateTextColor();\n this.updateFillColorAndOpacity();\n this.updateBorderColorAndOpacity();\n this.updateBorderWidth();\n this.updateDisabled();\n this.updateReadOnly();\n\n this._runtimeGame\n .getRenderer()\n .getDomElementContainer()!\n .appendChild(this._input);\n }\n\n _destroyElement() {\n if (!this._input) return;\n this._input.remove();\n this._input = null;\n }\n\n onScenePaused() {\n // This is the only renderer that uses a DOM element. PixiJS renderers\n // usually don't need to know if a scene is paused/resumed,\n // because their renderers are then not used (not part of the other scene graphs).\n // For this object, we need to remove the DOM element whenever it must\n // be not rendered.\n this._destroyElement();\n }\n\n onSceneResumed() {\n // The input must have been destroyed when the scene was paused,\n // in case it still exists, skip recreation.\n if (!this._input) this._createElement();\n }\n\n onDestroy() {\n this._destroyElement();\n }\n\n updatePreRender() {\n if (!this._input) return;\n\n // Hide the input entirely if the object is hidden.\n // Because this object is rendered as a DOM element (and not part of the PixiJS\n // scene graph), we have to do this manually.\n if (this._object.isHidden()) {\n this._input.style.display = 'none';\n return;\n }\n\n // Hide the input entirely if the layer is not visible.\n // Because this object is rendered as a DOM element (and not part of the PixiJS\n // scene graph), we have to do this manually.\n {\n let instanceContainer = this._instanceContainer;\n let object: gdjs.RuntimeObject = this._object;\n let hasParent = true;\n do {\n const layer = instanceContainer.getLayer(object.getLayer());\n if (!layer.isVisible() || !object.isVisible()) {\n this._input.style.display = 'none';\n return;\n }\n // TODO Declare an interface to move up in the object tree.\n if (\n instanceContainer instanceof\n gdjs.CustomRuntimeObjectInstanceContainer\n ) {\n object = instanceContainer.getOwner();\n instanceContainer = object.getInstanceContainer();\n } else {\n hasParent = false;\n }\n } while (hasParent);\n }\n\n const workingPoint: FloatPoint = gdjs.staticArray(\n TextInputRuntimeObjectPixiRenderer.prototype.updatePreRender\n ) as FloatPoint;\n\n const runtimeGame = this._instanceContainer.getGame();\n const runtimeGameRenderer = runtimeGame.getRenderer();\n const layer = this._instanceContainer.getLayer(this._object.getLayer());\n const topLeftCanvasCoordinates = layer.convertInverseCoords(\n this._object.x,\n this._object.y,\n 0,\n workingPoint\n );\n const canvasLeft = topLeftCanvasCoordinates[0];\n const canvasTop = topLeftCanvasCoordinates[1];\n\n const bottomRightCanvasCoordinates = layer.convertInverseCoords(\n this._object.x + this._object.getWidth(),\n this._object.y + this._object.getHeight(),\n 0,\n workingPoint\n );\n const canvasRight = bottomRightCanvasCoordinates[0];\n const canvasBottom = bottomRightCanvasCoordinates[1];\n\n // Hide the input entirely if not visible at all.\n const isOutsideCanvas =\n canvasRight < 0 ||\n canvasBottom < 0 ||\n canvasLeft > runtimeGame.getGameResolutionWidth() ||\n canvasTop > runtimeGame.getGameResolutionHeight();\n if (isOutsideCanvas) {\n this._input.style.display = 'none';\n return;\n }\n\n // Position the input on the container on top of the canvas.\n workingPoint[0] = canvasLeft;\n workingPoint[1] = canvasTop;\n runtimeGameRenderer.convertCanvasToDomElementContainerCoords(\n workingPoint,\n workingPoint\n );\n const pageLeft = workingPoint[0];\n const pageTop = workingPoint[1];\n\n workingPoint[0] = canvasRight;\n workingPoint[1] = canvasBottom;\n runtimeGameRenderer.convertCanvasToDomElementContainerCoords(\n workingPoint,\n workingPoint\n );\n const pageRight = workingPoint[0];\n const pageBottom = workingPoint[1];\n\n const widthInContainer = pageRight - pageLeft;\n const heightInContainer = pageBottom - pageTop;\n\n this._input.style.left = pageLeft + 'px';\n this._input.style.top = pageTop + 'px';\n this._input.style.width = widthInContainer + 'px';\n this._input.style.height = heightInContainer + 'px';\n this._input.style.transform =\n 'rotate3d(0,0,1,' + (this._object.getAngle() % 360) + 'deg)';\n\n // Automatically adjust the font size to follow the game scale.\n this._input.style.fontSize =\n this._object.getFontSize() *\n runtimeGameRenderer.getCanvasToDomElementContainerHeightScale() +\n 'px';\n\n // Display after the object is positioned.\n this._input.style.display = 'initial';\n }\n\n updateString() {\n if (!this._input) return;\n this._input.value = this._object.getString();\n }\n\n updatePlaceholder() {\n if (!this._input) return;\n this._input.placeholder = this._object.getPlaceholder();\n }\n\n updateFont() {\n if (!this._input) return;\n this._input.style.fontFamily = this._instanceContainer\n .getGame()\n .getFontManager()\n .getFontFamily(this._object.getFontResourceName());\n }\n\n updateOpacity() {\n if (!this._input) return;\n this._input.style.opacity = '' + this._object.getOpacity() / 255;\n }\n\n updateInputType() {\n if (!this._input) return;\n\n const isTextArea = this._input instanceof HTMLTextAreaElement;\n const shouldBeTextArea = this._object.getInputType() === 'text area';\n if (isTextArea !== shouldBeTextArea) {\n this._destroyElement();\n this._createElement();\n }\n\n const newType =\n userFriendlyToHtmlInputTypes[this._object.getInputType()] || 'text';\n this._input.setAttribute('type', newType);\n }\n\n updateTextColor() {\n if (!this._input) return;\n\n this._input.style.color = formatRgbAndOpacityToCssRgba(\n this._object._getRawTextColor(),\n 255\n );\n }\n\n updateFillColorAndOpacity() {\n if (!this._input) return;\n\n this._input.style.backgroundColor = formatRgbAndOpacityToCssRgba(\n this._object._getRawFillColor(),\n this._object.getFillOpacity()\n );\n }\n\n updateBorderColorAndOpacity() {\n if (!this._input) return;\n\n this._input.style.borderColor = formatRgbAndOpacityToCssRgba(\n this._object._getRawBorderColor(),\n this._object.getBorderOpacity()\n );\n }\n updateBorderWidth() {\n if (!this._input) return;\n\n this._input.style.borderWidth = this._object.getBorderWidth() + 'px';\n }\n updateDisabled() {\n if (!this._input) return;\n\n this._input.disabled = this._object.isDisabled();\n }\n updateReadOnly() {\n if (!this._input) return;\n\n this._input.readOnly = this._object.isReadOnly();\n }\n\n isFocused() {\n return this._input === document.activeElement;\n }\n\n focus() {\n if (!this._input) return;\n\n this._input.focus();\n }\n }\n\n export const TextInputRuntimeObjectRenderer = TextInputRuntimeObjectPixiRenderer;\n export type TextInputRuntimeObjectRenderer = TextInputRuntimeObjectPixiRenderer;\n}\n"],
|
|
5
|
-
"mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CACE,KAAM,GAA+B,CACnC,KAAM,OACN,MAAO,QACP,SAAU,WACV,OAAQ,SACR,mBAAoB,MACpB,IAAK,MACL,OAAQ,UAGJ,EAA+B,CACnC,EACA,IAGE,QACA,EAAS,GACT,IACA,EAAS,GACT,IACA,EAAS,GACT,IACA,EAAU,IACV,IAIJ,OAAyC,
|
|
4
|
+
"sourcesContent": ["namespace gdjs {\n const userFriendlyToHtmlInputTypes = {\n text: 'text',\n email: 'email',\n password: 'password',\n number: 'number',\n 'telephone number': 'tel',\n url: 'url',\n search: 'search',\n };\n\n const formatRgbAndOpacityToCssRgba = (\n rgbColor: [float, float, float],\n opacity: float\n ) => {\n return (\n 'rgba(' +\n rgbColor[0] +\n ',' +\n rgbColor[1] +\n ',' +\n rgbColor[2] +\n ',' +\n opacity / 255 +\n ')'\n );\n };\n\n class TextInputRuntimeObjectPixiRenderer {\n private _object: gdjs.TextInputRuntimeObject;\n private _input: HTMLInputElement | HTMLTextAreaElement | null = null;\n private _instanceContainer: gdjs.RuntimeInstanceContainer;\n private _runtimeGame: gdjs.RuntimeGame;\n private _form: HTMLFormElement | null = null;\n\n constructor(\n runtimeObject: gdjs.TextInputRuntimeObject,\n instanceContainer: gdjs.RuntimeInstanceContainer\n ) {\n this._object = runtimeObject;\n this._instanceContainer = instanceContainer;\n this._runtimeGame = this._instanceContainer.getGame();\n\n this._createElement();\n }\n\n _createElement() {\n if (!!this._input)\n throw new Error('Tried to recreate an input while it already exists.');\n\n this._form = document.createElement('form');\n\n const isTextArea = this._object.getInputType() === 'text area';\n this._input = document.createElement(isTextArea ? 'textarea' : 'input');\n\n this._form.style.border = '0px';\n this._form.style.borderRadius = '0px';\n this._form.style.backgroundColor = 'transparent';\n this._form.style.position = 'absolute';\n this._form.style.pointerEvents = 'auto'; // Element can be clicked/touched.\n this._form.style.display = 'none'; // Hide while object is being set up.\n this._form.style.boxSizing = 'border-box';\n this._form.style.textAlign = this._object.getTextAlign();\n\n this._input.autocomplete = 'off';\n this._input.style.backgroundColor = 'white';\n this._input.style.outline = 'none'; // Remove any style added by the browser to highlight the focused field in a form (:focus & :focus-visible modifiers).\n this._input.style.resize = 'none'; // Prevent user from resizing the input when it's a text area.\n this._input.style.border = '1px solid black';\n this._input.style.boxSizing = 'border-box';\n this._input.style.width = '100%';\n this._input.style.height = '100%';\n this._input.maxLength = this._object.getMaxLength();\n this._input.style.padding = `${this._object\n .getPaddingY()\n .toFixed(2)}px ${this._object.getPaddingX().toFixed(2)}px`;\n\n this._form.appendChild(this._input);\n\n this._input.addEventListener('input', () => {\n if (!this._input) return;\n\n this._object.onRendererInputValueChanged(this._input.value);\n });\n this._input.addEventListener('touchstart', () => {\n if (!this._input) return;\n\n // Focus directly when touching the input on touchscreens.\n if (document.activeElement !== this._input) this._input.focus();\n });\n\n this._form.addEventListener('submit', (event) => {\n event.preventDefault();\n this._object.onRendererFormSubmitted();\n });\n\n this.updateString();\n this.updateFont();\n this.updatePlaceholder();\n this.updateOpacity();\n this.updateInputType();\n this.updateTextColor();\n this.updateFillColorAndOpacity();\n this.updateBorderColorAndOpacity();\n this.updateBorderWidth();\n this.updateDisabled();\n this.updateReadOnly();\n this.updateTextAlign();\n this.updateMaxLength();\n this.updatePadding();\n\n this._runtimeGame\n .getRenderer()\n .getDomElementContainer()!\n .appendChild(this._form);\n }\n\n _destroyElement() {\n if (!this._input) return;\n this._input.remove();\n this._input = null;\n }\n\n onScenePaused() {\n // This is the only renderer that uses a DOM element. PixiJS renderers\n // usually don't need to know if a scene is paused/resumed,\n // because their renderers are then not used (not part of the other scene graphs).\n // For this object, we need to remove the DOM element whenever it must\n // be not rendered.\n this._destroyElement();\n }\n\n onSceneResumed() {\n // The input must have been destroyed when the scene was paused,\n // in case it still exists, skip recreation.\n if (!this._input) this._createElement();\n }\n\n onDestroy() {\n this._destroyElement();\n }\n\n updatePreRender() {\n if (!this._input || !this._form) return;\n // Hide the input entirely if the object is hidden.\n // Because this object is rendered as a DOM element (and not part of the PixiJS\n // scene graph), we have to do this manually.\n if (this._object.isHidden()) {\n this._form.style.display = 'none';\n return;\n }\n\n // Hide the input entirely if the layer is not visible.\n // Because this object is rendered as a DOM element (and not part of the PixiJS\n // scene graph), we have to do this manually.\n {\n let instanceContainer = this._instanceContainer;\n let object: gdjs.RuntimeObject = this._object;\n let hasParent = true;\n do {\n const layer = instanceContainer.getLayer(object.getLayer());\n if (!layer.isVisible() || !object.isVisible()) {\n this._form.style.display = 'none';\n return;\n }\n // TODO Declare an interface to move up in the object tree.\n if (\n instanceContainer instanceof\n gdjs.CustomRuntimeObjectInstanceContainer\n ) {\n object = instanceContainer.getOwner();\n instanceContainer = object.getInstanceContainer();\n } else {\n hasParent = false;\n }\n } while (hasParent);\n }\n\n const workingPoint: FloatPoint = gdjs.staticArray(\n TextInputRuntimeObjectPixiRenderer.prototype.updatePreRender\n ) as FloatPoint;\n\n const runtimeGame = this._instanceContainer.getGame();\n const runtimeGameRenderer = runtimeGame.getRenderer();\n const layer = this._instanceContainer.getLayer(this._object.getLayer());\n const topLeftCanvasCoordinates = layer.convertInverseCoords(\n this._object.x,\n this._object.y,\n 0,\n workingPoint\n );\n const canvasLeft = topLeftCanvasCoordinates[0];\n const canvasTop = topLeftCanvasCoordinates[1];\n\n const bottomRightCanvasCoordinates = layer.convertInverseCoords(\n this._object.x + this._object.getWidth(),\n this._object.y + this._object.getHeight(),\n 0,\n workingPoint\n );\n const canvasRight = bottomRightCanvasCoordinates[0];\n const canvasBottom = bottomRightCanvasCoordinates[1];\n\n // Hide the input entirely if not visible at all.\n const isOutsideCanvas =\n canvasRight < 0 ||\n canvasBottom < 0 ||\n canvasLeft > runtimeGame.getGameResolutionWidth() ||\n canvasTop > runtimeGame.getGameResolutionHeight();\n if (isOutsideCanvas) {\n this._form.style.display = 'none';\n return;\n }\n\n // Position the input on the container on top of the canvas.\n workingPoint[0] = canvasLeft;\n workingPoint[1] = canvasTop;\n runtimeGameRenderer.convertCanvasToDomElementContainerCoords(\n workingPoint,\n workingPoint\n );\n const pageLeft = workingPoint[0];\n const pageTop = workingPoint[1];\n\n workingPoint[0] = canvasRight;\n workingPoint[1] = canvasBottom;\n runtimeGameRenderer.convertCanvasToDomElementContainerCoords(\n workingPoint,\n workingPoint\n );\n const pageRight = workingPoint[0];\n const pageBottom = workingPoint[1];\n\n const widthInContainer = pageRight - pageLeft;\n const heightInContainer = pageBottom - pageTop;\n\n this._form.style.left = pageLeft + 'px';\n this._form.style.top = pageTop + 'px';\n this._form.style.width = widthInContainer + 'px';\n this._form.style.height = heightInContainer + 'px';\n this._form.style.transform =\n 'rotate3d(0,0,1,' + (this._object.getAngle() % 360) + 'deg)';\n this._form.style.textAlign = this._object.getTextAlign();\n\n this._input.style.padding = `${this._object\n .getPaddingY()\n .toFixed(2)}px ${this._object.getPaddingX().toFixed(2)}px`;\n\n // Automatically adjust the font size to follow the game scale.\n this._input.style.fontSize =\n this._object.getFontSize() *\n runtimeGameRenderer.getCanvasToDomElementContainerHeightScale() +\n 'px';\n\n // Display after the object is positioned.\n this._form.style.display = 'initial';\n }\n\n updateString() {\n if (!this._input) return;\n this._input.value = this._object.getString();\n }\n\n updatePlaceholder() {\n if (!this._input) return;\n this._input.placeholder = this._object.getPlaceholder();\n }\n\n updateFont() {\n if (!this._input) return;\n this._input.style.fontFamily = this._instanceContainer\n .getGame()\n .getFontManager()\n .getFontFamily(this._object.getFontResourceName());\n }\n\n updateOpacity() {\n if (!this._form) return;\n this._form.style.opacity = (this._object.getOpacity() / 255).toFixed(3);\n }\n\n updateInputType() {\n if (!this._input) return;\n\n const isTextArea = this._input instanceof HTMLTextAreaElement;\n const shouldBeTextArea = this._object.getInputType() === 'text area';\n if (isTextArea !== shouldBeTextArea) {\n this._destroyElement();\n this._createElement();\n }\n\n const newType =\n userFriendlyToHtmlInputTypes[this._object.getInputType()] || 'text';\n this._input.setAttribute('type', newType);\n }\n\n updateTextColor() {\n if (!this._input) return;\n\n this._input.style.color = formatRgbAndOpacityToCssRgba(\n this._object._getRawTextColor(),\n 255\n );\n }\n\n updateFillColorAndOpacity() {\n if (!this._input) return;\n\n this._input.style.backgroundColor = formatRgbAndOpacityToCssRgba(\n this._object._getRawFillColor(),\n this._object.getFillOpacity()\n );\n }\n\n updateBorderColorAndOpacity() {\n if (!this._input) return;\n\n this._input.style.borderColor = formatRgbAndOpacityToCssRgba(\n this._object._getRawBorderColor(),\n this._object.getBorderOpacity()\n );\n }\n updateBorderWidth() {\n if (!this._input) return;\n\n this._input.style.borderWidth = this._object.getBorderWidth() + 'px';\n }\n updateDisabled() {\n if (!this._form) return;\n\n this._form.disabled = this._object.isDisabled();\n }\n updateReadOnly() {\n if (!this._form) return;\n\n this._form.readOnly = this._object.isReadOnly();\n }\n\n updateMaxLength() {\n const input = this._input;\n if (!input) return;\n if (this._object.getMaxLength() <= 0) {\n input.removeAttribute('maxLength');\n return;\n }\n input.maxLength = this._object.getMaxLength();\n }\n\n updatePadding() {\n if (!this._input) return;\n\n this._input.style.padding = `${this._object\n .getPaddingY()\n .toFixed(2)}px ${this._object.getPaddingX().toFixed(2)}px`;\n }\n\n updateTextAlign() {\n if (!this._input) return;\n\n const newTextAlign = this._object.getTextAlign();\n this._input.style.textAlign = newTextAlign;\n }\n\n isFocused() {\n return this._input === document.activeElement;\n }\n\n focus() {\n if (!this._input) return;\n\n this._input.focus();\n }\n }\n export const TextInputRuntimeObjectRenderer = TextInputRuntimeObjectPixiRenderer;\n export type TextInputRuntimeObjectRenderer = TextInputRuntimeObjectPixiRenderer;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var gdjs;(function(
|
|
1
|
+
var gdjs;(function(i){const s=["text","email","password","number","telephone number","url","search","text area"],l=["left","center","right"],n=r=>{const t=r.toLowerCase();return s.includes(t)?r:"text"},o=r=>{if(!r)return"left";const t=r.toLowerCase();return l.includes(t)?r:"left"},h=300,p=30,d=(r,t,e)=>Math.max(0,Math.min(t/2-e,r));class u extends i.RuntimeObject{constructor(t,e){super(t,e);this.opacity=255;this._width=h;this._height=p;this._string=e.content.initialValue,this._placeholder=e.content.placeholder,this._fontResourceName=e.content.fontResourceName,this._fontSize=e.content.fontSize||20,this._inputType=n(e.content.inputType),this._textColor=i.rgbOrHexToRGBColor(e.content.textColor),this._fillColor=i.rgbOrHexToRGBColor(e.content.fillColor),this._fillOpacity=e.content.fillOpacity,this._borderColor=i.rgbOrHexToRGBColor(e.content.borderColor),this._borderOpacity=e.content.borderOpacity,this._borderWidth=e.content.borderWidth,this._disabled=e.content.disabled,this._readOnly=e.content.readOnly,this._textAlign=o(e.content.textAlign),this._maxLength=e.content.maxLength||0,this._paddingX=e.content.paddingX!==void 0?e.content.paddingX:2,this._paddingY=e.content.paddingY!==void 0?e.content.paddingY:1,this._isSubmitted=!1,this._renderer=new i.TextInputRuntimeObjectRenderer(this,t),this.onCreated()}getRendererObject(){return null}updateFromObjectData(t,e){return t.content.initialValue!==e.content.initialValue&&this._string===t.content.initialValue&&this.setString(e.content.initialValue),t.content.placeholder!==e.content.placeholder&&this.setPlaceholder(e.content.placeholder),t.content.fontResourceName!==e.content.fontResourceName&&this.setFontResourceName(e.content.fontResourceName),t.content.fontSize!==e.content.fontSize&&this.setFontSize(e.content.fontSize),t.content.inputType!==e.content.inputType&&this.setInputType(e.content.inputType),t.content.textColor!==e.content.textColor&&this.setTextColor(e.content.textColor),t.content.fillColor!==e.content.fillColor&&this.setFillColor(e.content.fillColor),t.content.fillOpacity!==e.content.fillOpacity&&this.setFillOpacity(e.content.fillOpacity),t.content.borderColor!==e.content.borderColor&&this.setBorderColor(e.content.borderColor),t.content.borderOpacity!==e.content.borderOpacity&&this.setBorderOpacity(e.content.borderOpacity),t.content.borderWidth!==e.content.borderWidth&&this.setBorderWidth(e.content.borderWidth),t.content.disabled!==e.content.disabled&&this.setDisabled(e.content.disabled),t.content.readOnly!==e.content.readOnly&&this.setReadOnly(e.content.readOnly),e.content.maxLength!==void 0&&t.content.maxLength!==e.content.maxLength&&this.setMaxLength(e.content.maxLength),e.content.textAlign&&t.content.textAlign!==e.content.textAlign&&(this._textAlign=e.content.textAlign),e.content.paddingX!==void 0&&t.content.paddingX!==e.content.paddingX&&this.setPaddingX(e.content.paddingX),e.content.paddingY!==void 0&&t.content.paddingY!==e.content.paddingY&&this.setPaddingY(e.content.paddingY),!0}getNetworkSyncData(){return{...super.getNetworkSyncData(),opa:this.getOpacity(),wid:this.getWidth(),hei:this.getHeight(),txt:this.getText(),frn:this.getFontResourceName(),fs:this.getFontSize(),place:this.getPlaceholder(),it:this.getInputType(),tc:this.getTextColor(),fc:this.getFillColor(),fo:this.getFillOpacity(),bc:this.getBorderColor(),bo:this.getBorderOpacity(),bw:this.getBorderWidth(),dis:this.isDisabled(),ro:this.isReadOnly()}}updateFromNetworkSyncData(t){super.updateFromNetworkSyncData(t),t.opa!==void 0&&this.setOpacity(t.opa),t.wid!==void 0&&this.setWidth(t.wid),t.hei!==void 0&&this.setHeight(t.hei),t.txt!==void 0&&this.setText(t.txt),t.frn!==void 0&&this.setFontResourceName(t.frn),t.fs!==void 0&&this.setFontSize(t.fs),t.place!==void 0&&this.setPlaceholder(t.place),t.it!==void 0&&this.setInputType(t.it),t.tc!==void 0&&this.setTextColor(t.tc),t.fc!==void 0&&this.setFillColor(t.fc),t.fo!==void 0&&this.setFillOpacity(t.fo),t.bc!==void 0&&this.setBorderColor(t.bc),t.bo!==void 0&&this.setBorderOpacity(t.bo),t.bw!==void 0&&this.setBorderWidth(t.bw),t.dis!==void 0&&this.setDisabled(t.dis),t.ro!==void 0&&this.setReadOnly(t.ro)}updatePreRender(t){this._isSubmitted=!1,this._renderer.updatePreRender()}extraInitializationFromInitialInstance(t){for(const e of t.stringProperties)e.name==="initialValue"?this.setString(e.value):e.name==="placeholder"&&this.setPlaceholder(e.value);t.customSize&&(this.setWidth(t.width),this.setHeight(t.height),this._renderer.updatePadding()),t.opacity!==void 0&&this.setOpacity(t.opacity)}onScenePaused(t){this._renderer.onScenePaused()}onSceneResumed(t){this._renderer.onSceneResumed()}onDestroyed(){super.onDestroyed(),this._renderer.onDestroy()}setOpacity(t){this.opacity=Math.max(0,Math.min(255,t)),this._renderer.updateOpacity()}getOpacity(){return this.opacity}setSize(t,e){this.setWidth(t),this.setHeight(e)}setWidth(t){this._width=t,this._renderer.updatePadding()}setHeight(t){this._height=t,this._renderer.updatePadding()}getWidth(){return this._width}getHeight(){return this._height}getString(){return this.getText()}setString(t){this.setText(t)}getText(){return this._string}setText(t){t!==this._string&&(this._string=t,this._renderer.updateString())}onRendererInputValueChanged(t){this._string=t}onRendererFormSubmitted(){this._isSubmitted=!0}getFontResourceName(){return this._fontResourceName}setFontResourceName(t){this._fontResourceName!==t&&(this._fontResourceName=t,this._renderer.updateFont())}getFontSize(){return this._fontSize}setFontSize(t){this._fontSize=t}getPlaceholder(){return this._placeholder}setPlaceholder(t){t!==this._placeholder&&(this._placeholder=t,this._renderer.updatePlaceholder())}getInputType(){return this._inputType}setInputType(t){const e=t.toLowerCase();e!==this._inputType&&(this._inputType=n(e),this._renderer.updateInputType())}setTextColor(t){this._textColor=i.rgbOrHexToRGBColor(t),this._renderer.updateTextColor()}getTextColor(){return this._textColor[0]+";"+this._textColor[1]+";"+this._textColor[2]}_getRawTextColor(){return this._textColor}setFillColor(t){this._fillColor=i.rgbOrHexToRGBColor(t),this._renderer.updateFillColorAndOpacity()}getFillColor(){return this._fillColor[0]+";"+this._fillColor[1]+";"+this._fillColor[2]}_getRawFillColor(){return this._fillColor}setFillOpacity(t){this._fillOpacity=Math.max(0,Math.min(255,t)),this._renderer.updateFillColorAndOpacity()}getFillOpacity(){return this._fillOpacity}setBorderColor(t){this._borderColor=i.rgbOrHexToRGBColor(t),this._renderer.updateBorderColorAndOpacity()}getBorderColor(){return this._borderColor[0]+";"+this._borderColor[1]+";"+this._borderColor[2]}_getRawBorderColor(){return this._borderColor}setBorderOpacity(t){this._borderOpacity=Math.max(0,Math.min(255,t)),this._renderer.updateBorderColorAndOpacity()}getBorderOpacity(){return this._borderOpacity}setBorderWidth(t){this._borderWidth=Math.max(0,t),this._renderer.updateBorderWidth()}getBorderWidth(){return this._borderWidth}setDisabled(t){this._disabled=t,this._renderer.updateDisabled()}isDisabled(){return this._disabled}setReadOnly(t){this._readOnly=t,this._renderer.updateReadOnly()}isReadOnly(){return this._readOnly}isFocused(){return this._renderer.isFocused()}isSubmitted(){return this._isSubmitted}getMaxLength(){return this._maxLength}setMaxLength(t){this._maxLength!==t&&(this._maxLength=t,this._renderer.updateMaxLength())}getPaddingX(){return d(this._paddingX,this._width,this._borderWidth)}setPaddingX(t){if(this._paddingX!==t){if(t<0){this._paddingX=0;return}this._paddingX=t,this._renderer.updatePadding()}}getPaddingY(){return d(this._paddingY,this._height,this._borderWidth)}setPaddingY(t){if(this._paddingY!==t){if(t<0){this._paddingY=0;return}this._paddingY=t,this._renderer.updatePadding()}}getTextAlign(){return this._textAlign}setTextAlign(t){const e=o(t);e!==this._textAlign&&(this._textAlign=e,this._renderer.updateTextAlign())}focus(){this.isFocused()||this.getInstanceContainer().getGame().getInputManager().clearAllPressedKeys(),this._renderer.focus()}}i.TextInputRuntimeObject=u,i.registerObject("TextInput::TextInputObject",i.TextInputRuntimeObject)})(gdjs||(gdjs={}));
|
|
2
2
|
//# sourceMappingURL=textinputruntimeobject.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../GDevelop/Extensions/TextInput/textinputruntimeobject.ts"],
|
|
4
|
-
"sourcesContent": ["namespace gdjs {\n const supportedInputTypes = [\n 'text',\n 'email',\n 'password',\n 'number',\n 'telephone number',\n 'url',\n 'search',\n 'text area',\n ] as const;\n\n type SupportedInputType = typeof supportedInputTypes[number];\n\n const parseInputType = (potentialInputType: string): SupportedInputType => {\n const lowercasedNewInputType = potentialInputType.toLowerCase();\n\n // @ts-ignore - we're actually checking that this value is correct.\n if (supportedInputTypes.includes(lowercasedNewInputType))\n return potentialInputType as SupportedInputType;\n\n return 'text';\n };\n\n /** Base parameters for {@link gdjs.TextInputRuntimeObject} */\n export interface TextInputObjectData extends ObjectData {\n /** The base parameters of the TextInput */\n content: {\n initialValue: string;\n placeholder: string;\n fontResourceName: string;\n fontSize: float;\n inputType: SupportedInputType;\n textColor: string;\n fillColor: string;\n fillOpacity: float;\n borderColor: string;\n borderOpacity: float;\n borderWidth: float;\n disabled: boolean;\n readOnly: boolean;\n };\n }\n\n export type TextInputNetworkSyncDataType = {\n opa: float;\n wid: float;\n hei: float;\n txt: string;\n frn: string;\n fs: number;\n place: string;\n it: SupportedInputType;\n tc: string;\n fc: string;\n fo: float;\n bc: string;\n bo: float;\n bw: float;\n dis: boolean;\n ro: boolean;\n };\n\n export type TextInputNetworkSyncData = ObjectNetworkSyncData &\n TextInputNetworkSyncDataType;\n\n const DEFAULT_WIDTH = 300;\n const DEFAULT_HEIGHT = 30;\n\n /**\n * Shows a text input on the screen the player can type text into.\n */\n export class TextInputRuntimeObject\n extends gdjs.RuntimeObject\n implements gdjs.TextContainer, gdjs.Resizable, gdjs.OpacityHandler {\n private _string: string;\n private _placeholder: string;\n private opacity: float = 255;\n private _width: float = DEFAULT_WIDTH;\n private _height: float = DEFAULT_HEIGHT;\n private _fontResourceName: string;\n private _fontSize: float;\n private _inputType: SupportedInputType;\n private _textColor: [float, float, float];\n private _fillColor: [float, float, float];\n private _fillOpacity: float;\n private _borderColor: [float, float, float];\n private _borderOpacity: float;\n private _borderWidth: float;\n private _disabled: boolean;\n private _readOnly: boolean;\n\n _renderer: TextInputRuntimeObjectRenderer;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n objectData: TextInputObjectData\n ) {\n super(instanceContainer, objectData);\n\n this._string = objectData.content.initialValue;\n this._placeholder = objectData.content.placeholder;\n this._fontResourceName = objectData.content.fontResourceName;\n this._fontSize = objectData.content.fontSize || 20;\n this._inputType = parseInputType(objectData.content.inputType);\n this._textColor = gdjs.rgbOrHexToRGBColor(objectData.content.textColor);\n this._fillColor = gdjs.rgbOrHexToRGBColor(objectData.content.fillColor);\n this._fillOpacity = objectData.content.fillOpacity;\n this._borderColor = gdjs.rgbOrHexToRGBColor(\n objectData.content.borderColor\n );\n this._borderOpacity = objectData.content.borderOpacity;\n this._borderWidth = objectData.content.borderWidth;\n this._disabled = objectData.content.disabled;\n this._readOnly = objectData.content.readOnly;\n\n this._renderer = new gdjs.TextInputRuntimeObjectRenderer(\n this,\n instanceContainer\n );\n\n // *ALWAYS* call `this.onCreated()` at the very end of your object constructor.\n this.onCreated();\n }\n\n getRendererObject() {\n return null;\n }\n\n updateFromObjectData(\n oldObjectData: TextInputObjectData,\n newObjectData: TextInputObjectData\n ): boolean {\n if (\n oldObjectData.content.initialValue !==\n newObjectData.content.initialValue\n ) {\n if (this._string === oldObjectData.content.initialValue) {\n this.setString(newObjectData.content.initialValue);\n }\n }\n if (\n oldObjectData.content.placeholder !== newObjectData.content.placeholder\n ) {\n this.setPlaceholder(newObjectData.content.placeholder);\n }\n if (\n oldObjectData.content.fontResourceName !==\n newObjectData.content.fontResourceName\n ) {\n this.setFontResourceName(newObjectData.content.fontResourceName);\n }\n if (oldObjectData.content.fontSize !== newObjectData.content.fontSize) {\n this.setFontSize(newObjectData.content.fontSize);\n }\n if (oldObjectData.content.inputType !== newObjectData.content.inputType) {\n this.setInputType(newObjectData.content.inputType);\n }\n if (oldObjectData.content.textColor !== newObjectData.content.textColor) {\n this.setTextColor(newObjectData.content.textColor);\n }\n if (oldObjectData.content.fillColor !== newObjectData.content.fillColor) {\n this.setFillColor(newObjectData.content.fillColor);\n }\n if (\n oldObjectData.content.fillOpacity !== newObjectData.content.fillOpacity\n ) {\n this.setFillOpacity(newObjectData.content.fillOpacity);\n }\n if (\n oldObjectData.content.borderColor !== newObjectData.content.borderColor\n ) {\n this.setBorderColor(newObjectData.content.borderColor);\n }\n if (\n oldObjectData.content.borderOpacity !==\n newObjectData.content.borderOpacity\n ) {\n this.setBorderOpacity(newObjectData.content.borderOpacity);\n }\n if (\n oldObjectData.content.borderWidth !== newObjectData.content.borderWidth\n ) {\n this.setBorderWidth(newObjectData.content.borderWidth);\n }\n if (oldObjectData.content.disabled !== newObjectData.content.disabled) {\n this.setDisabled(newObjectData.content.disabled);\n }\n if (oldObjectData.content.readOnly !== newObjectData.content.readOnly) {\n this.setReadOnly(newObjectData.content.readOnly);\n }\n return true;\n }\n\n getNetworkSyncData(): TextInputNetworkSyncData {\n return {\n ...super.getNetworkSyncData(),\n opa: this.getOpacity(),\n wid: this.getWidth(),\n hei: this.getHeight(),\n txt: this.getText(),\n frn: this.getFontResourceName(),\n fs: this.getFontSize(),\n place: this.getPlaceholder(),\n it: this.getInputType(),\n tc: this.getTextColor(),\n fc: this.getFillColor(),\n fo: this.getFillOpacity(),\n bc: this.getBorderColor(),\n bo: this.getBorderOpacity(),\n bw: this.getBorderWidth(),\n dis: this.isDisabled(),\n ro: this.isReadOnly(),\n };\n }\n\n updateFromNetworkSyncData(syncData: TextInputNetworkSyncData): void {\n super.updateFromNetworkSyncData(syncData);\n\n if (syncData.opa !== undefined) this.setOpacity(syncData.opa);\n if (syncData.wid !== undefined) this.setWidth(syncData.wid);\n if (syncData.hei !== undefined) this.setHeight(syncData.hei);\n if (syncData.txt !== undefined) this.setText(syncData.txt);\n if (syncData.frn !== undefined) this.setFontResourceName(syncData.frn);\n if (syncData.fs !== undefined) this.setFontSize(syncData.fs);\n if (syncData.place !== undefined) this.setPlaceholder(syncData.place);\n if (syncData.it !== undefined) this.setInputType(syncData.it);\n if (syncData.tc !== undefined) this.setTextColor(syncData.tc);\n if (syncData.fc !== undefined) this.setFillColor(syncData.fc);\n if (syncData.fo !== undefined) this.setFillOpacity(syncData.fo);\n if (syncData.bc !== undefined) this.setBorderColor(syncData.bc);\n if (syncData.bo !== undefined) this.setBorderOpacity(syncData.bo);\n if (syncData.bw !== undefined) this.setBorderWidth(syncData.bw);\n if (syncData.dis !== undefined) this.setDisabled(syncData.dis);\n if (syncData.ro !== undefined) this.setReadOnly(syncData.ro);\n }\n\n updatePreRender(instanceContainer: RuntimeInstanceContainer): void {\n this._renderer.updatePreRender();\n }\n\n /**\n * Initialize the extra parameters that could be set for an instance.\n */\n extraInitializationFromInitialInstance(initialInstanceData: InstanceData) {\n for (const property of initialInstanceData.stringProperties) {\n if (property.name === 'initialValue') {\n this.setString(property.value);\n } else if (property.name === 'placeholder') {\n this.setPlaceholder(property.value);\n }\n }\n if (initialInstanceData.customSize) {\n this.setWidth(initialInstanceData.width);\n this.setHeight(initialInstanceData.height);\n }\n if (initialInstanceData.opacity !== undefined) {\n this.setOpacity(initialInstanceData.opacity);\n }\n }\n\n onScenePaused(runtimeScene: gdjs.RuntimeScene): void {\n this._renderer.onScenePaused();\n }\n\n onSceneResumed(runtimeScene: gdjs.RuntimeScene): void {\n this._renderer.onSceneResumed();\n }\n\n onDestroyed(): void {\n super.onDestroyed();\n this._renderer.onDestroy();\n }\n\n setOpacity(opacity: float): void {\n this.opacity = Math.max(0, Math.min(255, opacity));\n this._renderer.updateOpacity();\n }\n\n getOpacity(): float {\n return this.opacity;\n }\n\n setSize(width: number, height: number): void {\n this.setWidth(width);\n this.setHeight(height);\n }\n\n setWidth(width: float): void {\n this._width = width;\n }\n\n setHeight(height: float): void {\n this._height = height;\n }\n\n /**\n * Return the width of the object.\n * @return The width of the object\n */\n getWidth(): float {\n return this._width;\n }\n\n /**\n * Return the width of the object.\n * @return The height of the object\n */\n getHeight(): float {\n return this._height;\n }\n\n /**\n * Get the text entered in the text input.\n * @deprecated use `getText` instead\n */\n getString() {\n return this.getText();\n }\n\n /**\n * Replace the text inside the text input.\n * @deprecated use `setText` instead\n */\n setString(text: string) {\n this.setText(text);\n }\n\n getText() {\n return this._string;\n }\n\n setText(newString: string) {\n if (newString === this._string) return;\n\n this._string = newString;\n this._renderer.updateString();\n }\n\n /**\n * Called by the renderer when the value of the input shown on the screen\n * was changed (because the user typed something).\n * This does not propagate back the value to the renderer, which would\n * result in the cursor being sent back to the end of the text.\n *\n * Do not use this if you are not inside the renderer - use `setString` instead.\n */\n onRendererInputValueChanged(inputValue: string) {\n this._string = inputValue;\n }\n\n getFontResourceName() {\n return this._fontResourceName;\n }\n\n setFontResourceName(resourceName: string) {\n if (this._fontResourceName === resourceName) return;\n\n this._fontResourceName = resourceName;\n this._renderer.updateFont();\n }\n\n getFontSize() {\n return this._fontSize;\n }\n\n setFontSize(newSize: number) {\n this._fontSize = newSize;\n }\n\n /**\n * Get the placeholder shown when no text is entered\n */\n getPlaceholder() {\n return this._placeholder;\n }\n\n /**\n * Replace the text inside the text input.\n */\n setPlaceholder(newPlaceholder: string) {\n if (newPlaceholder === this._placeholder) return;\n\n this._placeholder = newPlaceholder;\n this._renderer.updatePlaceholder();\n }\n\n /**\n * Get the type of the input.\n */\n getInputType() {\n return this._inputType;\n }\n\n /**\n * Set the type of the input.\n */\n setInputType(newInputType: string) {\n const lowercasedNewInputType = newInputType.toLowerCase();\n if (lowercasedNewInputType === this._inputType) return;\n\n this._inputType = parseInputType(lowercasedNewInputType);\n this._renderer.updateInputType();\n }\n\n setTextColor(newColor: string) {\n this._textColor = gdjs.rgbOrHexToRGBColor(newColor);\n this._renderer.updateTextColor();\n }\n\n getTextColor(): string {\n return (\n this._textColor[0] + ';' + this._textColor[1] + ';' + this._textColor[2]\n );\n }\n\n _getRawTextColor(): [float, float, float] {\n return this._textColor;\n }\n\n setFillColor(newColor: string) {\n this._fillColor = gdjs.rgbOrHexToRGBColor(newColor);\n this._renderer.updateFillColorAndOpacity();\n }\n\n getFillColor(): string {\n return (\n this._fillColor[0] + ';' + this._fillColor[1] + ';' + this._fillColor[2]\n );\n }\n\n _getRawFillColor(): [float, float, float] {\n return this._fillColor;\n }\n\n setFillOpacity(newOpacity: float) {\n this._fillOpacity = Math.max(0, Math.min(255, newOpacity));\n this._renderer.updateFillColorAndOpacity();\n }\n\n getFillOpacity(): float {\n return this._fillOpacity;\n }\n\n setBorderColor(newColor: string) {\n this._borderColor = gdjs.rgbOrHexToRGBColor(newColor);\n this._renderer.updateBorderColorAndOpacity();\n }\n\n getBorderColor(): string {\n return (\n this._borderColor[0] +\n ';' +\n this._borderColor[1] +\n ';' +\n this._borderColor[2]\n );\n }\n\n _getRawBorderColor(): [float, float, float] {\n return this._borderColor;\n }\n\n setBorderOpacity(newOpacity: float) {\n this._borderOpacity = Math.max(0, Math.min(255, newOpacity));\n this._renderer.updateBorderColorAndOpacity();\n }\n\n getBorderOpacity(): float {\n return this._borderOpacity;\n }\n\n setBorderWidth(width: float) {\n this._borderWidth = Math.max(0, width);\n this._renderer.updateBorderWidth();\n }\n\n getBorderWidth(): float {\n return this._borderWidth;\n }\n\n setDisabled(value: boolean) {\n this._disabled = value;\n this._renderer.updateDisabled();\n }\n\n isDisabled(): boolean {\n return this._disabled;\n }\n\n setReadOnly(value: boolean) {\n this._readOnly = value;\n this._renderer.updateReadOnly();\n }\n\n isReadOnly(): boolean {\n return this._readOnly;\n }\n\n isFocused(): boolean {\n return this._renderer.isFocused();\n }\n\n focus(): void {\n if (!this.isFocused()) {\n // If the input was not previously focused, reset input manager because there is\n // no reason to maintain its state. It avoids bugs where a key is pressed, the text\n // input is focused and then the input manager does not have access to the keyup event\n // and considers the key still pressed.\n this.getInstanceContainer()\n .getGame()\n .getInputManager()\n .clearAllPressedKeys();\n }\n this._renderer.focus();\n }\n }\n gdjs.registerObject(\n 'TextInput::TextInputObject',\n gdjs.TextInputRuntimeObject\n );\n}\n"],
|
|
5
|
-
"mappings": "AAAA,GAAU,MAAV,UAAU,EAAV,CACE,KAAM,GAAsB,CAC1B,OACA,QACA,WACA,SACA,mBACA,MACA,SACA,
|
|
4
|
+
"sourcesContent": ["namespace gdjs {\n const supportedInputTypes = [\n 'text',\n 'email',\n 'password',\n 'number',\n 'telephone number',\n 'url',\n 'search',\n 'text area',\n ] as const;\n const supportedTextAlign = ['left', 'center', 'right'] as const;\n\n type SupportedInputType = typeof supportedInputTypes[number];\n type SupportedTextAlign = typeof supportedTextAlign[number];\n const parseInputType = (potentialInputType: string): SupportedInputType => {\n const lowercasedNewInputType = potentialInputType.toLowerCase();\n\n // @ts-ignore - we're actually checking that this value is correct.\n if (supportedInputTypes.includes(lowercasedNewInputType))\n return potentialInputType as SupportedInputType;\n\n return 'text';\n };\n\n const parseTextAlign = (\n potentialTextAlign: string | undefined\n ): SupportedTextAlign => {\n if (!potentialTextAlign) return 'left';\n const lowercasedNewTextAlign = potentialTextAlign.toLowerCase();\n\n // @ts-ignore - we're actually checking that this value is correct.\n if (supportedTextAlign.includes(lowercasedNewTextAlign))\n return potentialTextAlign as SupportedTextAlign;\n\n return 'left';\n };\n\n /** Base parameters for {@link gdjs.TextInputRuntimeObject} */\n export interface TextInputObjectData extends ObjectData {\n /** The base parameters of the TextInput */\n content: {\n initialValue: string;\n placeholder: string;\n fontResourceName: string;\n fontSize: float;\n inputType: SupportedInputType;\n textColor: string;\n fillColor: string;\n fillOpacity: float;\n borderColor: string;\n borderOpacity: float;\n borderWidth: float;\n disabled: boolean;\n readOnly: boolean;\n // ---- Values can be undefined because of support for these feature was added in v5.5.222.\n paddingX?: float;\n paddingY?: float;\n textAlign?: SupportedTextAlign;\n maxLength?: integer;\n // ----\n };\n }\n\n export type TextInputNetworkSyncDataType = {\n opa: float;\n wid: float;\n hei: float;\n txt: string;\n frn: string;\n fs: number;\n place: string;\n it: SupportedInputType;\n tc: string;\n fc: string;\n fo: float;\n bc: string;\n bo: float;\n bw: float;\n dis: boolean;\n ro: boolean;\n };\n\n export type TextInputNetworkSyncData = ObjectNetworkSyncData &\n TextInputNetworkSyncDataType;\n\n const DEFAULT_WIDTH = 300;\n const DEFAULT_HEIGHT = 30;\n\n const clampPadding = (value: float, dimension: float, borderWidth: float) => {\n return Math.max(0, Math.min(dimension / 2 - borderWidth, value));\n };\n\n /**\n * Shows a text input on the screen the player can type text into.\n */\n export class TextInputRuntimeObject\n extends gdjs.RuntimeObject\n implements gdjs.TextContainer, gdjs.Resizable, gdjs.OpacityHandler {\n private _string: string;\n private _placeholder: string;\n private opacity: float = 255;\n private _width: float = DEFAULT_WIDTH;\n private _height: float = DEFAULT_HEIGHT;\n private _fontResourceName: string;\n private _fontSize: float;\n private _inputType: SupportedInputType;\n private _textColor: [float, float, float];\n private _fillColor: [float, float, float];\n private _fillOpacity: float;\n private _paddingX: integer;\n private _paddingY: integer;\n private _textAlign: SupportedTextAlign;\n private _maxLength: integer;\n private _borderColor: [float, float, float];\n private _borderOpacity: float;\n private _borderWidth: float;\n private _disabled: boolean;\n private _readOnly: boolean;\n private _isSubmitted: boolean;\n _renderer: TextInputRuntimeObjectRenderer;\n\n constructor(\n instanceContainer: gdjs.RuntimeInstanceContainer,\n objectData: TextInputObjectData\n ) {\n super(instanceContainer, objectData);\n\n this._string = objectData.content.initialValue;\n this._placeholder = objectData.content.placeholder;\n this._fontResourceName = objectData.content.fontResourceName;\n this._fontSize = objectData.content.fontSize || 20;\n this._inputType = parseInputType(objectData.content.inputType);\n this._textColor = gdjs.rgbOrHexToRGBColor(objectData.content.textColor);\n this._fillColor = gdjs.rgbOrHexToRGBColor(objectData.content.fillColor);\n this._fillOpacity = objectData.content.fillOpacity;\n this._borderColor = gdjs.rgbOrHexToRGBColor(\n objectData.content.borderColor\n );\n this._borderOpacity = objectData.content.borderOpacity;\n this._borderWidth = objectData.content.borderWidth;\n this._disabled = objectData.content.disabled;\n this._readOnly = objectData.content.readOnly;\n this._textAlign = parseTextAlign(objectData.content.textAlign);\n this._maxLength = objectData.content.maxLength || 0;\n this._paddingX =\n objectData.content.paddingX !== undefined\n ? objectData.content.paddingX\n : 2;\n this._paddingY =\n objectData.content.paddingY !== undefined\n ? objectData.content.paddingY\n : 1;\n this._isSubmitted = false;\n this._renderer = new gdjs.TextInputRuntimeObjectRenderer(\n this,\n instanceContainer\n );\n\n // *ALWAYS* call `this.onCreated()` at the very end of your object constructor.\n this.onCreated();\n }\n\n getRendererObject() {\n return null;\n }\n\n updateFromObjectData(\n oldObjectData: TextInputObjectData,\n newObjectData: TextInputObjectData\n ): boolean {\n if (\n oldObjectData.content.initialValue !==\n newObjectData.content.initialValue\n ) {\n if (this._string === oldObjectData.content.initialValue) {\n this.setString(newObjectData.content.initialValue);\n }\n }\n if (\n oldObjectData.content.placeholder !== newObjectData.content.placeholder\n ) {\n this.setPlaceholder(newObjectData.content.placeholder);\n }\n if (\n oldObjectData.content.fontResourceName !==\n newObjectData.content.fontResourceName\n ) {\n this.setFontResourceName(newObjectData.content.fontResourceName);\n }\n if (oldObjectData.content.fontSize !== newObjectData.content.fontSize) {\n this.setFontSize(newObjectData.content.fontSize);\n }\n if (oldObjectData.content.inputType !== newObjectData.content.inputType) {\n this.setInputType(newObjectData.content.inputType);\n }\n if (oldObjectData.content.textColor !== newObjectData.content.textColor) {\n this.setTextColor(newObjectData.content.textColor);\n }\n if (oldObjectData.content.fillColor !== newObjectData.content.fillColor) {\n this.setFillColor(newObjectData.content.fillColor);\n }\n if (\n oldObjectData.content.fillOpacity !== newObjectData.content.fillOpacity\n ) {\n this.setFillOpacity(newObjectData.content.fillOpacity);\n }\n if (\n oldObjectData.content.borderColor !== newObjectData.content.borderColor\n ) {\n this.setBorderColor(newObjectData.content.borderColor);\n }\n if (\n oldObjectData.content.borderOpacity !==\n newObjectData.content.borderOpacity\n ) {\n this.setBorderOpacity(newObjectData.content.borderOpacity);\n }\n if (\n oldObjectData.content.borderWidth !== newObjectData.content.borderWidth\n ) {\n this.setBorderWidth(newObjectData.content.borderWidth);\n }\n if (oldObjectData.content.disabled !== newObjectData.content.disabled) {\n this.setDisabled(newObjectData.content.disabled);\n }\n if (oldObjectData.content.readOnly !== newObjectData.content.readOnly) {\n this.setReadOnly(newObjectData.content.readOnly);\n }\n if (\n newObjectData.content.maxLength !== undefined &&\n oldObjectData.content.maxLength !== newObjectData.content.maxLength\n ) {\n this.setMaxLength(newObjectData.content.maxLength);\n }\n if (\n newObjectData.content.textAlign &&\n oldObjectData.content.textAlign !== newObjectData.content.textAlign\n ) {\n this._textAlign = newObjectData.content.textAlign;\n }\n if (\n newObjectData.content.paddingX !== undefined &&\n oldObjectData.content.paddingX !== newObjectData.content.paddingX\n ) {\n this.setPaddingX(newObjectData.content.paddingX);\n }\n if (\n newObjectData.content.paddingY !== undefined &&\n oldObjectData.content.paddingY !== newObjectData.content.paddingY\n ) {\n this.setPaddingY(newObjectData.content.paddingY);\n }\n\n return true;\n }\n\n getNetworkSyncData(): TextInputNetworkSyncData {\n return {\n ...super.getNetworkSyncData(),\n opa: this.getOpacity(),\n wid: this.getWidth(),\n hei: this.getHeight(),\n txt: this.getText(),\n frn: this.getFontResourceName(),\n fs: this.getFontSize(),\n place: this.getPlaceholder(),\n it: this.getInputType(),\n tc: this.getTextColor(),\n fc: this.getFillColor(),\n fo: this.getFillOpacity(),\n bc: this.getBorderColor(),\n bo: this.getBorderOpacity(),\n bw: this.getBorderWidth(),\n dis: this.isDisabled(),\n ro: this.isReadOnly(),\n };\n }\n\n updateFromNetworkSyncData(syncData: TextInputNetworkSyncData): void {\n super.updateFromNetworkSyncData(syncData);\n\n if (syncData.opa !== undefined) this.setOpacity(syncData.opa);\n if (syncData.wid !== undefined) this.setWidth(syncData.wid);\n if (syncData.hei !== undefined) this.setHeight(syncData.hei);\n if (syncData.txt !== undefined) this.setText(syncData.txt);\n if (syncData.frn !== undefined) this.setFontResourceName(syncData.frn);\n if (syncData.fs !== undefined) this.setFontSize(syncData.fs);\n if (syncData.place !== undefined) this.setPlaceholder(syncData.place);\n if (syncData.it !== undefined) this.setInputType(syncData.it);\n if (syncData.tc !== undefined) this.setTextColor(syncData.tc);\n if (syncData.fc !== undefined) this.setFillColor(syncData.fc);\n if (syncData.fo !== undefined) this.setFillOpacity(syncData.fo);\n if (syncData.bc !== undefined) this.setBorderColor(syncData.bc);\n if (syncData.bo !== undefined) this.setBorderOpacity(syncData.bo);\n if (syncData.bw !== undefined) this.setBorderWidth(syncData.bw);\n if (syncData.dis !== undefined) this.setDisabled(syncData.dis);\n if (syncData.ro !== undefined) this.setReadOnly(syncData.ro);\n }\n\n updatePreRender(instanceContainer: RuntimeInstanceContainer): void {\n this._isSubmitted = false;\n this._renderer.updatePreRender();\n }\n\n /**\n * Initialize the extra parameters that could be set for an instance.\n */\n extraInitializationFromInitialInstance(initialInstanceData: InstanceData) {\n for (const property of initialInstanceData.stringProperties) {\n if (property.name === 'initialValue') {\n this.setString(property.value);\n } else if (property.name === 'placeholder') {\n this.setPlaceholder(property.value);\n }\n }\n if (initialInstanceData.customSize) {\n this.setWidth(initialInstanceData.width);\n this.setHeight(initialInstanceData.height);\n this._renderer.updatePadding();\n }\n if (initialInstanceData.opacity !== undefined) {\n this.setOpacity(initialInstanceData.opacity);\n }\n }\n\n onScenePaused(runtimeScene: gdjs.RuntimeScene): void {\n this._renderer.onScenePaused();\n }\n\n onSceneResumed(runtimeScene: gdjs.RuntimeScene): void {\n this._renderer.onSceneResumed();\n }\n\n onDestroyed(): void {\n super.onDestroyed();\n this._renderer.onDestroy();\n }\n\n setOpacity(opacity: float): void {\n this.opacity = Math.max(0, Math.min(255, opacity));\n this._renderer.updateOpacity();\n }\n\n getOpacity(): float {\n return this.opacity;\n }\n\n setSize(width: number, height: number): void {\n this.setWidth(width);\n this.setHeight(height);\n }\n\n setWidth(width: float): void {\n this._width = width;\n this._renderer.updatePadding();\n }\n\n setHeight(height: float): void {\n this._height = height;\n this._renderer.updatePadding();\n }\n\n /**\n * Return the width of the object.\n * @return The width of the object\n */\n getWidth(): float {\n return this._width;\n }\n\n /**\n * Return the width of the object.\n * @return The height of the object\n */\n getHeight(): float {\n return this._height;\n }\n\n /**\n * Get the text entered in the text input.\n * @deprecated use `getText` instead\n */\n getString() {\n return this.getText();\n }\n\n /**\n * Replace the text inside the text input.\n * @deprecated use `setText` instead\n */\n setString(text: string) {\n this.setText(text);\n }\n\n getText() {\n return this._string;\n }\n\n setText(newString: string) {\n if (newString === this._string) return;\n\n this._string = newString;\n this._renderer.updateString();\n }\n\n /**\n * Called by the renderer when the value of the input shown on the screen\n * was changed (because the user typed something).\n * This does not propagate back the value to the renderer, which would\n * result in the cursor being sent back to the end of the text.\n *\n * Do not use this if you are not inside the renderer - use `setString` instead.\n */\n onRendererInputValueChanged(inputValue: string) {\n this._string = inputValue;\n }\n\n onRendererFormSubmitted() {\n this._isSubmitted = true;\n }\n\n getFontResourceName() {\n return this._fontResourceName;\n }\n\n setFontResourceName(resourceName: string) {\n if (this._fontResourceName === resourceName) return;\n\n this._fontResourceName = resourceName;\n this._renderer.updateFont();\n }\n\n getFontSize() {\n return this._fontSize;\n }\n\n setFontSize(newSize: number) {\n this._fontSize = newSize;\n }\n\n /**\n * Get the placeholder shown when no text is entered\n */\n getPlaceholder() {\n return this._placeholder;\n }\n\n /**\n * Replace the text inside the text input.\n */\n setPlaceholder(newPlaceholder: string) {\n if (newPlaceholder === this._placeholder) return;\n\n this._placeholder = newPlaceholder;\n this._renderer.updatePlaceholder();\n }\n\n /**\n * Get the type of the input.\n */\n getInputType() {\n return this._inputType;\n }\n\n /**\n * Set the type of the input.\n */\n setInputType(newInputType: string) {\n const lowercasedNewInputType = newInputType.toLowerCase();\n if (lowercasedNewInputType === this._inputType) return;\n\n this._inputType = parseInputType(lowercasedNewInputType);\n this._renderer.updateInputType();\n }\n\n setTextColor(newColor: string) {\n this._textColor = gdjs.rgbOrHexToRGBColor(newColor);\n this._renderer.updateTextColor();\n }\n\n getTextColor(): string {\n return (\n this._textColor[0] + ';' + this._textColor[1] + ';' + this._textColor[2]\n );\n }\n\n _getRawTextColor(): [float, float, float] {\n return this._textColor;\n }\n\n setFillColor(newColor: string) {\n this._fillColor = gdjs.rgbOrHexToRGBColor(newColor);\n this._renderer.updateFillColorAndOpacity();\n }\n\n getFillColor(): string {\n return (\n this._fillColor[0] + ';' + this._fillColor[1] + ';' + this._fillColor[2]\n );\n }\n\n _getRawFillColor(): [float, float, float] {\n return this._fillColor;\n }\n\n setFillOpacity(newOpacity: float) {\n this._fillOpacity = Math.max(0, Math.min(255, newOpacity));\n this._renderer.updateFillColorAndOpacity();\n }\n\n getFillOpacity(): float {\n return this._fillOpacity;\n }\n\n setBorderColor(newColor: string) {\n this._borderColor = gdjs.rgbOrHexToRGBColor(newColor);\n this._renderer.updateBorderColorAndOpacity();\n }\n\n getBorderColor(): string {\n return (\n this._borderColor[0] +\n ';' +\n this._borderColor[1] +\n ';' +\n this._borderColor[2]\n );\n }\n\n _getRawBorderColor(): [float, float, float] {\n return this._borderColor;\n }\n\n setBorderOpacity(newOpacity: float) {\n this._borderOpacity = Math.max(0, Math.min(255, newOpacity));\n this._renderer.updateBorderColorAndOpacity();\n }\n\n getBorderOpacity(): float {\n return this._borderOpacity;\n }\n\n setBorderWidth(width: float) {\n this._borderWidth = Math.max(0, width);\n this._renderer.updateBorderWidth();\n }\n\n getBorderWidth(): float {\n return this._borderWidth;\n }\n\n setDisabled(value: boolean) {\n this._disabled = value;\n this._renderer.updateDisabled();\n }\n\n isDisabled(): boolean {\n return this._disabled;\n }\n\n setReadOnly(value: boolean) {\n this._readOnly = value;\n this._renderer.updateReadOnly();\n }\n\n isReadOnly(): boolean {\n return this._readOnly;\n }\n\n isFocused(): boolean {\n return this._renderer.isFocused();\n }\n isSubmitted(): boolean {\n return this._isSubmitted;\n }\n\n getMaxLength(): integer {\n return this._maxLength;\n }\n setMaxLength(value: integer) {\n if (this._maxLength === value) return;\n\n this._maxLength = value;\n this._renderer.updateMaxLength();\n }\n\n getPaddingX(): integer {\n return clampPadding(this._paddingX, this._width, this._borderWidth);\n }\n setPaddingX(value: integer) {\n if (this._paddingX === value) return;\n if (value < 0) {\n this._paddingX = 0;\n return;\n }\n\n this._paddingX = value;\n this._renderer.updatePadding();\n }\n getPaddingY(): integer {\n return clampPadding(this._paddingY, this._height, this._borderWidth);\n }\n setPaddingY(value: integer) {\n if (this._paddingY === value) return;\n if (value < 0) {\n this._paddingY = 0;\n return;\n }\n\n this._paddingY = value;\n this._renderer.updatePadding();\n }\n\n getTextAlign(): SupportedTextAlign {\n return this._textAlign;\n }\n\n setTextAlign(newTextAlign: string) {\n const parsedTextAlign = parseTextAlign(newTextAlign);\n if (parsedTextAlign === this._textAlign) return;\n\n this._textAlign = parsedTextAlign;\n this._renderer.updateTextAlign();\n }\n\n focus(): void {\n if (!this.isFocused()) {\n // If the input was not previously focused, reset input manager because there is\n // no reason to maintain its state. It avoids bugs where a key is pressed, the text\n // input is focused and then the input manager does not have access to the keyup event\n // and considers the key still pressed.\n this.getInstanceContainer()\n .getGame()\n .getInputManager()\n .clearAllPressedKeys();\n }\n this._renderer.focus();\n }\n }\n gdjs.registerObject(\n 'TextInput::TextInputObject',\n gdjs.TextInputRuntimeObject\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var gdjs;(function(
|
|
1
|
+
var gdjs;(function(u){let s;(function(i){let r;(function(o){o.getGlobalVolume=function(n){return n.getScene().getSoundManager().getGlobalVolume()},o.setGlobalVolume=function(n,t){n.getScene().getSoundManager().setGlobalVolume(t)},o.unloadAllAudio=function(n){n.getScene().getSoundManager().unloadAll()},o.playSound=function(n,t,e,g,a){n.getScene().getSoundManager().playSound(t,e,g,a)},o.playSoundOnChannel=function(n,t,e,g,a,c){n.getScene().getSoundManager().playSoundOnChannel(t,e,g,a,c)},o.stopSoundOnChannel=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);e&&e.stop()},o.pauseSoundOnChannel=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);e&&e.pause()},o.continueSoundOnChannel=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);e&&(e.playing()||e.play())},o.isSoundOnChannelPlaying=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);return e?e.playing():!1},o.isSoundOnChannelPaused=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);return e?e.paused():!1},o.isSoundOnChannelStopped=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);return e?e.stopped():!0},o.getSoundOnChannelVolume=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);return e?e.getVolume()*100:100},o.setSoundOnChannelVolume=function(n,t,e){const g=n.getScene().getSoundManager().getSoundOnChannel(t);g&&g.setVolume(e/100)},o.getSoundOnChannelPlayingOffset=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);return e?e.getSeek():0},o.setSoundOnChannelPlayingOffset=function(n,t,e){const g=n.getScene().getSoundManager().getSoundOnChannel(t);g&&g.setSeek(e)},o.getSoundOnChannelPitch=function(n,t){const e=n.getScene().getSoundManager().getSoundOnChannel(t);return e?e.getRate():1},o.setSoundOnChannelPitch=function(n,t,e){const g=n.getScene().getSoundManager().getSoundOnChannel(t);g&&g.setRate(e)},o.preloadSound=(n,t)=>n.getScene().getSoundManager().loadAudio(t,!1),o.unloadSound=(n,t)=>n.getScene().getSoundManager().unloadAudio(t,!1),o.playMusic=function(n,t,e,g,a){n.getScene().getSoundManager().playMusic(t,e,g,a)},o.playMusicOnChannel=function(n,t,e,g,a,c){n.getScene().getSoundManager().playMusicOnChannel(t,e,g,a,c)},o.stopMusicOnChannel=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);e&&e.stop()},o.pauseMusicOnChannel=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);e&&e.pause()},o.continueMusicOnChannel=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);e&&(e.playing()||e.play())},o.isMusicOnChannelPlaying=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);return e?e.playing():!1},o.isMusicOnChannelPaused=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);return e?e.paused():!1},o.isMusicOnChannelStopped=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);return e?e.stopped():!0},o.getMusicOnChannelVolume=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);return e?e.getVolume()*100:100},o.setMusicOnChannelVolume=function(n,t,e){const g=n.getScene().getSoundManager().getMusicOnChannel(t);g&&g.setVolume(e/100)},o.getMusicOnChannelPlayingOffset=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);return e?e.getSeek():0},o.setMusicOnChannelPlayingOffset=function(n,t,e){const g=n.getScene().getSoundManager().getMusicOnChannel(t);g&&g.setSeek(e)},o.getMusicOnChannelPitch=function(n,t){const e=n.getScene().getSoundManager().getMusicOnChannel(t);return e?e.getRate():1},o.setMusicOnChannelPitch=function(n,t,e){const g=n.getScene().getSoundManager().getMusicOnChannel(t);g&&g.setRate(e)},o.preloadMusic=(n,t)=>n.getScene().getSoundManager().loadAudio(t,!0),o.unloadMusic=(n,t)=>n.getScene().getSoundManager().unloadAudio(t,!0),o.fadeSoundVolume=(n,t,e,g)=>{const a=n.getScene().getSoundManager().getSoundOnChannel(t);a&&a.fade(a.getVolume(),e/100,g*1e3)},o.fadeMusicVolume=(n,t,e,g)=>{const a=n.getScene().getSoundManager().getMusicOnChannel(t);a&&a.fade(a.getVolume(),e/100,g*1e3)}})(r=i.sound||(i.sound={}))})(s=u.evtTools||(u.evtTools={}))})(gdjs||(gdjs={}));
|
|
2
2
|
//# sourceMappingURL=soundtools.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../GDevelop/GDJS/Runtime/events-tools/soundtools.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n export namespace evtTools {\n export namespace sound {\n const logger = new gdjs.Logger('Audio events');\n\n export const getGlobalVolume = function (\n runtimeScene: gdjs.RuntimeScene\n ): float {\n return runtimeScene.getScene().getSoundManager().getGlobalVolume();\n };\n\n export const setGlobalVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n globalVolume: float\n ): void {\n runtimeScene.getScene().getSoundManager().setGlobalVolume(globalVolume);\n };\n\n export const unloadAllAudio = function (\n runtimeScene: gdjs.RuntimeScene\n ): void {\n runtimeScene.getScene().getSoundManager().unloadAll();\n };\n\n // Sounds:\n export const playSound = function (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string,\n loop: boolean,\n volume: float,\n pitch: float\n ): void {\n runtimeScene\n .getScene()\n .getSoundManager()\n .playSound(soundFile, loop, volume, pitch);\n };\n\n export const playSoundOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string,\n channel: integer,\n loop: boolean,\n volume: float,\n pitch: float\n ): void {\n runtimeScene\n .getScene()\n .getSoundManager()\n .playSoundOnChannel(soundFile, channel, loop, volume, pitch);\n };\n\n export const stopSoundOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.stop();\n else {\n logger.error(`Cannot stop non-existing sound on channel ${channel}.`);\n }\n };\n\n export const pauseSoundOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.pause();\n else {\n logger.error(\n `Cannot pause non-existing sound on channel ${channel}.`\n );\n }\n };\n\n export const continueSoundOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) {\n if (!sound.playing()) sound.play();\n } else {\n logger.error(\n `Cannot continue playing non-existing sound on channel ${channel}.`\n );\n }\n };\n\n export const isSoundOnChannelPlaying = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n return sound ? sound.playing() : false;\n };\n\n export const isSoundOnChannelPaused = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.paused();\n else {\n logger.error(\n `Cannot check if non-existing sound on channel ${channel} is paused.`\n );\n return false;\n }\n };\n\n export const isSoundOnChannelStopped = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.stopped();\n else {\n logger.error(\n `Cannot check if non-existing sound on channel ${channel} is stopped.`\n );\n return true;\n }\n };\n\n export const getSoundOnChannelVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.getVolume() * 100;\n else {\n logger.error(\n `Cannot get the volume of a non-existing sound on channel ${channel}.`\n );\n return 100;\n }\n };\n\n export const setSoundOnChannelVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n volume: float\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.setVolume(volume / 100);\n else {\n logger.error(\n `Cannot set the volume of a non-existing sound on channel ${channel}.`\n );\n }\n };\n\n export const getSoundOnChannelPlayingOffset = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.getSeek();\n else {\n logger.error(\n `Cannot get the playing offset of a non-existing sound on channel ${channel}.`\n );\n return 0;\n }\n };\n\n export const setSoundOnChannelPlayingOffset = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n playingOffset: float\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.setSeek(playingOffset);\n else {\n logger.error(\n `Cannot set the playing offset of a non-existing sound on channel ${channel}.`\n );\n }\n };\n\n export const getSoundOnChannelPitch = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.getRate();\n else {\n logger.error(\n `Cannot get the pitch of a non-existing sound on channel ${channel}.`\n );\n return 1;\n }\n };\n\n export const setSoundOnChannelPitch = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n pitch: float\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.setRate(pitch);\n else {\n logger.error(\n `Cannot get the pitch of a non-existing sound on channel ${channel}.`\n );\n }\n };\n\n export const preloadSound = (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string\n ) =>\n runtimeScene\n .getScene()\n .getSoundManager()\n .loadAudio(soundFile, /* isMusic= */ false);\n\n export const unloadSound = (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string\n ) =>\n runtimeScene\n .getScene()\n .getSoundManager()\n .unloadAudio(soundFile, /* isMusic= */ false);\n\n // Musics:\n export const playMusic = function (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string,\n loop: boolean,\n volume: float,\n pitch: float\n ): void {\n runtimeScene\n .getScene()\n .getSoundManager()\n .playMusic(soundFile, loop, volume, pitch);\n };\n\n export const playMusicOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string,\n channel: integer,\n loop: boolean,\n volume: float,\n pitch: float\n ): void {\n runtimeScene\n .getScene()\n .getSoundManager()\n .playMusicOnChannel(soundFile, channel, loop, volume, pitch);\n };\n\n export const stopMusicOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.stop();\n else {\n logger.error(\n `Cannot stop a non-existing music on channel ${channel}.`\n );\n }\n };\n\n export const pauseMusicOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.pause();\n else {\n logger.error(\n `Cannot pause a non-existing music on channel ${channel}.`\n );\n }\n };\n\n export const continueMusicOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) {\n if (!music.playing()) music.play();\n } else {\n logger.error(\n `Cannot stop a non-existing music on channel ${channel}.`\n );\n }\n };\n\n export const isMusicOnChannelPlaying = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n return music ? music.playing() : false;\n };\n\n export const isMusicOnChannelPaused = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.paused();\n else {\n logger.error(\n `Cannot check if non-existing music on channel ${channel} is paused.`\n );\n return false;\n }\n };\n\n export const isMusicOnChannelStopped = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.stopped();\n else {\n logger.error(\n `Cannot check if non-existing music on channel ${channel} is stopped.`\n );\n return true;\n }\n };\n\n export const getMusicOnChannelVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.getVolume() * 100;\n else {\n logger.error(\n `Cannot get the volume of a non-existing music on channel ${channel}.`\n );\n return 100;\n }\n };\n\n export const setMusicOnChannelVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n volume: float\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.setVolume(volume / 100);\n else {\n logger.error(\n `Cannot set the volume of a non-existing music on channel ${channel}.`\n );\n }\n };\n\n export const getMusicOnChannelPlayingOffset = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.getSeek();\n else {\n logger.error(\n `Cannot get the playing offset of a non-existing music on channel ${channel}.`\n );\n return 0;\n }\n };\n\n export const setMusicOnChannelPlayingOffset = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n playingOffset: float\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.setSeek(playingOffset);\n else {\n logger.error(\n `Cannot set the playing offset of a non-existing music on channel ${channel}.`\n );\n }\n };\n\n export const getMusicOnChannelPitch = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.getRate();\n else {\n logger.error(\n `Cannot get the pitch of a non-existing music on channel ${channel}.`\n );\n return 1;\n }\n };\n\n export const setMusicOnChannelPitch = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n pitch: float\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.setRate(pitch);\n else {\n logger.error(\n `Cannot get the pitch of a non-existing music on channel ${channel}.`\n );\n }\n };\n\n export const preloadMusic = (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string\n ) =>\n runtimeScene\n .getScene()\n .getSoundManager()\n .loadAudio(soundFile, /* isMusic= */ true);\n\n export const unloadMusic = (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string\n ) =>\n runtimeScene\n .getScene()\n .getSoundManager()\n .unloadAudio(soundFile, /* isMusic= */ true);\n\n export const fadeSoundVolume = (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n toVolume: float,\n timeOfFade: float /* in seconds */\n ) => {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) {\n sound.fade(sound.getVolume(), toVolume / 100, timeOfFade * 1000);\n } else {\n logger.error(\n `Cannot fade the volume of a non-existing sound on channel ${channel}.`\n );\n }\n };\n export const fadeMusicVolume = (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n toVolume: float,\n timeOfFade: float /* in seconds */\n ) => {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) {\n music.fade(music.getVolume(), toVolume / 100, timeOfFade * 1000);\n } else {\n logger.error(\n `Cannot fade the volume of a non-existing music on channel ${channel}.`\n );\n }\n };\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "AAKA,GAAU,MAAV,UAAU,EAAV,CACS,GAAU,GAAV,UAAU,EAAV,CACE,GAAU,GAAV,UAAU,EAAV,
|
|
4
|
+
"sourcesContent": ["/*\n * GDevelop JS Platform\n * Copyright 2013-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.\n * This project is released under the MIT License.\n */\nnamespace gdjs {\n export namespace evtTools {\n export namespace sound {\n export const getGlobalVolume = function (\n runtimeScene: gdjs.RuntimeScene\n ): float {\n return runtimeScene.getScene().getSoundManager().getGlobalVolume();\n };\n\n export const setGlobalVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n globalVolume: float\n ): void {\n runtimeScene.getScene().getSoundManager().setGlobalVolume(globalVolume);\n };\n\n export const unloadAllAudio = function (\n runtimeScene: gdjs.RuntimeScene\n ): void {\n runtimeScene.getScene().getSoundManager().unloadAll();\n };\n\n // Sounds:\n export const playSound = function (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string,\n loop: boolean,\n volume: float,\n pitch: float\n ): void {\n runtimeScene\n .getScene()\n .getSoundManager()\n .playSound(soundFile, loop, volume, pitch);\n };\n\n export const playSoundOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string,\n channel: integer,\n loop: boolean,\n volume: float,\n pitch: float\n ): void {\n runtimeScene\n .getScene()\n .getSoundManager()\n .playSoundOnChannel(soundFile, channel, loop, volume, pitch);\n };\n\n export const stopSoundOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.stop();\n };\n\n export const pauseSoundOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.pause();\n };\n\n export const continueSoundOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) {\n if (!sound.playing()) sound.play();\n }\n };\n\n export const isSoundOnChannelPlaying = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n return sound ? sound.playing() : false;\n };\n\n export const isSoundOnChannelPaused = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.paused();\n else {\n return false;\n }\n };\n\n export const isSoundOnChannelStopped = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.stopped();\n else {\n return true;\n }\n };\n\n export const getSoundOnChannelVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.getVolume() * 100;\n else {\n return 100;\n }\n };\n\n export const setSoundOnChannelVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n volume: float\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.setVolume(volume / 100);\n };\n\n export const getSoundOnChannelPlayingOffset = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.getSeek();\n else {\n return 0;\n }\n };\n\n export const setSoundOnChannelPlayingOffset = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n playingOffset: float\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.setSeek(playingOffset);\n };\n\n export const getSoundOnChannelPitch = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) return sound.getRate();\n else {\n return 1;\n }\n };\n\n export const setSoundOnChannelPitch = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n pitch: float\n ): void {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) sound.setRate(pitch);\n };\n\n export const preloadSound = (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string\n ) =>\n runtimeScene\n .getScene()\n .getSoundManager()\n .loadAudio(soundFile, /* isMusic= */ false);\n\n export const unloadSound = (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string\n ) =>\n runtimeScene\n .getScene()\n .getSoundManager()\n .unloadAudio(soundFile, /* isMusic= */ false);\n\n // Musics:\n export const playMusic = function (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string,\n loop: boolean,\n volume: float,\n pitch: float\n ): void {\n runtimeScene\n .getScene()\n .getSoundManager()\n .playMusic(soundFile, loop, volume, pitch);\n };\n\n export const playMusicOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string,\n channel: integer,\n loop: boolean,\n volume: float,\n pitch: float\n ): void {\n runtimeScene\n .getScene()\n .getSoundManager()\n .playMusicOnChannel(soundFile, channel, loop, volume, pitch);\n };\n\n export const stopMusicOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.stop();\n };\n\n export const pauseMusicOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.pause();\n };\n\n export const continueMusicOnChannel = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) {\n if (!music.playing()) music.play();\n }\n };\n\n export const isMusicOnChannelPlaying = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n return music ? music.playing() : false;\n };\n\n export const isMusicOnChannelPaused = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.paused();\n else {\n return false;\n }\n };\n\n export const isMusicOnChannelStopped = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): boolean {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.stopped();\n else {\n return true;\n }\n };\n\n export const getMusicOnChannelVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.getVolume() * 100;\n else {\n return 100;\n }\n };\n\n export const setMusicOnChannelVolume = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n volume: float\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.setVolume(volume / 100);\n };\n\n export const getMusicOnChannelPlayingOffset = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.getSeek();\n else {\n return 0;\n }\n };\n\n export const setMusicOnChannelPlayingOffset = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n playingOffset: float\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.setSeek(playingOffset);\n };\n\n export const getMusicOnChannelPitch = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer\n ): float {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) return music.getRate();\n else {\n return 1;\n }\n };\n\n export const setMusicOnChannelPitch = function (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n pitch: float\n ): void {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) music.setRate(pitch);\n };\n\n export const preloadMusic = (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string\n ) =>\n runtimeScene\n .getScene()\n .getSoundManager()\n .loadAudio(soundFile, /* isMusic= */ true);\n\n export const unloadMusic = (\n runtimeScene: gdjs.RuntimeScene,\n soundFile: string\n ) =>\n runtimeScene\n .getScene()\n .getSoundManager()\n .unloadAudio(soundFile, /* isMusic= */ true);\n\n export const fadeSoundVolume = (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n toVolume: float,\n timeOfFade: float /* in seconds */\n ) => {\n const sound = runtimeScene\n .getScene()\n .getSoundManager()\n .getSoundOnChannel(channel);\n if (sound) {\n sound.fade(sound.getVolume(), toVolume / 100, timeOfFade * 1000);\n }\n };\n export const fadeMusicVolume = (\n runtimeScene: gdjs.RuntimeScene,\n channel: integer,\n toVolume: float,\n timeOfFade: float /* in seconds */\n ) => {\n const music = runtimeScene\n .getScene()\n .getSoundManager()\n .getMusicOnChannel(channel);\n if (music) {\n music.fade(music.getVolume(), toVolume / 100, timeOfFade * 1000);\n }\n };\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|