示例#1
0
        /// <summary>
        /// makes robot move into specified direction; enter stops process
        /// </summary>
        /// <param name="walkMode">specifies speed and backwards/forwards</param>
        /// <param name="turnMode">specifies intensity of lateral movement</param>
        /// <param name="reverseMode">true for driving backwards</param>
        /// <returns>returns always true</returns>
        public bool MoveByMode(WalkMode walkMode, TurnMode turnMode, bool reverseMode = false)
        {
            CurrentWalkMode = walkMode;
            CurrentTurnMode = turnMode;

            //velocity for left wheel
            double vel1 = (int)walkMode;
            //velocity for right wheel
            double vel2 = (int)walkMode;

            //if driving backwards
            if (reverseMode)
            {
                //both wheels get same velocity first; if driving to right side, right wheel should turn faster, left one slower
                vel1 = vel1 - (((double)turnMode) / 2);
                vel2 = vel2 + (((double)turnMode) / 2);
            }
            //if driving forwards
            else
            {
                //both wheels get same velocity first; if driving to right side, left wheel should turn faster, right one slower
                vel1 = vel1 + (((double)turnMode) / 2);
                vel2 = vel2 - (((double)turnMode) / 2);
            }

            //call Move() with calculated values
            Move(vel1, vel2);

            return(true);
        }
示例#2
0
    Color GetCurrentTurnColor(TurnMode currentMode)
    {
        MarkerType selectedMarker;

        switch (currentMode)
        {
        case TurnMode.AIMove:
            selectedMarker = AIMarker;
            break;

        case TurnMode.PlayerMove:
            selectedMarker = playerMarker;
            break;

        default:
            selectedMarker = MarkerType.NULL;
            break;
        }

        switch (selectedMarker)
        {
        case MarkerType.O:
            //return m_oMarker.GetComponent<Shader>().GetColor("_Color");
            return(m_oMarker.GetComponentInChildren <Renderer>().sharedMaterial.color);

        case MarkerType.X:
            //return m_xMarker.GetComponent<Material>().GetColor("_Color");
            return(m_xMarker.GetComponentInChildren <Renderer>().sharedMaterial.color);

        default:
            return(Color.black);
        }
    }
示例#3
0
    // Use this for initialization
    void Start()
    {
        currentWalkMode = WalkMode.STOP;
        currentTurnMode = TurnMode.STRAIGHT;

        count = 0;
        SetCountText();
        winText.text = "";
    }
 public MissionWaypointMsg(double latitude, double longitude, float altitude, float damping_distance, int target_yaw, int target_gimbal_pitch, TurnMode turn_mode, bool has_action, uint action_time_limit, MissionWaypointActionMsg waypoint_action)
 {
     _latitude            = latitude;
     _longitude           = longitude;
     _altitude            = altitude;
     _damping_distance    = damping_distance;
     _target_yaw          = target_yaw;
     _target_gimbal_pitch = target_gimbal_pitch;
     _turn_mode           = turn_mode;
     _has_action          = has_action;
     _action_time_limit   = action_time_limit;
     _waypoint_action     = waypoint_action;
 }
 public MissionWaypointMsg(JSONNode msg)
 {
     _latitude            = msg["latitude"].AsDouble;
     _longitude           = msg["longitude"].AsDouble;
     _altitude            = msg["altitude"].AsFloat;
     _damping_distance    = msg["damping_distance"].AsFloat;
     _target_yaw          = msg["target_yaw"].AsInt;
     _target_gimbal_pitch = msg["target_gimbal_pitch"].AsInt;
     _turn_mode           = (TurnMode)msg["turn_mode"].AsInt;
     _has_action          = (msg["has_action"].AsInt != 0);
     _action_time_limit   = (uint)msg["action_time_limit"].AsInt;
     _waypoint_action     = new MissionWaypointActionMsg(msg["waypoint_action"]);
 }
示例#6
0
 //changed lat and long to double from float, changes has-action from bool to int
 public MissionWaypointMsg(double _latitude, double _longitude, float _altitude, float _damping_distance, int _target_yaw, int _target_gimbal_pitch, TurnMode _turn_mode, int _has_action, uint _action_time_limit, MissionWaypointActionMsg _waypoint_action)
 {
     latitude            = _latitude;
     longitude           = _longitude;
     altitude            = _altitude;
     damping_distance    = _damping_distance;
     target_yaw          = _target_yaw;
     target_gimbal_pitch = _target_gimbal_pitch;
     turn_mode           = _turn_mode;
     has_action          = _has_action;
     action_time_limit   = _action_time_limit;
     waypoint_action     = _waypoint_action;
     Debug.Log("constructor accuracy: " + _latitude);
 }
