Beispiel #1
0
    private void Awake()
    {
        Player            = GameObject.Find("Player");
        PlayerRigidbody2D = Player.GetComponent <Rigidbody2D>();
        Hand              = Player.transform.GetChild(0).gameObject;
        ImmobilizeEntity  = Hand.GetComponent <ImmobilizeEntity>();
        MethodPassThrough = Hand.GetComponent <MethodPassThrough>();
        Rigidbody2D       = GetComponent <Rigidbody2D>();
        Camera            = FindObjectOfType <Camera>();
        LookAtMouse       = GetComponent <LookAtMouse>();
        WeaponThrown      = GetComponent <WeaponThrown>();

        _animator = transform.parent.GetComponent <Animator>();
    }
    protected new void OnTriggerEnter2D(Collider2D other)
    {
        base.OnTriggerEnter2D(other);
        if (other.gameObject.CompareTag("Enemy") && inAir)
        {
            transform.parent = other.gameObject.transform;

            Rigidbody2D.velocity = Vector2.zero;
            inAir         = false;
            stuckInObject = true;
            stuckInFloor  = false;

            // Stick the object more into the enemy
            transform.position = Vector3.MoveTowards(transform.position, other.transform.position, 0.6f);
            _offset            = transform.localPosition;

            stuckObject          = other.gameObject;
            stuckObjectRigidBody = stuckObject.GetComponent <Rigidbody2D>();
            ImmobilizeEntity.StickEntity();
        }
    }
    protected new void Update()
    {
        base.Update();
        _knifePoint.transform.localPosition  = _knifePointPosition;
        _handlePoint.transform.localPosition = _handlePointPosition;

        // It hit a thing
        if (stuckInObject || stuckInFloor)
        {
            if (stuckInObject)
            {
                transform.localPosition = _offset;

                if (firstStick)
                {
                    firstStick = false;

                    stuckObjectRigidBody.AddForce(stuckObject.transform.position - Player.transform.position * 14);
                }
            }

            // Pull it back
            // TODO: Maybe make it pull back by spinning around, like fishing
            if (Input.GetMouseButtonDown(0))
            {
                transform.parent = null;

                if (stuckInObject)
                {
                    stuckObject.transform.up = Vector3.zero;

                    var direction = Player.transform.position - stuckObject.transform.position;
                    stuckObjectRigidBody.AddForce(direction * 36);
                    PlayerRigidbody2D.AddForce(direction * 20);
                }

                ImmobilizeEntity.UnstickEntity();

                returning = true;
            }
        }
        else
        {
            if (MethodPassThrough.throwingWeapon)
            {
                MethodPassThrough.throwingWeapon = false;

                LookAtMouse.shouldLook = true;

                ThrowWeapon();
            }
        }

        if (returning)
        {
            transform.position = Hand.transform.position + new Vector3(0, 0, 0.1f);
            transform.parent   = Hand.transform;

            // replacementObject.SetActive(false);

            LookAtMouse.shouldLook = true;

            inAir         = false;
            stuckInObject = false;
            stuckInFloor  = false;
        }
        else
        {
            // It hit the floor
            if (!stuckInObject && Vector3.Distance(transform.position, Player.transform.position) > chainLength)
            {
                Rigidbody2D.velocity = Vector2.zero;
                inAir         = false;
                stuckInObject = false;
                stuckInFloor  = true;

                transform.rotation = new Quaternion(-3, 2, 0f, 0f);
            }
        }
    }