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; }
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); }
/// <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 { } }
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); }
/// <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); }
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); }