Ejemplo n.º 1
0
        protected override void OnMouseDown(MouseButtonArgs e)
        {
            if (CurrentMouseWorldPositionIsValid)
            {
                var translatedPos = (new Vector4(CurrentMouseWorldPosition, 1) * BoardTranslationMatrix).Xyz;
                Console.WriteLine(translatedPos);
                var pos = translatedPos.Round().Xy.ToVector2i();

                if (!Board.PositionInMap(pos))
                {
                    return;
                }

                //ScaleAnim.Start();
                var selector = BoardActor.GetComponent <SceneComponent>("MarbleSelector");

                if (MoveTween.Enabled || RemoveTween.Enabled || CreateTween.Enabled)
                {
                    return;
                }

                if (Board[pos]?.Color == MarbleColor.BombJoker)
                {
                    return;
                }

                var marble = Board[pos];
                Log.Verbose("Clicked: {position}. Marble: {marble}", pos, marble);
                if (marble != null)
                {
                    SelectedMarble = marble;
                    selector.RelativeTranslation = new Vector3(pos.X, pos.Y, selector.RelativeTranslation.Z);
                    selector.Visible             = true;
                    AudioManager.Default.PlayAsync("Sounds/marble-select.wav");
                }
                else
                {
                    if (SelectedMarble != null)
                    {
                        var path = Board.FindPath(SelectedMarble, pos);
                        if (path != null && path.Count > 0)
                        {
                            CurrentPath = path;
                            var moveStepDuration = TimeSpan.FromSeconds(0.1);
                            //var moveStepDuration = TimeSpan.FromSeconds(2);
                            MoveTween.Duration = moveStepDuration.Multiply(path.Count);
                            MoveTween.Start();
                            AudioManager.Default.PlayAsync("Sounds/marble-moving.wav");
                            selector.Visible = false;
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public MarbleBoard()
        {
            Width       = 9;
            Height      = 9;
            MarbleArray = new Marble[Width, Height];

            PathFinding = new PathFinder
            {
                Map = new WayPointMap(this),
            };
        }
Ejemplo n.º 3
0
        private Material GetMaterial(Marble marble)
        {
            var material = new Material()
            {
                Color            = GetMaterialColorShader(marble.Color1),
                Ambient          = 0.5f,
                Shininess        = 32.0f,
                SpecularStrength = 0.5f,
                CastShadow       = true,
            };

            material.SetDefine("OVERRIDE_GET_MATERIAL_DIFFUSE_FILE", "marble.material.glsl");
            material.SetDefine("FRAG_HEADER_FILE", "marble.params.glsl");
            return(material);
        }
Ejemplo n.º 4
0
        private Vector3 GetMarblePos(Marble marble)
        {
            if (marble.OnBoard || Board.PreviewMode == MarblePreview.Board)
            {
                return(GetMarblePos(marble.OnBoard ? marble.Position : marble.Position));
            }

            if (Board.PreviewMode == MarblePreview.Side)
            {
                var idx = Board.NextMarbles.IndexOf(marble);
                return(new Vector3(0, idx, MarbleZ));
            }
            else
            {
                return(Vector3.Zero);
            }
        }
Ejemplo n.º 5
0
        private (Vector3 Position, Quaternion Rotate) GetPathPosition(Marble marble)
        {
            var steps     = CurrentPath.Count - 1;
            var scaledPos = MoveTween.ScaledPosition * steps;
            var step      = (int)MathF.Floor(scaledPos);

            // Prevent rare exception
            step = Math.Min(step, CurrentPath.Count - 2);

            float subPos       = scaledPos - step;
            var   fromPos      = CurrentPath[step];
            var   toPos        = CurrentPath[step + 1];
            var   direction    = toPos - fromPos;
            var   subDirection = new Vector3(direction.X, direction.Y, 0.0f) * subPos;
            var   resultPos    = GetMarblePos(fromPos) + subDirection;
            var   resultRotate = new Vector3(direction.Y, direction.X, 0) * (subPos * 0.5f);

            return(resultPos, resultRotate.ToQuaternion());
        }