Advertisement
Guest User

Untitled

a guest
Feb 14th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.32 KB | None | 0 0
  1.         private void addCurve_Click(object sender, EventArgs e)
  2.         {
  3.             List<Vector3> positions = new List<Vector3>();
  4.             List<Vector3> rotations = new List<Vector3>();
  5.             Vector3 initialTransformPos = new Vector3();
  6.             Vector3 initialTransformRot = new Vector3();
  7.  
  8.             foreach (string line in File.ReadAllLines(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\The Witcher 3\\scriptslog.txt"))
  9.             {
  10.                 var str = line;
  11.  
  12.                 // Initial position
  13.                 if (str.Contains("[W2SCENE]       #pos: [ ")) {
  14.                     str = str.Remove(0, 24);
  15.                     str = str.Replace("]", "");
  16.  
  17.                     initialTransformPos = StrToVec(str);                    
  18.                 }
  19.                 // Initial rotation
  20.                 else if (str.Contains("[W2SCENE]       #rot: [ "))
  21.                 {
  22.                     str = str.Remove(0, 24);
  23.                     str = str.Replace("]", "");
  24.  
  25.                     initialTransformRot = StrToVec(str);
  26.                 }
  27.                 // All curve positions / rotations
  28.                 else if (str.Contains("[W2SCENE]       - prop.placement: [0.0, "))
  29.                 {
  30.                     str = str.Remove(0, 40);
  31.                     str = str.Replace("[","");
  32.                     str = str.Replace("]", "");
  33.  
  34.                     string[] data = str.Split(',');                    
  35.  
  36.                     Vector3 result = new Vector3(
  37.                         float.Parse(data[1]),
  38.                         float.Parse(data[2]),
  39.                         float.Parse(data[3]));
  40.  
  41.  
  42.                     Vector3 result2 = new Vector3(
  43.                         float.Parse(data[4]),
  44.                         float.Parse(data[6]),
  45.                         float.Parse(data[5]));
  46.  
  47.                     positions.Add(result);
  48.                     rotations.Add(result2);
  49.                 }
  50.             }
  51.  
  52.             // For curves that u want to be on the same level on Z axis
  53.             bool sameZ = false;                    
  54.             var boxresult = MessageBox.Show("Height value based on origin?","Height", MessageBoxButtons.YesNo);            
  55.             if (boxresult == DialogResult.Yes)
  56.             {
  57.                 sameZ = true;
  58.             }    
  59.  
  60.             // ------------------------------------------------------------------------
  61.             List<Vector3> positionsV3 = new List<Vector3>();
  62.             positionsV3 = positions;
  63.  
  64.             // calculate distances
  65.             float dist = 0;
  66.             float totalDist = 0;
  67.             List<float> distanceArray = new List<float>();
  68.             List<float> timeArray = new List<float>();
  69.             for (int i = 0; i < positionsV3.Count; i++)
  70.             {
  71.                 if (i == 0)
  72.                 {
  73.                     totalDist += Vector3.Distance(positionsV3[i], positionsV3[positionsV3.Count - 1]);
  74.                     distanceArray.Add(Vector3.Distance(positionsV3[i], positionsV3[positionsV3.Count - 1]));
  75.                 }
  76.                 else
  77.                 {
  78.                     totalDist += Vector3.Distance(positionsV3[i - 1], positionsV3[i]);
  79.                     distanceArray.Add(Vector3.Distance(positionsV3[i - 1], positionsV3[i]));
  80.                 }
  81.             }
  82.             for (int i = 0; i < distanceArray.Count; i++)
  83.             {
  84.                 timeArray.Add(dist / totalDist);
  85.                 dist += distanceArray[i];
  86.             }
  87.  
  88.  
  89.             // ------------------------------------------------------------------------
  90.             // Create the SCurveData Array
  91.             var node = (VariableListNode)treeView.SelectedObject;
  92.             if (node?.Variable == null || !node.Variable.CanAddVariable(null))
  93.             {
  94.                 return;
  95.             }
  96.            
  97.             var curveDataArray = CR2WTypeManager.Get().GetByName("array:2,0,SCurveData", "curves", Chunk.cr2w, false);
  98.  
  99.             curveDataArray.Name = "curves";
  100.             curveDataArray.Type = "array:2,0,SCurveData";
  101.  
  102.  
  103.             // ------------------------------------------------------------------------
  104.             // Add 9 elements to SCurveData
  105.             for (int i = 0; i < 9; i++)
  106.             {
  107.                 // new curve array element
  108.                 var sCurveDataArrayVar = CR2WTypeManager.Get().GetByName("array:2,0,SCurveData", "", Chunk.cr2w, false);
  109.  
  110.                 CVariable curveValues = null;
  111.                 curveValues = CR2WTypeManager.Get().GetByName("array:142,0,SCurveDataEntry", "Curve Values", Chunk.cr2w, false);
  112.                 curveValues.Name = "Curve Values";
  113.                 curveValues.Type = "array:142,0,SCurveDataEntry";
  114.  
  115.                 for (int j = 0; j < positionsV3.Count; j++)
  116.                 {
  117.                     //-----------------------------------------------------------------------------------------------
  118.                     //-----------------------------------------------------------------------------------------------
  119.                     // CURVE VALUE SPECIAL
  120.                     CVariable curveValue = null;
  121.                     curveValue = CR2WTypeManager.Get().GetByName("array:142,0,SCurveDataEntry", "", Chunk.cr2w, false);
  122.  
  123.                     curveValues.AddVariable(curveValue);
  124.  
  125.                     // me
  126.                     CVariable me = null;
  127.                     me = CR2WTypeManager.Get().GetByName("Float", "me", Chunk.cr2w, false);
  128.                     me.Name = "me";
  129.                     me.Type = "Float";
  130.                     ((CFloat)me).val = timeArray[j];
  131.  
  132.                     // ntrolPoint
  133.                     CVariable ntrolPoint = null;
  134.                     ntrolPoint = CR2WTypeManager.Get().GetByName("Vector", "ntrolPoint", Chunk.cr2w, false);
  135.                     ntrolPoint.Name = "ntrolPoint";
  136.                     ntrolPoint.Type = "Vector";
  137.  
  138.                     CVariable x = null;
  139.                     x = CR2WTypeManager.Get().GetByName("Float", "X", Chunk.cr2w, false);
  140.                     x.Name = "X";
  141.                     x.Type = "Float";
  142.                     ((CFloat)x).val = (float)-0.1;
  143.                     CVariable y = null;
  144.                     y = CR2WTypeManager.Get().GetByName("Float", "Y", Chunk.cr2w, false);
  145.                     y.Name = "Y";
  146.                     y.Type = "Float";
  147.                     ((CFloat)y).val = 0;
  148.                     CVariable z = null;
  149.                     z = CR2WTypeManager.Get().GetByName("Float", "Z", Chunk.cr2w, false);
  150.                     z.Name = "Z";
  151.                     z.Type = "Float";
  152.                     ((CFloat)z).val = (float)0.1;
  153.                     CVariable w = null;
  154.                     w = CR2WTypeManager.Get().GetByName("Float", "W", Chunk.cr2w, false);
  155.                     w.Name = "W";
  156.                     w.Type = "Float";
  157.                     ((CFloat)w).val = 0;
  158.  
  159.                     ((CVector)ntrolPoint).AddVariable(x);
  160.                     ((CVector)ntrolPoint).AddVariable(y);
  161.                     ((CVector)ntrolPoint).AddVariable(z);
  162.                     ((CVector)ntrolPoint).AddVariable(w);
  163.  
  164.                     // lue
  165.                     CVariable lue = null;
  166.                     lue = CR2WTypeManager.Get().GetByName("Float", "lue", Chunk.cr2w, false);
  167.                     lue.Name = "lue";
  168.                     lue.Type = "Float";
  169.  
  170.                     if (i == 0)
  171.                         ((CFloat)lue).val = positions[j].X;
  172.                     else if (i == 1)
  173.                         ((CFloat)lue).val = positions[j].Y;
  174.                     else if (i == 2)
  175.                     {
  176.                         if (sameZ)
  177.                             ((CFloat)lue).val = 0;
  178.                         else
  179.                             ((CFloat)lue).val = positions[j].Z;
  180.                     }
  181.                     else if (i == 3)
  182.                         ((CFloat)lue).val = rotations[j].X;
  183.                     else if (i == 4)
  184.                         ((CFloat)lue).val = rotations[j].Y;
  185.                     else if (i == 5)
  186.                         ((CFloat)lue).val = rotations[j].Z;
  187.                     else if (i > 5)
  188.                         ((CFloat)lue).val = 1;
  189.  
  190.  
  191.                     // rveTypeL
  192.                     CVariable rveTypeL = null;
  193.                     rveTypeL = CR2WTypeManager.Get().GetByName("Uint16", "rveTypeL", Chunk.cr2w, false);
  194.                     rveTypeL.Name = "rveTypeL";
  195.                     rveTypeL.Type = "Uint16";
  196.                     ((CUInt16)rveTypeL).val = 3;
  197.  
  198.                     // rveTypeR
  199.                     CVariable rveTypeR = null;
  200.                     rveTypeR = CR2WTypeManager.Get().GetByName("Uint16", "rveTypeR", Chunk.cr2w, false);
  201.                     rveTypeR.Name = "rveTypeR";
  202.                     rveTypeR.Type = "Uint16";
  203.                     ((CUInt16)rveTypeR).val = 3;
  204.  
  205.                     if (((CFloat)me).val != 0)
  206.                         ((CVariable)curveValue).AddVariable(me);
  207.                     ((CVariable)curveValue).AddVariable(ntrolPoint);
  208.                     if(((CFloat)lue).val != 0)
  209.                         ((CVariable)curveValue).AddVariable(lue);
  210.                     ((CVariable)curveValue).AddVariable(rveTypeL);
  211.                     ((CVariable)curveValue).AddVariable(rveTypeR);        
  212.                     // END OF CURVE SPECIAL
  213.                     //-----------------------------------------------------------------------------------------------
  214.                     //-----------------------------------------------------------------------------------------------
  215.                 }
  216.  
  217.                 // curve value type
  218.                 CVariable valueType = null;
  219.                 valueType = CR2WTypeManager.Get().GetByName("ECurveValueType", "value type", Chunk.cr2w, false);
  220.                 valueType.Name = "value type";
  221.                 valueType.Type = "ECurveValueType";
  222.                 ((CName)valueType).Value = "CVT_Float";
  223.  
  224.                 // curve base type
  225.                 CVariable baseType = null;
  226.                 baseType = CR2WTypeManager.Get().GetByName("ECurveBaseType", "type", Chunk.cr2w, false);
  227.                 baseType.Name = "type";
  228.                 baseType.Type = "ECurveBaseType";
  229.                 ((CName)baseType).Value = "CT_Smooth";
  230.  
  231.                 // is looped
  232.                 CVariable isLooped = null;
  233.                 isLooped = CR2WTypeManager.Get().GetByName("Bool", "is looped", Chunk.cr2w, false);
  234.                 isLooped.Name = "is looped";
  235.                 isLooped.Type = "Bool";
  236.                 ((CBool)isLooped).val = true;
  237.  
  238.                 ((CVariable)sCurveDataArrayVar).AddVariable(curveValues);
  239.                 ((CVariable)sCurveDataArrayVar).AddVariable(valueType);
  240.                 ((CVariable)sCurveDataArrayVar).AddVariable(baseType);
  241.                 ((CVariable)sCurveDataArrayVar).AddVariable(isLooped);
  242.  
  243.                 ((CVariable)curveDataArray).AddVariable(sCurveDataArrayVar);
  244.             }
  245.  
  246.             AddAndRefresh(curveDataArray, node);
  247.  
  248.             // Add Initial Parent Transform variable            
  249.             node = (VariableListNode)treeView.SelectedObject;
  250.             CVariable initialParentTransform = null;
  251.             initialParentTransform = CR2WTypeManager.Get().GetByName("EngineTransform", "initialParentTransform", Chunk.cr2w, false);
  252.             initialParentTransform.Name = "initialParentTransform";
  253.             initialParentTransform.Type = "EngineTransform";
  254.             ((CEngineTransform)initialParentTransform).x.val = initialTransformPos.X;
  255.             ((CEngineTransform)initialParentTransform).y.val = initialTransformPos.Y;
  256.             ((CEngineTransform)initialParentTransform).z.val = initialTransformPos.Z;
  257.             ((CEngineTransform)initialParentTransform).pitch.val = initialTransformRot.X;
  258.             ((CEngineTransform)initialParentTransform).roll.val = initialTransformRot.Y;
  259.             ((CEngineTransform)initialParentTransform).yaw.val = initialTransformRot.Z;        
  260.             AddAndRefresh(initialParentTransform, node);            
  261.         }
  262.  
  263.  
  264.         private void AddAndRefresh(CVariable varr, VariableListNode node)
  265.         {
  266.             node.Variable.AddVariable(varr);
  267.  
  268.             var subnode = AddListViewItems(varr, node);
  269.             node.Children.Add(subnode);
  270.  
  271.             treeView.RefreshObject(node);
  272.             treeView.RefreshObject(subnode);
  273.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement