Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using Newtonsoft.Json;
- using System.Threading;
- using System.Threading.Tasks;
- public class Scale
- {
- public double x;
- public double y;
- public String filter;
- }
- public class Crop
- {
- public int top;
- public int bottom;
- public int left;
- public int right;
- }
- public class Item
- {
- public int id;
- public string name;
- }
- public class Position
- {
- public double x;
- public double y;
- }
- public class Transform
- {
- public Position position;
- public double rotation;
- public Item item;
- public Scale scale;
- public Crop crop;
- }
- public class VideoInfo
- {
- public int baseWidth;
- public int baseHeight;
- public int outputWidth;
- public int outputHeight;
- public String scaleType;
- public double fps;
- public String videoFormat;
- public String colorSpace;
- public String colorRange;
- }
- public class SourceSettings
- {
- public String souceName;
- public String sourceType;
- public Object sourceSettings;
- }
- public class Scene
- {
- public String name;
- }
- public class SceneItem
- {
- public int itemId;
- public String sourceKind;
- public String sourceName;
- public String sourceType;
- }
- public class SceneItemList
- {
- public String sourceName;
- public List<SceneItem> sceneItems;
- }
- public class DuplicatedSceneItemResponse
- {
- public String scene;
- public Item item;
- }
- public class CPHInline
- {
- int tweenCount;
- public void Init()
- {
- tweenCount = 0;
- }
- public bool Execute()
- {
- int shakeAmount = 200;
- int shakeLength = 60;
- int duplicateAmount = 4;
- int spinTimes = 0;
- int maxTweens = 80;
- String sourceName = "Lumix Greenscreen";
- String filterName = "RedColor";
- List<int> newSources = new List<int>();
- Transform originalTransform = getTransform(sourceName);
- CPH.ObsShowFilter(CPH.ObsGetCurrentScene(), sourceName, filterName);
- VideoInfo info = getVideoInfo();
- setPosition(info.baseWidth / 2, info.baseHeight / 2, sourceName);
- for (int i = 0; i < shakeLength; i++)
- {
- Task task = tween(CPH.NextDouble() * shakeAmount - shakeAmount / 2, CPH.NextDouble() * shakeAmount - shakeAmount / 2, 5, sourceName, 360 / shakeLength * spinTimes);
- setPosition(info.baseWidth / 2, info.baseHeight / 2, sourceName);
- foreach (int id in newSources)
- {
- Transform t = getTransform("", id);
- task = tween(CPH.NextDouble() * shakeAmount - shakeAmount / 2, CPH.NextDouble() * shakeAmount - shakeAmount / 2, 5, "", 360 / shakeLength * spinTimes, id);
- setPosition((int)t.position.x, (int)t.position.y, "", id);
- }
- if (i % duplicateAmount == 0 && newSources.Count < maxTweens)
- newSources.Add(copySource(sourceName, (int)(CPH.NextDouble() * info.baseWidth), (int)(CPH.NextDouble() * info.baseHeight), (int)(CPH.NextDouble() * 180)));
- task.Wait();
- }
- foreach (int id in newSources)
- {
- deleteSource("", id);
- }
- setRotation((int)originalTransform.rotation, sourceName);
- setPosition((int)originalTransform.position.x, (int)originalTransform.position.y, sourceName);
- CPH.ObsHideFilter(CPH.ObsGetCurrentScene(), sourceName, filterName);
- return true;
- }
- SourceSettings getSourceSettings(String sourceName)
- {
- Dictionary<String, object> getRequest = new Dictionary<String, object>();
- getRequest.Add("sourceName", sourceName);
- String requestResponse = CPH.ObsSendRaw("GetSourceSettings", JsonConvert.SerializeObject(getRequest, Formatting.Indented));
- SourceSettings responseJson = JsonConvert.DeserializeObject<SourceSettings>(requestResponse);
- return responseJson;
- }
- Scene getCurrentScene()
- {
- String requestResponse = CPH.ObsSendRaw("GetCurrentScene", "");
- Scene sceneObj = JsonConvert.DeserializeObject<Scene>(requestResponse);
- return sceneObj;
- }
- SceneItemList getSceneItemList()
- {
- Dictionary<String, object> getRequest = new Dictionary<String, object>();
- getRequest.Add("sourceName", "garbage");
- String requestResponse = CPH.ObsSendRaw("GetSceneItemList", JsonConvert.SerializeObject(getRequest, Formatting.Indented));
- SceneItemList responseJson = JsonConvert.DeserializeObject<SceneItemList>(requestResponse);
- return responseJson;
- }
- SceneItem getSceneItemNamed(String name)
- {
- SceneItemList list = getSceneItemList();
- foreach (SceneItem i in list.sceneItems)
- {
- if (i.sourceName.Equals(name))
- {
- return i;
- }
- }
- return null;
- }
- SceneItem getSceneItemById(int id)
- {
- SceneItemList list = getSceneItemList();
- foreach (SceneItem i in list.sceneItems)
- {
- if (i.itemId == id)
- {
- return i;
- }
- }
- return null;
- }
- void deleteSource(String name, int id = -1)
- {
- Dictionary<String, object> updateRequest = new Dictionary<String, object>();
- Dictionary<String, object> itemRequest = new Dictionary<String, object>();
- if (!name.Equals(""))
- itemRequest.Add("name", name);
- if (id != -1)
- itemRequest.Add("id", id);
- updateRequest.Add("item", itemRequest);
- CPH.ObsSendRaw("DeleteSceneItem", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
- }
- int copySource(String name, int x = 0, int y = 0, int rotation = 0)
- {
- SceneItem item = getSceneItemNamed(name);
- Dictionary<String, object> updateRequest = new Dictionary<String, object>();
- Dictionary<String, object> itemRequest = new Dictionary<String, object>();
- itemRequest.Add("id", item.itemId);
- updateRequest.Add("item", itemRequest);
- String response = CPH.ObsSendRaw("DuplicateSceneItem", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
- DuplicatedSceneItemResponse newItemResponse = JsonConvert.DeserializeObject<DuplicatedSceneItemResponse>(response);
- Transform t = getTransform("", item.itemId);
- t.item = new Item();
- t.item.id = newItemResponse.item.id;
- t.item.name = newItemResponse.item.name;
- setTransform(t, "", newItemResponse.item.id);
- setPosition(x, y, "", newItemResponse.item.id);
- setRotation(rotation, "", newItemResponse.item.id);
- return newItemResponse.item.id;
- }
- void setPosition(int x, int y, String item, int id = -1)
- {
- Dictionary<String, object> updateRequest = new Dictionary<String, object>();
- if (id == -1)
- updateRequest.Add("item", item);
- else
- {
- Dictionary<String, object> itemDict = new Dictionary<String, object>();
- itemDict.Add("id", id);
- updateRequest.Add("item", itemDict);
- }
- Dictionary<String, object> position = new Dictionary<String, object>();
- position.Add("x", x);
- position.Add("y", y);
- updateRequest.Add("position", position);
- CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
- }
- void setRotation(int angle, String item, int id = -1)
- {
- Dictionary<String, object> updateRequest = new Dictionary<String, object>();
- if (id == -1)
- updateRequest.Add("item", item);
- else
- {
- Dictionary<String, object> itemDict = new Dictionary<String, object>();
- itemDict.Add("id", id);
- updateRequest.Add("item", itemDict);
- }
- updateRequest.Add("rotation", angle);
- CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
- }
- Transform getTransform(String item, int id = -1)
- {
- Dictionary<String, object> getRequest = new Dictionary<String, object>();
- if (id == -1)
- getRequest.Add("item", item);
- else
- {
- Dictionary<String, object> itemDict = new Dictionary<String, object>();
- itemDict.Add("id", id);
- getRequest.Add("item", itemDict);
- }
- String requestResponse = CPH.ObsSendRaw("GetSceneItemProperties", JsonConvert.SerializeObject(getRequest, Formatting.Indented));
- Transform t = JsonConvert.DeserializeObject<Transform>(requestResponse);
- return t;
- }
- void setTransform(Transform t, String itemName, int id = -1)
- {
- SceneItem item;
- if (id == -1)
- item = getSceneItemNamed(itemName);
- else
- item = getSceneItemById(id);
- if (item == null)
- return;
- CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(t, Formatting.Indented));
- }
- void TweenThread(double x, double y, int frames, String item, double rotation = 0, int id = -1)
- {
- Transform t;
- if (id == -1)
- t = getTransform(item);
- else
- t = getTransform("", id);
- double sX = t.position.x;
- double sY = t.position.y;
- double sR = t.rotation;
- for (int i = 1; i - 1 < frames; i++)
- {
- Thread.Sleep((int)(1.0 / 60.0 * 1000.0));
- Dictionary<String, object> updateRequest = new Dictionary<String, object>();
- if (id == -1)
- updateRequest.Add("item", item);
- else
- {
- Dictionary<String, object> itemDict = new Dictionary<String, object>();
- itemDict.Add("id", id);
- updateRequest.Add("item", itemDict);
- }
- Dictionary<String, object> position = new Dictionary<String, object>();
- position.Add("x", sX + (x * ((double)i / (double)frames)));
- position.Add("y", sY + (y * ((double)i / (double)frames)));
- updateRequest.Add("position", position);
- updateRequest.Add("rotation", sR + (rotation * ((double)i / (double)frames)));
- CPH.ObsSendRaw("SetSceneItemProperties", JsonConvert.SerializeObject(updateRequest, Formatting.Indented));
- }
- tweenCount--;
- }
- public Task tween(double x, double y, int frames, String item, double rotation = 0, int id = -1)
- {
- tweenCount++;
- Task t = new Task(() => TweenThread(x, y, frames, item, rotation, id));
- t.Start();
- return t;
- }
- VideoInfo getVideoInfo()
- {
- Dictionary<String, object> getRequest = new Dictionary<String, object>();
- String requestResponse = CPH.ObsSendRaw("GetVideoInfo", JsonConvert.SerializeObject(getRequest, Formatting.Indented));
- VideoInfo responseJson = JsonConvert.DeserializeObject<VideoInfo>(requestResponse);
- return responseJson;
- }
- }
Add Comment
Please, Sign In to add comment