public CollisionBase()
        {
            if (!graphics.initialized)
            {
                graphics.rasterizerState = new RasterizerState();
                graphics.rasterizerState.FillMode = FillMode.WireFrame;
                graphics.rasterizerState.CullMode = CullMode.None;

                graphics.vertexDeclaration = new VertexDeclaration(new VertexElement[]
                    {
                        new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),
                        new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0)
                    }
                );

                graphics.basicEffect = new BasicEffect(Space394Game.GameInstance.GraphicsDevice);
                graphics.basicEffect.VertexColorEnabled = true;

                graphics.initialized = true;

                esxolusGroup = new CollisionGroup();
                halkGroup = new CollisionGroup();
                CollisionGroupPair pairE = new CollisionGroupPair(esxolusGroup, esxolusGroup);
                CollisionRules.CollisionGroupRules.Add(pairE, CollisionRule.NoBroadPhase);
                CollisionGroupPair pairH = new CollisionGroupPair(halkGroup, halkGroup);
                CollisionRules.CollisionGroupRules.Add(pairH, CollisionRule.NoBroadPhase);
            }
            else { }
        }
        /// <summary>
        /// Constructs a new demo.
        /// </summary>
        /// <param name="game">Game owning this demo.</param>
        public CollisionFilteringDemo(DemosGame game)
            : base(game)
        {
            Entity toAdd;
            toAdd = new Box(new Vector3(0, -.5f, 0), 50, 1, 50);
            Space.Add(toAdd);

            //Set up two stacks which go through each other
            var firstStackGroup = new CollisionGroup();
            var secondStackGroup = new CollisionGroup();
            //Adding this rule to the space's collision group rules will prevent entities belong to these two groups from generating collision pairs with each other.
            groupPair = new CollisionGroupPair(firstStackGroup, secondStackGroup);
            CollisionRules.CollisionGroupRules.Add(groupPair, CollisionRule.NoBroadPhase);

            for (int k = 0; k < 10; k++)
            {
                toAdd = new Box(
                    new Vector3(-4 + .12f * k, .5f + k, 0), 1f, 1f, 1f,
                    10);
                toAdd.CollisionInformation.CollisionRules.Group = firstStackGroup;
                Space.Add(toAdd);
                toAdd = new Box(new Vector3(4 - .12f * k, .5f + k, 0),
                                1f, 1f, 1f, 10);
                toAdd.CollisionInformation.CollisionRules.Group = secondStackGroup;
                Space.Add(toAdd);
            }
            //Add another two boxes which ignore each other using the specific entities method; they will still collide with the stacks since they will have the default dynamic collision group.
            toAdd = new Box(new Vector3(1, 3, 0), 1f, 4f, 2f, 10);
            var toAdd2 = new Box(new Vector3(-1, 3, 0), 1f, 4f, 2f, 15);
            CollisionRules.AddRule(toAdd, toAdd2, CollisionRule.NoBroadPhase);
            Space.Add(toAdd);
            Space.Add(toAdd2);
            game.Camera.Position = new Vector3(0, 6, 20);
        }
        //Equals is not overriden because the hashcode because the hashcode is the default hashcode, just modified a bit.

        /// <summary>
        /// Defines the CollisionRule between the two groups for a given space.
        /// </summary>
        /// <param name="groupA">First CollisionGroup of the pair.</param>
        /// <param name="groupB">Second CollisionGroup of the pair.</param>
        /// <param name="rule">CollisionRule to use between the pair.</param>
        public static void DefineCollisionRule(CollisionGroup groupA, CollisionGroup groupB, CollisionRule rule)
        {
            var pair = new CollisionGroupPair(groupA, groupB);
            if (CollisionRules.CollisionGroupRules.ContainsKey(pair))
                CollisionRules.CollisionGroupRules[pair] = rule;
            else
                CollisionRules.CollisionGroupRules.Add(pair, rule);
        }
        public TestScene(ContentRegister content, Camera3D camera, int level)
            : base(content, camera)
        {
            CollisionGroupPair pair2 = new CollisionGroupPair(bulletEnemyCollisionGroup, CollisionRules.DefaultKinematicCollisionGroup);
            CollisionRules.CollisionGroupRules.Add(pair2, CollisionRule.NoBroadPhase);

            CollisionGroupPair pair3 = new CollisionGroupPair(bulletEnemyCollisionGroup, CollisionRules.DefaultDynamicCollisionGroup);
            CollisionRules.CollisionGroupRules.Add(pair3, CollisionRule.NoBroadPhase);

            _level = level;
        }
Example #5
0
        private CollisionRule GetCollisionRuleWithGroup(ICollisionRulesOwner rulesOwner, CollisionGroup group)
        {
            if (rulesOwner.CollisionRules.Personal != CollisionRule.Defer)
            {
                return(rulesOwner.CollisionRules.Personal);
            }

            CollisionGroupPair pair = new CollisionGroupPair(group, rulesOwner.CollisionRules.Group);

            CollisionRules.CollisionGroupRules.TryGetValue(pair, out CollisionRule rule);
            return(rule);
        }
Example #6
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="platforms"></param>
        /// <param name="gameField"></param>
        public CollisionManager(List <Platform> platforms, GameLevelEx gameLevel)
        {
            this.platforms = platforms;
            this.gameLevel = gameLevel;

            foreach (Platform platform in platforms)
            {
                CollisionGroupPair groupPair = new CollisionGroupPair(gameLevel.RemovedBlocksGroup, platform.BallsGroup);
                CollisionRules.CollisionGroupRules.Add(groupPair, CollisionRule.NoBroadPhase);
            }

            gameLevel.Body.CollisionInformation.Events.ContactCreated += handleContactCreated;
        }
        public Projectile(long _uniqueID, Vector3 _position, Quaternion _rotation, String _model)
            : base(_uniqueID, _position, _rotation, _model)
        {
            ttl = TTL;

            Damage = 1.0f;

            Active = false;

            if (!collisionSet)
            {
                projectileGroup = new CollisionGroup();
                CollisionGroupPair pair = new CollisionGroupPair(projectileGroup, projectileGroup);
                CollisionRules.CollisionGroupRules.Add(pair, CollisionRule.NoBroadPhase);

                esxolusProjectileGroup = new CollisionGroup();
                CollisionGroupPair pairEP = new CollisionGroupPair(esxolusProjectileGroup, projectileGroup);
                CollisionRules.CollisionGroupRules.Add(pairEP, CollisionRule.NoBroadPhase);
                CollisionGroupPair pairEE = new CollisionGroupPair(esxolusProjectileGroup, esxolusProjectileGroup);
                CollisionRules.CollisionGroupRules.Add(pairEE, CollisionRule.NoBroadPhase);
                CollisionGroupPair pairEES = new CollisionGroupPair(esxolusProjectileGroup, Ship.EsxolusShipGroup);
                CollisionRules.CollisionGroupRules.Add(pairEES, CollisionRule.NoBroadPhase);
                CollisionGroupPair pairEESM = new CollisionGroupPair(esxolusProjectileGroup, Ship.EsxolusMeshShipGroup);
                CollisionRules.CollisionGroupRules.Add(pairEESM, CollisionRule.NoBroadPhase);

                halkProjectileGroup = new CollisionGroup();
                CollisionGroupPair pairHP = new CollisionGroupPair(halkProjectileGroup, projectileGroup);
                CollisionRules.CollisionGroupRules.Add(pairHP, CollisionRule.NoBroadPhase);
                CollisionGroupPair pairHH = new CollisionGroupPair(halkProjectileGroup, halkProjectileGroup);
                CollisionRules.CollisionGroupRules.Add(pairHH, CollisionRule.NoBroadPhase);
                CollisionGroupPair pairHHS = new CollisionGroupPair(halkProjectileGroup, Ship.HalkShipGroup);
                CollisionRules.CollisionGroupRules.Add(pairHHS, CollisionRule.NoBroadPhase);
                CollisionGroupPair pairHHSM = new CollisionGroupPair(halkProjectileGroup, Ship.HalkMeshShipGroup);
                CollisionRules.CollisionGroupRules.Add(pairHHSM, CollisionRule.NoBroadPhase);

                CollisionGroupPair pairEH = new CollisionGroupPair(esxolusProjectileGroup, halkProjectileGroup);
                CollisionRules.CollisionGroupRules.Add(pairEH, CollisionRule.NoBroadPhase);

                collisionSet = true;
            }
            else { }
        }