示例#7
0
 public MissionWaypointMsg(JSONNode msg)
 {
     //changes "asDouble" to AsFloat
     latitude            = msg["latitude"].AsDouble;
     longitude           = msg["longitude"].AsDouble;
     altitude            = msg["altitude"].AsFloat;
     damping_distance    = msg["damping_distance"].AsFloat;
     target_yaw          = msg["target_yaw"].AsInt;
     target_gimbal_pitch = msg["target_gimbal_pitch"].AsInt;
     turn_mode           = (TurnMode)msg["turn_mode"].AsInt;
     //_has_action = (msg["has_action"].AsInt != 0);
     has_action        = (msg["has_action"].AsInt);
     action_time_limit = (uint)msg["action_time_limit"].AsInt;
     waypoint_action   = new MissionWaypointActionMsg(msg["waypoint_action"]);
 }
    private async Task Receive()
    {
        while (webSocket.State == WebSocketState.Open)
        {
            var buffer   = new byte[receiveChunkSize];
            var response = await webSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

            if (response.MessageType == WebSocketMessageType.Close)
            {
                await
                webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Close response received",
                                     CancellationToken.None);
            }
            else
            {
                var result = Encoding.UTF8.GetString(buffer).TrimEnd((char)0).Split('/');

                var key    = result[0];
                var action = result[1];

                if (key.Equals(Key))
                {
                    if (action.Equals("forward") && currentWalkMode < WalkMode.FORWARDS_FAST)
                    {
                        currentWalkMode++;
                    }
                    if (action.Equals("backward") && currentWalkMode > WalkMode.BACKWARDS)
                    {
                        currentWalkMode--;
                    }
                    if (action.Equals("left") && currentTurnMode > TurnMode.LEFT_HARD)
                    {
                        currentTurnMode--;
                    }
                    if (action.Equals("right") && currentTurnMode < TurnMode.RIGHT_HARD)
                    {
                        currentTurnMode++;
                    }
                    if (action.Equals("toggle"))
                    {
                        sensor.ToggleSensorRays();
                    }
                    if (action.Equals("walk"))
                    {
                        var walk = int.Parse(result[2]);
                        if (walk >= -1 && walk <= 3)
                        {
                            currentWalkMode = (WalkMode)walk;
                        }
                    }
                    if (action.Equals("turn"))
                    {
                        var turn = int.Parse(result[2]);
                        if (turn >= -2 && turn <= 2)
                        {
                            currentTurnMode = (TurnMode)turn;
                        }
                    }
                }


                Debug.Log("\"" + action + "\"");
            }
        }
    }
