//Mutators public void fixCenterAndRadius() { //Calculate the centroid /* We plan to divide by vertCount, so don't allow it to be zero. */ if (vertCount() == 0) { return; } cVector3 centroid = new cVector3(); //Default constuctor starts at zeroVector. foreach (cVector3 v in _vectorvert) { centroid.addassign(_vectorvert.ElementAt()); } centroid.divassign(vertCount()); // We already made sure this divisor isn't zero. //Move the centroid to the origin foreach (cVector3 v in _vectorvert) { _vectorvert.ElementAt().subassign(centroid); } //Fix Radius as furthest vertex from the origin. float distance = 0.0f; //Start with this and look for the biggest one. float testdistance; foreach (cVector3 v in _vectorvert) { testdistance = v.Magnitude; if (testdistance > distance) { distance = testdistance; } } _radius = distance; //_radius is a raw number. _fixConvex(); }
public void setRoom2() { Biota.purgeCritters("cCritterWall"); Biota.purgeCritters("cCritter3Dcharacter"); Biota.purgeCritters("cCritterBoss"); setBorder(50.0f, 40.0f, 50.0f); cRealBox3 skeleton = new cRealBox3(); skeleton.copy(_border); setSkyBox(skeleton); SkyBox.setAllSidesTexture(BitmapRes.Graphics1, 2); SkyBox.setSideTexture(cRealBox3.LOY, BitmapRes.Concrete); SkyBox.setSideSolidColor(cRealBox3.HIY, Color.Blue); _seedcount = 0; Player.setMoveBox(new cRealBox3(50.0f, 40.0f, 50.0f)); wentThrough = true; startNewRoom = Age; //add door cCritterDoor pdwall = new cCritterDoor(new cVector3(_border.Midx, _border.Loy + 4, _border.Loz), new cVector3(_border.Midx, _border.Loy + 10, _border.Loz), 2.0f, 3.0f, this); cSpriteTextureBox pspritedoor = new cSpriteTextureBox(pdwall.Skeleton, BitmapRes.Door); pdwall.Sprite = pspritedoor; float wallThickness = 5.0f, wallHeight = 10.0f; //starting block cVector3 enda = new cVector3(Border.Midx, Border.Loy + 1, Border.Hiz); cVector3 endb = new cVector3(Border.Midx, Border.Loy + 1, Border.Hiz - 5); cCritterWall startingBlock = new cCritterWall(enda, endb, wallThickness, wallHeight, this); cSpriteTextureBox pspritebox = new cSpriteTextureBox(startingBlock.Skeleton, BitmapRes.Wood2, 16); //Sets all sides startingBlock.Sprite = pspritebox; //ending block cVector3 enda2 = new cVector3(Border.Midx, Border.Loy + 1, Border.Loz + 7); cVector3 endb2 = new cVector3(Border.Midx, Border.Loy + 1, Border.Loz); cCritterWall endBlock = new cCritterWall(enda2, endb2, wallThickness, 8.0f, this); cSpriteTextureBox pspritebox2 = new cSpriteTextureBox(endBlock.Skeleton, BitmapRes.Wood2, 16); //Sets all sides endBlock.Sprite = pspritebox2; //floor cVector3 enda3 = new cVector3(Border.Midx, Border.Loy, Border.Loz); cVector3 endb3 = new cVector3(Border.Midx, Border.Loy, Border.Hiz); DamagingWall floor = new DamagingWall(enda3, endb3, 0.5f, 0.5f, this); //med pack _ptreasure = new cCritterMedpack(this, new cVector3(Border.Midx, Border.Loy + 7, Border.Hiz - 4)); //sliding walls (spawned based on pos of starting block) cVector3 leftEnd = new cVector3(); leftEnd.addassign(startingBlock.Position.add(new cVector3(0, 4.0f, -0.5f))); cVector3 rightEnd = new cVector3(); rightEnd.copy(leftEnd); rightEnd.addassign(new cVector3(0, 0, -5.0f)); float thickness = 0.1f, height = 0.3f; cVector3 moveAxisandDirection = new cVector3(0, 0, -0.005f); cVector3 startPos = new cVector3(); startPos.copy(rightEnd); cVector3 endPos = new cVector3(); endPos.copy(startPos); endPos.Z = Border.Loz + 9.5f; //spawn sliding walls in a separate thread new Thread(() => spawnWall(leftEnd, rightEnd, thickness, height, this, cCritterSlideWall.TYPE.PLATFORM, moveAxisandDirection, false, startPos, endPos)).Start(); seedCritters(); Player.moveTo(startingBlock.Position.add(new cVector3(0, 10.0f, 0))); new cCritterBossDrFreak(this, endBlock.Position.add(new cVector3(0, 10.0f, 0)), new KnockbackBullet(), 5); }