// Update is called once per frame void Update() { bodyinfo.GetComponentInChildren <Animator>().SetBool("Deactivated", !possessed); bodyinfo.GetComponentInChildren <Animator>().SetBool("Jumping", jumping); bodyinfo.GetComponentInChildren <Animator>().SetBool("Falling", falling); if (freezeTimer > 0) { freezeTimer -= Time.deltaTime; return; } //Center on dat bot! and LERP! gameObject.transform.position = Vector2.Lerp(gameObject.transform.position, target.gameObject.transform.position, Time.deltaTime * 4); //Get dat inputs! float hAxis = Input.GetAxis("Horizontal"); float vAxis = Input.GetAxis("Vertical"); bool jumpBtn = Input.GetButtonDown("Jump"); if (possessed) //If you are controlling a bot... { //Keep the soul centered Vector2 temp = new Vector2(transform.position.x, transform.position.y + bodyinfo.m_soulOffset_y); soul.transform.position = temp; Vector2 appliedForce = Vector2.zero; if (jumpTimer > 0) { jumpTimer -= Time.deltaTime; } Vector2 sidetest1 = transform.position; sidetest1.x -= 0.35f; Vector2 sidetest2 = transform.position; sidetest2.x += 0.35f; if (Physics2D.Raycast(gameObject.transform.position, new Vector2(0, -1f), 0.05f) || Physics2D.Raycast(sidetest2, new Vector2(0, -1f), 0.05f) || Physics2D.Raycast(sidetest1, new Vector2(0, -1f), 0.05f)) { if (falling || jumping) { falling = false; jumping = false; } if (Input.GetButtonDown("Transmit")) { possessed = false; soul.SetActive(true); jumpQueued = false; jumpTimer = 0.0f; } if (!jumpQueued) { appliedForce = new Vector2(hAxis * 10.0f, 0.0f); } if (jumpBtn) { jumpQueued = true; jumpTimer = bodyinfo.m_jumpDelay; jumping = true; } } else { appliedForce = new Vector2(hAxis * 5.0f, 0.0f); } if (jumpTimer <= 0.0f && jumpQueued) { jumpQueued = false; appliedForce.y = 5.0f * bodyinfo.m_jumpStrength / Time.fixedDeltaTime; } target.AddForce(appliedForce); { Vector2 t = new Vector2(target.velocity.x, 0); target.GetComponentInChildren <Animator>().SetBool("Walking", t.magnitude > 0); if (t.x > 0) { target.GetComponentInChildren <SpriteRenderer>().flipX = false; } if (t.x < 0) { target.GetComponentInChildren <SpriteRenderer>().flipX = true; } if (t.magnitude > bodyinfo.m_maxSpeed) { t.Normalize(); t *= bodyinfo.m_maxSpeed; t.y = target.velocity.y; target.velocity = t; } } if (jumping && target.velocity.y < 0) { jumping = false; falling = true; } } else { Vector3 centre = new Vector2(transform.position.x, transform.position.y + bodyinfo.m_soulOffset_y); if (Input.GetButtonDown("Cancel")) { possessed = true; soul.SetActive(false); } if (Input.GetButtonDown("Transmit")) { RaycastHit2D hit; if (hit = Physics2D.Raycast(soul.transform.position, new Vector2(0, 0), 0)) { if (hit.collider.gameObject.tag == "Player") { target = hit.collider.gameObject.GetComponent <Rigidbody2D>(); bodyinfo = hit.collider.gameObject.GetComponent <PlayerBody>(); possessed = true; soul.SetActive(false); freezeTimer = bodyinfo.m_possessDelay; } } } Vector2 vel = new Vector2(hAxis, vAxis); vel *= Time.fixedDeltaTime * 5.0f; soul.transform.Translate(vel); if ((soul.transform.position - centre).magnitude > 3.5f) { Vector2 dir = soul.transform.position - centre; dir.Normalize(); dir *= 3.5f; Vector2 temp = new Vector2(transform.position.x + dir.x, transform.position.y + dir.y + bodyinfo.m_soulOffset_y); soul.transform.position = temp; } } }