/// <summary> /// Das Zeichnen des Kreises wird jetzt per Maus-Klick bestätigt /// </summary> /// <param name="pt"></param> /// <param name="buttons"></param> /// <param name="screenHeight"></param> /// <param name="curElement"></param> /// <param name="statusMessage"></param> /// <returns></returns> public static ClickResult Circle_ClickHandler(System.Drawing.Point pt, MouseButtons buttons, int screenHeight, ref Curve curElement, out string statusMessage) { ClickResult result = ClickResult.canceled; statusMessage = string.Empty; Point worldPoint = TransformScreen2World(pt, screenHeight); if (buttons != MouseButtons.Right) { if (curElement == null || curElement.GetType() != typeof(Circle)) { //Der Kreis-Center wird gemerkt curElement = new Circle(worldPoint, new Vector(), 0); result = ClickResult.created; statusMessage = EndMessage; } else { Circle c = curElement as Circle; //Der Raduis wird berechnen durch c.Radius = c.CenterPoint.DistanceTo(worldPoint); result = ClickResult.finished; statusMessage = StartMessage; } } return(result); }
private void SetClickResult(ClickResult clickResult) { var t = pointerUpTask; pointerUpTask = new TaskCompletionSource <ClickResult>(); t.TrySetResult(clickResult); }
private void pictureBox_MouseDown(object sender, MouseEventArgs e) { if (m_clickHandler != null) { string statusMessage; //"m_clickHandler" wird aufgeruft und das Ergebnis wird in "result" gemerkt //Durch die Delegate-Methode "m_clickHandler" hat man einen Zugriff zu den in Kurven (Line,Circle, Polylinie) //statischen Funktionen ClickResult result = m_clickHandler(e.Location, e.Button, pictureBox.Height, ref m_currentCurve, out statusMessage); //Bei neu Mouse-Klick in der PictureBox StatusManager.Instance.SetStatus(statusMessage); //Wenn der Befehl abgebrochen wurde(enum ist cancelled) wird lediglich //m_currentCurve auf null gesetzt. if (result == ClickResult.canceled) { m_currentCurve = null; } //Wenn als Ergebnis finished zurückgegeben wird, konnte die Delegatfunktion ein //gültiges Curve-Objekt("m_currentCurve") fertigstellen. else if (result == ClickResult.finished) { m_CAD.AddElement(m_currentCurve); //Hier muss m_currentCurve wieder auf null gesetzt werden, um einen neuen //Durchlauf zu starten. m_currentCurve = null; } } }
public void Forms_Form_Attribute() { Browser b = new Browser(); b.SetContent(Helper.GetFromResources("SimpleBrowser.UnitTests.SampleDocs.HTML5Elements.htm")); // This test covers the following cases: // 1. An input outside of the form with the form attribute is submitted. // 2. An input in another form with the form attribute is submitted. var field1 = b.Find("field1"); field1.Value = "Name1"; var field1a = b.Find("field1a"); field1a.Value = "Name1a"; var field2 = b.Find("field2"); field2.Value = "Name2"; var submit1 = b.Find("submit1"); ClickResult clickResult = submit1.Click(); // Check to make sure the form submitted. Assert.IsTrue(clickResult == ClickResult.SucceededNavigationComplete); var names = b.Select("td.desc"); var values = b.Select("td.val"); Assert.IsTrue(names.Count() == values.Count()); Assert.IsTrue(values.Where(e => e.Value == "Name1").FirstOrDefault() != null); Assert.IsTrue(values.Where(e => e.Value == "Name2").FirstOrDefault() != null); Assert.IsTrue(values.Where(e => e.Value == "Name1a").FirstOrDefault() != null); Assert.IsTrue(values.Where(e => e.Value == "Submit1").FirstOrDefault() != null); // This test covers the following cases: // 1. An input in the form with a form element corresponding to another form is not submitted. b.SetContent(Helper.GetFromResources("SimpleBrowser.UnitTests.SampleDocs.HTML5Elements.htm")); field2 = b.Find("field2"); field2.Value = "Name2"; var field2a = b.Find("field2a"); field2a.Value = "Name2a"; var submit2 = b.Find("submit2"); clickResult = submit2.Click(); // Check to make sure the form submitted. Assert.IsTrue(clickResult == ClickResult.SucceededNavigationComplete); names = b.Select("td.desc"); values = b.Select("td.val"); Assert.IsTrue(values.Where(e => e.Value == "Submit2").FirstOrDefault() != null); Assert.IsTrue(values.Where(e => e.Value == "Name2a").FirstOrDefault() != null); Assert.IsFalse(values.Where(e => e.Value == "Name2").FirstOrDefault() != null); }
public static ClickResult Polyline_ClickHandler(System.Drawing.Point pt, MouseButtons buttons, int screenHeight, ref Curve curElement, out string statusMessage) { ClickResult result = ClickResult.canceled; statusMessage = string.Empty; Point worldPoint = TransformScreen2World(pt, screenHeight); if (curElement == null || curElement.GetType() != typeof(Polyline)) { if (buttons == MouseButtons.Left) { PolylinePoints.Add(worldPoint); curElement = new Polyline(new Point[] { worldPoint }); result = ClickResult.created; statusMessage = NextMessage; } else if (buttons == MouseButtons.Right) { result = ClickResult.canceled; statusMessage = StartMessage; } } else { Polyline p = curElement as Polyline; if (buttons == MouseButtons.Left) { PolylinePoints.Add(worldPoint); p.AddPoint(worldPoint); result = ClickResult.pointHandled; statusMessage = EndMessage; } else if (buttons == MouseButtons.Right && p.Points.Count < 2) { result = ClickResult.canceled; statusMessage = StartMessage; } else if (buttons == MouseButtons.Right) { result = ClickResult.finished; statusMessage = StartMessage; } } return(result); }
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (clickHandler != null) { ClickResult resultClickHandler = clickHandler(new System.Drawing.Point((int)TransformScreen2World(e.Location).X, (int)TransformScreen2World(e.Location).Y), e.Button, ref curve); if (resultClickHandler == ClickResult.canceled) { curve = null; } if (resultClickHandler == ClickResult.finished) { draw.AddElement(curve); curve = null; } } }
/*"m_clickHandler" wird aufgeruft und das Ergebnis wird in "result" gemerkt * //Durch die Delegate-Methode "m_clickHandler" hat man einen Zugriff zu den in Kurven (Line,Circle, Polylinie) * //statischen Funktionen*/ private void pictureBox_MouseDown(object sender, MouseEventArgs e) { if (_clickHandler != null) { string statusMessage; ClickResult result = _clickHandler(e.Location, e.Button, pictureBox1.Height, ref m_currentCurve, out statusMessage); StatusManager.Instance.SetStatus(statusMessage); if (result == ClickResult.canceled) { m_currentCurve = null; } //Wenn als Ergebnis finished zurückgegeben wird, konnte die Delegatfunktion ein //gültiges Curve-Objekt("m_currentCurve") fertigstellen. else if (result == ClickResult.finished) { m_CAD.AddElement(m_currentCurve); m_currentCurve = null; } } }
void timer_Tick(object sender, EventArgs e) { timer.Enabled = false; ClickResult aResult = ClickResult.DoNothing; int adjacentBlocks = 0; switch (leftRightClick) { case 1: pairs.Clear(); aResult = mineSweeper.LeftClickEvent(currentMine.RowNumber, currentMine.ColumnNumber, ref adjacentBlocks, pairs); break; case 2: pairs.Clear(); aResult = mineSweeper.RightClickEvent(currentMine.RowNumber, currentMine.ColumnNumber); break; } leftRightClick = 0; HandleButtonClicked(aResult, adjacentBlocks); }
void HandleButtonClicked(ClickResult bResult, int blockNumber) { switch (bResult) { case ClickResult.GameOver: GameOver(); break; case ClickResult.MarkBlock: MarkBlock(); break; case ClickResult.OpenBlocks: OpenBlocks(); break; case ClickResult.OpenBlock: OpenBlock(currentMine.RowNumber, currentMine.ColumnNumber, blockNumber); break; } }
public static bool CheckForHits(Vector2 screenOrMousePos, CameraComponent camera, Simulation simulation, out ClickResult clickResult) { var invViewProj = Matrix.Invert(camera.ViewProjectionMatrix); var sPos = new Vector3(screenOrMousePos.X * 2f - 1f, 1f - screenOrMousePos.Y * 2f, 0); var vectorNear = Vector3.Transform(sPos, invViewProj); vectorNear /= vectorNear.W; sPos.Z = 1f; var vectorFar = Vector3.Transform(sPos, invViewProj); vectorFar /= vectorFar.W; clickResult = new ClickResult(); clickResult.ClickedEntity = null; clickResult.WorldPosition = Vector3.Zero; var minDistance = float.PositiveInfinity; var result = new FastList <HitResult>(); simulation.RaycastPenetrating(vectorNear.XYZ(), vectorFar.XYZ(), result); foreach (var hitResult in result) { if (hitResult.Collider is StaticColliderComponent staticBody) { var distance = (vectorNear.XYZ() - hitResult.Point).LengthSquared(); if (distance < minDistance) { minDistance = distance; clickResult.WorldPosition = hitResult.Point; clickResult.ClickedEntity = hitResult.Collider.Entity; } } } return(clickResult.ClickedEntity != null); }
public ClickResult GetClick() { ClickResult click = new ClickResult(); if (m_HitNodeNow == null) { click.ClickStatus = ClickResult.ClickType.ClickNothing; } else { List <int> tempHitTime = new List <int>(m_HitNodeNow.Keys); click.ClickDis = 2000000f; for (int i = 0; i < tempHitTime.Count; i++) { float s = getDistance(Input.mousePosition, m_HitNodeNow[tempHitTime[i]].HitPosi()); float audiotime = CorePlayMusicPlayer.Instance.GetBgmTime(); if (s < click.ClickDis && (audiotime + 0.1f > m_HitNodeNow[tempHitTime[i]].StartHitTime && audiotime - 0.1f < m_HitNodeNow[tempHitTime[i]].EndHitTime)) { click.ClickStatus = ClickResult.ClickType.ClickHitPosition; click.ClickDis = s; click.ClickNo = tempHitTime[i]; } float d = getDistance(Input.mousePosition, m_HitNodeNow[tempHitTime[i]].TimePosition()); if (d < click.ClickDis) { click.ClickStatus = ClickResult.ClickType.ClickHitTime; click.ClickDis = d; click.ClickNo = tempHitTime[i]; } } if (click.ClickDis > 50f) { click.ClickStatus = ClickResult.ClickType.ClickNothing; } } return(click); }
private void lbl_Click(object sender, MouseEventArgs e) { if (!gameOver) { ClickResult aResult = ClickResult.DoNothing; NumberedLabel aLabel = (NumberedLabel)sender; currentMine = currentButtons[aLabel.RowNumber, aLabel.ColumnNumber]; if (e.Button == MouseButtons.Left) { if (lblTimer.Enabled && leftRightClick == 2) { leftRightClick = 0; pairs.Clear(); aResult = mineSweeper.DoubleClickEvent(currentMine.RowNumber, currentMine.ColumnNumber, pairs); lblTimer.Enabled = false; HandleButtonClicked(aResult, -1); return; } leftRightClick = 1; lblTimer.Enabled = true; } else if (e.Button == MouseButtons.Right) { if (lblTimer.Enabled && leftRightClick == 1) { leftRightClick = 0; pairs.Clear(); aResult = mineSweeper.DoubleClickEvent(currentMine.RowNumber, currentMine.ColumnNumber, pairs); lblTimer.Enabled = false; HandleButtonClicked(aResult, -1); return; } leftRightClick = 2; lblTimer.Enabled = true; } } }
// <summary> /// Das Zeichnen der Linie wird jetzt per Maus-Click betätigt /// </summary> /// <param name="pt">Nimmt die Werte von "e.Location"</param> /// <param name="buttons">Bestimmt, ob es ein rechter oder linker Mouse-Klick ist </param> /// <param name="screenHeight">Höhe der PictureBox</param> /// <param name="curElement"></param> /// <param name="statusMessage">Aktuelle Anzeige von dem Toolstrip"Infos vom System"</param> /// <returns></returns> public static ClickResult Linie_ClickHandler(System.Drawing.Point pt, MouseButtons buttons, int screenHeight, ref Curve curElement, out string statusMessage) { statusMessage = string.Empty; ClickResult result = ClickResult.canceled; Point worldPoint = TransformScreen2World(pt, screenHeight); if (buttons != MouseButtons.Right) { if (curElement == null || curElement.GetType() != typeof(Line)) { curElement = new Line(worldPoint, worldPoint); result = ClickResult.created; statusMessage = EndMessage; } else { (curElement as Line).EndPoint = worldPoint; result = ClickResult.finished; statusMessage = StartMessage; } } return(result); }
public override void Update() { // HACK: should probably not rely on accessing this UI component directly. if (_inGameScreenPageHandler == null) { var uiManager = SceneSystem.GetUIManagerFromRootScene(); _inGameScreenPageHandler = uiManager.TopPageHandler as InGameScreenPageHandler; if (_inGameScreenPageHandler == null) { // UI not loaded yet return; } } if (!_inGameScreenPageHandler.IsTopMostScreen) { // Don't process any input, since it's probably in a sub-menu! return; } if (Input.HasMouse) { ClickResult clickResult; Utils.ScreenPositionToWorldPositionRaycast(Input.MousePosition, Camera, this.GetSimulation(), out clickResult); var isMoving = (Input.IsMouseButtonDown(MouseButton.Left) && lastClickResult.Type == ClickType.Ground && clickResult.Type == ClickType.Ground); var isHighlit = (!isMoving && clickResult.Type == ClickType.LootCrate); // Character continuous moving if (isMoving) { lastClickResult.WorldPosition = clickResult.WorldPosition; MoveDestinationEventKey.Broadcast(lastClickResult); } // Object highlighting if (isHighlit) { var modelComponentA = Highlight?.Get <ModelComponent>(); var modelComponentB = clickResult.ClickedEntity.Get <ModelComponent>(); if (modelComponentA != null && modelComponentB != null) { var materialCount = modelComponentB.Model.Materials.Count; modelComponentA.Model = modelComponentB.Model; modelComponentA.Materials.Clear(); for (int i = 0; i < materialCount; i++) { modelComponentA.Materials.Add(i, HighlightMaterial); } modelComponentA.Entity.Transform.UseTRS = false; modelComponentA.Entity.Transform.LocalMatrix = modelComponentB.Entity.Transform.WorldMatrix; } } else { var modelComponentA = Highlight?.Get <ModelComponent>(); if (modelComponentA != null) { modelComponentA.Entity.Transform.LocalMatrix = Matrix.Scaling(0); } } } // Mouse-based camera rotation. Only enabled after you click the screen to lock your cursor, pressing escape cancels this foreach (var pointerEvent in Input.PointerEvents.Where(x => x.EventType == PointerEventType.Pressed)) { ClickResult clickResult; if (Utils.ScreenPositionToWorldPositionRaycast(pointerEvent.Position, Camera, this.GetSimulation(), out clickResult)) { lastClickResult = clickResult; MoveDestinationEventKey.Broadcast(clickResult); if (ClickEffect != null && clickResult.Type == ClickType.Ground) { this.SpawnPrefabInstance(ClickEffect, null, 1.2f, Matrix.RotationQuaternion(Quaternion.BetweenDirections(Vector3.UnitY, clickResult.HitResult.Normal)) * Matrix.Translation(clickResult.WorldPosition)); } } } }
public static bool ScreenPositionToWorldPositionRaycast(Vector2 screenPos, CameraComponent camera, Simulation simulation, out ClickResult clickResult) { Matrix invViewProj = Matrix.Invert(camera.ViewProjectionMatrix); Vector3 sPos; sPos.X = screenPos.X * 2f - 1f; sPos.Y = 1f - screenPos.Y * 2f; sPos.Z = 0f; var vectorNear = Vector3.Transform(sPos, invViewProj); vectorNear /= vectorNear.W; sPos.Z = 1f; var vectorFar = Vector3.Transform(sPos, invViewProj); vectorFar /= vectorFar.W; clickResult.ClickedEntity = null; clickResult.WorldPosition = Vector3.Zero; clickResult.HitResult = new HitResult(); var minDistance = float.PositiveInfinity; List <HitResult> result = new List <HitResult>(); simulation.RaycastPenetrating(vectorNear.XYZ(), vectorFar.XYZ(), result); foreach (var hitResult in result) { var staticBody = hitResult.Collider; if (staticBody != null) { var distance = (vectorNear.XYZ() - hitResult.Point).LengthSquared(); if (distance < minDistance) { minDistance = distance; clickResult.HitResult = hitResult; clickResult.WorldPosition = hitResult.Point; clickResult.ClickedEntity = hitResult.Collider.Entity; } } } return(clickResult.ClickedEntity != null); }
void Update() { CanvasScaler canvas = GameObject.Find("Canvas").GetComponent <CanvasScaler>(); if (m_EiderStatus == EiderStatus.Nomal && m_Editing == false) { #region 普通点 if (AudioStatus == false) { CorePlayMusicPlayer.Instance.PauseMusic(); } if (Input.GetKeyDown(KeyCode.Space)) { AudioStatus = !AudioStatus; if (AudioStatus) { CorePlayMusicPlayer.Instance.PlaySong(m_AudioFileName); } else { CorePlayMusicPlayer.Instance.PauseMusic(); } } if (Input.GetKeyDown(KeyCode.Escape)) { Back(); } if (Input.GetKeyUp(KeyCode.V) && m_CopyList.Count > 0) { PasteList(); } if (Input.GetKeyDown(KeyCode.LeftArrow)) { if (AudioStatus) { AudioStatus = false; CorePlayMusicPlayer.Instance.PauseMusic(); } CorePlayMusicPlayer.Instance.MoveSongTime(-60f / EiderToolPage.Instance.SongObject.SongInfos.BPM / 16); } if (Input.GetKeyDown(KeyCode.RightArrow)) { if (AudioStatus) { AudioStatus = false; CorePlayMusicPlayer.Instance.PauseMusic(); } CorePlayMusicPlayer.Instance.MoveSongTime(60f / EiderToolPage.Instance.SongObject.SongInfos.BPM / 16); } float a = Input.mouseScrollDelta.y; if (a != 0) { if (AudioStatus) { AudioStatus = false; CorePlayMusicPlayer.Instance.PauseMusic(); } CorePlayMusicPlayer.Instance.MoveSongTime(a * 60f / EiderToolPage.Instance.SongObject.SongInfos.BPM / 16); } if (Input.GetMouseButtonDown(0)) { m_SelectStatus = true; ClickResult click = GetClick(); if (click.ClickStatus != ClickResult.ClickType.ClickNothing) { if (AudioStatus) { AudioStatus = false; CorePlayMusicPlayer.Instance.PauseMusic(); } } else { m_SelectStatus = false; } if (click.ClickStatus == ClickResult.ClickType.ClickHitPosition) { m_HitNodeNow[click.ClickNo].ChangeStatus = HitNode.ChangeType.ChangePosition; m_HitNodeNow[click.ClickNo].transform.SetAsLastSibling(); } else if (click.ClickStatus == ClickResult.ClickType.ClickHitTime) { m_HitNodeNow[click.ClickNo].ChangeStatus = HitNode.ChangeType.ChangeTime; m_HitNodeNow[click.ClickNo].transform.SetAsLastSibling(); } } if (Input.GetMouseButtonDown(1)) { m_SelectStatus = true; ClickResult click = GetClick(); if (click.ClickStatus != ClickResult.ClickType.ClickNothing) { if (AudioStatus) { AudioStatus = false; CorePlayMusicPlayer.Instance.PauseMusic(); } m_ChangeHitNode = true; EiderToolPage.Instance.SongObject.HitInfos = DeleteHitNode(click.ClickNo, EiderToolPage.Instance.SongObject.HitInfos); Destroy(m_HitNodeNow[click.ClickNo].gameObject); for (int i = click.ClickNo; i < EiderToolPage.Instance.SongObject.HitInfos.Count + 1; i++) { if (m_HitNodeNow.ContainsKey(i + 1)) { m_HitNodeNow[i] = m_HitNodeNow[i + 1]; } else { m_HitNodeNow.Remove(i); break; } } m_ChangeHitNode = false; } else { m_SelectStatus = false; } } if (Input.GetMouseButtonUp(0)) { m_SelectStatus = false; } if (Input.GetMouseButtonUp(1)) { m_SelectStatus = false; } float audioTimeNow = CorePlayMusicPlayer.Instance.GetBgmTime(); int audioTime = (int)(audioTimeNow * 1000); int ms = audioTime % 1000; int s = (audioTime / 1000) % 60; int m = (audioTime / 1000) / 60; string timeNow = m + ":" + s + "." + ms; transform.Find("PlayAudio").Find("NowTime").Find("Text").GetComponent <Text>().text = timeNow; m_HitTimeStart = (int)(audioTimeNow * 1000 - 6000); m_HitTimeEnd = (int)(audioTimeNow * 1000 + 6000); MoveCibiao(audioTimeNow - m_AudioTimeLast); m_AudioTimeLast = audioTimeNow; if (m_ChangeHitNode == false) { HitNodeStatus(); } if (AudioStatus && m_ChangeSentence) { ResetSentence(); } #endregion } else if (m_EiderStatus == EiderStatus.Select && m_Editing == false) { if (Input.GetMouseButtonDown(0)) { m_selectStart = Input.mousePosition; m_selectEnd = m_selectStart; Down = true; } else if (Input.GetMouseButton(0)) { m_selectEnd = Input.mousePosition; m_SelectResult.position = (m_selectStart + m_selectEnd) / 2f; m_SelectResult.GetComponent <RectTransform>().sizeDelta = new Vector2(Mathf.Abs(m_selectStart.x - m_selectEnd.x) / Screen.width * canvas.referenceResolution.x, Mathf.Abs(m_selectStart.y - m_selectEnd.y) / Screen.height * canvas.referenceResolution.y); } else if (Input.GetMouseButtonUp(0) && Down) { m_selectEnd = Input.mousePosition; m_SelectResult.position = (m_selectStart + m_selectEnd) / 2f; m_SelectPosition = m_SelectResult.position; m_SelectResult.GetComponent <RectTransform>().sizeDelta = new Vector2(Mathf.Abs(m_selectStart.x - m_selectEnd.x) / Screen.width * canvas.referenceResolution.x, Mathf.Abs(m_selectStart.y - m_selectEnd.y) / Screen.height * canvas.referenceResolution.y); GetSelectList(); if (m_SelectList.Count == 0) { m_EiderStatus = EiderStatus.Nomal; } else { m_EiderStatus = EiderStatus.Batch; } Down = false; } } else if (m_EiderStatus == EiderStatus.Batch && m_Editing == false) { if (Input.GetMouseButtonDown(1)) { List <int> tempHitTime = new List <int>(m_SelectList.Keys); for (int i = 0; i < tempHitTime.Count; i++) { EiderToolPage.Instance.SongObject.HitInfos = DeleteHitNode(tempHitTime[0], EiderToolPage.Instance.SongObject.HitInfos); Destroy(m_HitNodeNow[tempHitTime[0]].gameObject); for (int j = tempHitTime[0]; j < EiderToolPage.Instance.SongObject.HitInfos.Count + 1; j++) { if (m_HitNodeNow.ContainsKey(j + 1)) { m_HitNodeNow[j] = m_HitNodeNow[j + 1]; } else { m_HitNodeNow.Remove(j); break; } } } m_SelectList.Clear(); m_SelectTimePosition.Clear(); m_SelectResult.localPosition = Vector3.zero; m_SelectResult.GetComponent <RectTransform>().sizeDelta = Vector2.zero; m_EiderStatus = EiderStatus.Nomal; } else if (Input.GetMouseButtonDown(0)) { Down = true; m_DragStart = Input.mousePosition; m_DragEnd = m_DragStart; } else if (Input.GetMouseButton(0)) { m_DragEnd = Input.mousePosition; BatchDrag(); } else if (Input.GetMouseButtonUp(0)) { m_DragEnd = Input.mousePosition; BatchDrag(); Down = false; m_SelectResult.localPosition = Vector3.zero; m_SelectResult.GetComponent <RectTransform>().sizeDelta = Vector2.zero; m_SelectList.Clear(); m_SelectTimePosition.Clear(); m_EiderStatus = EiderStatus.Nomal; } else if (Input.GetKeyUp(KeyCode.C)) { GetCopyList(); m_SelectResult.localPosition = Vector3.zero; m_SelectResult.GetComponent <RectTransform>().sizeDelta = Vector2.zero; m_SelectList.Clear(); m_SelectTimePosition.Clear(); m_EiderStatus = EiderStatus.Nomal; } } }
public bool Equals(ClickResult other) { return(other is ClickResult result && WorldPosition.Equals(result.WorldPosition) && ClickedEntity == result.ClickedEntity); }
// Update is called once per frame void Update() { if (GameFlags.GameOver) { return; } var mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); var gridpos = GridPositionFromMousePosition(mousePos); if (Input.GetMouseButtonUp(0)) { if (!bombsInitialized) { InitializeBombs(gridpos.x, gridpos.y); } mostRecentClickResult = grid[gridpos.x, gridpos.y].OnClick(); if (mostRecentClickResult == ClickResult.Mine) { StartCoroutine(AnimateGameOver()); return; } var isEmpty = mostRecentClickResult == ClickResult.Clear; if (isEmpty) { RecursivelyClickAdjacentSquares(gridpos.x, gridpos.y); } if (mostRecentClickResult == ClickResult.AlreadyClicked) { if (recentLeftClick == true) { doubleClick = true; } recentLeftClick = true; mostRecentEventTime = Time.time; } } else if (Input.GetMouseButtonUp(1)) { mostRecentClickResult = grid[gridpos.x, gridpos.y].OnFlag(); if (mostRecentClickResult == ClickResult.AlreadyClicked) { recentRightClick = true; mostRecentEventTime = Time.time; } } if (mostRecentEventTime + 100 < Time.time) { recentLeftClick = false; recentRightClick = false; doubleClick = false; } var TwoButtonRecursiveClick = recentLeftClick && recentRightClick && mostRecentClickResult == ClickResult.AlreadyClicked; var OneButtonRecursiveClick = doubleClick && mostRecentClickResult == ClickResult.AlreadyClicked; if (TwoButtonRecursiveClick || OneButtonRecursiveClick) { RecursivelyClickIfFlagged(gridpos.x, gridpos.y); recentLeftClick = false; recentRightClick = false; doubleClick = false; } if (PlayerHasWon()) { GameFlags.PlayerWon = true; GameFlags.GameOver = true; } }
void InitializeBombs(int startX, int startY) { if (bombsInitialized) { return; } var bombCoords = new List <(int x, int y)> { (startX, startY) }; var bombCount = 0; while (bombCount < 99) { var x = Random.Range(0, numCols); var y = Random.Range(0, numRows); if (!bombCoords.Contains((x, y))) { bombCoords.Add((x, y)); grid[x, y].HasBomb = true; bombCount++; UpdateAdjacentCounts(x, y); } } bombsInitialized = true; } void UpdateAdjacentCounts(int pivotX, int pivotY) { if (!grid[pivotX, pivotY].HasBomb) { return; } TraverseAdjacentSquares(pivotX, pivotY, tile => tile.AdjacentBombs++); } (int x, int y) GridPositionFromMousePosition(Vector3 mousePosition) { var position = new Vector2(mousePosition.x, mousePosition.y) - boardOffset; var x = Mathf.FloorToInt(position.x / tileSize); var y = Mathf.FloorToInt(position.y / tileSize); return(x, y); } void TraverseAdjacentSquares(int centerX, int centerY, Action <Tile> job) { var startX = Math.Max(0, centerX - 1); var endX = Math.Min(centerX + 1, numCols - 1); var startY = Math.Max(0, centerY - 1); var endY = Math.Min(centerY + 1, numRows - 1); for (var i = startX; i <= endX; i++) { for (var j = startY; j <= endY; j++) { if (i != centerX || j != centerY) { job.Invoke(grid[i, j]); } } } } void RecursivelyClickIfFlagged(int centerX, int centerY) { var startX = Math.Max(0, centerX - 1); var endX = Math.Min(centerX + 1, numCols - 1); var startY = Math.Max(0, centerY - 1); var endY = Math.Min(centerY + 1, numRows - 1); var flaggedCount = 0; for (var i = startX; i <= endX; i++) { for (var j = startY; j <= endY; j++) { if (i != centerX || j != centerY) { if (grid[i, j].IsFlagged) { flaggedCount++; } } } } if (grid[centerX, centerY].AdjacentBombs == flaggedCount) { RecursivelyClickAdjacentSquares(centerX, centerY); } } void RecursivelyClickAdjacentSquares(int centerX, int centerY) { var startX = Math.Max(0, centerX - 1); var endX = Math.Min(centerX + 1, numCols - 1); var startY = Math.Max(0, centerY - 1); var endY = Math.Min(centerY + 1, numRows - 1); for (var i = startX; i <= endX; i++) { for (var j = startY; j <= endY; j++) { if (i != centerX || j != centerY && !grid[i, j].IsClicked) { mostRecentClickResult = grid[i, j].OnClick(); if (mostRecentClickResult == ClickResult.Mine) { StartCoroutine(AnimateGameOver()); return; } var isEmpty = mostRecentClickResult == ClickResult.Clear; if (isEmpty) { RecursivelyClickAdjacentSquares(i, j); } } } } } IEnumerator AnimateGameOver() { for (var i = 0; i < numCols; i++) { for (var j = 0; j < numRows; j++) { if (grid[i, j].HasBomb) { grid[i, j].OnClick(); yield return(new WaitForSeconds(0.03f)); } } } GameFlags.GameOver = true; } bool PlayerHasWon() { for (var i = 0; i < numCols; i++) { for (var j = 0; j < numRows; j++) { if (!grid[i, j].HasBomb && !grid[i, j].IsClicked) { return(false); } } } return(true); } }
public override void Update() { if (Input.HasMouse) { ClickResult clickResult; Utils.ScreenPositionToWorldPositionRaycast(Input.MousePosition, Camera, this.GetSimulation(), out clickResult); bool isMoving = (Input.IsMouseButtonDown(MouseButton.Left) && lastClickResult.Type == ClickType.Ground && clickResult.Type == ClickType.Ground); bool isHighlit = (!isMoving && clickResult.Type == ClickType.Container); // Character continuous moving if (isMoving) { lastClickResult.WorldPosition = clickResult.WorldPosition; MoveDestinationEventKey.Broadcast(lastClickResult); } // Object highlighting if (isHighlit) { ModelComponent modelComponentA = Highlight?.Get <ModelComponent>(); ModelComponent modelComponentB = clickResult.ClickedEntity.Get <ModelComponent>(); if (modelComponentA != null && modelComponentB != null) { int materialCount = modelComponentB.Model.Materials.Count; modelComponentA.Model = modelComponentB.Model; modelComponentA.Materials.Clear(); for (int i = 0; i < materialCount; i++) { modelComponentA.Materials.Add(i, HighlightMaterial); } modelComponentA.Entity.Transform.UseTRS = false; modelComponentA.Entity.Transform.LocalMatrix = modelComponentB.Entity.Transform.WorldMatrix; } } else { ModelComponent modelComponentA = Highlight?.Get <ModelComponent>(); if (modelComponentA != null) { modelComponentA.Entity.Transform.LocalMatrix = Matrix.Scaling(0); } } } // Mouse-based camera rotation. Only enabled after you click the screen to lock your cursor, pressing escape cancels this foreach (PointerEvent pointerEvent in Input.PointerEvents.Where(x => x.EventType == PointerEventType.Pressed)) { ClickResult clickResult; if (Utils.ScreenPositionToWorldPositionRaycast(pointerEvent.Position, Camera, this.GetSimulation(), out clickResult)) { lastClickResult = clickResult; MoveDestinationEventKey.Broadcast(clickResult); if (ClickEffect != null && clickResult.Type == ClickType.Ground) { this.SpawnPrefabInstance(ClickEffect, null, 1.2f, Matrix.RotationQuaternion(Quaternion.BetweenDirections(Vector3.UnitY, clickResult.HitResult.Normal)) * Matrix.Translation(clickResult.WorldPosition)); } } } }
public void Forms_Disabled_and_ReadOnly() { Browser b = new Browser(); b.SetContent(Helper.GetFromResources("SimpleBrowser.UnitTests.SampleDocs.HTML5Elements.htm")); var textarea = b.Find("readonlytextarea"); textarea.Value = "some value"; Assert.IsTrue(textarea.Value == "readme textarea"); Assert.IsTrue(textarea.ReadOnly); Assert.IsFalse(textarea.Disabled); textarea = b.Find("disabledtextarea"); textarea.Value = "some value"; Assert.IsTrue(textarea.Value == "disableme textarea"); Assert.IsFalse(textarea.ReadOnly); Assert.IsTrue(textarea.Disabled); var textinput = b.Find("readonlytext"); textinput.Value = "some value"; Assert.IsTrue(textinput.Value == "readme"); Assert.IsTrue(textinput.ReadOnly); Assert.IsFalse(textinput.Disabled); textinput = b.Find("disabledtext"); textinput.Value = "some value"; Assert.IsTrue(textinput.Value == "disableme"); Assert.IsFalse(textinput.ReadOnly); Assert.IsTrue(textinput.Disabled); var checkbox = b.Find("disabledcheck"); Assert.IsTrue(checkbox.Disabled); var radio = b.Find("disabledradio"); Assert.IsTrue(radio.Disabled); HtmlResult disabledSubmit = b.Find("ds"); Assert.IsTrue(disabledSubmit.Disabled); ClickResult clickResult = disabledSubmit.Click(); Assert.IsTrue(clickResult == ClickResult.SucceededNoOp); HtmlResult submit = b.Find("es"); Assert.IsFalse(submit.Disabled); clickResult = submit.Click(); Assert.IsTrue(clickResult == ClickResult.SucceededNavigationComplete); // Check to make sure the form submitted. var names = b.Select("td.desc"); var values = b.Select("td.val"); Assert.IsTrue(names.Count() == values.Count()); Assert.IsTrue(values.Where(e => e.Value == "readme textarea").FirstOrDefault() != null); // Now, validate that the disabled fields were not. Assert.IsTrue(values.Where(e => e.Value == "disableme textarea").FirstOrDefault() == null); Assert.IsTrue(values.Where(e => e.Value == "disableme").FirstOrDefault() == null); Assert.IsTrue(values.Where(e => e.Value == "disabledcheck").FirstOrDefault() == null); Assert.IsTrue(values.Where(e => e.Value == "disabledradio").FirstOrDefault() == null); Assert.IsTrue(values.Where(e => e.Value == "disabledselect").FirstOrDefault() == null); }