I can add them but as soon as i give them collissionshapes i get an Ode internal error 2.
The same happens when i try to remove collissionshapes .
It tells me it s an invalid operationn on locked space.
Is this because i do this in a different class then the brumeclass with brume given as a parameter?
- Code: Select all
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using Brume;
using System.IO;
namespace BoardIt
{
class Terrain
{
static Brume.Brume brume;
public static void Load(Brume.Brume _brume,int LandNumber)
{
brume = _brume;
int[] numbers = new int [0];
switch (LandNumber)
{
case 1:
numbers = new int[3]{ 1,2,5 };
break;
case 2:
numbers = new int[8] {2,1,3,4,5,18,16,17};
break;
case 3:
numbers = new int[6] {3,2,4,7,17,16 };
break;
case 4:
numbers = new int[6] {4,2,3,17,7,6 };
break;
case 5:
numbers = new int[6] { 5, 1, 2, 15, 19, 18 };
break;
case 6:
numbers = new int[4] { 6,4,7,8 };
break;
case 7:
numbers = new int[6] {7,3,4,6,8,17 };
break;
case 8:
numbers = new int[8] {8,6,7,17,24,25,13,9 };
break;
case 9:
numbers = new int[6] { 9,8,13,14,11,10 };
break;
case 10:
numbers = new int[4] { 10,9,14,11 };
break;
case 11:
numbers = new int[5] { 11,9,10,14,12 };
break;
case 12:
numbers = new int[4] { 12,30,14,11 };
break;
case 13:
numbers = new int[7] { 13,8,9,14,27,25,24 };
break;
case 14:
numbers = new int[8] {14,9,11,12,13,30,27,25};
break;
case 15:
numbers = new int[7] {15,5,19,18,20,21,22 };
break;
case 16:
numbers = new int[8] { 16,2,3,17,26,45,47,18};
break;
case 17:
numbers = new int[10] { 17,2,3,7,8,24,25,26,45,16 };
break;
case 18:
numbers = new int[8] { 18,2,16,45,47,20,19,5 };
break;
case 19:
numbers = new int[5] { 19,5,18,20,15};
break;
case 20:
numbers = new int[7] { 20,18,19,15,21,49,47};
break;
case 21:
numbers = new int[6] { 21,15,20,49,23,22 };
break;
case 22:
numbers = new int[4] { 22,21,23,53 };
break;
case 23:
numbers = new int[5] { 23,22,21,49,53};
break;
case 24:
numbers = new int[6] { 24,8,13,25,26,17 };
break;
case 25:
numbers = new int[9] { 25,24,26,13,14,27,54,43,45 };
break;
case 26:
numbers = new int[7] { 26,17,8,24,25,45,16 };
break;
case 27:
numbers = new int[10] { 27,25,54,38,35,31,30,14,13,43 };
break;
case 28:
numbers = new int[7] { 28,49,48,41,50,52,53 };
break;
case 30:
numbers = new int[5] { 30,12,14,27,31};
break;
case 31:
numbers = new int[5] { 31,30,27,35,32 };
break;
case 32:
numbers = new int[5] { 32,31,35,36,33 };
break;
case 33:
numbers = new int[4] { 33,32,36,37};
break;
case 35:
numbers = new int[6] { 35,27,31,32,36,38 };
break;
case 36:
numbers = new int[7] { 36,38,35,32,33,37,40 };
break;
case 37:
numbers = new int[5] { 37,33,36,40,51 };
break;
case 38:
numbers = new int[8] { 38,41,54,27,35,36,40,50 };
break;
case 40:
numbers = new int[6] { 40,50,38,36,37,51};
break;
case 41:
numbers = new int[7] {41,43,54,38,50,28,48 };
break;
case 43:
numbers = new int[8] { 43,47,45,25,27,54,41,48 };
break;
case 45:
numbers = new int[9] { 45,16,17,26,25,43,47,20,18 };
break;
case 47:
numbers = new int[8] { 47,45,43,48,49,20,16,18 };
break;
case 48:
numbers = new int[7] { 48,47,43,41,28,53,49 };
break;
case 49:
numbers = new int[8] { 49,20,47,48,28,53,23,21 };
break;
case 50:
numbers = new int[7] { 50,28,41,38,40,51,52 };
break;
case 51:
numbers = new int[6] { 51,52,50,40,36,37 };
break;
case 52:
numbers = new int[5] { 51,51,50,28,53 };
break;
case 53:
numbers = new int[7] { 53,22,23,49,48,28,52 };
break;
case 54:
numbers = new int[7] { 54, 43,25,27,38,35,41 };
break;
}
LoadLand(numbers);
}
private static void LoadLand(int[] numbers)
{
if (brume.GetObjects().Count != 0)
{
List<BrumeObject> LandList = new List<BrumeObject>();
List<BrumeObject> ObjectList = new List<BrumeObject>();
List<BrumeObject> All = brume.GetObjects();
List<int> RemoveList = new List<int>();
bool[] available = new bool[numbers.Length];
foreach (BrumeObject o in All)
{
if (o.Name.StartsWith("_Land"))
{
LandList.Add(o);
}
if (o.Name.StartsWith("Land"))
{
ObjectList.Add(o);
}
}
for (int i = 0; i < LandList.Count; i++)
{
string strnumb = LandList[i].Name.Substring(5);
string integer = "";
for (int h = 0; h < strnumb.Length; h++)
{
if (Char.IsDigit(strnumb[h]))
{
integer += strnumb[h];
}
else
{
break;
}
}
int landnumber = Int32.Parse(integer);
bool isInList = false;
for (int x = 0; x < numbers.Length; x++)
{
if (landnumber == numbers[x])
{
available[x] = true;
isInList = true;
break;
}
}
if (!isInList)
{
RemoveList.Add(landnumber);
}
}
foreach (int num in RemoveList)
{
foreach (BrumeObject o in All)
{
if (o.Name.Contains(num.ToString()))
{
// foreach (BrumeCollisionShape s in o.GetCollisionShapes())
//{
// brume.CollisionWorld.CollisionSpace.RemoveCollisionShape(s); <------------error
// }
brume.RemoveObject(o);
}
}
}
for (int i = 0; i < available.Length; i++)
{
if (!available[i])
{
BrumeXMesh mesh = null;
BrumeLightedObject land = null;
if (File.Exists("..//..//Terrain//land_" + numbers[i] + "_water.x"))
{
mesh = new BrumeXMesh(brume, "Land" + numbers[i] + "Mesh", "land_" + numbers[i] + "_water.x", false);
land = new BrumeLightedObject(brume, "_Land" + numbers[i] + "_water");
}
if (File.Exists("..//..//Terrain//land_" + numbers[i] + "_sneeuw.x"))
{
mesh = new BrumeXMesh(brume, "Land" + numbers[i] + "Mesh", "land_" + numbers[i] + "_sneeuw.x", false);
land = new BrumeLightedObject(brume, "_Land" + numbers[i] + "_sneeuw");
}
if (File.Exists("..//..//Terrain//land_" + numbers[i] + "_zand.x"))
{
mesh = new BrumeXMesh(brume, "Land" + numbers[i] + "Mesh", "land_" + numbers[i] + "_zand.x", false);
land = new BrumeLightedObject(brume, "_Land" + numbers[i] + "_zand");
}
if (File.Exists("..//..//Terrain//land_" + numbers[i] + "_bos.x"))
{
mesh = new BrumeXMesh(brume, "Land" + numbers[i] + "Mesh", "land_" + numbers[i] + "_bos.x", false);
land = new BrumeLightedObject(brume, "_Land" + numbers[i] + "_bos");
}
land.Mesh = mesh;
land.Pos = new BrumeVector(0, 0, 0);
land.AddCollisionShapes(brume.GenerateCollisionShapes(land));
land.ShowCollisionShapes = true;
}
}
}
else
{
for (int i = 0; i < numbers.Length; i++)
{
BrumeXMesh mesh = null;
BrumeLightedObject land = null;
if (File.Exists("..//..//Terrain//land_" + numbers[i] + "_water.x"))
{
mesh = new BrumeXMesh(brume, "Land" + numbers[i] + "Mesh", "land_" + numbers[i] + "_water.x", false);
land = new BrumeLightedObject(brume, "_Land" + numbers[i] + "_water");
}
if (File.Exists("..//..//Terrain//land_" + numbers[i] + "_sneeuw.x"))
{
mesh = new BrumeXMesh(brume, "Land" + numbers[i] + "Mesh", "land_" + numbers[i] + "_sneeuw.x", false);
land = new BrumeLightedObject(brume, "_Land" + numbers[i] + "_sneeuw");
}
if (File.Exists("..//..//Terrain//land_" + numbers[i] + "_zand.x"))
{
mesh = new BrumeXMesh(brume, "Land" + numbers[i] + "Mesh", "land_" + numbers[i] + "_zand.x", false);
land = new BrumeLightedObject(brume, "_Land" + numbers[i] + "_zand");
}
if (File.Exists("..//..//Terrain//land_" + numbers[i] + "_bos.x"))
{
mesh = new BrumeXMesh(brume, "Land" + numbers[i] + "Mesh", "land_" + numbers[i] + "_bos.x", false);
land = new BrumeLightedObject(brume, "_Land" + numbers[i] + "_bos");
}
land.Mesh = mesh;
land.Pos = new BrumeVector(0, 0, 0);
land.ShowCollisionShapes = true;
land.HasCollisions = true; <----------------error
}
}
}
}
}