示例#9
0
    IEnumerator GameLoop()
    {
        Debug.Log(playerPuttCount());
        while (playerPuttCount() > 1)
        {
            switch (turn)
            {
            case TurnMode.Placement:
                canvasController.TogglePowerBar(false);
                //for each player
                List <PlayerStats> players = sortedPlayers();
                foreach (PlayerStats player in players)
                {
                    //wait for controller confirmation
                    if (player.PowerUp != null)
                    {
                        while (true)
                        {
                            if (Input.anyKey)
                            {
                                break;
                            }
                            yield return(null);
                        }

                        //start timer
                        float startTime = Time.time;

                        //if player canputt is false give a random power up for placement

                        cameraMover.GetComponent <camera>().activePlayer = player;
                        canvasController.ChangePlayerText(player.name, turn);

                        //allow placement


                        //REPLACE WITH TIME DURATION VARIABLE
                        //while timer
                        while ((Time.time - startTime < waitTime))
                        {
                            canvasController.ShowTime(waitTime - (Time.time - startTime));
                            //display timer ui
                            // Debug.Log("Turn timer: " + (Time.time - startTime));

                            //invoke function on character for power placement. pass in player

                            if (Input.GetKeyDown("space"))
                            {
                                trap.Play();
                                startTime -= 20;
                            }
                            yield return(null);
                        }

                        canvasController.HideTime();

                        //end placement
                        cameraMover.GetComponent <camera>().PlacePowerUp();

                        //end turn UI
                        //Debug.Log("Player turn is finished");
                    }
                }

                //change turnmode to putting
                turn = TurnMode.Putting;
                break;

            case TurnMode.Putting:
                canvasController.RemovePowerUpText();
                List <PlayerStats> players2 = sortedPlayers();
                ballcontrol        bc       = Ball.GetComponent <ballcontrol>();
                foreach (PlayerStats player in players2)
                {
                    if (player.canPutt)
                    {
                        canvasController.PuttMessage("Press any key to start putting!");
                        canvasController.TogglePowerBar(true);

                        //prompt for controller confirmation
                        //Debug.Log("Press a key to start your turn : " + player.name);
                        canvasController.ChangePlayerText(player.name, turn);

                        while (true)
                        {
                            if (Input.anyKey)
                            {
                                break;
                            }
                            yield return(null);
                        }

                        //////!!!!!!!!!!!!!!!!!!!!!!!!!
                        //bc.enabled = true;

                        //wait for putt input
                        canvasController.PuttMessage("Press left mouse button to putt!");
                        //Debug.Log("waiting for putt input");

                        bc.ActiveGolfer = player;
                        while (!bc.inPlay)
                        {
                            //Debug.Log("Checking if ball was hit");
                            if (bc.inPlay)
                            {
                                break;
                            }
                            yield return(new WaitForSeconds(1));
                        }
                        canvasController.PuttMessage("Ball was hit!");
                        canvasController.TogglePowerBar(false);

                        //Debug.Log("waiting for ball to finish moving");
                        //wait for ball movement to finish
                        //while (Ball.GetComponent<Rigidbody>().velocity.magnitude == 0) {
                        //    yield return null;
                        //}

                        //double check
                        float timer = 0;
                        while (timer < 2)
                        {
                            timer += Time.deltaTime;
                            if (Ball.GetComponent <Rigidbody>().velocity.magnitude > 0)
                            {
                                timer = 0;
                            }
                            yield return(null);
                        }
                        //Debug.Log("Ball is now stopped we think");

                        //set the ball to not in play
                        bc.inPlay       = false;
                        bc.ActiveGolfer = null;

                        if (bc.inHole)
                        {
                            //set player can putt bool to false
                            player.canPutt = false;
                            //show ui for player eliminated
                            //Debug.Log("Show ui that this player is eliminated");
                            canvasController.PuttMessage(player.name + " is eliminated");
                            canvasController.ShowDead(player.name);
                            canvasController.StartCoroutine("DunkedSon");

                            yield return(new WaitForSeconds(messageTime));

                            //if more than one player can putt
                            if (playerPuttCount() > 1)
                            {
                                //Debug.Log("Reset scene for remaining players");
                                canvasController.PuttMessage("Setting up next round!");
                                yield return(new WaitForSeconds(messageTime));

                                //delete all power ups in game world
                                GameObject[] powerups = GameObject.FindGameObjectsWithTag("PowerUp");
                                for (var i = 0; i < powerups.Length; i++)
                                {
                                    Destroy(powerups[i]);
                                }

                                //reset ball position
                                bc.NextLevel();
                                break;
                            }
                            else
                            {
                                canvasController.PuttMessage(player.name + ", you lose!");
                            }
                        }
                        ////////!!!!!!!!!!!!!!!!!!!!!!
                        //bc.enabled = false;
                    }
                }

                //get all powerups in the scene - send message to increase integer for turn count

                if (playerPuttCount() > 1)
                {
                    turn = TurnMode.Placement;
                }
                else
                {
                    turn = TurnMode.GameOver;
                }

                break;

            default:
                callWinner();
                break;
            }
        }

        //else remaining player wins
        callWinner();
    }
