Mikal's Forum Posts

  • You are normalizing the u,v coords (n), you usually have to denormalize again before you sample the texture again (map it to the region of spritesheet your image resides in.)

    (e.g. sampler2D(sampleFront, mix(srcOriginStart, srcOriginEnd, nUpdated)) )

    If nUpdated.x or nUpdated.y is < 0 or > 1, you need decide how to deal with that, e.g. clamp or set color to a base color (transparent, white, etc.)

  • If you want to update your nw.js, check out these later builds of the Greenworks node files so you can update your nw.js version.

    greenworks-prebuilds.armaldio.xyz

    Also A small plug, I added more ACES for Greenworks API in my free Greengrinds plugin.

  • Great tutorial for c3IDE.

    If you do additional c3IDE tutorials, I suggest:

    - Add interaction with C3 SDK: world info, instance info, change instance parameters (location, size, etc.)

    - Effect (I can supply some simple effect code, if you need and I can add some notes if you want.)

  • I was wondering about this too and tried it, I can get it to work with a plugin, but not with a behavior (it looks the the OnPropertyChanged function is not called when changing the property of the behaior on an instance.

    Here's the code from the top-level instance.js (using the SDK behavior example to test from here: construct.net/en/make-games/manuals/addon-sdk )

    "use strict";
    
    {
    	const BEHAVIOR_CLASS = SDK.Behaviors.MyCompany_MyBehavior;
    	
    	BEHAVIOR_CLASS.Instance = class MyCustomBehaviorInstance extends SDK.IBehaviorInstanceBase
    	{
    		constructor(sdkBehType, behInst)
    		{
    			super(sdkBehType, behInst);
    		}
    		
    		Release()
    		{
    		}
    		
    		OnCreate()
    		{
    		}
    		
    		OnPropertyChanged(id, value)
    		{
    			console.log("***INFO*** id:"+id+" value:"+value);
    			debugger
    		}
    		
    		LoadC2Property(name, valueString)
    		{
    			return false;		// not handled
    		}
    	};
    }
    
  • You are welcome.

    You also _may_ be able to get it to work in worker mode if you use some special global variables and don't need APIs not available in worker mode.

    Check out globalThis in the following manual page:

    construct.net/en/make-games/manuals/construct-3/scripting/using-scripting/javascript-construct

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • macube Sorry, did not finish filling in the link! Updated above.

  • Update release 0.0.2.8.

    Added Greenworks DLC ACEs (see github.com/greenheartgames/greenworks/blob/master/docs/dlc.md )

    I am mainly using Electron for Construct to integrate C3 and Greengrinds / Greenworks / Steam into an executable. Electron for Construct also has the side benefit of download and using the appropriate Greenworks binary (*.node file) for the version of Electron you are building for.

    If you need to use a later version of nw.js, you can try replacing the *.node in your output directory/package with one of these that match the version of nw.s you build with. They were built by Armaldio's nice CI build service (if you use them, don't forget to Donate!)

    greenworks-prebuilds.armaldio.xyz

    (Use release 0.2.8 from the above for all of the DLC ACEs to be enabled.)

  • Good question. I guess it's more of an user opinion.

    Right now it basically loads a skeleton and allows you to play an animation and mirror the direction. I think it needs at least one more trigger On Animation Finished or Looped, and then it will have at least basic functionality.

    However, what else would you need, looking at the flyover C2 plugin there's some more ACEs (in particular Events.)

    I suggest trying it out now and give feedback on the plugin github site (e.g. as an issue)

  • Congrats on the release! It's so much fun to play with and a ton of great examples.

  • It's by C3 layer and C3 z-order. However, if someone knows how to easily enable the common Z elevation ACEs, I will gladly add them to the ElementQuad plugin also.

  • Some babylon.js 3D render using some simple JS integration with ElementQuad to integrate into C3 render and C3 events (you can put it on different C3 layers, add C3 effects, change size, position, etc. of the rendered 3d image.)

    This is a template which uses C3 JS integration to add Babylon, it's not a Babylon add / plugin. It does use on plugin to show the results:

    construct.net/en/make-games/addons/312/elementquad

    You can also use C3 JS to access/manipulate the Babylon scene/engine, e.g.:

    + System: Every tick

    | Local number alpha‎ = 0

    ----+ (no conditions)

    -----> System: Set alpha to ElementQuad.Sine3.Value

    -----> Run JavaScript:

    scene.activeCamera.alpha = localVars.alpha

    scene.activeCamera.beta = 1.55+localVars.alpha/5

    Babylon Template (requires ElementQuad addon)

    BabylonTemplateLocal.c3p

    Uses local project files for models / glb (works in preview and web)

    babylonjs.com

    Have fun with it...

  • A quick check - do you have worker mode enabled? Sometimes this changes scope available to different scripts.

  • Yes, I thought it might be relative, not absolute.

    You might take a look at this (use JS integration to access it), there are some comments on absolute orientation.

    developerdrive.com/how-to-use-the-device-orientation-api

  • I have been using a relative compass heading in C3 for a 360 viewer on mobile.

    You might try and check if it's absolute though (depending on what you need.)

    Check out Touch.Alpha, Beta, Gamma

    construct.net/en/make-games/manuals/construct-3/plugin-reference/touch

    To convert to a stable compass heading I use JS in a function:

    * On function 'compassHeading'

    * Parameter 'alpha' (Number)

    * Parameter 'beta' (Number)

    * Parameter 'gamma' (Number)

    -> Run JavaScript:

    var alpha = localVars.alpha;
     var beta = localVars.beta;
     var gamma = localVars.gamma
     // Convert degrees to radians
     var alphaRad = alpha * (Math.PI / 180);
     var betaRad = beta * (Math.PI / 180);
     var gammaRad = gamma * (Math.PI / 180);
    
     // Calculate equation components
     var cA = Math.cos(alphaRad);
     var sA = Math.sin(alphaRad);
     var cB = Math.cos(betaRad);
     var sB = Math.sin(betaRad);
     var cG = Math.cos(gammaRad);
     var sG = Math.sin(gammaRad);
    
     // Calculate A, B, C rotation components
     var rA = - cA * sG - sA * sB * cG;
     var rB = - sA * sG + cA * sB * cG;
     var rC = - cB * cG;
    
     // Calculate compass heading
     var compassHeading = Math.atan(rA/rB);
    
     // Convert from half unit circle to whole unit circle
     if(rB < 0) {
     compassHeading += Math.PI;
     }else if(rA < 0) {
     compassHeading += 2 * Math.PI;
     }
    
     // Convert radians to degrees
     compassHeading *= 180 / Math.PI;
    
     runtime.setReturnValue(compassHeading);
    
    

    On iOS 13 you also need to request permissions at least when using Safari. Here's my ugly UI method. If you find a better way, please let me know.

    + System: On start of layout

    + PlatformInfo: Is on mobile

    -> Run JavaScript:

    // Create the button
    var button = document.createElement("button");
    button.innerHTML = "Tap to Request Orientation Permission";
    button.id = "RequestOrientation"
    button.style.position = "relative"
    //button.style.left = "50%"
    //button.style.right = "50%"
    button.style.height = "600px"
    button.style.width = "360px"
    button.style.fontSize = "xx-large"
    // Append 
    var body = document.getElementById("fb-root")
    // var body = document.getElementsByTagName("body")[0];
    body.appendChild(button)
    // Add listenr
    button.addEventListener ("click",requestT)
     
     function requestT () {
    		console.log("***INFO*** RequestingDOE")
    		document.getElementById("RequestOrientation").remove()
     	if (typeof(DeviceMotionEvent) !== 'undefined' && typeof(DeviceMotionEvent.requestPermission) === 'function') {
     DeviceMotionEvent.requestPermission()
     .then(response => {
     if (response == 'granted') {
    				console.log("***INFO*** DOE Granted")
    				runtime.globalVars.requestPermission = true
     	window.addEventListener('devicemotion', (e) => {
     	// do something with e
     	})
     }
     	}
     )
     .catch(console.error)
     }
     }