public virtual void AddActor(ActorBase actor) { /*actors.Add(actor); * AddObject(actor); * * if ((actor.CollisionFlags & CollisionFlags.ForceDisableCollisions) == 0) * { * actor.UpdateAABB(); * collisions.AddProxy(actor); * actor.Transform.EventTransformChanged += OnActorTransformChanged; * }*/ if (string.IsNullOrEmpty(actor.LoadedMetadata)) { Log.Write(LogType.Warning, actor.ToString() + " has no metadata"); return; } int index; lock (root.Synchronization) { lastSpawnedActorId++; index = (lastSpawnedActorId << 8) | 0xff; // Subindex 0xff means that the object is not owned by any player actor.Index = index; spawnedActors.Add(actor); AddObject(actor); if ((actor.CollisionFlags & CollisionFlags.ForceDisableCollisions) == 0) { actor.UpdateAABB(); collisions.AddProxy(actor); actor.Transform.EventTransformChanged += OnActorTransformChanged; } } root.SendToActivePlayers(new CreateRemoteActor { Index = index, Pos = actor.Transform.Pos, MetadataPath = actor.LoadedMetadata, CollisionFlags = actor.CollisionFlags }, 64, NetDeliveryMethod.ReliableOrdered, PacketChannels.Main); if (spawnedActorsAnimation.TryGetValue(actor, out string identifier)) { root.SendToActivePlayers(new RefreshActorAnimation { Index = actor.Index, Identifier = identifier, }, 32, NetDeliveryMethod.ReliableOrdered, PacketChannels.Main); } }
// These support body activation/deactivation. internal void CreateProxies(DynamicTreeBroadPhase broadPhase, ref Transform xf) { Debug.Assert(ProxyCount == 0); // Create proxies in the broad-phase. ProxyCount = Shape.ChildCount; for (int i = 0; i < ProxyCount; ++i) { FixtureProxy proxy = new FixtureProxy(); Shape.ComputeAABB(out proxy.AABB, ref xf, i); proxy.Fixture = this; proxy.ChildIndex = i; //FPE note: This line needs to be after the previous two because FixtureProxy is a struct proxy.ProxyId = broadPhase.AddProxy(ref proxy); Proxies[i] = proxy; } }