Example #1
0
        // I/F
        public void ReleaseMarker(TimeRulerMarker marker)
        {
            if (marker == null)
            {
                throw new ArgumentNullException("marker");
            }

            // 登録を解除します。
            markers.Remove(marker.Id);
        }
Example #2
0
        // I/F
        public TimeRulerMarker CreateMarker()
        {
            // 登録数を ID にします。
            int id = ++markerIdCounter;

            // TimeRulerMarker を生成して登録します。
            var marker = new TimeRulerMarker(this, id);

            markers[id] = marker;

            return(marker);
        }
Example #3
0
        /// <summary>
        /// 指定された TimeRulerMarker に対する計測を終了させます。
        /// </summary>
        /// <param name="marker">計測を終了させる TimeRulerMarker。</param>
        internal void End(TimeRulerMarker marker)
        {
            // currentFrameLog の同期をとるために自身をロックします。
            lock (this)
            {
                // 対象の Bar を取得します。
                var bar = currentFrameLog.Bars[marker.BarIndex];

                // 呼び出しスタックから POP して MarkerLog のインデックスを取得します。
                var markerLogIndex = bar.MarkerLogIndexStack[--bar.MarkerLogIndexStackCount];

                // インデックスの示す MarkerLog と ID が一致しないならば不正な順序での呼び出しです。
                if (bar.MarkerLogs[markerLogIndex].Id != marker.Id)
                {
                    throw new InvalidOperationException("Invalid Begin/End call sequence.");
                }

                // 終了時間を記録します。
                bar.MarkerLogs[markerLogIndex].EndTime = (float)stopwatch.Elapsed.TotalMilliseconds;
            }
        }
Example #4
0
        /// <summary>
        /// 指定された TimeRulerMarker に対する計測を開始させます。
        /// </summary>
        /// <param name="marker">計測を開始させる TimeRulerMarker。</param>
        internal void Begin(TimeRulerMarker marker)
        {
            // currentFrameLog の同期をとるために自身をロックします。
            lock (this)
            {
                // 対象の Bar を取得します。
                var bar = currentFrameLog.Bars[marker.BarIndex];

                // MarkerLog を追加します。
                bar.MarkerLogs[bar.MarkerLogCount].Id        = marker.Id;
                bar.MarkerLogs[bar.MarkerLogCount].BeginTime = (float)stopwatch.Elapsed.TotalMilliseconds;
                bar.MarkerLogs[bar.MarkerLogCount].EndTime   = float.NaN;
                bar.MarkerLogs[bar.MarkerLogCount].Color     = marker.Color;

                // MarkerLog のインデックスを呼び出しスタックに入れます。
                bar.MarkerLogIndexStack[bar.MarkerLogIndexStackCount++] = bar.MarkerLogCount;

                // MarkerLog 数を増やします。
                bar.MarkerLogCount++;
            }
        }
Example #5
0
        protected override void Initialize()
        {
            // UIManager を初期化して登録します。
            uiManager = new UIManager(this);
            uiManager.ScreenFactory = CreateScreenFactory();
            Components.Add(uiManager);

            var fpsCounter = new FpsCounter(this);
            fpsCounter.Content.RootDirectory = "Content";
            fpsCounter.HorizontalAlignment = DebugHorizontalAlignment.Right;
            fpsCounter.SampleSpan = TimeSpan.FromSeconds(2);
            Components.Add(fpsCounter);

            timeRuler = new TimeRuler(this);
            Components.Add(timeRuler);

            updateMarker = timeRuler.CreateMarker();
            updateMarker.Name = "Update";
            updateMarker.BarIndex = 0;
            updateMarker.Color = Color.Cyan;

            drawMarker = timeRuler.CreateMarker();
            drawMarker.Name = "Draw";
            drawMarker.BarIndex = 1;
            drawMarker.Color = Color.Yellow;

            // StorageManager を登録します。
            storageManager = new StorageManager(this);
            storageManager.ContainerSelected += (s, c) =>
            {
                // IBoxService が登録されているならば BoxIntegration を初期化します。
                if (boxManager != null) BoxIntegration.Initialize();
            };
            Components.Add(storageManager);

            // StorageBlockManager を登録します。
            storageBlockManager = new StorageBlockManager(this);

            // AsyncTaskManager を登録します。
            asyncTaskManager = new AsyncTaskManager(this);
            Components.Add(asyncTaskManager);

            // IBoxService を登録します。
            var assemblyFile = "Willcraftia.Net.Box.BlockViewer.ApiKey.dll";
            var apiKeyClassName = "Willcraftia.Net.Box.BlockViewer.ApiKey";
            try
            {
                boxManager = new BoxManager(assemblyFile, apiKeyClassName);
                Services.AddService(typeof(IBoxService), boxManager);

                BoxIntegration = new BoxIntegration(this);
            }
            catch
            {
                // IBoxService を無効とします。
            }

            // マウス カーソルを可視にします。
            IsMouseVisible = true;

            base.Initialize();
        }
