示例#1
0
 public AdmiralAckbot()
 {
     state      = BotStates.Searching;
     ourBoard   = new GameBoard();
     enemyBoard = new EnemyBoard();
     rng        = new Random();
 }
示例#2
0
        private async Task <string> Run()
        {
            botState = BotStates.Running;
            string innerMessage = string.Empty;

            //disable usage gui when start task
            EnableGUI(false);
            //define cancel token
            cancelTokenSource = new CancellationTokenSource();
            var ctk = cancelTokenSource.Token;
            //temp gui thread
            var    prevThr    = TaskScheduler.FromCurrentSynchronizationContext();
            Action mainAction = new Action(() => {
                while (true)
                {
                    //pause thread...
                    lock (pauseObj) { }
                    //Doing something..
                    string callbackMessage = DoWork(ctk);
                    //update gui thread
                    Task.Factory.StartNew(() =>
                    {
                        UpdateGUI(callbackMessage, ctk);
                    }, CancellationToken.None, TaskCreationOptions.AttachedToParent, prevThr);
                }
            });

            //run main task with cancel token
            try
            {
                await Task.Factory.StartNew(mainAction, ctk).ContinueWith((ac) => {
                    EnableGUI(true);
                    innerMessage = "Done.";
                    cancelTokenSource.Dispose();
                    botState = BotStates.Stopped;
                }, ctk, TaskContinuationOptions.None, prevThr);
            }
            catch (TaskCanceledException cexp)
            {
                //cancel
                innerMessage = "Stopped.";
            }
            catch (Exception exp)
            {
                //any exceptions
                innerMessage = "Error: '" + exp.Message + "'";
            }
            finally
            {
                cancelTokenSource.Dispose();
                cancelTokenSource = null;
                EnableGUI(true);
                botState = BotStates.Stopped;
                dataSource.PauseButtonText = "Pause";
            }

            return(innerMessage);
        }
示例#3
0
            public async Task Shutdown(CommandContext ctx)
            {
                await ctx.RespondAsync($"Shutting Down...");

                await BotStates.SetShutDown();

                Bot.INSTANCE.Client.Dispose();
                System.Environment.Exit(1);
            }
示例#4
0
    private void Animation(BotStates animatonState, bool value, float speed = 1.0f)
    {
        if (animator == null)
        {
            Debug.LogError("BotAnimation Animation: animator not set!");
            return;
        }

        animator.SetBool(ExtensionMethods.ToStringEnums(animatonState), value);
        animator.SetFloat("speed", speed);
    }
示例#5
0
    // Start is called before the first frame update
    void Start()
    {
        timer        = roamTimer;
        currState    = BotStates.Roam;
        agent        = this.GetComponent <NavMeshAgent>();
        mazeGen      = GameObject.FindObjectOfType <Maze>();
        botPosHolder = GetComponent <BotTargetPosHolderScript>();
        Vector3 newPos = mazeGen.GetRandomPosOnMaze();

        agent.SetDestination(newPos);
        currTargetPos = newPos;
    }
示例#6
0
        private IGridSquare AttackShip()
        {
            if (previousShipAttacked.IsNotDestroyed())
            {
                return(previousShipAttacked.GetNextTarget());
            }
            else
            {
                state = BotStates.Searching;

                enemyBoard.RemoveEnemyShip(previousShipAttacked.GetSizeOfDestroyedShip());
                Console.WriteLine(previousShipAttacked.GetSizeOfDestroyedShip());
                return(PickRandomTarget());
            }
        }
示例#7
0
        public void HandleShotResult(IGridSquare square, bool wasHit)
        {
            if (state == BotStates.Searching && wasHit)
            {
                state = BotStates.Attacking;
                previousShipAttacked = new EnemyShip(square, enemyBoard);

                Console.WriteLine("FOUND A SHIP");
            }
            else if (state == BotStates.Attacking)
            {
                previousShipAttacked.UpdateBasedOnShotResult(square, wasHit);
            }

            enemyBoard.UpdateBoard(square, wasHit);
        }
