Example #1
0
    public void SetLife(int life, int player)
    {
        if (!enabled)
        {
            return;
        }
        var pl = _Game.players[player];

        if (!(imortality && isEditor))
        {
            Life = life;
        }
        HitTime = Time.time;
        audio.PlayOneShot(hitSound.Random(), 3);
        if (Life <= 0)
        {
            if (pl != null)
            {
                _Hud.KillText.text += pl.pv.PlayerName + " Killed " + pv.PlayerName + "\r\n";
            }
            _Game.timer.AddMethod(15000, delegate { _Hud.KillText.text = RemoveFirstLine(_Hud.KillText.text); });
            if (IsMine)
            {
                _ObsCamera.pl = pl;
                if (pl != this)
                {
                    pl.CallRPC(pl.SetPlayerScore, RPCMode.All, pl.pv.PlayerScore + 1);
                }
                CallRPC(SetPlayerDeaths, RPCMode.All, pv.PlayerDeaths + 1);
                _ObsCamera.camMode = CamMode.thirdPerson;
            }
            if (IsMine)
            {
                CallRPC(Die, RPCMode.All);
            }
        }

        if (pl != null && pl != this && bot && pl.pv.team == pv.team && !LastShooted.Contains(pl))
        {
            LastShooted.Add(pl);
        }
    }
Example #2
0
    protected override void UpdateBot()
    {
        var enemies = _Game.Players.Where(a => a.pv.team != pv.team)
                      .Union(LastShooted.Where(a => a != null))
                      .OrderBy(a => Vector3.Distance(pos, a.pos));

        var visibleEnemy = enemies.FirstOrDefault(a => !Physics.Raycast(new Ray(pos, a.pos - pos), Vector3.Distance(a.pos, pos), 1 << LayerMask.NameToLayer("Level")) &&
                                                  !Physics.Raycast(new Ray(pos, (a.pos - pos) + Vector3.up), Vector3.Distance(a.pos, pos), 1 << LayerMask.NameToLayer("Level")));

        if (enemies.Count() > 0)
        {
            //selectNode


            if (path == null)
            {
                path = _Game.levelEditor.paths.Where(a => Vector3.Distance(pos, a.StartNode.pos) < 20).Random();
                path.walkCount++;
                curNode = path.nodes.OrderBy(a => Vector3.Distance(pos, a.pos)).FirstOrDefault();
                curNode.walkCount++;
            }

            if (Vector3.Distance(curNode.GetPos(NodeOffset), pos) < 2)
            {
                curNode = curNode.Nodes.OrderBy(a => a.walkCount).FirstOrDefault();
                if (curNode == null)
                {
                    path = null;
                    return;
                }
                NodeOffset = Random.Range((float)((int)(-curNode.height)), (int)curNode.height);
                curNode.walkCount++;
            }
            //rot
            Quaternion r = Quaternion.identity;
            if (visibleEnemy != null)
            {
                Debug.DrawRay(pos, visibleEnemy.pos - pos, Color.red);
                EnemySeenTime = Time.time;
                r             = Quaternion.LookRotation(visibleEnemy.pos - pos);
            }
            if (Time.time - EnemySeenTime > 3 || visibleEnemy == null)
            {
                r = Quaternion.LookRotation(ZeroY(curNode.GetPos(NodeOffset) - pos));
            }

            var dir = ZeroY(curNode.GetPos(NodeOffset) - pos);
            if (Physics.Raycast(new Ray(pos, dir), 1, 1 << LayerMask.NameToLayer("Player")))
            {
                dir = Quaternion.LookRotation(Vector3.left) * dir;
            }


            //shoot
            if (visibleEnemy != null)
            {
                if (Time.time > nextShootTime && !gun.handsReload.enabled)
                {
                    if (Time.time > nextShootTime + .5f)
                    {
                        nextShootTime = Time.time + Random.Range(0, 2f);
                    }
                    move = Vector3.zero;
                    gun.MouseDown();
                }
            }
        }
    }