/// <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); }
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); } }
// 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"]); }
//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); }
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 + "\""); } } }
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(); }
// 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; } } }
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; } }
/// <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"); }
/// <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; } }