示例#8
0
 private void pauseOrResume_Click(object sender, RoutedEventArgs e)
 {
     if (botState == BotStates.Pausing)
     {
         //resume
         Monitor.Exit(pauseObj);
         botState = BotStates.Running;
         dataSource.PauseButtonText = "Pause";
     }
     else
     {
         //pause
         Monitor.Enter(pauseObj);
         botState = BotStates.Pausing;
         dataSource.PauseButtonText = "Resume";
     }
 }
示例#9
0
    // Start is called before the first frame update
    void Start()
    {
        roamTimer = Random.Range(5f, 15f);
        transform.GetChild(4).GetComponent <AudioSource>().Play();
        alertAudioSource     = transform.GetChild(3).GetComponent <AudioSource>();
        inSoundPlayCoroutine = false;
        walkingAudioSource   = transform.GetChild(2).GetComponent <AudioSource>();
        currState            = BotStates.Roam;
        agent        = this.GetComponent <NavMeshAgent>();
        mazeGen      = GameObject.FindObjectOfType <Maze>();
        botPosHolder = GetComponent <BotTargetPosHolderScript>();
        Vector3 newPos = mazeGen.GetRandomPosOnMaze();

        agent.SetDestination(newPos);
        currTargetPos      = newPos;
        playAlertSoundOnce = false;
    }
