示例#1
0
    void Cover()
    {
        if (nodetype == -1)
        {
            EnemyPathing.TakeCover(player, transform, lastseenposition, blacklistnode, ViewRange, out nodetype, out node);
        }

        if (Vector3.Distance(enemyposition, movetoposition) < agent.stoppingDistance)
        {
            if ((waittime == -1) && (nodetype == 1))
            {
                Crouching(true);
            }

            if (currtime == 0)
            {
                float scale = 1f;
                if (behaviour == 4)
                {
                    scale = 1f;
                }
                else if (behaviour == 5)
                {
                    if (coverout == true)
                    {
                        scale = 2f;
                    }
                    else
                    {
                        scale = 0.5f;
                    }
                }
                else if (behaviour == 6)
                {
                    if (coverout == true)
                    {
                        scale = 0.5f;
                    }
                    else
                    {
                        scale = 2f;
                    }
                }
                waittime = Random.Range(4, 8) * scale;
            }
            cover = true;
            blacklistnode.Clear();
        }

        if (cover == true)
        {
            if (playerseen == true)
            {
                if (EnemyPathing.CoverOK(player, node, nodetype) == false)
                {
                    if (nodetype == 1)
                    {
                        Crouching(false);
                    }
                    EnemyPathing.TakeCover(player, transform, lastseenposition, blacklistnode, ViewRange, out nodetype, out node);
                    if (nodetype == 1)
                    {
                        movetoposition = EnemyPathing.CNode[node];
                    }
                    else if (nodetype == 2)
                    {
                        movetoposition = EnemyPathing.WNode[node];
                    }
                    else
                    {
                        agent.stoppingDistance = 5f;
                        movetoposition         = lastseenposition;
                    }
                    waittime        = -1f;
                    currtime        = 0f;
                    cover           = false;
                    coverplayerseen = false;
                    coverout        = false;
                }
                else
                {
                    coverplayerseen = true;
                }
            }

            if (currtime < waittime)
            {
                currtime += Time.deltaTime;
            }
            else if (waittime != -1)
            {
                currtime = 0;
                if (coverout == true)
                {
                    if (coverplayerseen == false)
                    {
                        if (nodetype == 1)
                        {
                            Crouching(false);
                        }
                        node     = -1;
                        nodetype = -1;

                        if (behaviour == 4)
                        {
                            behaviour = 1;
                            Wait(5, 60);
                        }
                        else if (behaviour == 5)
                        {
                            behaviour = 1;
                        }
                        else if (behaviour == 6)
                        {
                            behaviour = 1;
                            Wait(10, 60);
                        }
                    }
                    else
                    {
                        coverout = false;
                        if (nodetype == 1)
                        {
                            Crouching(true);
                        }
                        else
                        {
                            movetoposition = EnemyPathing.WallNode.GetChild(node).position;
                        }
                    }
                }
                else
                {
                    if (behaviour == 4)
                    {
                        ignorenearbycover = false;
                    }
                    coverplayerseen = false;
                    coverout        = true;
                    if (nodetype == 1)
                    {
                        Crouching(false);
                    }
                    else
                    {
                        movetoposition = EnemyPathing.WallNode.GetChild(node).GetChild(1).position;
                    }
                }
            }
        }
        else
        {
            if (updatetime < 0.3f)
            {
                updatetime += Time.deltaTime;
            }
            else
            {
                updatetime = 0f;
                EnemyPathing.TakeCover(player, transform, lastseenposition, blacklistnode, ViewRange, out nodetype, out node);
                if (nodetype == 1)
                {
                    movetoposition = EnemyPathing.CNode[node];
                }
                else if (nodetype == 2)
                {
                    movetoposition = EnemyPathing.WNode[node];
                }
                else
                {
                    agent.stoppingDistance = 5f;
                    movetoposition         = lastseenposition;
                }
            }
        }
    }