コード例 #1
0
            public override void UpdateDelta(float delta)
            {
                switch (State)
                {
                case (BiteState.Start):
                    StartTime -= delta;
                    if (StartTime < 0)
                    {
                        State = BiteState.Bite;
                    }
                    break;

                case (BiteState.Bite):
                    BiteTime -= delta;
                    if (BiteTime < 0)
                    {
                        State = BiteState.End;
                    }
                    break;

                case (BiteState.End):
                    EndTime -= delta;
                    if (EndTime < 0)
                    {
                        Snake.ResetState();
                    }
                    break;
                }
            }
コード例 #2
0
    public void PerFrameUpdate()
    {
        if (ParentCharacter.MyAI.BlackBoard.TargetEnemy != null)
        {
            //check if is in range
            _dist = Vector3.Distance(ParentCharacter.transform.position, ParentCharacter.MyAI.BlackBoard.TargetEnemy.transform.position);

            if (_dist > 1.5f && _biteState != BiteState.Bite)
            {
                //go to target enemy
                ParentCharacter.MyAI.BlackBoard.NavTarget = ParentCharacter.MyAI.BlackBoard.TargetEnemy.transform.position - ParentCharacter.MyAI.BlackBoard.TargetEnemy.transform.forward * 0.5f;
                ParentCharacter.Destination   = ParentCharacter.MyAI.BlackBoard.NavTarget;
                ParentCharacter.CurrentStance = HumanStances.Run;
                ParentCharacter.SendCommand(CharacterCommands.GoToPosition);
            }
            else if (_dist > 1.5f && _biteState == BiteState.Bite)
            {
                ParentCharacter.GetComponent <MutantCharacter>().OnCancelStrangle();
                StopAction();
                ParentCharacter.MyEventHandler.TriggerOnActionCompletion();
            }
            else
            {
                if (_biteState != BiteState.Bite)
                {
                    //Debug.Log("Ready to bite");
                    ParentCharacter.SendCommand(CharacterCommands.Bite);
                    _biteState = BiteState.Bite;
                }
            }
        }
    }
コード例 #3
0
    void Biting()
    {
        switch (biteState)
        {
        case BiteState.Ready:
            var isBiteKeyDown = Input.GetKey(KeyCode.C);
            if (isBiteKeyDown)
            {
                savedVelocity = rb.velocity;
                attack        = true;
                rb.velocity   = Vector2.zero;
                biteState     = BiteState.Biting;
                GameObject.FindGameObjectWithTag("Player").SendMessage("disableInput");
            }
            break;

        case BiteState.Biting:
            biteTimer -= Time.deltaTime;
            if (biteTimer <= 0)
            {
                attack      = false;
                biteTimer   = maxBite;
                rb.velocity = savedVelocity;
                GameObject.FindGameObjectWithTag("Player").SendMessage("disableInput");
                biteState = BiteState.Ready;
            }
            break;
        }
    }
コード例 #4
0
    public override void StopAction()
    {
        CsDebug.Inst.CharLog(ParentCharacter, "Stop executing ActionMutantBite " + ParentCharacter.name);
        _executionStopped = true;
        _biteState        = BiteState.None;

        ParentCharacter.MyEventHandler.OnOneSecondTimer -= UpdateAction;
        ParentCharacter.MyEventHandler.OnPerFrameTimer  -= PerFrameUpdate;
    }
コード例 #5
0
            public override void UpdateDiscrete()
            {
                switch (State)
                {
                case (BiteState.Start):
                    if (Snake.Target != null)
                    {
                        float dx = Snake.Target.Position.X - Snake.Position.X;
                        if (Math.Sign(dx) == GetFacingVector(Snake.Facing).X)
                        {
                            Target = Snake.Target.Position - Snake.Position;
                            Target = Math.Min(Target.Length(), 80) * Vector2.Normalize(Target);
                        }
                    }
                    Snake.Move(Target, 0.1f);
                    break;

                case (BiteState.Bite):
                    Snake.Move(Target, 0.5f);
                    Snake.Move(Target, 0.5f);
                    Snake.Move(Target, 0.5f);
                    var  maskSize = new Vector2(16, 16);
                    bool damaged  = false;
                    foreach (var box in Snake.World.FindBoxes(new RectangleF(Snake.Position + Snake.Head.Offset - maskSize / 2, maskSize)))
                    {
                        if (box == Snake.Box || Snake.NoFriendlyFire(box.Data))
                        {
                            continue;
                        }
                        if (box.Data is Enemy enemy)
                        {
                            enemy.Hit(new Vector2(GetFacingVector(Snake.Facing).X, -2), 20, 50, 20);
                            damaged = true;
                        }
                    }
                    if (damaged)
                    {
                        State = BiteState.End;
                    }
                    break;

                case (BiteState.End):
                    Snake.Move(Target, 0.2f);
                    break;
                }
            }
コード例 #6
0
    void Biting()
    {
        switch (biteState)
        {
        case BiteState.Ready:
            var isBiteKeyDown = Input.GetKeyDown(KeyCode.J);
            if (isBiteKeyDown && !anim.GetCurrentAnimatorStateInfo(0).IsName("Hack-n-Slash"))
            {
                mySource.clip = biteSound;
                mySource.Play();
                savedVelocity = rb.velocity;
                attack        = true;
                rb.velocity   = Vector2.zero;
                biteState     = BiteState.Biting;
                gameObject.GetComponent <CircleCollider2D>().radius = 1f;
                SendMessage("slashingNow", attack);
            }
            break;

        case BiteState.Biting:
            biteTimer -= Time.deltaTime;
            if (biteTimer <= 0)
            {
                attack      = false;
                biteTimer   = maxBite + 1f;
                rb.velocity = savedVelocity;
                gameObject.GetComponent <CircleCollider2D>().radius = 3f;
                biteState = BiteState.Cooldown;
                SendMessage("slashingNow", attack);
            }
            break;

        case BiteState.Cooldown:
        {
            biteTimer -= Time.deltaTime;
            if (biteTimer <= 0)
            {
                biteTimer = maxBite;
                biteState = BiteState.Ready;
                attack    = false;
            }
            break;
        }
        }
    }
コード例 #7
0
    public override bool ExecuteAction()
    {
        CsDebug.Inst.CharLog(ParentCharacter, "Start executing ActionMutantBite " + ParentCharacter.name);

        _executionStopped = false;
        _biteState        = BiteState.None;



        UpdateAction();

        ParentCharacter.MyEventHandler.OnOneSecondTimer -= UpdateAction;
        ParentCharacter.MyEventHandler.OnOneSecondTimer += UpdateAction;
        ParentCharacter.MyEventHandler.OnPerFrameTimer  -= PerFrameUpdate;
        ParentCharacter.MyEventHandler.OnPerFrameTimer  += PerFrameUpdate;

        ParentCharacter.MyAnimEventHandler.OnEndStrangle -= OnEndStrangle;
        ParentCharacter.MyAnimEventHandler.OnEndStrangle += OnEndStrangle;



        return(true);
    }