// I/F public void ReleaseMarker(TimeRulerMarker marker) { if (marker == null) { throw new ArgumentNullException("marker"); } // 登録を解除します。 markers.Remove(marker.Id); }
// I/F public TimeRulerMarker CreateMarker() { // 登録数を ID にします。 int id = ++markerIdCounter; // TimeRulerMarker を生成して登録します。 var marker = new TimeRulerMarker(this, id); markers[id] = marker; return(marker); }
/// <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; } }
/// <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++; } }
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(); }
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(); }
/// <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; } }
/// <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++; } }
// I/F public void ReleaseMarker(TimeRulerMarker marker) { if (marker == null) throw new ArgumentNullException("marker"); // 登録を解除します。 markers.Remove(marker.Id); }
// I/F public TimeRulerMarker CreateMarker() { // 登録数を ID にします。 int id = ++markerIdCounter; // TimeRulerMarker を生成して登録します。 var marker = new TimeRulerMarker(this, id); markers[id] = marker; return marker; }
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(); }