Advertisement
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;
- 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 = 30;
- int duplicateAmount = 3;
- int spinTimes = 0;
- 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++) {
- 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);
- // 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.Add(copySource(sourceName, (int)(CPH.NextDouble() * info.baseWidth), (int)(CPH.NextDouble() * info.baseHeight), (int)(CPH.NextDouble() * 180)));
- //while(tweenCount > 0);
- }
- //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--;
- }
- void tween(double x, double y, int frames, String item, double rotation = 0, int id = -1)
- {
- //tweenCount++;
- //Thread thread = new Thread(() => TweenThread(x, y, frames, item, rotation, id));
- //thread.Start();
- 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--;
- }
- 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;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement