| 439 |
|
|
| 440 |
// Set up the picker. |
// Set up the picker. |
| 441 |
triPicker = new TrianglePickerMapper(smgr.CollisionManager); |
triPicker = new TrianglePickerMapper(smgr.CollisionManager); |
| 442 |
mts = smgr.CreateMetaTriangleSelector(); |
//mts = smgr.CreateMetaTriangleSelector(); |
| 443 |
|
|
| 444 |
// Only create a texture manager if the user configuration option is enabled for downloading textures |
// Only create a texture manager if the user configuration option is enabled for downloading textures |
| 445 |
if (loadTextures) |
if (loadTextures) |
| 894 |
//tx.vObj.mesh.Dispose(); |
//tx.vObj.mesh.Dispose(); |
| 895 |
|
|
| 896 |
if (tx.vObj.node != null && tx.vObj.node.TriangleSelector != null) |
if (tx.vObj.node != null && tx.vObj.node.TriangleSelector != null) |
| 897 |
|
{ |
| 898 |
|
if (mts != null) |
| 899 |
|
{ |
| 900 |
mts.RemoveTriangleSelector(tx.vObj.node.TriangleSelector); |
mts.RemoveTriangleSelector(tx.vObj.node.TriangleSelector); |
| 901 |
|
} |
| 902 |
|
|
| 903 |
|
} |
| 904 |
if (tx.vObj.node != null && tx.vObj.node.Raw != IntPtr.Zero) |
if (tx.vObj.node != null && tx.vObj.node.Raw != IntPtr.Zero) |
| 905 |
smgr.AddToDeletionQueue(tx.vObj.node); |
smgr.AddToDeletionQueue(tx.vObj.node); |
| 906 |
|
|
| 1330 |
TriangleSelector trisel = smgr.CreateTriangleSelector(vObj.mesh, node); |
TriangleSelector trisel = smgr.CreateTriangleSelector(vObj.mesh, node); |
| 1331 |
node.TriangleSelector = trisel; |
node.TriangleSelector = trisel; |
| 1332 |
triPicker.AddTriangleSelector(trisel, node); |
triPicker.AddTriangleSelector(trisel, node); |
| 1333 |
|
if (mts != null) |
| 1334 |
|
{ |
| 1335 |
lock (mts) |
lock (mts) |
| 1336 |
{ |
{ |
| 1337 |
mts.AddTriangleSelector(trisel); |
mts.AddTriangleSelector(trisel); |
| 1338 |
} |
} |
| 1339 |
|
} |
| 1340 |
if (vObj.prim.Textures != null) |
if (vObj.prim.Textures != null) |
| 1341 |
{ |
{ |
| 1342 |
if (vObj.prim.Textures.DefaultTexture != null) |
if (vObj.prim.Textures.DefaultTexture != null) |
| 1510 |
TriangleSelector trisel = smgr.CreateTriangleSelector(vObj.mesh, node); |
TriangleSelector trisel = smgr.CreateTriangleSelector(vObj.mesh, node); |
| 1511 |
node.TriangleSelector = trisel; |
node.TriangleSelector = trisel; |
| 1512 |
triPicker.AddTriangleSelector(trisel, node); |
triPicker.AddTriangleSelector(trisel, node); |
| 1513 |
|
if (mts != null) |
| 1514 |
|
{ |
| 1515 |
lock (mts) |
lock (mts) |
| 1516 |
{ |
{ |
| 1517 |
mts.AddTriangleSelector(trisel); |
mts.AddTriangleSelector(trisel); |
| 1518 |
} |
} |
| 1519 |
|
} |
| 1520 |
if (vObj.prim.Textures != null) |
if (vObj.prim.Textures != null) |
| 1521 |
{ |
{ |
| 1522 |
if (vObj.prim.Textures.DefaultTexture != null) |
if (vObj.prim.Textures.DefaultTexture != null) |
| 2037 |
System.Drawing.Bitmap terrainbmp = terrainBitmap[regionhandle]; |
System.Drawing.Bitmap terrainbmp = terrainBitmap[regionhandle]; |
| 2038 |
lock (terrainbmp) |
lock (terrainbmp) |
| 2039 |
{ |
{ |
| 2040 |
Util.SaveBitmapToFile(terrainbmp, m_startupDirectory + "\\" + path); |
Util.SaveBitmapToFile(terrainbmp, m_startupDirectory + "/" + path); |
| 2041 |
|
|
| 2042 |
} |
} |
| 2043 |
device.FileSystem.WorkingDirectory = m_startupDirectory + "\\" + Util.MakePath("media", "materials", "textures", ""); |
device.FileSystem.WorkingDirectory = m_startupDirectory + "/" + Util.MakePath("media", "materials", "textures", ""); |
| 2044 |
TerrainSceneNode terrain = null; |
TerrainSceneNode terrain = null; |
| 2045 |
lock (terrains) |
lock (terrains) |
| 2046 |
{ |
{ |
| 2094 |
{ |
{ |
| 2095 |
if (terrainsels.ContainsKey(regionhandle)) |
if (terrainsels.ContainsKey(regionhandle)) |
| 2096 |
{ |
{ |
| 2097 |
|
if (mts != null) |
| 2098 |
|
{ |
| 2099 |
mts.RemoveTriangleSelector(terrainsels[regionhandle]); |
mts.RemoveTriangleSelector(terrainsels[regionhandle]); |
| 2100 |
|
} |
| 2101 |
terrainsels.Remove(regionhandle); |
terrainsels.Remove(regionhandle); |
| 2102 |
|
|
| 2103 |
} |
} |
| 2112 |
terrainsels.Add(regionhandle, terrainsel); |
terrainsels.Add(regionhandle, terrainsel); |
| 2113 |
|
|
| 2114 |
} |
} |
| 2115 |
|
if (mts != null) |
| 2116 |
|
{ |
| 2117 |
mts.AddTriangleSelector(terrainsel); |
mts.AddTriangleSelector(terrainsel); |
| 2118 |
|
} |
| 2119 |
//Vector3D terrainpos = terrain.TerrainCenter; |
//Vector3D terrainpos = terrain.TerrainCenter; |
| 2120 |
//terrainpos.Z = terrain.TerrainCenter.Z - 100f; |
//terrainpos.Z = terrain.TerrainCenter.Z - 100f; |
| 2121 |
//terrain.Position = terrainpos; |
//terrain.Position = terrainpos; |
| 2184 |
if (newObject.node != null) |
if (newObject.node != null) |
| 2185 |
{ |
{ |
| 2186 |
if (newObject.node.TriangleSelector != null) |
if (newObject.node.TriangleSelector != null) |
| 2187 |
|
{ |
| 2188 |
|
if (mts != null) |
| 2189 |
|
{ |
| 2190 |
mts.RemoveTriangleSelector(newObject.node.TriangleSelector); |
mts.RemoveTriangleSelector(newObject.node.TriangleSelector); |
| 2191 |
|
} |
| 2192 |
|
} |
| 2193 |
|
|
| 2194 |
for (uint i = 0; i < newObject.node.MaterialCount; i++) |
for (uint i = 0; i < newObject.node.MaterialCount; i++) |
| 2195 |
{ |
{ |
| 2539 |
|
|
| 2540 |
// Remove this object from our picker. |
// Remove this object from our picker. |
| 2541 |
if (obj.node.TriangleSelector != null) |
if (obj.node.TriangleSelector != null) |
| 2542 |
|
{ |
| 2543 |
|
if (mts != null) |
| 2544 |
|
{ |
| 2545 |
mts.RemoveTriangleSelector(obj.node.TriangleSelector); |
mts.RemoveTriangleSelector(obj.node.TriangleSelector); |
| 2546 |
|
} |
| 2547 |
|
} |
| 2548 |
|
|
| 2549 |
smgr.AddToDeletionQueue(obj.node); |
smgr.AddToDeletionQueue(obj.node); |
| 2550 |
obj.node = null; |
obj.node = null; |
| 3009 |
SceneNode node = triPicker.GetSceneNodeFromRay(projectedray, 0x0128, true, cam.SNCamera.Position); //smgr.CollisionManager.GetSceneNodeFromScreenCoordinates(new Position2D(p_event.MousePosition.X, p_event.MousePosition.Y), 0, false); |
SceneNode node = triPicker.GetSceneNodeFromRay(projectedray, 0x0128, true, cam.SNCamera.Position); //smgr.CollisionManager.GetSceneNodeFromScreenCoordinates(new Position2D(p_event.MousePosition.X, p_event.MousePosition.Y), 0, false); |
| 3010 |
if (node == null) |
if (node == null) |
| 3011 |
{ |
{ |
| 3012 |
|
if (mts != null) |
| 3013 |
|
{ |
| 3014 |
// Collide test against the terrain |
// Collide test against the terrain |
| 3015 |
if (smgr.CollisionManager.GetCollisionPoint(projectedray, mts, out collisionpoint, out tri)) |
if (smgr.CollisionManager.GetCollisionPoint(projectedray, mts, out collisionpoint, out tri)) |
| 3016 |
{ |
{ |
| 3026 |
} |
} |
| 3027 |
} |
} |
| 3028 |
} |
} |
| 3029 |
|
} |
| 3030 |
else |
else |
| 3031 |
{ |
{ |
| 3032 |
// Sometimes the terrain picker returns weird values. |
// Sometimes the terrain picker returns weird values. |
| 3034 |
m_log.WarnFormat("[PICK]: Picked <{0},{1},{2}>",node.Position.X,node.Position.Y,node.Position.Z); |
m_log.WarnFormat("[PICK]: Picked <{0},{1},{2}>",node.Position.X,node.Position.Y,node.Position.Z); |
| 3035 |
if (node.Position.X == 0 && node.Position.Z == 0) |
if (node.Position.X == 0 && node.Position.Z == 0) |
| 3036 |
{ |
{ |
| 3037 |
|
if (mts != null) |
| 3038 |
|
{ |
| 3039 |
if (smgr.CollisionManager.GetCollisionPoint(projectedray, mts, out collisionpoint, out tri)) |
if (smgr.CollisionManager.GetCollisionPoint(projectedray, mts, out collisionpoint, out tri)) |
| 3040 |
{ |
{ |
| 3041 |
|
|
| 3050 |
} |
} |
| 3051 |
} |
} |
| 3052 |
} |
} |
| 3053 |
|
} |
| 3054 |
else |
else |
| 3055 |
{ |
{ |
| 3056 |
// Target the node |
// Target the node |