Пример #1
0
        /// <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);
        }
Пример #2
0
        private void SetClickResult(ClickResult clickResult)
        {
            var t = pointerUpTask;

            pointerUpTask = new TaskCompletionSource <ClickResult>();
            t.TrySetResult(clickResult);
        }
Пример #3
0
 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;
         }
     }
 }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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;
                }
            }
        }
Пример #7
0
 /*"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;
         }
     }
 }
Пример #8
0
        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);
        }
Пример #9
0
        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;
            }
        }
Пример #10
0
        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);
        }
Пример #11
0
    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);
    }
Пример #12
0
 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;
         }
     }
 }
Пример #13
0
        // <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);
        }
Пример #14
0
        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));
                    }
                }
            }
        }
Пример #15
0
        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);
        }
Пример #16
0
    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;
            }
        }
    }
Пример #17
0
 public bool Equals(ClickResult other)
 {
     return(other is ClickResult result &&
            WorldPosition.Equals(result.WorldPosition) &&
            ClickedEntity == result.ClickedEntity);
 }
Пример #18
0
    // 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;
        }
    }
Пример #19
0
    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);
    }
}
Пример #20
0
        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));
                    }
                }
            }
        }
Пример #21
0
        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);
        }