public override void OnObjectCreated(DreamObject dreamObject, DreamProcArguments creationArguments) { base.OnObjectCreated(dreamObject, creationArguments); _dreamManager.WorldContentsList = dreamObject.GetVariable("contents").GetValueAsDreamList(); DreamValue log = dreamObject.ObjectDefinition.Variables["log"]; dreamObject.SetVariable("log", log); DreamValue fps = dreamObject.ObjectDefinition.Variables["fps"]; if (fps.Value != null) { _cfg.SetCVar(CVars.NetTickrate, fps.GetValueAsInteger()); } DreamValue view = dreamObject.ObjectDefinition.Variables["view"]; if (view.TryGetValueAsString(out string viewString)) { _viewRange = new ViewRange(viewString); } else { _viewRange = new ViewRange(view.GetValueAsInteger()); } }
public void OnObjectCreated(DreamObject dreamObject, DreamProcArguments creationArguments) { ParentType?.OnObjectCreated(dreamObject, creationArguments); _dreamManager.WorldContentsList = dreamObject.GetVariable("contents").GetValueAsDreamList(); DreamValue log = dreamObject.ObjectDefinition.Variables["log"]; dreamObject.SetVariable("log", log); DreamValue fps = dreamObject.ObjectDefinition.Variables["fps"]; if (fps.TryGetValueAsInteger(out var fpsValue)) { _cfg.SetCVar(CVars.NetTickrate, fpsValue); } DreamValue view = dreamObject.ObjectDefinition.Variables["view"]; if (view.TryGetValueAsString(out string viewString)) { _viewRange = new ViewRange(viewString); } else { if (!view.TryGetValueAsInteger(out var viewInt)) { Logger.Warning("world.view did not contain a valid value. A default of 5 is being used."); viewInt = 5; } _viewRange = new ViewRange(viewInt); } }
private void UpdateTable(ref ViewRange viewRange) { _table.DisposeChildren(); _table.LockChildrenRecursive(); UpdateTableInner(ref viewRange); _table.UnlockChildrenRecursive(); _table.PerformLayout(); }
private void UpdateTimeline(ref ViewRange viewRange) { var container = _timeline.EventsContainer; // Clear previous events container.DisposeChildren(); container.LockChildrenRecursive(); _timeline.Height = UpdateTimelineInner(ref viewRange); container.UnlockChildrenRecursive(); container.PerformLayout(); }
internal void Invalidate(CellRange rng) { // negative parameters mean 'whole row' or 'whole column' if (rng.Row > -1 || rng.Column > -1)// Keep the range as invalid when rng.IsEmpty so that it can remove all the cells after a row was removed, otherwise it can leave non used cells because Rows.Count is less than there was in previous layout. { if (rng.Row < 0) { rng.Row = 0; rng.Row2 = Rows.Count - 1; } if (rng.Column < 0) { rng.Column = 0; rng.Column2 = Columns.Count - 1; } } // optimization (especially important when setting unbound values) if (rng.IsValid && !ViewRange.Intersects(rng) && !Columns.IsFrozen(rng.LeftColumn) && !Rows.IsFrozen(rng.TopRow)) { return; } // remove cells so they can be re-created List <CellRange> removeCells = new List <CellRange>(); foreach (var rg in _cells.Keys) { if (!rg.IsValid || !rng.IsValid || rg.Intersects(rng)) { removeCells.Add(rg); } } for (int i = 0; i < removeCells.Count; i++) { RemoveCell(removeCells[i]); } if (removeCells.Count == 0) { InvalidateArrange(); UpdateViewRange(); } }
public Result <Activity> PublishActivity(SnsUser user, ViewRange range, string content) { if (user == null || string.IsNullOrWhiteSpace(user.Id)) { return(Result.Error <Activity>("当前用户不存在,请确认是否登录!")); } if (string.IsNullOrWhiteSpace(content)) { return(Result.Error <Activity>("您不可以发布空内容!")); } var sql = "insert into T_Activitys(Id,UserId,Content,CreateTime,ViewRange) values(@Id,@UserId,@Content,@CreateTime,@ViewRange)"; var createTime = DateTime.Now; var param = new { Id = Utils.NewGuid, UserId = user.Id, Content = content, CreateTime = createTime, ViewRange = (int)range }; var activity = new Activity { Id = param.Id, Content = content, ViewRange = range, CreateTime = createTime, User = user, ViewCount = 0, LikeCount = 0 }; return(connection.Transaction("发布", (conn, trans) => { conn.Execute(sql, param, trans); SnsUserHelper.UpdateCount(conn, trans, user.Id); }, activity)); }
private void UpdateTableInner(ref ViewRange viewRange) { if (_events.Count == 0) { return; } var data = _events.Get(_mainChart.SelectedSampleIndex); if (data == null || data.Length == 0) { return; } float totalTimeMs = _mainChart.SelectedSample; // Add rows var rowColor2 = Style.Current.Background * 1.4f; for (int j = 0; j < data.Length; j++) { var events = data[j].Events; for (int i = 0; i < events.Length; i++) { var e = events[i]; var time = Math.Max(e.End - e.Start, MinEventTimeMs); // Reject events outside the view range if (viewRange.SkipEvent(ref e)) { continue; } // Count sub-events time double subEventsTimeTotal = 0; for (int k = i + 1; k < events.Length; k++) { var sub = events[k]; if (sub.Depth == e.Depth + 1) { subEventsTimeTotal += Math.Max(sub.End - sub.Start, MinEventTimeMs); } else if (sub.Depth <= e.Depth) { break; } } var row = new Row { Values = new object[] { // Event e.Name, // Total (%) (int)(time / totalTimeMs * 1000.0f) / 10.0f, // Self (%) (int)((time - subEventsTimeTotal) / time * 1000.0f) / 10.0f, // Time ms (float)((time * 10000.0f) / 10000.0f), // Self ms (float)(((time - subEventsTimeTotal) * 10000.0f) / 10000.0f), }, Depth = e.Depth, Width = _table.Width, Parent = _table, }; if (i % 2 == 0) { row.BackgroundColor = rowColor2; } } } }
private float UpdateTimelineInner(ref ViewRange viewRange) { if (_events.Count == 0) { return(0); } var data = _events.Get(_mainChart.SelectedSampleIndex); if (data == null || data.Length == 0) { return(0); } // Find the first event start time (for the timeline start time) double startTime = data[0].Events[0].Start; for (int i = 1; i < data.Length; i++) { startTime = Math.Min(startTime, data[i].Events[0].Start); } var container = _timeline.EventsContainer; // Create timeline track per thread int depthOffset = 0; for (int i = 0; i < data.Length; i++) { var events = data[i].Events; // Check maximum depth int maxDepth = -1; for (int j = 0; j < events.Length; j++) { var e = events[j]; // Reject events outside the view range if (viewRange.SkipEvent(ref e)) { continue; } maxDepth = Mathf.Max(maxDepth, e.Depth); } // Skip empty tracks if (maxDepth == -1) { continue; } // Add thread label float xOffset = 90; var label = new Timeline.TrackLabel { Bounds = new Rectangle(0, depthOffset * Timeline.Event.DefaultHeight, xOffset, (maxDepth + 2) * Timeline.Event.DefaultHeight), Name = data[i].Name, BackgroundColor = Style.Current.Background * 1.1f, Parent = container, }; // Add events for (int j = 0; j < events.Length; j++) { var e = events[j]; if (e.Depth == 0) { // Reject events outside the view range if (viewRange.SkipEvent(ref e)) { continue; } AddEvent(startTime, maxDepth, xOffset, depthOffset, j, events, container); } } depthOffset += maxDepth + 2; } return(Timeline.Event.DefaultHeight * depthOffset); }
public bool ContainPlayerInRange(ViewRange range) { return(FindPlayerInRange(range) != null); }
public PlayerController FindPlayerInRange(ViewRange range) { return(Algorithm.FirstValid(Algorithm.Map(range.InRangeGos, (go) => go.GetComponentInParent <PlayerController>()), (t) => t != null)); }