Пример #1
0
        public void Initialize()
        {
            Native.Document.body.style.padding = "0";
            Native.Document.body.style.margin  = "0";

            var Images       = new Dictionary <string, IHTMLImage>();
            var ImagesLoaded = default(Action);
            Func <string, IHTMLImage> CloneImage = name => (IHTMLImage)Images[name].cloneNode(false);

            var Zoom = Data.Zoom.ToDouble();

            var ControlSize = new ZoomedPoint
            {
                Z = Zoom,
                X = Data.ControlSize.Xint,
                Y = Data.ControlSize.Yint
            };

            Control.style.SetSize(ControlSize.ZoomedXint, ControlSize.ZoomedYint);
            Control.style.backgroundColor = Data.BackgroundColor;
            Control.style.color           = Data.TextColor;
            Control.AttachAsNextOrToDocument(null);
            Control.style.position = IStyle.PositionEnum.relative;

            Action LoadImages =
                delegate
            {
                Data.Sprites.ForEach(
                    i =>
                {
                    Images[i.Value] = i.ImageValue;
                }
                    );

                ImagesLoaded();
            };

            ImagesLoaded =
                delegate
            {
                var ClientRectPos = new ZoomedPoint
                {
                    Z = Zoom,
                    X = Data.ClientRect.From.Xint,
                    Y = Data.ClientRect.From.Yint
                };

                var ClientRectSize = new ZoomedPoint
                {
                    Z = Zoom,
                    X = Data.ClientRect.Size.Xint,
                    Y = Data.ClientRect.Size.Yint
                };

                var ContentLayer = new IHTMLDiv();

                ContentLayer.style.backgroundColor = Data.ClientRectColor;
                ContentLayer.style.overflow        = IStyle.OverflowEnum.hidden;

                ContentLayer.style.SetLocation(
                    ClientRectPos.ZoomedXint,
                    ClientRectPos.ZoomedYint,
                    ClientRectSize.ZoomedXint,
                    ClientRectSize.ZoomedYint
                    );
                ContentLayer.AttachTo(Control);


                //var r1 = CloneImage("room 001").AttachTo(ContentLayer);

                //r1.style.SetLocation(0, 0, ClientRectSize.ZoomedXint, ClientRectSize.ZoomedYint);

                Func <string, IHTMLImage> CreateRoomImage =
                    name =>
                {
                    var r2 = CloneImage(name);

                    r2.AttachTo(ContentLayer);

                    var r2_Zoom = new ZoomedPoint
                    {
                        Z = Zoom,
                        X = Images[name].width,
                        Y = Images[name].height
                    };

                    r2.Hide();
                    r2.style.SetLocation(0, 0, r2_Zoom.ZoomedXint, r2_Zoom.ZoomedYint);

                    return(r2);
                };

                var KnownRooms = new List <IHTMLImage>();

                KnownRooms.AddRange(
                    new []
                {
                    CreateRoomImage("room 001"),
                    CreateRoomImage("room 002"),
                    CreateRoomImage("room 024"),
                    CreateRoomImage("room 031"),
                    CreateRoomImage("room 032"),
                }
                    );

                var CurrentRoom = KnownRooms.Random();

                CurrentRoom.Show();

                Action <double> SetClipTo =
                    percentage =>
                {
                    var x = (ClientRectSize.ZoomedX * percentage / 2).ToInt32();
                    var y = (ClientRectSize.ZoomedY * percentage / 2).ToInt32();

                    var clip = new CSSClip
                    {
                        Left   = x,
                        Top    = y,
                        Right  = (ClientRectSize.ZoomedX - x).ToInt32(),
                        Bottom = (ClientRectSize.ZoomedY - y).ToInt32()
                    };

                    Console.WriteLine(percentage + " clip: " + clip);

                    ContentLayer.style.clip = clip;
                };

                //ContentLayer.style.clip = "rect(15px auto auto 15px)";

                //var timer = new ScriptCoreLib.JavaScript.Runtime.Timer(
                //    delegate
                //    {
                //        var p = (Math.Sin(DateTime.Now.Ticks) + 1) / 2;

                //        Console.WriteLine("p: " + p);
                //        SetClipTo(p);
                //    }
                //    , 0, 200);

                //var pc = 50;
                //var px = 200;

                //Action<double> pChange = i => { px += (i * pc).ToInt32(); timer.StartInterval(px); };

                Action <Action, Action> FadeOut =
                    (Starting, Stopping) =>
                    new LinearTimeTween
                {
                    Length    = 300,
                    Starting  = Starting,
                    Stopping  = Stopping,
                    Changed   = t => SetClipTo(t),
                    Percision = 20
                }.Start();

                Action <Action, Action> FadeIn =
                    (Starting, Stopping) =>
                    new LinearTimeTween
                {
                    Length    = 300,
                    Starting  = Starting,
                    Stopping  = Stopping,
                    Changed   = t => SetClipTo(1d - t),
                    Percision = 20
                }.Start();

                var kbd = new KeyboardEvents {
                    Enabled = true
                };

                kbd.left += ev =>
                            FadeOut(
                    () => kbd.Enabled = false,
                    () =>
                {
                    CurrentRoom.Hide();
                    CurrentRoom = KnownRooms.Previous(i => CurrentRoom == i);
                    CurrentRoom.Show();

                    //r1.Hide();
                    //r2.Show();

                    FadeIn(null, () => kbd.Enabled = true);
                }
                    );

                kbd.right += ev =>
                             FadeOut(
                    () => kbd.Enabled = false,
                    () =>
                {
                    CurrentRoom.Hide();
                    CurrentRoom = KnownRooms.Next(i => CurrentRoom == i);
                    CurrentRoom.Show();

                    FadeIn(null, () => kbd.Enabled = true);
                }
                    );


                Native.Document.onkeydown += kbd;

                Native.Document.onmousedown +=
                    ev =>
                    FadeOut(
                        () => kbd.Enabled = false,
                        () =>
                {
                    CurrentRoom.Hide();
                    CurrentRoom = KnownRooms.Next(i => CurrentRoom == i);
                    CurrentRoom.Show();

                    FadeIn(null, () => kbd.Enabled = true);
                }
                        );

                /*
                 * var div1 = SpawnDiv(Images, false);
                 *
                 * div1.style.backgroundColor = Color.Yellow;
                 * div1.AttachTo(ClientRect);
                 * div1.style.SetLocation(4, 4, 100, 100);
                 *
                 * var div2 = SpawnDiv(Images, true);
                 *
                 * div2.style.backgroundColor = Color.Gray;
                 * div2.AttachTo(ClientRect);
                 * div2.style.SetLocation(100, 4, 100, 100);
                 *
                 */
            };

            LoadImages();
        }