From 3e8ca0b2737618bd5a86b1496fca1c1e5c96afde Mon Sep 17 00:00:00 2001 From: Christopher Date: Thu, 6 Aug 2020 22:20:39 +0200 Subject: [PATCH] use List --- Module/BirdsModule/FlowEntry.cs | 25 +++++++++++++++++++++++++ Module/BirdsModule/FlowMap.cs | 33 ++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 Module/BirdsModule/FlowEntry.cs diff --git a/Module/BirdsModule/FlowEntry.cs b/Module/BirdsModule/FlowEntry.cs new file mode 100644 index 0000000..d729db8 --- /dev/null +++ b/Module/BirdsModule/FlowEntry.cs @@ -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; + } + } +} diff --git a/Module/BirdsModule/FlowMap.cs b/Module/BirdsModule/FlowMap.cs index 74737c8..94b1d9c 100644 --- a/Module/BirdsModule/FlowMap.cs +++ b/Module/BirdsModule/FlowMap.cs @@ -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 m_flowMap = new List(); + 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;