public BEPUHeightField(int widthX, int widthZ, float[,] heights, Karen90MmoFramework.Quantum.Vector3 position) : base(heights, new AffineTransform(new Vector3(1, 1, 1), Quaternion.Identity, new Vector3(position.X, position.Y, position.Z))) { if (heights == null) { throw new ArgumentNullException("heights"); } if (widthX * widthZ != heights.Length) { throw new ArgumentOutOfRangeException("heights"); } this.position = position; this.widthX = widthX; this.heights = new float[widthX * widthZ]; for (var z = 0; z < widthZ; z++) { for (var x = 0; x < widthX; x++) { this.heights[z * widthX + x] = heights[x, z]; } } }
public BEPUPhysicsWorld(Karen90MmoFramework.Quantum.Bounds bounds, Karen90MmoFramework.Quantum.Vector3 gravity, bool createBoundary = false) { var parallelLooper = new ParallelLooper(); if (Environment.ProcessorCount > 1) { for (var i = 0; i < Environment.ProcessorCount; i++) { parallelLooper.AddThread(); } } this.space = new Space(parallelLooper) { ForceUpdater = { Gravity = new Vector3(gravity.X, gravity.Y, gravity.Z) } }; this.bounds = bounds; this.frictionlessMaterial = new Material(0f, 0f, 0f); this.staticGroup = new CollisionGroup(); this.kinematicGroup = new CollisionGroup(); this.dynamicGroup = new CollisionGroup(); this.avatarGroup = new CollisionGroup(); CollisionGroup.DefineCollisionRule(this.staticGroup, this.staticGroup, CollisionRule.NoBroadPhase); CollisionGroup.DefineCollisionRule(this.staticGroup, this.kinematicGroup, CollisionRule.NoBroadPhase); CollisionGroup.DefineCollisionRule(this.staticGroup, this.dynamicGroup, CollisionRule.NoBroadPhase); CollisionGroup.DefineCollisionRule(this.staticGroup, this.avatarGroup, CollisionRule.Defer); CollisionGroup.DefineCollisionRule(this.kinematicGroup, this.kinematicGroup, CollisionRule.NoBroadPhase); CollisionGroup.DefineCollisionRule(this.kinematicGroup, this.dynamicGroup, CollisionRule.NoBroadPhase); CollisionGroup.DefineCollisionRule(this.kinematicGroup, this.avatarGroup, CollisionRule.Defer); CollisionGroup.DefineCollisionRule(this.dynamicGroup, this.dynamicGroup, CollisionRule.NoBroadPhase); CollisionGroup.DefineCollisionRule(this.dynamicGroup, this.avatarGroup, CollisionRule.Defer); CollisionGroup.DefineCollisionRule(this.avatarGroup, this.avatarGroup, CollisionRule.NoBroadPhase); if (createBoundary) { this.CreateWorldBoundary(); } }