Пример #1
0
    public void SetAction(int com)
    {
        action        = com;
        actionCounter = 0f;

        if (action == 0)
        {
            actionLimit = Random.Range(4f, 6f);
            character.PlayAnim(1);
        }
        else
        {
            if (action == 1)
            {
                actionLimit = Random.Range(0.5f, 0.85f);
                character.PlayAnim(0);
                character.speed[1] = Vector3.zero;
            }
            else
            {
                if (action == 2)
                {
                    if (playerDefeated == false)
                    {
                        character.PlayAnim(0);
                        character.speed[1] = Vector3.zero;
                        if (aggression < 5)
                        {
                            actionLimit = Random.Range(attackFreq[0], attackFreq[1]);
                        }
                        else
                        {
                            actionLimit = 0.1f;
                        }
                    }
                    else
                    {
                        SetAction(20);
                    }
                }
                else
                {
                    if (action == 3)
                    {
                        if (currentTargetEnemy != null)
                        {
                            character.attackPoint = currentTargetEnemy.transform.position;
                            character.AttackStart();
                        }
                    }
                    else
                    {
                        if (action == 20)
                        {
                            character.PlayAnim(0);
                            character.speed[1] = Vector3.zero;
                        }
                    }
                }
            }
        }
    }
Пример #2
0
    void UpdateControl()
    {
        bool    canMove     = true;
        bool    dirPressed  = false;
        bool    planeHit    = false;
        Vector3 destination = Vector3.zero;

        if (character.attacking)
        {
            //prevent movement if the character is performing a standing attack.
            if (character.melee)
            {
                if (character.characterMelee.attackAnimSlot == 5 || character.characterMelee.attackAnimSlot == 6)
                {
                    canMove = false;
                }
            }
            else
            {
                if (character.characterRanged.attackAnimSlot == 5 || character.characterRanged.attackAnimSlot == 6)
                {
                    canMove = false;
                }
            }
        }

        if (standAttack == true && character.attacking)
        {
            //prevent movement if the character is performing a standing attack.
            if (character.melee)
            {
                if (character.characterMelee.attackAnimSlot == 7 || character.characterMelee.attackAnimSlot == 8)
                {
                    canMove            = false;
                    character.speed[1] = Vector3.zero;
                    character.running  = false;
                }
            }
            else
            {
                if (character.characterRanged.attackAnimSlot == 7 || character.characterRanged.attackAnimSlot == 8)
                {
                    canMove            = false;
                    character.speed[1] = Vector3.zero;
                    character.running  = false;
                }
            }
        }

        //Click or Double Click
        int newClick = 0;

        if (SCR_input.cType == 0)
        {
            if (Input.GetMouseButton(1))
            {
                if (rightClickHeld == false)
                {
                    rightClickHeld = true;

                    if (clickCurrent == 0)
                    {
                        clickCurrent = 1;
                        newClick     = 1;
                    }
                    else
                    {
                        if (clickCurrent == 1 && doubleClickTimer > 0f)
                        {
                            clickCurrent     = 0;
                            doubleClickTimer = 0f;
                            newClick         = 2;
                        }
                    }
                }
            }
            else
            {
                if (rightClickHeld)
                {
                    rightClickHeld = false;

                    if (clickCurrent == 1)
                    {
                        doubleClickTimer = doubleClickLimit;
                    }
                }
            }

            if (doubleClickTimer > 0f)
            {
                doubleClickTimer = Mathf.MoveTowards(doubleClickTimer, 0f, Time.deltaTime);

                if (doubleClickTimer == 0f)
                {
                    clickCurrent = 0;
                }
            }
        }
        else
        {
            if (SCR_input.cType == 1)
            {
                if (Input.GetMouseButtonDown(1))
                {
                    newClick = 2;
                }
            }
        }

        Plane plane   = new Plane(Vector3.up, Vector3.zero);
        float hitDist = 0f;
        Ray   ray;

        ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (plane.Raycast(ray, out hitDist))
        {
            destination = ray.GetPoint(hitDist);
            planeHit    = true;

            if (reticle && Time.timeScale == 1f)
            {
                reticle.SetPos(new Vector2(destination.x, destination.z));
            }
        }


        if (SCR_input.cType == 0)
        {
            if (planeHit)
            {
                character.SetRotAngle(destination);
            }

            if (Input.GetMouseButton(1))
            {
                dirPressed = true;
            }
        }
        else
        {
            float inputX = Input.GetAxis("Horizontal");
            float inputY = Input.GetAxis("Vertical");

            if (inputX != 0f || inputY != 0f)
            {
                dirPressed = true;

                Vector3 inputDir = new Vector3(inputX, 0f, inputY).normalized;
                character.SetRotAngle(transform.position + inputDir);
            }
        }


        if (character.rolling == 0 && character.stunned == 0)
        {
            //Move to destination
            if (dirPressed)
            {
                if (canMove)
                {
                    character.speed[1] = (character.dir * character.runSpeed);

                    character.running = true;

                    if (character.attacking == false)
                    {
                        character.PlayAnim(1);
                    }
                }
                bool canRotate = true;

                if (character.attacking)
                {
                    canRotate = false;
                }

                if (character.melee)
                {
                    if (character.characterMelee.lockActive)
                    {
                        canRotate = false;
                    }
                }

                if (canRotate)
                {
                    character.SetRotTarget();
                }
            }
            else
            {
                character.speed[1] = Vector3.zero;
                character.running  = false;

                if (character.attacking == false)
                {
                    character.PlayAnim(0);
                }
                else
                {
                    //if character is performing a running attack and stops moving, the attack is cancelled.
                    if (character.melee)
                    {
                        if (character.characterMelee.attackAnimSlot == 7 || character.characterMelee.attackAnimSlot == 8)
                        {
                            character.PlayAnim(0);
                            character.AttackCancel();
                        }
                    }
                    else
                    {
                        if (character.characterRanged.attackAnimSlot == 7 || character.characterRanged.attackAnimSlot == 8)
                        {
                            character.PlayAnim(0);
                            character.AttackCancel();
                        }
                    }
                }
            }

            //Attack

            if (Input.GetMouseButtonDown(0))
            {
                if (character.rolling == 0 && character.stunned == 0)
                {
                    character.SetRotAngle(destination);
                    character.SetRotTarget();
                }

                character.attackPoint = destination;
                character.AttackStart();
            }
        }

        if (newClick == 2)
        {
            //Roll
            character.RollStart();
        }
    }