use List
parent
0ff367ef6a
commit
3e8ca0b273
|
@ -0,0 +1,25 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Flocking
|
||||
{
|
||||
class FlowEntry
|
||||
{
|
||||
public float X = 0;
|
||||
public float Y = 0;
|
||||
public float Z = 0;
|
||||
|
||||
public float Value = 0;
|
||||
|
||||
public FlowEntry(float x, float y, float z, float value)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
Z = z;
|
||||
|
||||
Value = value;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -27,6 +27,7 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
|
@ -35,12 +36,13 @@ namespace Flocking
|
|||
public class FlowMap
|
||||
{
|
||||
private Scene m_scene;
|
||||
private double[, ,] m_flowMap;
|
||||
private uint regionX;
|
||||
private uint regionY;
|
||||
private uint regionZ;
|
||||
private float regionBorder;
|
||||
|
||||
private List<FlowEntry> m_flowMap = new List<FlowEntry>();
|
||||
|
||||
public FlowMap (Scene scene, int maxHeight, float borderSize)
|
||||
{
|
||||
m_scene = scene;
|
||||
|
@ -48,7 +50,6 @@ namespace Flocking
|
|||
regionY = m_scene.RegionInfo.RegionSizeY;
|
||||
regionZ = (uint)maxHeight;
|
||||
regionBorder = borderSize;
|
||||
m_flowMap = new double[regionX, regionY, regionZ];
|
||||
}
|
||||
|
||||
public int LengthX {
|
||||
|
@ -68,20 +69,20 @@ namespace Flocking
|
|||
//fill in the boundaries
|
||||
for( int x = 0; x < regionX; x++ ) {
|
||||
for( int y = 0; y < regionY; y++ ) {
|
||||
m_flowMap[x,y,0] = 100;
|
||||
m_flowMap[x,y, regionZ-1] = 100;
|
||||
m_flowMap.Add(new FlowEntry(x, y, 0, 100));
|
||||
m_flowMap.Add(new FlowEntry(x, y, regionZ - 1, 100));
|
||||
}
|
||||
}
|
||||
for( int x = 0; x < regionX; x++ ) {
|
||||
for( int z = 0; z < regionZ; z++ ) {
|
||||
m_flowMap[x,0,z] = 100;
|
||||
m_flowMap[x,regionY-1,z] = 100;
|
||||
m_flowMap.Add(new FlowEntry(x, 0, z, 100));
|
||||
m_flowMap.Add(new FlowEntry(x, regionY - 1, z, 100));
|
||||
}
|
||||
}
|
||||
for( int y = 0; y < regionY; y++ ) {
|
||||
for( int z = 0; z < regionZ; z++ ) {
|
||||
m_flowMap[0,y,z] = 100;
|
||||
m_flowMap[regionX-1,y,z] = 100;
|
||||
m_flowMap.Add(new FlowEntry(0, y, z, 100));
|
||||
m_flowMap.Add(new FlowEntry(regionX - 1, y, z, 100));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,7 +92,7 @@ namespace Flocking
|
|||
int zMax = Convert.ToInt32(m_scene.GetGroundHeight( x, y ));
|
||||
for( int z = 1; z < zMax; z++ ) {
|
||||
if (x < regionX && y < regionY && z < zMax)
|
||||
m_flowMap[x,y,z] = 100;
|
||||
m_flowMap.Add(new FlowEntry(x, y, z, 100));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -119,7 +120,7 @@ namespace Flocking
|
|||
for( int y = minY; y < maxY; y++ ) {
|
||||
for( int z = minZ; z < maxZ; z++ ) {
|
||||
if(x < maxX && y < maxY && z < maxX)
|
||||
m_flowMap[x,y,z] = 100;
|
||||
m_flowMap.Add(new FlowEntry(x, y, z, 100));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -186,14 +187,20 @@ namespace Flocking
|
|||
|
||||
public bool IsWithinObstacle( int x, int y, int z ) {
|
||||
bool retVal = false;
|
||||
if (x >= LengthX || y >= LengthY || z >= LengthZ)
|
||||
|
||||
FlowEntry flow = m_flowMap.Find(X => X.X == x && X.Y == y && X.Z == z);
|
||||
|
||||
if (flow == null)
|
||||
return retVal;
|
||||
|
||||
if (x >= LengthX || y >= LengthY || z >= LengthZ)
|
||||
{
|
||||
retVal = true;
|
||||
}
|
||||
else if (x < 0 || y < 0 || z < 0)
|
||||
{
|
||||
retVal = true;
|
||||
} else if (m_flowMap[x,y,z] > 50) {
|
||||
} else if (flow.Value > 50) {
|
||||
retVal = true;
|
||||
}
|
||||
return retVal;
|
||||
|
|
Loading…
Reference in New Issue