Example #1
0
        //Swaps out the current RexController for another; most commonly used if the actor has multiple RexControllers, i.e. one for land, one for water, one for air, etc.
        public void SetController(RexController _controller)
        {
            if (slots.controller)
            {
                slots.controller.EndAllStates();
                slots.controller.isEnabled = false;
                slots.controller.gameObject.SetActive(false);
                slots.controller.CancelTurn();
                slots.controller.StopAllCoroutines();
                slots.controller.SetAxis(new Vector2(0.0f, 0.0f));
            }

            _controller.gameObject.SetActive(true);
            _controller.isEnabled = true;
            _controller.SetStateToDefault(true);
            _controller.CancelTurn();
            _controller.direction = slots.controller.direction;
            _controller.AnimateEnable();
            _controller.SetAxis(new Vector2(0.0f, 0.0f));
            _controller.direction = slots.controller.direction;

            slots.controller = _controller;

            BoxCollider2D controllerCollider = slots.controller.GetComponent <BoxCollider2D>();

            if (controllerCollider != null && slots.collider != null)
            {
                BoxCollider2D boxCollider = GetComponent <BoxCollider2D>();
                if (boxCollider != null)
                {
                    float originalColliderSizeY = boxCollider.size.y;
                    boxCollider.size = controllerCollider.bounds.size;
                    float difference = originalColliderSizeY - controllerCollider.bounds.size.y;

                    SetPosition(new Vector2(transform.position.x, transform.position.y - difference * 0.5f));
                }
            }

            if (slots.physicsObject)
            {
                if (_controller.overrideMaxFallSpeed != 0.0f)
                {
                    slots.physicsObject.gravitySettings.maxFallSpeed = _controller.overrideMaxFallSpeed;
                }
            }

            OnControllerChanged(_controller);
        }