Guest User

AC - Unity Integration

a guest
Jun 7th, 2016
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.16 KB | None | 0 0
  1. /*
  2.  *
  3.  *  Adventure Creator Action: Unity Analytics
  4.  *  by Jens Bahr, 2016
  5.  * 
  6.  *  "ActionAnalyticsSendEvent.cs"
  7.  *
  8.  *  This action sends custom data to Unity Analytics.
  9.  *
  10.  */
  11.  
  12. using UnityEngine;
  13. using UnityEngine.Analytics;
  14. using System.Collections;
  15. using System.Collections.Generic;
  16.  
  17. #if UNITY_EDITOR
  18. using UnityEditor;
  19. #endif
  20.  
  21. namespace AC
  22. {
  23.  
  24.     [System.Serializable]
  25.     public class ActionAnalyticsSendEvent : Action
  26.     {
  27.  
  28.         public int parameterID = -1;
  29.         public string analyticsID;
  30.        
  31.         // enum for data types of parameters
  32.         public enum AnalyticsParameterType { String, Int, Float, Bool, Variable };
  33.         //public enum ParameterType { GlobalVariable, LocalVariable };
  34.        
  35.         // number of parameters for this event
  36.         public int numParameters;
  37.        
  38.         // parameters are stored in lists of length numParameters
  39.         public List<string> parameterNames = new List<string>();
  40.         public List<AnalyticsParameterType> parameterTypes = new List<AnalyticsParameterType>();
  41.         public List<int>    parameterIntegers = new List<int>();    // 0
  42.         public List<float>  parameterFloats = new List<float>();    // 1
  43.         public List<string> parameterStrings = new List<string>();  // 2
  44.         public List<bool> parameterBools = new List<bool>();    // 2
  45.        
  46.         public List<VariableLocation> parameterVarLocation = new List<VariableLocation>();
  47.         public List<int> parameterVarID = new List<int>();
  48.         public List<int> parameterVarParamID = new List<int>();
  49.         public List<VariableType> parameterVarType = new List<VariableType>();
  50.        
  51.        
  52.         public ActionAnalyticsSendEvent ()
  53.         {
  54.             this.isDisplayed = true;
  55.             category = ActionCategory.Custom;
  56.             title = "Unity Analytics";
  57.             description = "Sends an event to Unity Analytics.";
  58.         }
  59.  
  60.  
  61.         override public void AssignValues (List<ActionParameter> parameters)
  62.         {
  63.             // is this correct?
  64.         }
  65.  
  66.        
  67.         override public float Run ()
  68.         {
  69.             // prepare data
  70.             Dictionary<string, object> sendDict = new Dictionary<string, object>();
  71.             for(int i = 0; i < numParameters; i++) {
  72.                 if(parameterTypes[i] == AnalyticsParameterType.Int) {
  73.                     sendDict.Add(parameterNames[i], parameterIntegers[i]);
  74.                 } else if(parameterTypes[i] == AnalyticsParameterType.String) {
  75.                     sendDict.Add(parameterNames[i], parameterStrings[i]);
  76.                 } else if(parameterTypes[i] == AnalyticsParameterType.Float){
  77.                     sendDict.Add(parameterNames[i], parameterFloats[i]);
  78.                 } else if(parameterTypes[i] == AnalyticsParameterType.Bool) {
  79.                     sendDict.Add(parameterNames[i], parameterBools[i]);
  80.                 } else if(parameterTypes[i] == AnalyticsParameterType.Variable) {
  81.                    
  82.                     GVar variab;
  83.                     if (parameterVarLocation[i] == VariableLocation.Global) {
  84.                         variab = GlobalVariables.GetVariable (parameterVarID[i]);
  85.                     } else {
  86.                         variab = LocalVariables.GetVariable (parameterVarID[i]);
  87.                     }
  88.                    
  89.                     if(variab != null) {
  90.                         switch(parameterVarType[i]) {
  91.                             case VariableType.Integer:
  92.                             case VariableType.Boolean:
  93.                                 sendDict.Add(parameterNames[i], variab.val);
  94.                                 break;
  95.                             case VariableType.String:
  96.                                 sendDict.Add(parameterNames[i], variab.textVal);
  97.                                 break;
  98.                                
  99.                             case VariableType.Float:
  100.                                 sendDict.Add(parameterNames[i], variab.floatVal);
  101.                                 break;
  102.                         }                      
  103.                     }
  104.                 }
  105.             }
  106.            
  107.             // send the data to unity analytics
  108.             Analytics.CustomEvent(analyticsID, sendDict);
  109.  
  110.             if (!isRunning)
  111.             {
  112.                 isRunning = true;
  113.                 return 0f;
  114.             }
  115.             else
  116.             {
  117.                 isRunning = false;
  118.                 return 0f;
  119.             }
  120.         }
  121.  
  122.  
  123.         #if UNITY_EDITOR
  124.  
  125.         override public void ShowGUI (List<ActionParameter> parameters)
  126.         {
  127.             EditorGUILayout.BeginHorizontal ();
  128.             EditorGUILayout.LabelField ("Event:", GUILayout.Width (65f));
  129.             EditorStyles.textField.wordWrap = true;
  130.             analyticsID = EditorGUILayout.TextArea (analyticsID, GUILayout.MaxWidth (400f));
  131.             EditorGUILayout.EndHorizontal ();
  132.            
  133.            
  134.             EditorGUILayout.HelpBox ("Set the number of parameters you want to set here.", MessageType.Info);
  135.             numParameters = EditorGUILayout.IntField ("Num Parameters:", numParameters);
  136.            
  137.             // display all the parameters we want to set
  138.             for(int i = 0; i < numParameters; i++) {
  139.                 // if we don't have enough list elements, add a new one
  140.                 if(i >= parameterNames.Count)   parameterNames.Add("newParam");
  141.                 if(i >= parameterTypes.Count) parameterTypes.Add(AnalyticsParameterType.Int);
  142.                 if(i >= parameterIntegers.Count) parameterIntegers.Add(0);
  143.                 if(i >= parameterFloats.Count) parameterFloats.Add(0f);    
  144.                 if(i >= parameterStrings.Count) parameterStrings.Add("");  
  145.                 if(i >= parameterBools.Count) parameterBools.Add(false);    
  146.                 if(i >= parameterVarLocation.Count) parameterVarLocation.Add(VariableLocation.Global);
  147.                 if(i >= parameterVarID.Count) parameterVarID.Add(0);
  148.                 if(i >= parameterVarParamID.Count) parameterVarParamID.Add(0);
  149.                 if(i >= parameterVarType.Count) parameterVarType.Add(VariableType.Integer);
  150.                
  151.                 EditorGUILayout.HelpBox ("Parameter " + (i+1) + " data", MessageType.Info);
  152.                
  153.                 EditorGUILayout.BeginHorizontal ();            
  154.                 EditorGUILayout.LabelField ("Name:", GUILayout.Width (65f));
  155.                 EditorStyles.textField.wordWrap = true;
  156.                 parameterNames[i] = EditorGUILayout.TextArea (parameterNames[i], GUILayout.MaxWidth (400f));
  157.                 EditorGUILayout.EndHorizontal ();
  158.                
  159.                 // set parameter type
  160.                 parameterTypes[i] = (AnalyticsParameterType) EditorGUILayout.EnumPopup ("Source:", parameterTypes[i]);
  161.                
  162.                 // value is set dependent of type
  163.                 if(parameterTypes[i] == AnalyticsParameterType.Int) {
  164.                     parameterIntegers[i] = EditorGUILayout.IntField ("Value:", parameterIntegers[i]);
  165.                    
  166.                 } else if(parameterTypes[i] == AnalyticsParameterType.Float) {
  167.                     parameterFloats[i] = EditorGUILayout.FloatField ("Value:", parameterFloats[i]);
  168.                    
  169.                 } else if(parameterTypes[i] == AnalyticsParameterType.Bool) {
  170.                     parameterBools[i] = EditorGUILayout.Toggle ("Value:", parameterBools[i]);
  171.                    
  172.                 } else if(parameterTypes[i] == AnalyticsParameterType.String){
  173.                     EditorGUILayout.BeginHorizontal ();            
  174.                     EditorGUILayout.LabelField ("Value:", GUILayout.Width (65f));
  175.                     EditorStyles.textField.wordWrap = true;
  176.                     parameterStrings[i] = EditorGUILayout.TextArea (parameterStrings[i], GUILayout.MaxWidth (400f));
  177.                     EditorGUILayout.EndHorizontal ();
  178.                    
  179.                 } else {
  180.                     if (isAssetFile) {
  181.                         EditorGUILayout.HelpBox ("Asset files can only use global vars", MessageType.Info);
  182.                         parameterVarLocation[i] = VariableLocation.Global;
  183.                     } else {
  184.                         parameterVarLocation[i] = (VariableLocation) EditorGUILayout.EnumPopup ("Source:", parameterVarLocation[i]);
  185.                     }
  186.                    
  187.                     if (parameterVarLocation[i] == VariableLocation.Global) {
  188.                         if (AdvGame.GetReferences ().variablesManager) {
  189.                             parameterVarID[i] = ShowVarGUI (AdvGame.GetReferences ().variablesManager.vars, parameters, ParameterType.GlobalVariable, parameterVarID[i], parameterVarParamID[i], i);
  190.                         }
  191.                     } else if (parameterVarLocation[i] == VariableLocation.Local)   {
  192.                         if (KickStarter.localVariables) {
  193.                             parameterVarID[i] = ShowVarGUI (KickStarter.localVariables.localVars, parameters, ParameterType.LocalVariable, parameterVarID[i], parameterVarParamID[i], i);
  194.                         }
  195.                     }
  196.                    
  197.                    
  198.                 }
  199.                
  200.                 EditorGUILayout.Space ();
  201.             }
  202.                        
  203.             AfterRunningOption ();
  204.         }
  205.        
  206.         // this was more or less copied from adventure creator core
  207.         private int ShowVarGUI (List<GVar> vars, List<ActionParameter> parameters, ParameterType parameterType, int variableID, int parameterID, int listID)
  208.         {
  209.             // Create a string List of the field's names (for the PopUp box)
  210.             List<string> labelList = new List<string>();
  211.            
  212.             int i = 0;
  213.             int variableNumber = -1;
  214.            
  215.             if (vars.Count > 0)
  216.             {
  217.                 foreach (GVar _var in vars)
  218.                 {
  219.                     labelList.Add (_var.label);
  220.                    
  221.                     // If a GlobalVar variable has been removed, make sure selected variable is still valid
  222.                     if (_var.id == variableID)
  223.                     {
  224.                         variableNumber = i;
  225.                     }
  226.                    
  227.                     i ++;
  228.                 }
  229.                
  230.                 if (variableNumber == -1 && (parameters == null || parameters.Count == 0 || parameterID == -1))
  231.                 {
  232.                     // Wasn't found (variable was deleted?), so revert to zero
  233.                     ACDebug.LogWarning ("Previously chosen variable no longer exists!");
  234.                     variableNumber = 0;
  235.                     variableID = 0;
  236.                 }
  237.  
  238.                 string label = "Variable:";
  239.  
  240.                 parameterID = Action.ChooseParameterGUI (label, parameters, parameterID, parameterType);
  241.                 if (parameterID >= 0)
  242.                 {
  243.                     //variableNumber = 0;
  244.                     variableNumber = Mathf.Min (variableNumber, vars.Count-1);
  245.                     variableID = -1;
  246.                 }
  247.                 else
  248.                 {
  249.                     variableNumber = EditorGUILayout.Popup (label, variableNumber, labelList.ToArray());
  250.                     variableID = vars [variableNumber].id;
  251.                 }
  252.             }
  253.             else
  254.             {
  255.                 EditorGUILayout.HelpBox ("No variables exist!", MessageType.Info);
  256.                 variableID = -1;
  257.                 variableNumber = -1;
  258.             }
  259.  
  260.            
  261.             parameterVarID[listID] = parameterID;
  262.  
  263.             if (variableNumber >= 0)
  264.             {
  265.                 parameterVarType[listID] = vars[variableNumber].type;
  266.             }
  267.  
  268.             return variableID;
  269.         }
  270.        
  271.  
  272.         public override string SetLabel ()
  273.         {
  274.             string labelAdd = " (" + analyticsID + ")";
  275.             return labelAdd;
  276.         }
  277.  
  278.         #endif
  279.        
  280.     }
  281.  
  282. }
Advertisement
Add Comment
Please, Sign In to add comment