示例#1
0
        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);
            }
        }
示例#3
0
文件: CPU.cs 项目: klukule/FlaxAPI
        private void UpdateTable(ref ViewRange viewRange)
        {
            _table.DisposeChildren();

            _table.LockChildrenRecursive();

            UpdateTableInner(ref viewRange);

            _table.UnlockChildrenRecursive();
            _table.PerformLayout();
        }
示例#4
0
文件: CPU.cs 项目: klukule/FlaxAPI
        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();
        }
示例#5
0
        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();
            }
        }
示例#6
0
        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));
        }
示例#7
0
文件: CPU.cs 项目: klukule/FlaxAPI
        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;
                    }
                }
            }
        }
示例#8
0
文件: CPU.cs 项目: klukule/FlaxAPI
        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);
        }
示例#9
0
 public bool ContainPlayerInRange(ViewRange range)
 {
     return(FindPlayerInRange(range) != null);
 }
示例#10
0
 public PlayerController FindPlayerInRange(ViewRange range)
 {
     return(Algorithm.FirstValid(Algorithm.Map(range.InRangeGos, (go) => go.GetComponentInParent <PlayerController>()), (t) => t != null));
 }