Guest User

NoBounds

a guest
May 14th, 2016
9,544
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using Selectors;
  2. using spaar.ModLoader;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Reflection;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using UnityEngine;
  10.  
  11. namespace NoBounds{
  12.  
  13.     public class NoBoundsSpawner : spaar.ModLoader.Mod {
  14.  
  15.         public override string Author {
  16.             get { return "ITR"; }
  17.         }
  18.  
  19.         public override string DisplayName {
  20.             get { return "NoBounds"; }
  21.         }
  22.  
  23.         public override string Name {
  24.             get { return "NoBoundsMod"; }
  25.         }
  26.         NoBoundsMod noBoundsMod;
  27.         public override void OnLoad() {
  28.             noBoundsMod = NoBoundsMod.Instance;
  29.             Game.DontDestroyOnLoad(noBoundsMod.gameObject);
  30.         }
  31.  
  32.         public override void OnUnload() {
  33.  
  34.             if(noBoundsMod!=null) {
  35.                 Game.Destroy(noBoundsMod.gameObject);
  36.             }
  37.         }
  38.  
  39.         public override bool CanBeUnloaded {
  40.             get {
  41.                 return true;
  42.             }
  43.         }
  44.  
  45.         public override Version Version {
  46.             get { return new Version(1,0); }
  47.         }
  48.     }
  49.  
  50.     public class NoBoundsMod : spaar.ModLoader.SingleInstance<NoBoundsMod>{
  51.         MultiKeyBlockBehaviour multiKeyBlockBehaviour;
  52.         MyBlockInfo myBlockInfo;
  53.  
  54.         public void Start() {
  55.             Refresh = -1;
  56.             myBlockInfo = gameObject.AddComponent<MyBlockInfo>();
  57.  
  58.             spaar.ModLoader.Commands.RegisterHelpMessage("NoBounds commands:\n  none");
  59.  
  60.             spaar.ModLoader.Commands.RegisterCommand("none",(args,namedArgs) => {
  61.                 int oldType = spaar.ModLoader.Game.AddPiece.BlockType;
  62.                 spaar.ModLoader.Game.AddPiece.SetBlockType(23);
  63.                 AddPiece addPiece = spaar.ModLoader.Game.AddPiece;
  64.                 MyBlockInfo[] myBlockInfos = FindObjectsOfType<MyBlockInfo>();
  65.                 for(int i = 0;i<myBlockInfos.Length;i++) {
  66.                     if(myBlockInfos[i].GetComponent<Rigidbody>()!=null) {
  67.                         myBlockInfos[i].name = "TEMP"+myBlockInfos[i].name;
  68.                         addPiece.AddBlock(myBlockInfos[i].transform.position,myBlockInfos[i].transform.rotation);
  69.                     }
  70.                 }
  71.                 myBlockInfos = FindObjectsOfType<MyBlockInfo>();
  72.                 for(int i = 0;i<myBlockInfos.Length;i++) {
  73.                     if(myBlockInfos[i].GetComponent<Rigidbody>()!=null) {
  74.                         if(myBlockInfos[i].name.Contains("TEMP")) {
  75.                             myBlockInfos[i].name = myBlockInfos[i].name.Substring(4);
  76.                         }
  77.                         else {
  78.                             myBlockInfos[i].transform.localScale /= 10;
  79.                         }
  80.                     }
  81.                 }
  82.                 spaar.ModLoader.Game.AddPiece.SetBlockType(oldType);
  83.                 return "NoBounds doesn't have any commands...";
  84.             },"NoBounds doesn't have any commands...");    
  85.         }
  86.  
  87.         private BlockMapper blockMapper;
  88.         BlockBehaviour block;
  89.  
  90.         public int Refresh;
  91.         private int openMultiKeyMapperIfNotOpen = -1;
  92.         public void Update() {
  93.             if(AddPiece.isSimulating)
  94.                 return;
  95.             if(openMultiKeyMapperIfNotOpen>0) {
  96.                 if(--openMultiKeyMapperIfNotOpen==0) {
  97.                     if(blockMapper==null) {
  98.                         blockMapper = BlockMapper.Open(multiKeyBlockBehaviour);
  99.                         block = multiKeyBlockBehaviour;
  100.                     }
  101.                 }
  102.             }
  103.             if(blockMapper==null) {
  104.                 blockMapper = BlockMapper.CurrentInstance;
  105.                 block = null;
  106.             }else{
  107.                 if(blockMapper.Block!=block){
  108.                     block = blockMapper.Block;
  109.                     if(block!=null&&!(block is MultiKeyBlockBehaviour)) {
  110.                         if(Input.GetKey(KeyCode.LeftShift)||Input.GetKey(KeyCode.RightShift)) {
  111.                             OpenMultiKeyMapper(block,0);
  112.                             return;
  113.                         }
  114.  
  115.                         block.MapperTypes.ForEach((mapperType)=>{
  116.                             mapperType.DisplayStateChanged += (state) => {
  117.                                 Refresh = 2;
  118.                             };
  119.                         });
  120.                         ContainerDetails[] containers = blockMapper.GetComponentsInChildren<ContainerDetails>();
  121.                         for(int i = 0;i<containers.Length;i++) {
  122.                             ModifySliderSelector(containers[i].transform);
  123.                         }
  124.                     }
  125.                 }else if(Refresh>0) {
  126.                     if(--Refresh==0) {
  127.                         ContainerDetails[] containers = blockMapper.GetComponentsInChildren<ContainerDetails>();
  128.                         for(int i = 0;i<containers.Length;i++) {
  129.                             ModifySliderSelector(containers[i].transform);
  130.                         }
  131.                     }
  132.                 }
  133.             }
  134.         }
  135.  
  136.         public static void ModifySliderSelector(Transform transform) {
  137.             Selectors.SliderSelector sliderSelector = transform.GetComponentInChildren<Selectors.SliderSelector>();
  138.             Selectors.ValueHolder valueHolder = transform.GetComponentInChildren<Selectors.ValueHolder>();
  139.             if(sliderSelector&&valueHolder) {
  140.                 ModifySliderSelector(sliderSelector,valueHolder);
  141.             }
  142.         }
  143.  
  144.         public static void ModifySliderSelector(Selectors.SliderSelector sliderSelector,Selectors.ValueHolder valueHolder) {
  145.             valueHolder.CharLimit = int.MaxValue;
  146.             valueHolder.ValueChanged += (value)=>{sliderSelector.Value = value;};
  147.         }
  148.  
  149.         public void OpenMultiKeyMapper(BlockBehaviour blockBehaviour, int currentKey) {
  150.             if(multiKeyBlockBehaviour!=null) Destroy(multiKeyBlockBehaviour);
  151.             myBlockInfo.blockName = blockBehaviour.name+" (MultiKeyMap)";
  152.             openMultiKeyMapperIfNotOpen = 2;
  153.  
  154.             multiKeyBlockBehaviour = gameObject.AddComponent<MultiKeyBlockBehaviour>();
  155.             multiKeyBlockBehaviour.enabled = false;
  156.             multiKeyBlockBehaviour.block = blockBehaviour;
  157.             multiKeyBlockBehaviour.currentKey = currentKey;
  158.             multiKeyBlockBehaviour.enabled = true;
  159.  
  160.             this.block = multiKeyBlockBehaviour;
  161.             blockMapper = BlockMapper.Open(multiKeyBlockBehaviour);
  162.         }
  163.  
  164.         public override string Name {
  165.             get { return "NoBoundsGameObject"; }
  166.         }
  167.     }
  168.  
  169.     public class MultiKeyBlockBehaviour : BlockBehaviour{
  170.         public BlockBehaviour block;
  171.         public int currentKey;
  172.         private int updateKeys;
  173.         private MMenu mMenu;
  174.  
  175.         private List<MKeyAndDelegate> mkeys;
  176.         private struct MKeyAndDelegate {
  177.             public MKey mKey;
  178.             public MKey old;
  179.             public int spot;
  180.             public bool replace;
  181.             public MKeyAndDelegate(MKey mKey,MKey old,int spot,bool replace) {
  182.                 this.mKey = mKey;
  183.                 this.old = old;
  184.                 this.spot = spot;
  185.                 this.replace = replace;
  186.             }
  187.         }
  188.  
  189.  
  190.         public void OnEnable() {
  191.             if(block==null) return;
  192.             updateKeys = 5;
  193.             mkeys = new List<MKeyAndDelegate>();
  194.  
  195.             List<MKey> keys = block.Keys;
  196.             if(currentKey<0) currentKey = 0;
  197.             currentKey = currentKey % keys.Count;
  198.  
  199.             MKey key = keys[currentKey];
  200.  
  201.             List<KeyCode> keyCodes = key.KeyCode;
  202.             int i = 0;
  203.             foreach(KeyCode keyCode in keyCodes) {
  204.                 mkeys.Add(new MKeyAndDelegate(AddKey(key.DisplayName+" #"+i,key.Key+"#"+i,keyCode),key,i,false));
  205.                 i++;
  206.             }
  207.             mkeys.Add(new MKeyAndDelegate(AddKey(key.DisplayName+" #"+i,key.Key+"#"+i,KeyCode.None),key,i,true));
  208.  
  209.             if(keys.Count>1){
  210.                 mMenu = AddMenu("Key",1,new List<string>(new String[]{"",key.DisplayName,""}));
  211.                 mMenu.ValueChanged += (j) => {
  212.                     NoBoundsMod.Instance.OpenMultiKeyMapper(block,(currentKey+j+keys.Count-1) % keys.Count);
  213.                 };
  214.             }
  215.  
  216.             StoreInitialData();
  217.         }
  218.  
  219.         public void Update() {
  220.             if(updateKeys>0) {
  221.                 if(--updateKeys==0) {
  222.                     if(block==null) return;
  223.  
  224.                     foreach(MKeyAndDelegate mKey in mkeys) {
  225.                         MKey.KeyboardKeyPressed keyboardPressed = mKey.mKey.UpdateKey!=null ? (MKey.KeyboardKeyPressed)mKey.mKey.UpdateKey.Clone() : null;
  226.                         mKey.mKey.UpdateKey = ()=>{
  227.                             mKey.old.AddOrReplaceKey(mKey.spot,mKey.mKey.KeyCode[0]);
  228.                             if(mKey.replace||keyboardPressed==null) {
  229.                                 NoBoundsMod.Instance.OpenMultiKeyMapper(block,currentKey);
  230.                             }else {
  231.                                 keyboardPressed();
  232.                             }
  233.                         };
  234.                     }
  235.                 }
  236.             }
  237.         }
  238.  
  239.         public override int GetBlockID() {
  240.             return -1;
  241.         }
  242.  
  243.         public override void OnReset() {
  244.             FieldInfo[] fields = typeof(MKey).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
  245.             for(int i = 0;i<fields.Length;i++) {
  246.                 if(fields[i].Name=="_keyCodes") {
  247.                     KeyCode[] none = new KeyCode[]{KeyCode.None};
  248.                     foreach(MKey key in block.Keys) {
  249.                         fields[i].SetValue(key,new List<KeyCode>(none));
  250.                     }
  251.                     break;
  252.                 }
  253.             }
  254.             NoBoundsMod.Instance.OpenMultiKeyMapper(block,currentKey);
  255.         }
  256.  
  257.         public override void OnLoad(XDataHolder data) {
  258.            
  259.         }
  260.  
  261.         public override void OnSave(XDataHolder data) {
  262.  
  263.         }
  264.     }
  265. }
RAW Paste Data