Guest User

Untitled

a guest
Oct 31st, 2026
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.86 KB | Gaming | 0 0
  1. /*
  2.  * ActionFloatArrayGet.cs
  3. using UnityEngine;
  4. using System.Collections.Generic;
  5. #if UNITY_EDITOR
  6. using UnityEditor;
  7. #endif
  8.  
  9. namespace AC
  10. {
  11.  
  12.     [System.Serializable]
  13.     public class ActionFloatArrayGet : Action
  14.     {
  15.  
  16.         // Source (FloatArray)
  17.         public VariableLocation arrayLocation;
  18.         public int arrayParameterID = -1;
  19.         public int arrayVariableID;
  20.         public Variables arrayVariables;
  21.         public int arrayVariablesConstantID = 0;
  22.  
  23.         public int index = 0;
  24.         public int indexParameterID = -1;
  25.  
  26.         // Destination (Float)
  27.         public VariableLocation floatLocation;
  28.         public int floatParameterID = -1;
  29.         public int floatVariableID;
  30.         public Variables floatVariables;
  31.         public int floatVariablesConstantID = 0;
  32.  
  33.         protected LocalVariables localVariables;
  34.         protected GVar runtimeArrayVariable;
  35.         protected GVar runtimeFloatVariable;
  36.         protected Variables runtimeFloatVariables;
  37.  
  38.  
  39.         public override ActionCategory Category { get { return ActionCategory.Variable; }}
  40.         public override string Title { get { return "Get Float Array Element"; }}
  41.         public override string Description { get { return "Copies the value of an element in a FloatArray variable, at a given index, into a Float variable."; }}
  42.  
  43.  
  44.         public override void AssignValues (List<ActionParameter> parameters)
  45.         {
  46.             index = AssignInteger (parameters, indexParameterID, index);
  47.  
  48.             // Source array
  49.             runtimeArrayVariable = null;
  50.             switch (arrayLocation)
  51.             {
  52.                 case VariableLocation.Global:
  53.                     arrayVariableID = AssignVariableID (parameters, arrayParameterID, arrayVariableID);
  54.                     runtimeArrayVariable = GlobalVariables.GetVariable (arrayVariableID);
  55.                     break;
  56.  
  57.                 case VariableLocation.Local:
  58.                     if (!isAssetFile)
  59.                     {
  60.                         arrayVariableID = AssignVariableID (parameters, arrayParameterID, arrayVariableID);
  61.                         runtimeArrayVariable = LocalVariables.GetVariable (arrayVariableID, localVariables);
  62.                     }
  63.                     break;
  64.  
  65.                 case VariableLocation.Component:
  66.                     Variables runtimeArrayVariables = AssignFile<Variables> (arrayVariablesConstantID, arrayVariables);
  67.                     if (runtimeArrayVariables != null)
  68.                     {
  69.                         runtimeArrayVariable = runtimeArrayVariables.GetVariable (arrayVariableID);
  70.                     }
  71.                     runtimeArrayVariable = AssignVariable (parameters, arrayParameterID, runtimeArrayVariable);
  72.                     break;
  73.             }
  74.  
  75.             // Destination float
  76.             runtimeFloatVariable = null;
  77.             runtimeFloatVariables = null;
  78.             switch (floatLocation)
  79.             {
  80.                 case VariableLocation.Global:
  81.                     floatVariableID = AssignVariableID (parameters, floatParameterID, floatVariableID);
  82.                     runtimeFloatVariable = GlobalVariables.GetVariable (floatVariableID, true);
  83.                     break;
  84.  
  85.                 case VariableLocation.Local:
  86.                     if (!isAssetFile)
  87.                     {
  88.                         floatVariableID = AssignVariableID (parameters, floatParameterID, floatVariableID);
  89.                         runtimeFloatVariable = LocalVariables.GetVariable (floatVariableID, localVariables);
  90.                     }
  91.                     break;
  92.  
  93.                 case VariableLocation.Component:
  94.                     runtimeFloatVariables = AssignFile<Variables> (floatVariablesConstantID, floatVariables);
  95.                     if (runtimeFloatVariables != null)
  96.                     {
  97.                         runtimeFloatVariable = runtimeFloatVariables.GetVariable (floatVariableID);
  98.                     }
  99.                     runtimeFloatVariable = AssignVariable (parameters, floatParameterID, runtimeFloatVariable);
  100.                     runtimeFloatVariables = AssignVariablesComponent (parameters, floatParameterID, runtimeFloatVariables);
  101.                     break;
  102.             }
  103.         }
  104.  
  105.  
  106.         public override void AssignParentList (ActionList actionList)
  107.         {
  108.             if (actionList != null)
  109.             {
  110.                 localVariables = UnityVersionHandler.GetLocalVariablesOfGameObject (actionList.gameObject);
  111.             }
  112.             if (localVariables == null)
  113.             {
  114.                 localVariables = KickStarter.localVariables;
  115.             }
  116.  
  117.             base.AssignParentList (actionList);
  118.         }
  119.  
  120.  
  121.         public override float Run ()
  122.         {
  123.             if (runtimeArrayVariable == null)
  124.             {
  125.                 LogWarning ("Cannot get Float Array element - the FloatArray variable cannot be found.");
  126.                 return 0f;
  127.             }
  128.             if (runtimeFloatVariable == null)
  129.             {
  130.                 LogWarning ("Cannot get Float Array element - the Float variable to write to cannot be found.");
  131.                 return 0f;
  132.             }
  133.             if (runtimeArrayVariable.type != VariableType.FloatArray)
  134.             {
  135.                 LogWarning ("Cannot get Float Array element - variable '" + runtimeArrayVariable.label + "' is not a FloatArray.");
  136.                 return 0f;
  137.             }
  138.             if (runtimeFloatVariable.type != VariableType.Float)
  139.             {
  140.                 LogWarning ("Cannot get Float Array element - variable '" + runtimeFloatVariable.label + "' is not a Float.");
  141.                 return 0f;
  142.             }
  143.  
  144.             float value;
  145.             if (!runtimeArrayVariable.TryGetFloatArrayElement (index, out value))
  146.             {
  147.                 LogWarning ("Cannot get index " + index + " of FloatArray variable '" + runtimeArrayVariable.label + "' - index is out of range (size = " + runtimeArrayVariable.FloatArrayLength + ")");
  148.                 return 0f;
  149.             }
  150.  
  151.             runtimeFloatVariable.FloatValue = value;
  152.             runtimeFloatVariable.Upload (floatLocation, runtimeFloatVariables);
  153.             KickStarter.actionListManager.VariableChanged ();
  154.  
  155.             return 0f;
  156.         }
  157.  
  158.  
  159.         #if UNITY_EDITOR
  160.  
  161.         public override void ShowGUI (List<ActionParameter> parameters)
  162.         {
  163.             // Source
  164.             arrayLocation = (VariableLocation) EditorGUILayout.EnumPopup ("Array source:", arrayLocation);
  165.  
  166.             switch (arrayLocation)
  167.             {
  168.                 case VariableLocation.Global:
  169.                     GlobalVariableField ("FloatArray variable:", ref arrayVariableID, null, parameters, ref arrayParameterID);
  170.                     break;
  171.  
  172.                 case VariableLocation.Local:
  173.                     if (isAssetFile)
  174.                     {
  175.                         EditorGUILayout.HelpBox ("Local variables cannot be accessed in ActionList assets.", MessageType.Info);
  176.                     }
  177.                     else if (localVariables != null)
  178.                     {
  179.                         LocalVariableField ("FloatArray variable:", ref arrayVariableID, null, parameters, ref arrayParameterID);
  180.                     }
  181.                     else
  182.                     {
  183.                         EditorGUILayout.HelpBox ("No 'Local Variables' component found in the scene. Please add an AC GameEngine object from the Scene Manager.", MessageType.Info);
  184.                     }
  185.                     break;
  186.  
  187.                 case VariableLocation.Component:
  188.                     ComponentVariableField ("FloatArray variable:", ref arrayVariables, ref arrayVariablesConstantID, ref arrayVariableID, null, parameters, ref arrayParameterID);
  189.                     break;
  190.             }
  191.  
  192.             IntField ("Index:", ref index, parameters, ref indexParameterID);
  193.             if (indexParameterID < 0 && index < 0)
  194.             {
  195.                 index = 0;
  196.             }
  197.  
  198.             EditorGUILayout.Space ();
  199.  
  200.             // Destination
  201.             floatLocation = (VariableLocation) EditorGUILayout.EnumPopup ("Float source:", floatLocation);
  202.  
  203.             switch (floatLocation)
  204.             {
  205.                 case VariableLocation.Global:
  206.                     GlobalVariableField ("Float variable:", ref floatVariableID, null, parameters, ref floatParameterID);
  207.                     break;
  208.  
  209.                 case VariableLocation.Local:
  210.                     if (isAssetFile)
  211.                     {
  212.                         EditorGUILayout.HelpBox ("Local variables cannot be accessed in ActionList assets.", MessageType.Info);
  213.                     }
  214.                     else if (localVariables != null)
  215.                     {
  216.                         LocalVariableField ("Float variable:", ref floatVariableID, null, parameters, ref floatParameterID);
  217.                     }
  218.                     else
  219.                     {
  220.                         EditorGUILayout.HelpBox ("No 'Local Variables' component found in the scene. Please add an AC GameEngine object from the Scene Manager.", MessageType.Info);
  221.                     }
  222.                     break;
  223.  
  224.                 case VariableLocation.Component:
  225.                     ComponentVariableField ("Float variable:", ref floatVariables, ref floatVariablesConstantID, ref floatVariableID, null, parameters, ref floatParameterID);
  226.                     break;
  227.             }
  228.         }
  229.  
  230.  
  231.         public override string SetLabel ()
  232.         {
  233.             GVar arrayVar = GetEditorVariable (arrayLocation, arrayVariableID, arrayVariables, arrayParameterID);
  234.             GVar floatVar = GetEditorVariable (floatLocation, floatVariableID, floatVariables, floatParameterID);
  235.  
  236.             if (arrayVar != null && floatVar != null)
  237.             {
  238.                 return floatVar.label + " = " + arrayVar.label + "[" + ((indexParameterID < 0) ? index.ToString () : "param") + "]";
  239.             }
  240.             return string.Empty;
  241.         }
  242.  
  243.  
  244.         private GVar GetEditorVariable (VariableLocation location, int variableID, Variables variables, int parameterID)
  245.         {
  246.             if (parameterID >= 0)
  247.             {
  248.                 return null;
  249.             }
  250.  
  251.             switch (location)
  252.             {
  253.                 case VariableLocation.Global:
  254.                     return (KickStarter.variablesManager != null) ? KickStarter.variablesManager.GetVariable (variableID) : null;
  255.  
  256.                 case VariableLocation.Local:
  257.                     return isAssetFile ? null : LocalVariables.GetVariable (variableID);
  258.  
  259.                 case VariableLocation.Component:
  260.                     return (variables != null) ? variables.GetVariable (variableID) : null;
  261.             }
  262.             return null;
  263.         }
  264.  
  265.  
  266.         public override int GetNumVariableReferences (VariableLocation _location, int varID, List<ActionParameter> parameters, Variables _variables = null, int _variablesConstantID = 0)
  267.         {
  268.             int thisCount = 0;
  269.  
  270.             if (arrayLocation == _location && arrayVariableID == varID && arrayParameterID < 0)
  271.             {
  272.                 if (_location != VariableLocation.Component || (arrayVariables && arrayVariables == _variables) || (_variablesConstantID != 0 && _variablesConstantID == arrayVariablesConstantID))
  273.                 {
  274.                     thisCount ++;
  275.                 }
  276.             }
  277.  
  278.             if (floatLocation == _location && floatVariableID == varID && floatParameterID < 0)
  279.             {
  280.                 if (_location != VariableLocation.Component || (floatVariables && floatVariables == _variables) || (_variablesConstantID != 0 && _variablesConstantID == floatVariablesConstantID))
  281.                 {
  282.                     thisCount ++;
  283.                 }
  284.             }
  285.  
  286.             thisCount += base.GetNumVariableReferences (_location, varID, parameters, _variables, _variablesConstantID);
  287.             return thisCount;
  288.         }
  289.  
  290.  
  291.         public override int UpdateVariableReferences (VariableLocation _location, int oldVarID, int newVarID, List<ActionParameter> parameters, Variables _variables = null, int _variablesConstantID = 0)
  292.         {
  293.             int thisCount = 0;
  294.  
  295.             if (arrayLocation == _location && arrayVariableID == oldVarID && arrayParameterID < 0)
  296.             {
  297.                 if (_location != VariableLocation.Component || (arrayVariables && arrayVariables == _variables) || (_variablesConstantID != 0 && _variablesConstantID == arrayVariablesConstantID))
  298.                 {
  299.                     arrayVariableID = newVarID;
  300.                     thisCount ++;
  301.                 }
  302.             }
  303.  
  304.             if (floatLocation == _location && floatVariableID == oldVarID && floatParameterID < 0)
  305.             {
  306.                 if (_location != VariableLocation.Component || (floatVariables && floatVariables == _variables) || (_variablesConstantID != 0 && _variablesConstantID == floatVariablesConstantID))
  307.                 {
  308.                     floatVariableID = newVarID;
  309.                     thisCount ++;
  310.                 }
  311.             }
  312.  
  313.             thisCount += base.UpdateVariableReferences (_location, oldVarID, newVarID, parameters, _variables, _variablesConstantID);
  314.             return thisCount;
  315.         }
  316.  
  317.  
  318.         public override void AssignConstantIDs (bool saveScriptsToo, bool fromAssetFile)
  319.         {
  320.             if (arrayLocation == VariableLocation.Component)
  321.             {
  322.                 if (saveScriptsToo && arrayVariables && arrayParameterID < 0)
  323.                 {
  324.                     AddSaveScript<RememberVariables> (arrayVariables);
  325.                 }
  326.                 arrayVariablesConstantID = AssignConstantID<Variables> (arrayVariables, arrayVariablesConstantID, arrayParameterID);
  327.             }
  328.  
  329.             if (floatLocation == VariableLocation.Component)
  330.             {
  331.                 if (saveScriptsToo && floatVariables && floatParameterID < 0)
  332.                 {
  333.                     AddSaveScript<RememberVariables> (floatVariables);
  334.                 }
  335.                 floatVariablesConstantID = AssignConstantID<Variables> (floatVariables, floatVariablesConstantID, floatParameterID);
  336.             }
  337.         }
  338.  
  339.  
  340.         public override bool ReferencesObjectOrID (GameObject gameObject, int id)
  341.         {
  342.             if (arrayParameterID < 0 && arrayLocation == VariableLocation.Component)
  343.             {
  344.                 if (arrayVariables && arrayVariables.gameObject == gameObject) return true;
  345.                 if (arrayVariablesConstantID == id && id != 0) return true;
  346.             }
  347.             if (floatParameterID < 0 && floatLocation == VariableLocation.Component)
  348.             {
  349.                 if (floatVariables && floatVariables.gameObject == gameObject) return true;
  350.                 if (floatVariablesConstantID == id && id != 0) return true;
  351.             }
  352.             return base.ReferencesObjectOrID (gameObject, id);
  353.         }
  354.  
  355.         #endif
  356.  
  357.     }
  358.  
  359. }
Advertisement
Add Comment
Please, Sign In to add comment