Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        // 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;
            }
        }