Example #6
0
        protected override void Initialize()
        {
            var fpsCounter = new FpsCounter(this);
            fpsCounter.Content.RootDirectory = "Content";
            fpsCounter.HorizontalAlignment = DebugHorizontalAlignment.Right;
            fpsCounter.SampleSpan = TimeSpan.FromSeconds(2);
            Components.Add(fpsCounter);

            timeRuler = new TimeRuler(this);
            Components.Add(timeRuler);

            updateMarker = timeRuler.CreateMarker();
            updateMarker.Name = "Draw";
            updateMarker.BarIndex = 0;
            updateMarker.Color = Color.Cyan;

            drawMarker = timeRuler.CreateMarker();
            drawMarker.Name = "Draw";
            drawMarker.BarIndex = 1;
            drawMarker.Color = Color.Yellow;

            // テスト用にメモリ上で Block データを作ります。
            //var block = CreateFullFilledBlock();
            var block = CreateOctahedronLikeBlock();
            using (var stream = new MemoryStream())
            {
                blockSerializer.Serialize(stream, block);
                blockData = Encoding.ASCII.GetString(stream.ToArray());
            }

            UpdateStatusString();

            base.Initialize();
        }
Example #7
0
        /// <summary>
        /// 指定された TimeRulerMarker に対する計測を終了させます。
        /// </summary>
        /// <param name="marker">計測を終了させる TimeRulerMarker。</param>
        internal void End(TimeRulerMarker marker)
        {
            // currentFrameLog の同期をとるために自身をロックします。
            lock (this)
            {
                // 対象の Bar を取得します。
                var bar = currentFrameLog.Bars[marker.BarIndex];

                // 呼び出しスタックから POP して MarkerLog のインデックスを取得します。
                var markerLogIndex = bar.MarkerLogIndexStack[--bar.MarkerLogIndexStackCount];

                // インデックスの示す MarkerLog と ID が一致しないならば不正な順序での呼び出しです。
                if (bar.MarkerLogs[markerLogIndex].Id != marker.Id) throw new InvalidOperationException("Invalid Begin/End call sequence.");

                // 終了時間を記録します。
                bar.MarkerLogs[markerLogIndex].EndTime = (float) stopwatch.Elapsed.TotalMilliseconds;
            }
        }
Example #8
0
        /// <summary>
        /// 指定された TimeRulerMarker に対する計測を開始させます。
        /// </summary>
        /// <param name="marker">計測を開始させる TimeRulerMarker。</param>
        internal void Begin(TimeRulerMarker marker)
        {
            // currentFrameLog の同期をとるために自身をロックします。
            lock (this)
            {
                // 対象の Bar を取得します。
                var bar = currentFrameLog.Bars[marker.BarIndex];

                // MarkerLog を追加します。
                bar.MarkerLogs[bar.MarkerLogCount].Id = marker.Id;
                bar.MarkerLogs[bar.MarkerLogCount].BeginTime = (float) stopwatch.Elapsed.TotalMilliseconds;
                bar.MarkerLogs[bar.MarkerLogCount].EndTime = float.NaN;
                bar.MarkerLogs[bar.MarkerLogCount].Color = marker.Color;

                // MarkerLog のインデックスを呼び出しスタックに入れます。
                bar.MarkerLogIndexStack[bar.MarkerLogIndexStackCount++] = bar.MarkerLogCount;

                // MarkerLog 数を増やします。
                bar.MarkerLogCount++;
            }
        }
Example #9
0
        // I/F
        public void ReleaseMarker(TimeRulerMarker marker)
        {
            if (marker == null) throw new ArgumentNullException("marker");

            // 登録を解除します。
            markers.Remove(marker.Id);
        }
Example #10
0
        // I/F
        public TimeRulerMarker CreateMarker()
        {
            // 登録数を ID にします。
            int id = ++markerIdCounter;

            // TimeRulerMarker を生成して登録します。
            var marker = new TimeRulerMarker(this, id);
            markers[id] = marker;

            return marker;
        }
Example #11
0
        protected override void Initialize()
        {
            // マウス カーソルを可視にします。
            IsMouseVisible = true;

            // UIManager を初期化して登録します。
            uiManager = new UIManager(this);
            uiManager.ScreenFactory = CreateScreenFactory();
            Components.Add(uiManager);

            // StorageManager を登録します。
            storageManager = new StorageManager(this);
            Components.Add(storageManager);

            // StorageBlockManager を登録します。
            storageBlockManager = new StorageBlockManager(this);

            #region Debug

            var fpsCounter = new FpsCounter(this);
            fpsCounter.Content.RootDirectory = "Content";
            fpsCounter.HorizontalAlignment = DebugHorizontalAlignment.Left;
            fpsCounter.SampleSpan = TimeSpan.FromSeconds(2);
            Components.Add(fpsCounter);

            timeRuler = new TimeRuler(this);
            Components.Add(timeRuler);

            updateMarker = timeRuler.CreateMarker();
            updateMarker.Name = "Update";
            updateMarker.BarIndex = 0;
            updateMarker.Color = Color.Cyan;

            drawMarker = timeRuler.CreateMarker();
            drawMarker.Name = "Draw";
            drawMarker.BarIndex = 1;
            drawMarker.Color = Color.Yellow;

            #endregion

            base.Initialize();
        }