예제 #1
0
        public void UpdateCachedBody(WorldBody worldBody, uint time)
        {
            if (worldBody == null || !worldBody.Exists)
            {
                return;
            }

            if (!Bodies.TryGetValue(worldBody.ID, out BucketBody bucket))
            {
                bucket = new BucketBody()
                {
                    Stale = false
                };
                Bodies.Add(worldBody.ID, bucket);
            }

            bucket.Stale = false;
            bucket.ReadBody(worldBody, time);

            if (worldBody.Group != null)
            {
                if (!Groups.TryGetValue(worldBody.Group.ID, out BucketGroup group))
                {
                    group = new BucketGroup();
                    Groups.Add(worldBody.Group.ID, group);
                    group.Stale = true;
                }

                if (group.Stale)
                {
                    group.Stale = false;
                    group.ReadGroup(worldBody.Group, time);
                }
            }
        }
예제 #2
0
파일: BodyCache.cs 프로젝트: AC5230/IOGame
        private void UpdateLocalBodies(IEnumerable <Body> bodies)
        {
            foreach (var bucket in Bodies.Values)
            {
                bucket.Stale = true;
            }

            foreach (var obj in bodies)
            {
                BucketBody bucket = null;

                if (Bodies.ContainsKey(obj.ID))
                {
                    Bodies[obj.ID].Stale       = false;
                    Bodies[obj.ID].BodyUpdated = obj;
                }
                else
                {
                    bucket = new BucketBody
                    {
                        BodyUpdated = obj,
                        Stale       = false
                    };
                    Bodies.Add(obj.ID, bucket);
                }
            }
        }