示例#10
0
    // Update is called once per frame
    private void Update()
    {
        print(passes + "- " + agent.remainingDistance);
        switch (currState)
        {
        case BotStates.Roam:
        {
            if (passes > 0)
            {
                if (Vector3.Distance(transform.position, agent.destination) <= 0.1)
                {
                    Vector3 newPos = mazeGen.GetRandomPosOnMaze();
                    agent.SetDestination(newPos);
                    currTargetPos = newPos;
                    print("Pos changed at time 1-" + "- " + newPos);
                    passes--;
                }
                RaycastHit hitF, hitB, hitL, hitR;

                if (Physics.Raycast(transform.position, transform.forward, out hitF, 5f))
                {
                    if (hitF.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitF.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 1");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, -transform.forward, out hitB, 5f))
                {
                    if (hitB.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitB.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 2");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, transform.right, out hitR, 5f))
                {
                    if (hitR.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitR.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 3");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, -transform.right, out hitL, 5f))
                {
                    if (hitL.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitL.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 4");
                        currState = BotStates.Alert;
                    }
                }
            }
            else
            {
                if (Vector3.Distance(transform.position, agent.destination) <= 0.1)
                {
                    Vector3 newPos = GameObject.FindObjectOfType <PlayerMovement>().transform.position;
                    agent.SetDestination(newPos);
                    currTargetPos = newPos;
                    print("Pos changed at time 2-" + "- " + newPos);
                    passes = 1;
                }
                RaycastHit hitF, hitB, hitL, hitR;

                if (Physics.Raycast(transform.position, transform.forward, out hitF, 5f))
                {
                    if (hitF.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitF.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 1");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, -transform.forward, out hitB, 5f))
                {
                    if (hitB.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitB.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 2");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, transform.right, out hitR, 5f))
                {
                    if (hitR.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitR.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 3");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, -transform.right, out hitL, 5f))
                {
                    if (hitL.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitL.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 4");
                        currState = BotStates.Alert;
                    }
                }
            }


            break;
        }

        case BotStates.Alert:
        {
            //transform.LookAt(target.transform);

            RaycastHit hit;

            if (Physics.Raycast(transform.position, transform.forward, out hit, 5f))
            {
                if (hit.transform.gameObject.GetComponent <PlayerMovement>())
                {
                    transform.LookAt(target.transform);
                    agent.SetDestination(target.transform.position);
                    lastKnownPos = target.transform.position;
                }
                else
                {
                    passes    = 0;
                    currState = BotStates.Roam;
                }
            }
            else
            {
                Debug.DrawLine(transform.position, transform.forward * 10f, Color.red);
            }
            break;
        }
        }
    }
示例#11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BotStateSet"/> class.
 /// </summary>
 /// <param name="botStates">initial list of BotState to manage.</param>
 public BotStateSet(params BotState[] botStates)
 {
     BotStates.AddRange(botStates);
 }
示例#12
0
 public virtual void StartAnimation(BotStates animatonState, float speed = 1.0f)
 {
     Animation(animatonState, true, speed);
 }
示例#13
0
 public override void StartAnimation(BotStates animatonState, float speed = 1)
 {
     base.StartAnimation(animatonState, speed);
 }
示例#14
0
 public void setState(BotStates botState)
 {
     this.botState = botState;
 }
示例#15
0
 public virtual void StopAnimation(BotStates animatonState)
 {
     Animation(animatonState, false);
 }
示例#16
0
    // Update is called once per frame
    private void Update()
    {
        switch (currState)
        {
        case BotStates.Roam:
        {
            if (!walkingAudioSource.isPlaying)
            {
                PlayBotWalkingSound();
            }


            if (passes > 0)
            {
                if (Vector3.Distance(transform.position, agent.destination) <= 0.1)
                {
                    Vector3 newPos = mazeGen.GetRandomPosOnMaze();
                    agent.SetDestination(newPos);
                    currTargetPos = newPos;
                    passes--;
                }
                RaycastHit hitF, hitB, hitL, hitR;

                if (Physics.Raycast(transform.position, transform.forward, out hitF, 5f))
                {
                    if (hitF.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitF.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 1");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, -transform.forward, out hitB, 5f))
                {
                    if (hitB.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitB.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 2");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, transform.right, out hitR, 5f))
                {
                    if (hitR.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitR.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 3");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, -transform.right, out hitL, 5f))
                {
                    if (hitL.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitL.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 4");
                        currState = BotStates.Alert;
                    }
                }
            }
            else
            {
                if (Vector3.Distance(transform.position, agent.destination) <= 0.1 || Time.time - timer <= roamTimer)
                {
                    timer = Time.time;
                    Vector3 newPos = GameObject.FindObjectOfType <PlayerMovement>().transform.position;
                    agent.SetDestination(newPos);
                    currTargetPos = newPos;
                    passes        = 1;
                }

                RaycastHit hitF, hitB, hitL, hitR;

                if (Physics.Raycast(transform.position, transform.forward, out hitF, 5f))
                {
                    if (hitF.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitF.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 1");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, -transform.forward, out hitB, 5f))
                {
                    if (hitB.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitB.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 2");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, transform.right, out hitR, 5f))
                {
                    if (hitR.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitR.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 3");
                        currState = BotStates.Alert;
                    }
                }
                if (Physics.Raycast(transform.position, -transform.right, out hitL, 5f))
                {
                    if (hitL.transform.gameObject.GetComponent <PlayerMovement>())
                    {
                        target = hitL.transform.gameObject;
                        agent.SetDestination(target.transform.position);
                        transform.LookAt(target.transform);
                        Debug.Log("LOoking at player 4");
                        currState = BotStates.Alert;
                    }
                }
            }


            break;
        }

        case BotStates.Alert:
        {
            if (!playAlertSoundOnce)
            {
                PlayBotAlertSound();
                playAlertSoundOnce = true;
            }
            //transform.LookAt(target.transform);

            RaycastHit hit;

            if (Physics.Raycast(transform.position, transform.forward, out hit, 5f))
            {
                if (hit.transform.gameObject.GetComponent <PlayerMovement>())
                {
                    transform.LookAt(target.transform);
                    agent.SetDestination(target.transform.position);
                    lastKnownPos = target.transform.position;
                }
                else
                {
                    passes             = 0;
                    playAlertSoundOnce = false;
                    currState          = BotStates.Roam;
                }
            }
            else
            {
                Debug.DrawLine(transform.position, transform.forward * 10f, Color.red);
            }
            break;
        }
        }
    }
示例#17
0
 public override void StopAnimation(BotStates animatonState)
 {
     base.StopAnimation(animatonState);
 }