Advertisement
Artelis

Untitled

Feb 16th, 2022
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.77 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using Newtonsoft.Json;
  4. using System.Threading;
  5.  
  6. public class Scale
  7. {
  8. public double x;
  9. public double y;
  10. public String filter;
  11. }
  12.  
  13. public class Crop
  14. {
  15. public int top;
  16. public int bottom;
  17. public int left;
  18. public int right;
  19. }
  20.  
  21. public class Item
  22. {
  23. public int id;
  24. public string name;
  25. }
  26.  
  27. public class Position
  28. {
  29. public double x;
  30. public double y;
  31. }
  32.  
  33. public class Transform
  34. {
  35. public Position position;
  36. public double rotation;
  37. public Item item;
  38. public Scale scale;
  39. public Crop crop;
  40. }
  41.  
  42. public class VideoInfo
  43. {
  44. public int baseWidth;
  45. public int baseHeight;
  46. public int outputWidth;
  47. public int outputHeight;
  48. public String scaleType;
  49. public double fps;
  50. public String videoFormat;
  51. public String colorSpace;
  52. public String colorRange;
  53. }
  54.  
  55. public class SourceSettings
  56. {
  57. public String souceName;
  58. public String sourceType;
  59. public Object sourceSettings;
  60. }
  61.  
  62. public class Scene
  63. {
  64. public String name;
  65. }
  66.  
  67. public class SceneItem
  68. {
  69. public int itemId;
  70. public String sourceKind;
  71. public String sourceName;
  72. public String sourceType;
  73. }
  74.  
  75. public class SceneItemList
  76. {
  77. public String sourceName;
  78. public List<SceneItem> sceneItems;
  79. }
  80.  
  81.  
  82. public class DuplicatedSceneItemResponse
  83. {
  84. public String scene;
  85. public Item item;
  86. }
  87.  
  88. public class CPHInline
  89. {
  90. int tweenCount;
  91.  
  92. public void Init()
  93. {
  94. tweenCount = 0;
  95. }
  96.  
  97. public bool Execute()
  98. {
  99. int shakeAmount = 200;
  100. int shakeLength = 30;
  101. int duplicateAmount = 3;
  102. int spinTimes = 0;
  103. String sourceName = "Lumix Greenscreen";
  104. String filterName = "RedColor";
  105. List<int> newSources = new List<int>();
  106.  
  107. Transform originalTransform = getTransform(sourceName);
  108.  
  109. CPH.ObsShowFilter(CPH.ObsGetCurrentScene(), sourceName, filterName);
  110.  
  111. VideoInfo info = getVideoInfo();
  112. setPosition(info.baseWidth/2, info.baseHeight/2, sourceName);
  113.  
  114. for(int i = 0; i < shakeLength; i++) {
  115. tween(CPH.NextDouble() * shakeAmount - shakeAmount/2, CPH.NextDouble() * shakeAmount - shakeAmount/2, 5, sourceName, 360/shakeLength * spinTimes);
  116. setPosition(info.baseWidth/2, info.baseHeight/2, sourceName);
  117.  
  118. //foreach(int id in newSources)
  119. //{
  120. // Transform t = getTransform("", id);
  121. // tween(CPH.NextDouble() * shakeAmount - shakeAmount/2, CPH.NextDouble() * shakeAmount - shakeAmount/2, 5, "", 360/shakeLength * spinTimes, id);
  122. // setPosition((int)t.position.x, (int)t.position.y, "", id);
  123. //}
  124.  
  125. //if(i%duplicateAmount == 0)
  126. // newSources.Add(copySource(sourceName, (int)(CPH.NextDouble() * info.baseWidth), (int)(CPH.NextDouble() * info.baseHeight), (int)(CPH.NextDouble() * 180)));
  127.  
  128. //while(tweenCount > 0);
  129. }
  130.  
  131. //foreach(int id in newSources)
  132. //{
  133. // deleteSource("", id);
  134. //}
  135.  
  136. setRotation((int)originalTransform.rotation, sourceName);
  137. setPosition((int)originalTransform.position.x, (int)originalTransform.position.y, sourceName);
  138. CPH.ObsHideFilter(CPH.ObsGetCurrentScene(), sourceName, filterName);
  139.  
  140. return true;
  141. }
  142.  
  143. SourceSettings getSourceSettings(String sourceName)
  144. {
  145. Dictionary<String, object> getRequest = new Dictionary<String, object>();
  146. getRequest.Add("sourceName", sourceName);
  147. String requestResponse = CPH.ObsSendRaw("GetSourceSettings", JsonConvert.SerializeObject(getRequest, Formatting.Indented));
  148. SourceSettings responseJson = JsonConvert.DeserializeObject<SourceSettings>(requestResponse);
  149.  
  150. return responseJson;
  151. }
  152.  
  153. Scene getCurrentScene()
  154. {
  155. String requestResponse = CPH.ObsSendRaw("GetCurrentScene", "");
  156. Scene sceneObj = JsonConvert.DeserializeObject<Scene>(requestResponse);
  157.  
  158. return sceneObj;
  159. }
  160.  
  161. SceneItemList getSceneItemList()
  162. {
  163. Dictionary<String, object> getRequest = new Dictionary<String, object>();
  164. getRequest.Add("sourceName", "garbage");
  165. String requestResponse = CPH.ObsSendRaw("GetSceneItemList", JsonConvert.SerializeObject(getRequest, Formatting.Indented));
  166. SceneItemList responseJson = JsonConvert.DeserializeObject<SceneItemList>(requestResponse);
  167.  
  168. return responseJson;
  169. }
  170.  
  171. SceneItem getSceneItemNamed(String name)
  172. {
  173. SceneItemList list = getSceneItemList();
  174. foreach(SceneItem i in list.sceneItems)
  175. {
  176. if(i.sourceName.Equals(name)) { return i; }
  177. }
  178.  
  179. return null;
  180. }
  181.  
  182. SceneItem getSceneItemById(int id)
  183. {
  184. SceneItemList list = getSceneItemList();
  185. foreach(SceneItem i in list.sceneItems)
  186. {
  187. if(i.itemId == id) { return i; }
  188. }
  189.  
  190. return null;
  191. }
  192.  
  193. void deleteSource(String name, int id = -1)
  194. {
  195. Dictionary<String, object> updateRequest = new Dictionary<String, object>();
  196. Dictionary<String, object> itemRequest = new Dictionary<String, object>();
  197. if(!name.Equals("")) itemRequest.Add("name", name);
  198. if(id != -1) itemRequest.Add("id", id);
  199. updateRequest.Add("item", itemRequest);
  200. CPH.ObsSendRaw("DeleteSceneItem", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
  201. }
  202.  
  203. int copySource(String name, int x = 0, int y = 0, int rotation = 0)
  204. {
  205. SceneItem item = getSceneItemNamed(name);
  206. Dictionary<String, object> updateRequest = new Dictionary<String, object>();
  207. Dictionary<String, object> itemRequest = new Dictionary<String, object>();
  208. itemRequest.Add("id", item.itemId);
  209. updateRequest.Add("item", itemRequest);
  210. String response = CPH.ObsSendRaw("DuplicateSceneItem", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
  211. DuplicatedSceneItemResponse newItemResponse = JsonConvert.DeserializeObject<DuplicatedSceneItemResponse>(response);
  212.  
  213. Transform t = getTransform("", item.itemId);
  214. t.item = new Item();
  215. t.item.id = newItemResponse.item.id;
  216. t.item.name = newItemResponse.item.name;
  217.  
  218. setTransform(t, "", newItemResponse.item.id);
  219. setPosition(x, y, "", newItemResponse.item.id);
  220. setRotation(rotation, "", newItemResponse.item.id);
  221.  
  222. return newItemResponse.item.id;
  223. }
  224.  
  225. void setPosition(int x, int y, String item, int id = -1)
  226. {
  227. Dictionary<String, object> updateRequest = new Dictionary<String, object>();
  228. if(id == -1) updateRequest.Add("item", item);
  229. else
  230. {
  231. Dictionary<String, object> itemDict = new Dictionary<String, object>();
  232. itemDict.Add("id", id);
  233. updateRequest.Add("item", itemDict);
  234. }
  235. Dictionary<String, object> position = new Dictionary<String, object>();
  236. position.Add("x", x);
  237. position.Add("y", y);
  238. updateRequest.Add("position", position);
  239. CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
  240. }
  241.  
  242. void setRotation(int angle, String item, int id = -1)
  243. {
  244. Dictionary<String, object> updateRequest = new Dictionary<String, object>();
  245. if(id == -1) updateRequest.Add("item", item);
  246. else
  247. {
  248. Dictionary<String, object> itemDict = new Dictionary<String, object>();
  249. itemDict.Add("id", id);
  250. updateRequest.Add("item", itemDict);
  251. }
  252. updateRequest.Add("rotation", angle);
  253. CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
  254. }
  255.  
  256. Transform getTransform(String item, int id = -1)
  257. {
  258. Dictionary<String, object> getRequest = new Dictionary<String, object>();
  259. if(id == -1) getRequest.Add("item", item);
  260. else
  261. {
  262. Dictionary<String, object> itemDict = new Dictionary<String, object>();
  263. itemDict.Add("id", id);
  264. getRequest.Add("item", itemDict);
  265. }
  266. String requestResponse = CPH.ObsSendRaw("GetSceneItemProperties", JsonConvert.SerializeObject(getRequest, Formatting.Indented));
  267. Transform t = JsonConvert.DeserializeObject<Transform>(requestResponse);
  268. return t;
  269. }
  270.  
  271. void setTransform(Transform t, String itemName, int id = -1)
  272. {
  273. SceneItem item;
  274. if(id == -1) item = getSceneItemNamed(itemName);
  275. else item = getSceneItemById(id);
  276.  
  277. if(item == null) return;
  278.  
  279. CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(t, Formatting.Indented));
  280. }
  281.  
  282. void TweenThread(double x, double y, int frames, String item, double rotation = 0, int id = -1)
  283. {
  284. Transform t;
  285. if(id == -1) t = getTransform(item);
  286. else t = getTransform("", id);
  287. double sX = t.position.x;
  288. double sY = t.position.y;
  289. double sR = t.rotation;
  290.  
  291. for (int i = 1; i-1 < frames; i++)
  292. {
  293. Thread.Sleep((int)(1.0/60.0 * 1000.0));
  294.  
  295. Dictionary<String, object> updateRequest = new Dictionary<String, object>();
  296. if(id == -1) updateRequest.Add("item", item);
  297. else
  298. {
  299. Dictionary<String, object> itemDict = new Dictionary<String, object>();
  300. itemDict.Add("id", id);
  301. updateRequest.Add("item", itemDict);
  302. }
  303.  
  304. Dictionary<String, object> position = new Dictionary<String, object>();
  305. position.Add("x", sX + (x * ((double)i / (double)frames)));
  306. position.Add("y", sY + (y * ((double)i / (double)frames)));
  307.  
  308. updateRequest.Add("position", position);
  309. updateRequest.Add("rotation", sR + (rotation * ((double)i / (double)frames)));
  310.  
  311. CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
  312. }
  313.  
  314. tweenCount--;
  315. }
  316.  
  317. void tween(double x, double y, int frames, String item, double rotation = 0, int id = -1)
  318. {
  319. //tweenCount++;
  320. //Thread thread = new Thread(() => TweenThread(x, y, frames, item, rotation, id));
  321. //thread.Start();
  322. Transform t;
  323. if(id == -1) t = getTransform(item);
  324. else t = getTransform("", id);
  325. double sX = t.position.x;
  326. double sY = t.position.y;
  327. double sR = t.rotation;
  328.  
  329. for (int i = 1; i-1 < frames; i++)
  330. {
  331. Thread.Sleep((int)(1.0/60.0 * 1000.0));
  332.  
  333. Dictionary<String, object> updateRequest = new Dictionary<String, object>();
  334. if(id == -1) updateRequest.Add("item", item);
  335. else
  336. {
  337. Dictionary<String, object> itemDict = new Dictionary<String, object>();
  338. itemDict.Add("id", id);
  339. updateRequest.Add("item", itemDict);
  340. }
  341.  
  342. Dictionary<String, object> position = new Dictionary<String, object>();
  343. position.Add("x", sX + (x * ((double)i / (double)frames)));
  344. position.Add("y", sY + (y * ((double)i / (double)frames)));
  345.  
  346. updateRequest.Add("position", position);
  347. updateRequest.Add("rotation", sR + (rotation * ((double)i / (double)frames)));
  348.  
  349. CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
  350. }
  351.  
  352. tweenCount--;
  353. }
  354.  
  355. VideoInfo getVideoInfo()
  356. {
  357. Dictionary<String, object> getRequest = new Dictionary<String, object>();
  358. String requestResponse = CPH.ObsSendRaw("GetVideoInfo", JsonConvert.SerializeObject(getRequest, Formatting.Indented));
  359. VideoInfo responseJson = JsonConvert.DeserializeObject<VideoInfo>(requestResponse);
  360.  
  361. return responseJson;
  362. }
  363. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement