Playmaker Forum

PlayMaker Help & Tips => PlayMaker Help => Topic started by: le_bonn on February 12, 2015, 10:53:24 AM

Title: Int Operator, please help
Post by: le_bonn on February 12, 2015, 10:53:24 AM
Hi all.

I have been using playmaker for a while now and it has been great, so much faster than struggling through scripts.

But now I need a little bit of help,  I will try and explain what it is that I am trying to achieve, any advice would be greatly appreciated.

I am trying to use multiple buttons to interact with the same object. for example if button 1 is pressed the object material is changed to blue, button 2 = yellow... so far so simple the complex bit is registering actions from both buttons to change the material green thus having a third state or fourth or fifth etc.

I have approached this by creating fsm's on each object that simply register input and send a global event to a controller fsm,  each input eg blue pushed i then assign a int value, eg blue pushed or yellow pushed, which reverts to 0 ones the the button is released, I then use Int operator to add the values from the int variable and store in a 3td variable that I use in and Int switch.  This work great with 2 variable's as this is what the Int operator naturally work with, but not with a 3rd, 4th etc.

I have attempted to modify the Int Operator.cs to enable multiple int values to be compared, the floats appear within the playmaker state but always returns a 0 int value. 

ps there are no errors in my scene,

Any assistance would be most gratefully received,

Cheers  :)



Title: Re: Int Operator, please help
Post by: Lane on February 12, 2015, 10:56:28 AM
Something like this, but with ints?

http://hutonggames.com/playmakerforum/index.php?topic=9117.msg43494#msg43494
Title: Re: Int Operator, please help
Post by: le_bonn on February 12, 2015, 11:23:35 AM
Thanks Lane,

Something like that would be great, the key to my project is that every button has a different effect upon the object and when two or three buttons are pressed another effect is spawned. so each int value created through the Int operator with then spawn an individual action from the Int switch,


I am so close with the tools that are there, I just need to get Int compare to work with more than two variable.

I had a go at the code but I am certainly no expert!



// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.

using UnityEngine;

namespace HutongGames.PlayMaker.Actions
{
   [ActionCategory(ActionCategory.Math)]
   [Tooltip("Performs math operation on 2 Integers: Add, Subtract, Multiply, Divide, Min, Max.")]
   public class IntOperator : FsmStateAction
   {
      public enum Operation
      {
         Add,
         Subtract,
         Multiply,
         Divide,
         Min,
         Max
      }

      [RequiredField]
      public FsmInt integer1;
      [RequiredField]
      public FsmInt integer2;
      [RequiredField]
      public FsmInt integer3;
      [RequiredField]
      public FsmInt integer4;
      public Operation operation = Operation.Add;
      [RequiredField]
      [UIHint(UIHint.Variable)]
      public FsmInt storeResult;
      public bool everyFrame;

      public override void Reset()
      {
         integer1 = null;
         integer2 = null;
         integer3 = null;
         integer4 = null;
         operation = Operation.Add;
         storeResult = null;
         everyFrame = false;
      }
      
      public override void OnEnter()
      {
         DoIntOperator();
         
         if (!everyFrame)
            Finish();
      }
      
      // NOTE: very frame rate dependent!
      public override void OnUpdate()
      {
         DoIntOperator();
      }
      
      void DoIntOperator()
      {
         int v1 = integer1.Value;
         int v2 = integer2.Value;
         int v3 = integer2.Value;
         int v4 = integer2.Value;

         switch (operation)
         {
            case Operation.Add:
               storeResult.Value = v1 + v2 + v3 + v4;
               break;

            case Operation.Subtract:
               storeResult.Value = v1 - v2 - v3 - v4;
               break;

            case Operation.Multiply:
               storeResult.Value = v1 * v2 * v3 * v4;
               break;

            case Operation.Divide:
            storeResult.Value = v1 / v2 / v3 / v4;
               break;

            case Operation.Min:
               storeResult.Value = Mathf.Min(v1, v2, v3, v4);
               break;

            case Operation.Max:
               storeResult.Value = Mathf.Max(v1, v2, v3, v4);
               break;
         }
      }
   }
}

it seems to run fine but when I debug it just fires back a 0 for any value going through the third or fourth variable.

Thanks again,

L
Title: Re: Int Operator, please help
Post by: le_bonn on February 12, 2015, 11:54:30 AM
Hi Lane, 

Sorry I should have had a better look at what you pointed me to in the first place,  It works perfectly!

That will remind me not to stick doggedly at one solution!

Thanks again!