示例#10
0
    // Update is called once per frame
    void Update()
    {
        transform.Translate((int)currentWalkMode * Vector3.forward * Speed * Time.deltaTime);
        transform.Rotate(Vector3.up, (int)currentTurnMode * Time.deltaTime * 25);


        //pressing up key switches from BACKWARDS to STOP to FORWARDS_SLOW to FORWARDS_MEDIUM to FORWARDS_FAST
        //once reached FORWARDS_FAST, pressing up key again will not have any effect
        if (Input.GetKeyDown(KeyCode.W))
        {
            switch (currentWalkMode)
            {
            case WalkMode.BACKWARDS:
                currentWalkMode = WalkMode.STOP;
                break;

            case WalkMode.STOP:
                currentWalkMode = WalkMode.FORWARDS_SLOW;
                break;

            case WalkMode.FORWARDS_SLOW:
                currentWalkMode = WalkMode.FORWARDS_MEDIUM;
                break;

            case WalkMode.FORWARDS_MEDIUM:
                currentWalkMode = WalkMode.FORWARDS_FAST;
                break;
            }
        }


        //pressing down key switches from FORWARDS_FAST to FORWARDS_MEDIUM to FORWARDS_SLOW to STOP to BACKWARDS
        //once reached BACKWARDS, pressing down key again will not have any effect
        if (Input.GetKeyDown(KeyCode.S))
        {
            switch (currentWalkMode)
            {
            case WalkMode.FORWARDS_FAST:
                currentWalkMode = WalkMode.FORWARDS_MEDIUM;
                break;

            case WalkMode.FORWARDS_MEDIUM:
                currentWalkMode = WalkMode.FORWARDS_SLOW;
                break;

            case WalkMode.FORWARDS_SLOW:
                currentWalkMode = WalkMode.STOP;
                break;

            case WalkMode.STOP:
                currentWalkMode = WalkMode.BACKWARDS;
                break;
            }
        }
        //pressing left key switches from RIGHT_HARD to RIGHT_SMOOTH to STRAIGHT to LEFT_SMOOTH to LEFT_HARD
        //once reached LEFT_HARD, pressing left key again will not have any effect
        if (Input.GetKeyDown(KeyCode.A))
        {
            switch (currentTurnMode)
            {
            case TurnMode.RIGHT_HARD:
                currentTurnMode = TurnMode.RIGHT_SMOOTH;
                break;

            case TurnMode.RIGHT_SMOOTH:
                currentTurnMode = TurnMode.STRAIGHT;
                break;

            case TurnMode.STRAIGHT:
                currentTurnMode = TurnMode.LEFT_SMOOTH;
                break;

            case TurnMode.LEFT_SMOOTH:
                currentTurnMode = TurnMode.LEFT_HARD;
                break;
            }
        }

        //pressing right key switches from LEFT_HARD to LEFT_SMOOTH to STRAIGHT to RIGHT_SMOOTH to RIGHT_HARD
        //once reached RIGHT_HARD, pressing right key again will not have any effect
        if (Input.GetKeyDown(KeyCode.D))
        {
            switch (currentTurnMode)
            {
            case TurnMode.LEFT_HARD:
                currentTurnMode = TurnMode.LEFT_SMOOTH;
                break;

            case TurnMode.LEFT_SMOOTH:
                currentTurnMode = TurnMode.STRAIGHT;
                break;

            case TurnMode.STRAIGHT:
                currentTurnMode = TurnMode.RIGHT_SMOOTH;
                break;

            case TurnMode.RIGHT_SMOOTH:
                currentTurnMode = TurnMode.RIGHT_HARD;
                break;
            }
        }
    }
示例#11
0
    public void ChangePlayerText(string playername, TurnMode mode)
    {
        playerText.text = playername + "\n" + mode.ToString() + " MODE";

        switch (playername.ToLower())
        {
        case "player1":
            p1Text.fontStyle = FontStyles.Bold;
            p2Text.fontStyle = FontStyles.Normal;
            p3Text.fontStyle = FontStyles.Normal;
            p4Text.fontStyle = FontStyles.Normal;
            p1Text.color     = Color.black;
            p2Text.color     = Color.white;
            p3Text.color     = Color.white;
            p4Text.color     = Color.white;
            break;

        case "player2":
            p1Text.fontStyle = FontStyles.Normal;
            p2Text.fontStyle = FontStyles.Bold;
            p3Text.fontStyle = FontStyles.Normal;
            p4Text.fontStyle = FontStyles.Normal;
            p1Text.color     = Color.white;
            p2Text.color     = Color.black;
            p3Text.color     = Color.white;
            p4Text.color     = Color.white;
            break;

        case "player3":
            p1Text.fontStyle = FontStyles.Normal;
            p2Text.fontStyle = FontStyles.Normal;
            p3Text.fontStyle = FontStyles.Bold;
            p4Text.fontStyle = FontStyles.Normal;
            p1Text.color     = Color.white;
            p2Text.color     = Color.white;
            p3Text.color     = Color.black;
            p4Text.color     = Color.white;
            break;

        case "player4":
            p1Text.fontStyle = FontStyles.Normal;
            p2Text.fontStyle = FontStyles.Normal;
            p3Text.fontStyle = FontStyles.Normal;
            p4Text.fontStyle = FontStyles.Bold;
            p1Text.color     = Color.white;
            p2Text.color     = Color.white;
            p3Text.color     = Color.white;
            p4Text.color     = Color.black;
            break;

        default:
            p1Text.fontStyle = FontStyles.Normal;
            p2Text.fontStyle = FontStyles.Normal;
            p3Text.fontStyle = FontStyles.Normal;
            p4Text.fontStyle = FontStyles.Normal;
            p1Text.color     = Color.white;
            p2Text.color     = Color.white;
            p3Text.color     = Color.white;
            p4Text.color     = Color.white;
            break;
        }
    }
