Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- /// Dampener Directional Manager v2 - 2/18/16 ///
- Code by Whiplash141
- */
- //=========================================================================================
- //You can edit these name tags to what you like
- const string strRemoteTag = "Reference"; //name tag of reference remote
- const string strUpThrustTag = "[Up]"; //group name of upwards thrust
- const string strDownThrustTag = "[Down]"; //group name of downwards thrust
- const string strLeftThrustTag = "[Left]"; //group name of left thrust
- const string strRightThrustTag = "[Right]"; //group name of right thrust
- const string strForwardThrustTag = "[Forward]"; //group name of forward thrust
- const string strBackwardThrustTag = "[Backward]"; //group name of backward thrust
- //=========================================================================================
- //Dont touch anything down here :P
- List<IMyTerminalBlock> listUpThrust = new List<IMyTerminalBlock>();
- List<IMyTerminalBlock> listDownThrust = new List<IMyTerminalBlock>();
- List<IMyTerminalBlock> listLeftThrust = new List<IMyTerminalBlock>();
- List<IMyTerminalBlock> listRightThrust = new List<IMyTerminalBlock>();
- List<IMyTerminalBlock> listForwardThrust = new List<IMyTerminalBlock>();
- List<IMyTerminalBlock> listBackwardThrust = new List<IMyTerminalBlock>();
- List<IMyTerminalBlock> listRemotes = new List<IMyTerminalBlock>();
- IMyTerminalBlock reference;
- Vector3D lastPosition = new Vector3D(0, 0, 0);
- void Main(string arg)
- {
- //get our thruster lists
- var GTS = GridTerminalSystem; //because im lazy lol
- var groupUp = GTS.GetBlockGroupWithName(strUpThrustTag);
- if(groupUp != null) listUpThrust = groupUp.Blocks;
- var groupDown = GTS.GetBlockGroupWithName(strDownThrustTag);
- if(groupDown != null) listDownThrust = groupDown.Blocks;
- var groupLeft = GTS.GetBlockGroupWithName(strLeftThrustTag);
- if(groupLeft != null) listLeftThrust = groupLeft.Blocks;
- var groupRight = GTS.GetBlockGroupWithName(strRightThrustTag);
- if(groupRight != null) listRightThrust = groupRight.Blocks;
- var groupForward = GTS.GetBlockGroupWithName(strForwardThrustTag);
- if(groupForward != null) listForwardThrust = groupForward.Blocks;
- var groupBackward = GTS.GetBlockGroupWithName(strBackwardThrustTag);
- if(groupBackward != null) listBackwardThrust = groupBackward.Blocks;
- //grab our remote
- GTS.SearchBlocksOfName(strRemoteTag, listRemotes);
- if(listRemotes.Count != 0)
- reference = listRemotes[0];
- else
- return;
- //get orientation vectors
- MatrixD orientation = reference.WorldMatrix;
- Vector3D forwardVec = orientation.Forward;
- Vector3D leftVec = orientation.Left;
- Vector3D upVec = orientation.Up;
- //get our travel vector
- Vector3D position = reference.GetPosition();
- Vector3D travelVec = position - lastPosition;
- //check if we are moving slow
- if(travelVec.Length() == 0)
- {
- ToggleDampenersOn(listForwardThrust, false);
- ToggleDampenersOn(listBackwardThrust, false);
- ToggleDampenersOn(listLeftThrust, false);
- ToggleDampenersOn(listRightThrust, false);
- ToggleDampenersOn(listUpThrust, false);
- ToggleDampenersOn(listDownThrust, false);
- return;
- }else{
- //get dot products to test the direction
- double dotForward = forwardVec.Dot(travelVec);
- double dotLeft = leftVec.Dot(travelVec);
- double dotUp = upVec.Dot(travelVec);
- //test directions
- if(dotForward > 0)
- {
- ToggleDampenersOn(listForwardThrust, false);
- ToggleDampenersOn(listBackwardThrust, true);
- }
- else if(dotForward < 0)
- {
- ToggleDampenersOn(listForwardThrust, true);
- ToggleDampenersOn(listBackwardThrust, false);
- }else{
- ToggleDampenersOn(listForwardThrust, false);
- ToggleDampenersOn(listBackwardThrust, false);
- }
- if(dotLeft > 0)
- {
- ToggleDampenersOn(listLeftThrust, false);
- ToggleDampenersOn(listRightThrust, true);
- }
- else if(dotLeft < 0)
- {
- ToggleDampenersOn(listLeftThrust, true);
- ToggleDampenersOn(listRightThrust, false);
- }else{
- ToggleDampenersOn(listLeftThrust, false);
- ToggleDampenersOn(listRightThrust, false);
- }
- if(dotUp > 0)
- {
- ToggleDampenersOn(listUpThrust, false);
- ToggleDampenersOn(listDownThrust, true);
- }
- else if(dotUp < 0)
- {
- ToggleDampenersOn(listUpThrust, true);
- ToggleDampenersOn(listDownThrust, false);
- }else{
- ToggleDampenersOn(listUpThrust, false);
- ToggleDampenersOn(listDownThrust, false);
- }
- }
- lastPosition = position;
- }
- void ToggleDampenersOn (List<IMyTerminalBlock> thrusterList, bool turnThrustOn)
- {
- for(int i = 0; i < thrusterList.Count; i++)
- {
- var thisThrust = thrusterList[0] as IMyThrust;
- if(thisThrust != null)
- {
- if(turnThrustOn)
- {
- bool isOn = thisThrust.GetValue<bool>("OnOff");
- if(!isOn) thisThrust.ApplyAction("OnOff_On");
- }else{
- bool isOn = thisThrust.GetValue<bool>("OnOff");
- if(isOn) thisThrust.ApplyAction("OnOff_Off");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement