HISE Logo Forum
    • Categories
    • Register
    • Login

    Function Problems

    Scheduled Pinned Locked Moved Scripting
    8 Posts 2 Posters 202 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • CasmatC
      Casmat
      last edited by

      Hey!

      I think I've been trying to fix this issue for hours and it just wont play nice! I have this:

      namespace HoverAnimation
      {    
          inline function applyHoverAnimation(component, baseColorNest, hoverColorNest, alphaSpeedNest, paintFnNest, clickFnNest)
          {     
          	reg nest = 
          	{
          		baseColor: baseColorNest,
          		hoverColor: hoverColorNest,
          		alphaSpeed: alphaSpeedNest,
          		paintFn: paintFnNest,
          		clickFn: clickFnNest
          	};
          
          	component.data.baseColor = baseColorNest;
          	component.data.hoverColor = hoverColorNest;
          	component.data.alphaSpeed = alphaSpeedNest;
              component.data.alpha = 0.0;
              component.data.hover = false;
      
              component.setPaintRoutine(function(g)
              {
                  g.setColour(Colours.mix(this.data.baseColor, this.data.hoverColor, this.data.alpha));
                  nest.paintFn(g, this);
              });
              
              component.setTimerCallback(function()
              {
                  if (this.data.hover)
                  {
                      if (this.data.alpha < 1.0) this.data.alpha += this.data.alphaSpeed;
                  }
                  else
                  {
                      if (this.data.alpha > 0.0) this.data.alpha -= this.data.alphaSpeed;
                  }
              
                  this.data.alpha = Math.range(this.data.alpha, 0.0, 1.0);
                  this.repaint();
              
                  if (this.data.alpha == 1.0 || this.data.alpha == 0.0) this.stopTimer();
              });
              
              component.setMouseCallback(function(event)
              {
                  if (event.clicked) nest.clickFn(this);
                  
                  if (event.hover != this.data.hover)
                  {
                      this.data.hover = event.hover;
                      this.startTimer(1000 / 60);
                  }
              });
          }
      }
      

      I'm basically trying to make the hover animation stuff modular but as you can probably see, its a mess from some debugging. I saw this:
      https://forum.hise.audio/topic/5370/possible-breaking-change-local-variables-references-inside-nested-function-definitions

      which made this somewhat harder and now I'm in a mess trying to solve this, I can't store functions in component.data and reg nest wont work as all the icons that use this fcn will be overridden by the latest call of the fcn. Local variables wont work due to scope issues, i'm completely lost and I believe there is an easier way to do all this and another pair of eyes would help!

      Thanks!

      i make music

      d.healeyD 1 Reply Last reply Reply Quote 0
      • d.healeyD
        d.healey @Casmat
        last edited by d.healey

        @Casmat You shouldn't declare reg variables inside functions, use local instead.

        I think the whole nest thing is unnecessary since we now have lambda variables.

        It's hard to debug a block of code like this. Put it into a snippet that demonstrates the issue.

        Libre Wave - Freedom respecting instruments and effects
        My Patreon - HISE tutorials
        YouTube Channel - Public HISE tutorials

        CasmatC 1 Reply Last reply Reply Quote 0
        • CasmatC
          Casmat @d.healey
          last edited by Casmat

          @d-healey

          HiseSnippet 5025.3ocsZ1ujihjb.u6819BOs843tH7+61ye0i0bLBITizNdsWfBjPHjnz2nKt3BDfPfP.BPewcaD9QyOA9YwuA1YpVS2p6Yta2chvytwL+prxpprpJqrpRTFow1tYYwoWc8aFdLw8pq+GtYvwn7kRKs7itRkb00+i2nakk6ld2ihDOlXkk45b00W+qZhBt9Me6Um9y+y+gnUnUjs6yht5pww91tc7W6m+rTiePyOLTwxwcn+5Kzl6GTsiijhCi2B1yu5lxWkXYuxxysqEp12byUW+qkc7yiSGjak6lA5HF6bbvx38QOp+X+L+4gtXB1qF.UzihuRZoeniwm5qYWc00eqwy87e0i87+oaz8c7eR9yi.+1SYb2yk3xwfq+l+VlD6u.S55KLou8QS52cy.6T+j7myAsm+9aTifIjEVvP8klxi5d027e+OeiTLnQTNyZqUtJoPhmJw8OTt76uC9q28wau0OJzOx8tEairy8iityJII7Xq3ctoBQ9qsPY2aGuNINBpr2e2bqLWb5IsqaFjbIp3EosBSVZMHw004wzIv.XtRziIrC8sW8Xh2c6e9N7O29lTWu6h.I288Ph+7su4MO0Be2qZLHumatu60MMj6yM928ZCAx8ro7cuvl.4mspu6Ry6127ivPyadpey3Xkaw7j4.15KLsO9Yp9rwA59RK8yU9YaET9kF9GuEGk9R5CpVlo7WL+SsGj+BqvLWne7RUxbyMvQf9waygY96+zL+8du6jl+4S+M9GOT2GWKd+i+SFyZ+C2muzO6UiHu+tmE9b28RomL528tO9Tsewzv8dOp44b+wy+6ma3XvhTIqvv4PTgms7Wa39Kt69WYOu6oLeVsOW0GGY+2tiko76dsseWou+0hNMM8bO5GehbgA9eAM3+NNU94M3u+mWC9TxWW9u+Ncq7kLoVQdtutMeO1ju+TG8iurBRcOMyb+kSB+0L7u+6wZ3t+xe4tuPNO2mxxiSNM0c+O4Lrd7Vvk5ylgc2A4+kllOkAyokttNu6TjDlyKju+BWpOqm7X4dbkx+x2e2OSukWoFLBeQ87wOW0rbqzGcZumsb4x28AHp66d87GNX7i2d6G9vnLXiND5D6EeKrOHDUbmU5c91wnDn09TLcObc44Qs6e647eKTOeon2mZjy579SIJePQQnJ9eOmlvSZnT6bZlJmomCN79mmmd2qiQnDilQuCG8bid66uq1k8QOFmTq8Bg9dQtNCcO.J1Bz4O.Nev+yUgguF3FxyT6O996dqMT6otNu8StIuxH9hVfbjGDFiINwMZh67L+b26e6x77jru6CeXQb510LvLgKi0VG+3mp3aws99vGF3lCw.8xtCO0w4Q7DXMySxedH2N0E1c2.xDchedx4R0IfmATj2xUoJGSdYkIFcDoCJF2URUwtQIgGYO0o1FARcTKLR40aRTKL6pSrlYQZR1WY2b8forikZRzym3nGXFrUfdfUZpTlReKihoajYgyBfLw7DKmzdlQPTQWfosjMMF1mcJv5oBSMHPPdf812XhQv5tAujWR0slXPpNMg0X51LYhp6tD8hYUMEnsqsblz9v5zNBzkUMLeIOlnnIPqzuMvr7UUEnyRHn7iIsDnJLLn9EVMEnQC4mJsWQuiBvQb.GpxSDnK3q.LK6FIApuwI1yRTfxFf73IZBBzobUwxF7PIFJm9CnNCSavPEW1.0g0tNCcPYQnsTFYvyPanz5jcJ8.Cs63tnbdXp.zeDJe91pLTiXajSVWggFkDh7dOVFZRvNz9qaWlgdbzCXYmNufgNjWAFGF2w9HCc73A3XRvhCLzZdKP4Ig6AddNJOb6NFphbcjW9vVFZ6ocrP4sANZvbfU.UYn7Eon7fCYLzEb0AlsUFvR8Xl+RNTZhGnS+MKdEGsaACsjRAxGzAtU65HGl6xPclo3AsU6A.Gv1C3wdO3vPqL2DkuaMvrZ9nbtI.WWHCkyzA3n5r.GJS.1nNyRf0X.tWo1H2G4RBiPdFpSUIWfYWhkcjTLvJISAdaiCnN4Q.unfG3wY7.K4q3Cx8GB1V4VF9nuwNfGFXBL6pdX+53RTmnC.OkcCJumIz2ERJ.d7HokLTO85HeXGvKbkC.8c87g4QXQCpyn.FZp5HfUz5rhgZ5NG0opbHCckiOvrCDWCiaJIn7Rs.d1gWyr6mBy0qHkWIoF1IA7AlYUekT1l15FCaa5yYPJnRDSqNy5RrtjKcvPhjwrcNvMPV9H0EXITG6oEdOo+rWwAScW2WhruYa+tELaf1T7fXrj95vNFA5G5WyHkq2AUifYCV8J1l3CbLeHviBFBbwlHf2uWAkuHAX4sbsLHryRAl5jAbyY4HKrDYmc.KLaBvKCO.rZhdKi.giE.qej.bOoJ.Gyx2D58i4.Nqb4lFASyd.3U62BbfRCrraR.tjGyCP86GBrQIQfWMyuowvF1xHS8ZZTrsdSfyZs.pSMm1.KvfbkFcPcp.bfoaOrd1tDaqRTf2GtBpGKmgnN1wP8zjeLv5CxgxJO0D0Qo.3Z6s.1rRMf6p5.LmuXKigw1KP80zf90w7k.WdyPfGwGf5raTKHlq1pWw58szLBZ0nG+q3cqzLHzl8QlrWynPryPfG0oNpSmw7n8zFmGaNEkueBvM3MAlCbvLHsxr.VsaYP9zI1.G+.Q2f39fCv06MR2HPybAvlsBA4814g0yxJfbKFerdlo10fDnFviiUV.aqsB3UyyAlWND3LWgdFEUpdhKOD3lAqA11JpmwvUMiP6TmumQPaejWoZX.iOrHGqEXXTLWLF0wnJHmnfb7nNTCRh.xzIK.taYTeZ+BpQvgEH6I0puA3qib40V8g9xBrck4yAtcAZO50EFXD3vf7HWBv7UQ627Bd+BmwFC2FAiUKyTqL1fH5Ni2vjkUlXVKUo2vbdWXOoQU1Cqaa1JPftyn6AoxSaMCFiSg1egWgBwaKUqWvTKXmChfcEsdEIk2A6wUz4nT8T5bve0gEmONTYtAYZmA0g1qEt+cIyM0M1vUpIwbRe2dCGh60ytpnBD+ncifyrZndu8mYNmGxg4Zrbl0Y0HBJGG1iXk5vzgnFrVGrCCegNDtVEc5QnwBRTkF0OHk4Ir2.NbVFzW45pc3r8aaVzgHHw0pWvNJU5S80pKFHQ20bydIN64kMJDvwksTacRYsZJP6wWcPWhZOG0Ww4QS6RDFuA4w11cIlKYQlLdYWh8gRHqzecWxdRy1.GYjBkcZGjqYruKIdSu1mzgsKgqgAxyF7.HmdhEGxziv4qib6Ax8HprsPV.ykpJh7A0dfbGtS1SoAfb1bjY1OsGYzfkHWctMvUFfbj3xdjUARH63E1iDauuEvaqlzi3sxF4zlag5oTySr9wdDy7cMAVpcEPe1IH2luVOhv7533ioeCP9ROj6TRvfHzifbotxFDtUq.K2peeH5nbpLxAsfU7vd4Dr+tGVQRsDQtRCfUWVR5UbM6RFDc19bceIGVQfRnAaqh6WHRnjrIZHmWRFjONrBvKxZRI0WwfLb.RJYemYvnsUKq1TRYiikA1elFkXVUCY01c.cTCJ.9PLvTM9i.OiCYogH2nJxU2b.XmHfi2Igb8l.ycvZO1tSf5jJWrC3tSf1ROuCxCZB1fPwpsXeYMXabyKkC7PNvlqmah79GjfxtqHC6ivYYgwJCjUGA8c0oYfWjUQJOvs0PloBrmppXxFfaWvZPVI2F4hfivIdM2j.7b0cFjXwtHGtLElWjODCb0cQf70SPt8XjYG9ZVbxCfeX1l.Xe1oTVXtteafO5yCqgrNDIQm1ojQvftMw8DufMma.VbnXcNHdnEvED1CbeRmI4QujWxw2Bze4D3LBxcg1QsZwjtAxEMjncpTrBhSTQpMgZhmyPUIY4.B8fUpuDrumLMvr4hpFm7ODZmIh8SYH5sJOyN8WxJNf+G2D9bjiA+RgRbY.SVKi5vA6CYYOUD5+l7a.tnN3eq6If7FbrvbNrCOwZcHrdPd3vXf6tAVmT1XYDvsCg0OqlcbMvhS2.icUahbfvZXr6faHd2EeXcnY2GVALrqNTV5LjYFXBq8DqGf04RHZmWfOx4ov5badcj6eDV4Gqy6CbJKrhp9rbj2UAhW3EFfbuJPbDt8NHWuL3wq1XNx4Ef2oolKxiJ.uGSyUHupLDmRd8VjobP7KtC0QtCiSWhWsdX61RyDz4gUHyNaHD6aeIjGb.hIJuTZ0qXEMHFZbjVBb+r9jI5DyS2UhCi2teT7LI57gEFCe7NVm3y22h1lBdt8FXBL2dL98xt8.V0g.w0aIpfxwX7mua2IN3Duzd3rcFAMEDXMFf6MHrZJb71MMYjn75cl.9PaxpKRErCG7Rl0wA3s48AVYhFvc5VpOxE7hT2Fa5i2QwD3bQSTdiZOHRqYqfxymBrz.3.ov8CNTCpyUKo38vTANYLEY14bPYSXNwoUEoU82Y.s6FtJfbhmAddbIj60Gka1lUj1qIw.qmtkEoKyX6A0ObjMQ5NRBvJc6cTjx20A3PwNGDoMzGf7VEXOzPHJOTOtk1JRs2WpKnuKatHUzrBxbax.a6gs.Gx4lJR8mEibZ+MfMv5eReRhHUANENdWvxQhzoIVHeX0ZQppjIxYiBEokslf5OSdkHcCdmcnuvGb9t7Wx5is1atTkTlqJAi0cA2edpJYTsZH2wlUkD+.iLvbyXZSx3ai7wAsaSp+vTjGpLrMQuRh7o3X1sIdaXT.lmttMwbzLjYh10lreWEjWtmqMrVbZSfUxD0HdQ0QlZpoQ1yspEvQECzHpgTUfYqaAxCYZC75i9Zj5GOfb5vMfb4HMfq3d.3AK5f6KLfSiTdnkNtWv1RP8WZZWrOdPF7Caa1CiCao0gHmXYf2eI1.jOZAE3xyFAmioTX+Sk0rCYj6VXkj0t01cH6WyMDimI30gXpKOF6i79P8P5OA3Qlgcf1xENMh0zwQcHzi4lXYOFCkseC7tUc2m.mYh1EuaUR2MfbOGardz.NqRtCtmXLpiRI7NW8CgxRY5g2yJPBqSSmkX8H.skIIyGsGWvFTKWK.XY2Ef831LD26fAr4xkwS9XYJA8Eur4Q3dnwCA8qEf6oT6POnNMNs2Txh1cHwAaw8rVdj.xS2i6qYk1PiDOeOt22vNU0H1axw8G6MbObVvdw3dnCkSf4k5Kv8V2rXoFwb6Hb+2kqmoQxl0D2WVypuFQtZYj43Ug4WFObebotBZDtMsv85EMp1lHTNE49jssIwizwyCzOcE3+zJA4EpyA4pR34GVX2G1IZ3TjOF2pMYzpXjKssgJQnFKxQ6KTIpFmN6w3cIfucnbkO4ySKo72hMlLUkruA4TYG2Uk3UuAVmwSIpDS9Bj24VqEQsdHx8x10hvILB4MhqaA6OTBs4PO6Vj89qNcNGsgsHlsZgLinVKX9cM1emqHB5aHdpuOiCNedISb74gF6ZRDFjiiaYki.48Kgis7kVzjnJqibEGyljQGmfi+oC5C5rxEmWV4pAbP.NeEJI2jDyEhyiGXJoPT2FhyuMmxoPj6Efy6Nsg6VnF3h9C4S2pPnbSiOU1MJj8lFn+yQs0fbpB5WUeuuBb94ZqPcXWnP3JxP+P8YNJDaNWz+TydNniLE8aOVZlBQGVAg9Lh.ue8dzOmKvDZ2Idn+e3ZjEn35Bq1fNwGXv0K80sf68TcGtNhYGTmdtd35qQGf1xrnOttq9.OExJIYb8nyv.nrlUGg97GAalSLCW+psC5K5Z935Zs16f5owLb89FlxP8DMDiC7P+Zv8pFZfwGjXXfwvNcw3FZMUZRjm2EimzecmlDccJFmYh6.XrMdLF+YP9rljrZNXbI99Kg4E0DLdkbmDXdzoJFSa9zCMIqXZibNaMfq5fw8VsRB7e5TAiGF52A7YjFf73si.eL+CX7yIMcaQD1MBY0jHv+YKu7oyJdnEbmh0HWQkG3AiQdijBrVnTKjEEMTIbQkvX6ijlA918OEm+vWbufhoqDd6Gu8xeoXlvXKGkz303OY78u92PF+woewO++W32i9y9D.eRmepOCvmz6u1mBfm7hz+zeJf23wrvOL7zOM9k8j2e2e34OsCXtS7cve77OT42eOaclprU9WYYp8gJu68uPqVt9dKyOqVClZeRo6dtL.eNi+3ujOT.LxkEG5xjjhedq2J832L5xOIvSeD73ntw4t8vurHz+t8Gu8tWm0hEew7vYmz3vP7Sc8Ex97GA6udAuOZ654touGl3C259jhWc829xmXvu9m2SLv9QmkKTLNRMxOuWh64zJwgN3SG.4O+AIb0YuMfFohdl3aT3rLPuD2zbezbtl3ty218wWrvatg3lsJON4pq+lmbQASN+Tt+lO8dFrhbCux2A0+7Gm5pCO8PP9OG+CGeNA8G1i9NWc8MWq.oWdxE4Sot5mSa7at4BO+KZm+qve9sym+1L9s2nG6rMzJ+kOUD7MwbNCXx8EuOC7MXDk4me7x2Lyuf2OR4+luejetl3u6FC+b6keYa7a9B1HLs++G134Wcyu4F4EKbsye1.+1aTl909Da9IZ9Ge1Cd5vcP8A+fa5tc8f3so1tPqGAtKY3782ftUOltLlFGAF3F4bJw+K7myYxhou9blreJyqVaYmF+mrebIM9td96NIAronSOio2biNl9N1qNsL+xw409N9+Ia6WVUeVAq70VvpesEj6qsf09ZK3CesEj+qsf0+oKH9JvD1lG+3dpfB5FxmhKd80xQVfG3Iu0q9+vNfQxI
          

          Its kind of messy, but should show the usage of what I'm trying to do

          Edit: updated snippet

          i make music

          1 Reply Last reply Reply Quote 0
          • d.healeyD
            d.healey
            last edited by

            Instead of passing individual parameters into your function that then set an object, you could just pass an object in.

            There used to be a limit of 5 parameters for an inline function, I don't think that limit applies any more, but generally I find if you have more than 5 parameters your function is too complicated.

            I also don't think it's good practice to pass functions as parameters - except for callbacks.

            Will each component have a different paint routine and mouse callback?

            Libre Wave - Freedom respecting instruments and effects
            My Patreon - HISE tutorials
            YouTube Channel - Public HISE tutorials

            CasmatC 1 Reply Last reply Reply Quote 0
            • CasmatC
              Casmat @d.healey
              last edited by

              @d-healey Ahh yup, will put it in objects!

              And yeah each component would have different paint routines/callbacks, I was intending on using it more for a general animation use case and being able to apply it to any panel

              i make music

              d.healeyD 1 Reply Last reply Reply Quote 0
              • d.healeyD
                d.healey @Casmat
                last edited by

                @Casmat said in Function Problems:

                each component would have different paint routines/callbacks,

                Then these don't need to go in the factory function at all.

                Libre Wave - Freedom respecting instruments and effects
                My Patreon - HISE tutorials
                YouTube Channel - Public HISE tutorials

                d.healeyD CasmatC 2 Replies Last reply Reply Quote 0
                • d.healeyD
                  d.healey @d.healey
                  last edited by d.healey

                  Your function will end up something like this

                  inline function applyHoverAnimation(component, properties)
                  {
                  	for (propertyName in properties)
                  		component.data[propertyName] = properties[propertyName];
                  	
                  	component.data.alpha = 0.0;
                  	component.data.hover = false;
                  	
                  	component.setTimerCallback(function()
                  	{
                  		if (this.data.hover && this.data.alpha < 1.0)
                  			this.data.alpha += this.data.alphaSpeed;
                  		
                  		if (!this.data.alpha && this.data.alpha > 0.0)
                  			this.data.alpha -= this.data.alphaSpeed;
                  			
                  		this.data.alpha = Math.range(this.data.alpha, 0.0, 1.0);
                  		
                  		this.repaint();
                  		
                  		if (this.data.alpha >= 1.0 || this.data.alpha <= 0.0)
                  			this.stopTimer();		
                  	});
                  }
                  

                  Libre Wave - Freedom respecting instruments and effects
                  My Patreon - HISE tutorials
                  YouTube Channel - Public HISE tutorials

                  1 Reply Last reply Reply Quote 0
                  • CasmatC
                    Casmat @d.healey
                    last edited by

                    @d-healey I see! Thanks for your help!

                    i make music

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    52

                    Online

                    1.7k

                    Users

                    11.7k

                    Topics

                    102.1k

                    Posts