示例#12
0
    /// <summary>
    /// Game loop
    /// </summary>
    /// <returns></returns>
    IEnumerator GameLoop()
    {
        // Delay start for wipe animation
        yield return(new WaitForSeconds(0.5f));

        int player = GI.GetPlayerFirst() ? 1 : 2;

        for (m_turns = 0; m_turns < 9 && Win(m_board) == 0; ++m_turns)
        {
            m_TurnText.text = "Turns: " + m_turns.ToString();

            if ((m_turns + player) % 2 == 0)
            {
                Debug.Log("Computer's turn!");
                currentTurnMove = TurnMode.AIMove;
                UpdateTurnVisual();
                m_BackgroundColorGoTo = GetMarkerColor(AIMarker);

                yield return(new WaitForSeconds(m_AITurnDuration));

                ComputerMove(m_board);
                Debug.Log("Computer has made their turn!");
                UpdateBoardVisuals();
            }
            else
            {
                Debug.Log("Player's turn!");
                currentTurnMove = TurnMode.PlayerMove;
                UpdateTurnVisual();
                m_BackgroundColorGoTo = GetMarkerColor(playerMarker);

                yield return(new WaitUntil(() => m_turnOver));

                Debug.Log("Player has made their turn!");
                UpdateBoardVisuals();
            }

            m_turnOver = false;
        }

        currentTurnMove = TurnMode.GameOver;

        yield return(new WaitForSeconds(1));

        switch (Win(m_board).ToInt())
        {
        case 0:
            Debug.Log("A draw. How droll.\n");
            m_BackgroundColorGoTo = Color.black;
            UpdateText("Tie game!",
                       new Color(
                           ExtendedFunctions.Convert8ToFloat(50.0f),
                           ExtendedFunctions.Convert8ToFloat(50.0f),
                           ExtendedFunctions.Convert8ToFloat(50.0f)
                           )
                       );

            GI.SetLatestWinner(GameOutcome.Tie);

            break;

        case 1:
            Debug.Log("You lose.\n");
            WinVisual(m_WinPositions);
            UpdateText("AI won!", GetMarkerColor(AIMarker));
            LoseState();
            break;

        case -1:
            Debug.Log("You win.\n");
            WinVisual(m_WinPositions);
            UpdateText("You win!", GetMarkerColor(playerMarker));
            WinState();
            break;
        }

        yield return(new WaitForSeconds(1.0f));

        m_WhiteWipe.SetTrigger("WipeIn");
    }
示例#13
0
        /// <summary>
        /// Allows us to control the robot with the direction keys on the keybord. Also gives visual feedback in which direction the robot currently turns
        /// and at which velocity.
        /// </summary>
        private void CurrentMode(WalkMode walkMode, TurnMode turnMode)
        {
            switch (walkMode)
            {
            case WalkMode.FORWARDS_FAST:
                Console.WriteLine("       ^       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                break;

            case WalkMode.FORWARDS_MEDIUM:
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("       ^       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                break;

            case WalkMode.FORWARDS_SLOW:
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("       ^       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                break;

            case WalkMode.BACKWARDS:
                break;

            case WalkMode.STOP:
                break;

            default:
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                break;
            }

            Console.WriteLine("      ███      ");

            switch (turnMode)
            {
            case TurnMode.LEFT_HARD:
                Console.WriteLine(" <----███      ");
                break;

            case TurnMode.LEFT_SMOOTH:
                Console.WriteLine("   <--███      ");
                break;

            case TurnMode.STRAIGHT:
                Console.WriteLine("      ███      ");
                break;

            case TurnMode.RIGHT_SMOOTH:
                Console.WriteLine("      ███--> ");
                break;

            case TurnMode.RIGHT_HARD:
                Console.WriteLine("      ███----> ");
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(turnMode), turnMode, null);
            }

            Console.WriteLine("      ███      ");

            switch (walkMode)
            {
            case WalkMode.BACKWARDS:
                Console.WriteLine("       |       ");
                Console.WriteLine("       |       ");
                Console.WriteLine("       V       ");
                break;

            case WalkMode.STOP:
                break;

            case WalkMode.FORWARDS_SLOW:
                break;

            case WalkMode.FORWARDS_MEDIUM:
                break;

            case WalkMode.FORWARDS_FAST:
                break;

            default:
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                Console.WriteLine("               ");
                break;
            }
        }