// Use this for initialization
        public void Init()
        {
            ChecksumExtractor.Init(this);

            gameObjectMap = new Dictionary <IBody, GameObject>();
            collisionInfo = new Dictionary <RigidBody, Dictionary <RigidBody, TSCollision> >();

            CollisionSystemPersistentSAP collisionSystem = new CollisionSystemPersistentSAP();

            collisionSystem.EnableSpeculativeContacts = SpeculativeContacts;

            world = new World(collisionSystem);
            collisionSystem.world = world;

            world.physicsManager = this;
            world.Gravity        = Gravity;

            world.Events.BodiesBeginCollide += CollisionEnter;
            world.Events.BodiesStayCollide  += CollisionStay;
            world.Events.BodiesEndCollide   += CollisionExit;

            world.Events.TriggerBeginCollide += TriggerEnter;
            world.Events.TriggerStayCollide  += TriggerStay;
            world.Events.TriggerEndCollide   += TriggerExit;

            world.Events.RemovedRigidBody += OnRemovedRigidBody;

            instance = this;

            AddRigidBodies();
        }
예제 #2
0
        public void Clone(IWorld iWorld, bool doChecksum)
        {
            World world = (World)iWorld;

            this.Reset();
            if (doChecksum)
            {
                this.checksum = ChecksumExtractor.GetEncodedChecksum();
            }
            this.clonedPhysics.Clear();
            foreach (RigidBody rigidBody in world.RigidBodies)
            {
                RigidBodyClone @new = WorldClone.poolRigidBodyClone.GetNew();
                @new.Clone(rigidBody);
                this.clonedPhysics.Add(rigidBody.GetInstance(), @new);
            }
            this.clonedArbiters.Clear();
            foreach (Arbiter current in world.ArbiterMap.Arbiters)
            {
                ArbiterClone new2 = WorldClone.poolArbiterClone.GetNew();
                new2.Clone(current);
                this.clonedArbiters.Add(new2);
            }
            this.clonedArbitersTrigger.Clear();
            foreach (Arbiter current2 in world.ArbiterTriggerMap.Arbiters)
            {
                ArbiterClone new3 = WorldClone.poolArbiterClone.GetNew();
                new3.Clone(current2);
                this.clonedArbitersTrigger.Add(new3);
            }
            this.collisionIslands.Clear();
            this.index  = 0;
            this.length = world.islands.Count;
            while (this.index < this.length)
            {
                CollisionIsland      ci   = world.islands[this.index];
                CollisionIslandClone new4 = WorldClone.poolCollisionIslandClone.GetNew();
                new4.Clone(ci);
                this.collisionIslands.Add(new4);
                this.index++;
            }
            this.cloneCollision.Clone((CollisionSystemPersistentSAP)world.CollisionSystem);
            this.clonedInitialCollisions.Clear();
            this.clonedInitialCollisions.AddRange(world.initialCollisions);
            this.clonedInitialTriggers.Clear();
            this.clonedInitialTriggers.AddRange(world.initialTriggers);
            this.rigidBodyInstanceCount  = RigidBody.instanceCount;
            this.constraintInstanceCount = Constraint.instanceCount;
        }
예제 #3
0
        public void Init()
        {
            ChecksumExtractor.Init(this);

            Physics2D.Settings.ContinuousPhysics = SpeculativeContacts;

            TSVector2 gravity = new TSVector2(Gravity.x, Gravity.y);

            m_World = new Physics2D.World(gravity);

            Physics2D.ContactManager.physicsManager = this;

            m_World.BodyRemoved += OnRemovedRigidbody;

            m_World.ContactManager.BeginContact += CollisionEnter;
            m_World.ContactManager.StayContact  += CollisionStay;
            m_World.ContactManager.EndContact   += CollisionExit;
        }
        // Use this for initialization
        public void Init()
        {
            ChecksumExtractor.Init(this);

            Settings.ContinuousPhysics = SpeculativeContacts;

            world = new TrueSync.Physics2D.World(new TSVector2(Gravity.x, Gravity.y));
            ContactManager.physicsManager = this;

            world.BodyRemoved += OnRemovedRigidBody;
            world.ContactManager.BeginContact += CollisionEnter;
            world.ContactManager.StayContact  += CollisionStay;
            world.ContactManager.EndContact   += CollisionExit;

            gameObjectMap = new Dictionary <IBody, GameObject>();
            collisionInfo = new Dictionary <Physics2D.Body, Dictionary <Physics2D.Body, TSCollision2D> >();

            instance = this;
            AddRigidBodies();
        }
예제 #5
0
 public void Clone(IWorld iWorld, bool doChecksum)
 {
     TrueSync.Physics2D.World world = (TrueSync.Physics2D.World)iWorld;
     this.Reset();
     if (doChecksum)
     {
         this.checksum = ChecksumExtractor.GetEncodedChecksum();
     }
     this.clonedPhysics.Clear();
     this.index  = 0;
     this.length = world.BodyList.Count;
     while (this.index < this.length)
     {
         Body        body = world.BodyList[this.index];
         BodyClone2D @new = WorldClone2D.poolRigidBodyClone.GetNew();
         @new.Clone(body);
         this.clonedPhysics.Add(body.BodyId, @new);
         this.index++;
     }
     this.contactsClone.Clear();
     this.index  = 0;
     this.length = world.ContactList.Count;
     while (this.index < this.length)
     {
         TrueSync.Physics2D.Contact contact = world.ContactList[this.index];
         ContactClone2D             new2    = WorldClone2D.poolContactClone.GetNew();
         new2.Clone(contact);
         this.contactsClone.Add(new2);
         this.index++;
     }
     this.islandClone.Clone(world.Island);
     this.toiClone.Clone(world._input);
     this.dynamicTreeClone.Clone((DynamicTreeBroadPhase)world.ContactManager.BroadPhase);
     this._worldHasNewFixture = world._worldHasNewFixture;
     this.bodyCounter         = Body._bodyIdCounter;
     this.fixtureCounter      = Fixture._fixtureIdCounter;
 }
예제 #6
0
 protected override string GetChecksumForSyncedInfo()
 {
     return(ChecksumExtractor.GetEncodedChecksum());
 }
예제 #7
0
        // UTILS

        private string GetChecksum(bool i_Plain)
        {
            return(ChecksumExtractor.GetEncodedChecksum());
        }
 internal string GetChecksum(bool plain)
 {
     return(ChecksumExtractor.GetEncodedChecksum());
 }