Example #8
0
        public Ship(long _uniqueId, Vector3 _position, Quaternion _rotation, Team _team)
            : base(_uniqueId, _position, _rotation, "Models/box")
        {
            Damage = 1.0f; // Instant destroy
            team = _team;

            int hudScale = 2;
            hudUnit = new HUDUnit(this, 10*hudScale,4*hudScale,1*hudScale);

            if (!groupsSet)
            {
                CollisionGroupPair pairEE = new CollisionGroupPair(esxolusMeshShipGroup, esxolusMeshShipGroup);
                CollisionRules.CollisionGroupRules.Add(pairEE, CollisionRule.NoBroadPhase);

                CollisionGroupPair pairHH = new CollisionGroupPair(halkMeshShipGroup, halkMeshShipGroup);
                CollisionRules.CollisionGroupRules.Add(pairHH, CollisionRule.NoBroadPhase);

                CollisionGroupPair pairEH = new CollisionGroupPair(esxolusMeshShipGroup, halkMeshShipGroup);
                CollisionRules.CollisionGroupRules.Add(pairEH, CollisionRule.NoBroadPhase);
                groupsSet = true;
            }
        }
        /// <summary>
        /// Constructs a new demo.
        /// </summary>
        /// <param name="game">Game owning this demo.</param>
        public CollisionFilteringDemo(DemosGame game)
            : base(game)
        {
            Entity toAdd;

            toAdd = new Box(new Vector3(0, -.5f, 0), 50, 1, 50);
            Space.Add(toAdd);

            //Set up two stacks which go through each other
            var firstStackGroup  = new CollisionGroup();
            var secondStackGroup = new CollisionGroup();

            //Adding this rule to the space's collision group rules will prevent entities belong to these two groups from generating collision pairs with each other.
            groupPair = new CollisionGroupPair(firstStackGroup, secondStackGroup);
            CollisionRules.CollisionGroupRules.Add(groupPair, CollisionRule.NoBroadPhase);

            for (int k = 0; k < 10; k++)
            {
                toAdd = new Box(
                    new Vector3(-4 + .12f * k, .5f + k, 0), 1f, 1f, 1f,
                    10);
                toAdd.CollisionInformation.CollisionRules.Group = firstStackGroup;
                Space.Add(toAdd);
                toAdd = new Box(new Vector3(4 - .12f * k, .5f + k, 0),
                                1f, 1f, 1f, 10);
                toAdd.CollisionInformation.CollisionRules.Group = secondStackGroup;
                Space.Add(toAdd);
            }
            //Add another two boxes which ignore each other using the specific entities method; they will still collide with the stacks since they will have the default dynamic collision group.
            toAdd = new Box(new Vector3(1, 3, 0), 1f, 4f, 2f, 10);
            var toAdd2 = new Box(new Vector3(-1, 3, 0), 1f, 4f, 2f, 15);

            CollisionRules.AddRule(toAdd, toAdd2, CollisionRule.NoBroadPhase);
            Space.Add(toAdd);
            Space.Add(toAdd2);
            game.Camera.Position = new Microsoft.Xna.Framework.Vector3(0, 6, 20);
        }
Example #10
0
 /// <summary>
 /// Removes any rule between the two groups in the space.
 /// </summary>
 /// <param name="groupA">First CollisionGroup of the pair.</param>
 /// <param name="groupB">SecondCollisionGroup of the pair.</param>
 public static void RemoveCollisionRule(CollisionGroup groupA, CollisionGroup groupB)
 {
     Dictionary<CollisionGroupPair, CollisionRule> dictionary = CollisionRules.CollisionGroupRules;
     var pair = new CollisionGroupPair(groupA, groupB);
     if (dictionary.ContainsKey(pair))
         dictionary.Remove(pair);
 }
Example #11
0
        private void setupCollisionGroups()
        {
            playerGroup = new CollisionGroup();
            wallGroup = new CollisionGroup();
            missileGroup = new CollisionGroup();
            heavyAIGroup = new CollisionGroup();
            normalAIGroup = new CollisionGroup();
            platformGroup = new CollisionGroup();

            //for player
            playerNormalAIPair = new CollisionGroupPair(playerGroup, normalAIGroup);
            playerHeavyAIPair = new CollisionGroupPair(playerGroup, heavyAIGroup);
            playerMissilePair = new CollisionGroupPair(playerGroup, missileGroup);

            //NOTE: comment this line out if the player should collide with that enemy type
            CollisionRules.CollisionGroupRules.Add(playerNormalAIPair, CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(playerHeavyAIPair, CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(playerMissilePair, CollisionRule.Normal);

            //for missile
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(missileGroup, normalAIGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(missileGroup, heavyAIGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(missileGroup, platformGroup), CollisionRule.NoBroadPhase);

            //for enemies
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(normalAIGroup, normalAIGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(normalAIGroup, heavyAIGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(heavyAIGroup, heavyAIGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(platformGroup, heavyAIGroup), CollisionRule.NoBroadPhase);

            //for wall
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(wallGroup, normalAIGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(wallGroup, heavyAIGroup), CollisionRule.NoBroadPhase);
            CollisionRules.CollisionGroupRules.Add(new CollisionGroupPair(wallGroup, missileGroup), CollisionRule.NoBroadPhase);
        }