/// <summary> /// Brukes når en blimp skal ungå en annen /// </summary> /// <param name="b">en blimp</param> private void Reverese(Blimp b) { rotMatrix = new Matrix(); Vector3 addVector; rotMatrix = Matrix.Identity * Matrix.CreateRotationY(b.Rotation); addVector = Vector3.Transform(new Vector3(0, 0, -1), rotMatrix); b.Pos += addVector * b.Speed * 2; }
/// <summary> /// Metode som får blimpene til å bevege seg fremover /// </summary> /// <param name="b">en blimp</param> private void Move(Blimp b) { rotMatrix = new Matrix(); Vector3 addVector; rotMatrix = Matrix.Identity * Matrix.CreateRotationY(b.Rotation); //Finner rotasjonen til blimpen addVector = Vector3.Transform(new Vector3(0, 0, 1), rotMatrix); //Transformerer en vektor slik at ballongen alltid peker den veien den beveger seg. b.Pos += addVector * b.Speed; }
/// <summary> /// Ser om 2 blimper er på tur å kollidere /// Bruker den ytre BoundingSpheren til blimpen /// </summary> /// <param name="b">en blimp</param> /// <returns>kollisjons type</returns> private CollisionType checkCollision(Blimp b) { foreach (Blimp blimp in blimps) { if (blimp.Id != b.Id) { if (b.BlimpSphere.Contains(blimp.BlimpSphere) != ContainmentType.Disjoint) return CollisionType.BlimpCollision; } } return CollisionType.None; }
/// <summary> /// Sjekker om to blimper kolliderer /// </summary> /// <param name="b">en blimp</param> /// <returns>kollisjonstype</returns> private CollisionType checkImpact(Blimp b) { foreach (Blimp blimp in blimps) { if (blimp.Id != b.Id) { if (b.BlimpFrontSphere.Contains(blimp.BlimpFrontSphere) != ContainmentType.Disjoint || b.BlimpFrontSphere.Contains(blimp.BlimpBackSphere) != ContainmentType.Disjoint) { return CollisionType.BlimpImpact; } } } return CollisionType.None; }
/// <summary> /// Legger til nye blimps /// </summary> private void AddBlimps() { blimps = new List<Blimp>(); Blimp b; int i = 1; while (blimps.Count < MAXBLIMPS) { int x = rand.Next((int)terrain.EdgeX.X, (int)terrain.EdgeX.Y); //X verdi innenfor en grense int z = rand.Next((int)terrain.EdgeZ.X, (int)terrain.EdgeZ.Y); //Z verdi innenfor en grense float y = (float)rand.Next(2000, 3000); //Y verdi innenfor en grense Color color = new Color(rand.Next(0, 255), rand.Next(0, 255), rand.Next(0, 255)); //Setter tilfeldig farge på blimpen float rot = rand.Next(0, (int)(2 * MathHelper.Pi * 100)); //Snur alle forskjellige veier rot = rot / 100f; b = new Blimp(new Vector3(x, y, z), color, rot); b.Id = i; b.CurrentRotation = b.Rotation; b.BlimpSphere = new BoundingSphere(new Vector3(b.Pos.X, b.Pos.Y, b.Pos.Z), 150f); //sjekker om 2 blimper opprettes i samme posisjon. if (checkCollision(b) == CollisionType.None) blimps.Add(b); i++; } }