using System; using System.Collections; using System.Collections.Generic; using JetBrains.Annotations; using Unity.VisualScripting; using UnityEngine; public class testbalance : MonoBehaviour { private GameObject[] objects; public _Muscletest[] muscles; public Vector2 WalkRightVector; public Vector2 WalkLeftVector; public Vector2 JumpVector; private bool jumpRst = true; private bool moveRst = true; public float MoveDelay; public Rigidbody2D rbLeft; public Rigidbody2D rbRight; public bool airWalk = false; public Transform holdAreaRight; public Transform holdAreaLeft; // Start is called before the first frame update void Start() { foreach (_Muscletest muscle1 in muscles) { muscle1.bone.AddComponent(); foreach (_Muscletest muscle2 in muscles) { Physics2D.IgnoreCollision(muscle1.bone.GetComponent(),muscle2.bone.GetComponent()); } } objects = GameObject.FindGameObjectsWithTag("ground"); } // Update is called once per frame void FixedUpdate() { if(!Input.GetKey(KeyCode.S)){ rbRight.gravityScale =4; rbLeft.gravityScale =4; foreach (_Muscletest muscle in muscles) { muscle.ActivateMuscle(); } } else{ rbRight.gravityScale =10; rbLeft.gravityScale =10; } if(Input.GetKey(KeyCode.D)){ foreach (_Muscletest muscle in muscles) { MoveCheck(muscle); } if (moveRst == true) { Invoke("Step1Right", 0f); Invoke("Step2Right", 0.085f); } } if(Input.GetKey(KeyCode.A)){ foreach (_Muscletest muscle in muscles) { MoveCheck(muscle); } if (moveRst == true) { Invoke("Step1Left", 0f); Invoke("Step2Left", 0.085f); } } if(Input.GetKeyDown(KeyCode.Space)){ foreach (_Muscletest muscle in muscles) { JumpCheck(muscle); } if(jumpRst==true){ Invoke("Jump", 0f); } } if(Input.GetKeyDown(KeyCode.G)&&(holdAreaRight.childCount>0||holdAreaLeft.childCount>0)){ Throw(); } } public void Step1Right(){ rbRight.AddForce(WalkRightVector, ForceMode2D.Impulse); rbLeft.AddForce(WalkRightVector * -0.5f, ForceMode2D.Impulse); } public void Step2Right(){ rbLeft.AddForce(WalkRightVector, ForceMode2D.Impulse); rbRight.AddForce(WalkLeftVector * -0.5f, ForceMode2D.Impulse); } public void Step1Left(){ rbRight.AddForce(WalkLeftVector, ForceMode2D.Impulse); rbLeft.AddForce(WalkLeftVector * -0.5f, ForceMode2D.Impulse); } public void Step2Left(){ rbLeft.AddForce(WalkLeftVector, ForceMode2D.Impulse); rbRight.AddForce(WalkLeftVector * -0.5f, ForceMode2D.Impulse); } public void Jump(){ rbLeft.AddForce(JumpVector, ForceMode2D.Impulse); rbLeft.AddForce(JumpVector, ForceMode2D.Impulse); } private void JumpCheck(_Muscletest muscle) { if(muscle.grndchk){ jumpRst = true; } else{ jumpRst = false; } } private void MoveCheck(_Muscletest muscle) { if (!airWalk) { for (int i = 0; i < objects.Length; i++) { var obj = objects[i].GetComponent(); if (muscle.bone.IsTouching(obj)) { moveRst = true; break; } else moveRst = false; } } else { moveRst = true; } } public void pickup(GameObject obj){ if(holdAreaRight.transform.childCount==0){ Destroy(obj.GetComponent()); obj.transform.parent = holdAreaRight; obj.transform.SetPositionAndRotation(holdAreaRight.position, holdAreaRight.rotation); obj.GetComponent().enabled = true; } else if (holdAreaLeft.transform.childCount == 0) { Destroy(obj.GetComponent()); obj.transform.parent = holdAreaLeft; obj.transform.SetPositionAndRotation(holdAreaLeft.position, holdAreaLeft.rotation); obj.GetComponent().enabled = true; } } public void Throw(){ if(holdAreaRight.transform.childCount>0){ var item = holdAreaRight.GetChild(0).transform; item.AddComponent(); item.GetComponent().AddForce(holdAreaRight.GetChild(0).transform.right*1000f); item.transform.parent = null; item = null; } if(holdAreaLeft.transform.childCount>0){ var item = holdAreaLeft.GetChild(0).transform; item.AddComponent(); item.GetComponent().AddForce(holdAreaLeft.GetChild(0).transform.right*1000f); item.transform.parent = null; item = null; } } public void turncollisionsoff(GameObject obj){ foreach (_Muscletest muscle in muscles) { foreach (var collider in obj.GetComponents()) { Physics2D.IgnoreCollision(collider,muscle.bone.GetComponent()); } } } } [System.Serializable] public class _Muscletest { public Rigidbody2D bone; public float restRotation; public float force; public float followMouse = 0; public bool grndchk = false; public void ActivateMuscle(){ bone.MoveRotation(Mathf.LerpAngle(bone.rotation,restRotation+Mathf.Atan2(Input.mousePosition.y-Camera.main.WorldToScreenPoint(bone.position).y, Input.mousePosition.x-Camera.main.WorldToScreenPoint(bone.position).x) * Mathf.Rad2Deg*followMouse,force*Time.deltaTime)); } }