public SoundEmitter(Location l, float _SoundPower) { location = l; radius = 0.3f; soundPower = _SoundPower; circleLine = DrawerStructure.CreateCircle(TerrainBoard.transformGridToPosition(l.x, l.y), radius, new Color(0, 1, 1)); }
void DrawSoundParticle() { for (int x = 0; x < TerrainBoard.map.width; ++x) { for (int y = 0; y < TerrainBoard.map.height; ++y) { TerrainBoard.SetColor(x, y, new Color(IntensityGrid[x, y], 0, 0) + new Color(1 - IntensityGrid[x, y], 1 - IntensityGrid[x, y], 1 - IntensityGrid[x, y])); } } }
public static void CreateEmitter(Vector3 pos, float SoundPower = 10, bool isChild = false) { Location l = TerrainBoard.transformPositionToGrid(pos); SoundEmitter e = new SoundEmitter(l, SoundPower); e.ChildCount = 0; //Emitters[l] = e; toBeCreated.Enqueue(e); }
private void OnPostRender() { TerrainBoard.SetColor(playerPos, Color.grey); TerrainBoard.SetColor(targetPos, Color.blue); Vector3 prevPoint = result.Peek(); Vector3 curPoint = result.Pop(); foreach (Vector3 t in result) { prevPoint = curPoint; curPoint = t; DrawHelper.DrawLine(prevPoint, curPoint, Color.red); } }
void Wander() { if (mov.GetTargetCount() == 0) { TerrainBoard.SetColor(goalGrid.x, goalGrid.y, Color.white); SelectTarget(); goalGrid = TerrainBoard.transformPositionToGrid(pos + dir); if (!TerrainBoard.map.InBound(goalGrid)) { return; } TerrainBoard.SetColor(goalGrid.x, goalGrid.y, Color.red); mov.ResetTarget(Search(pos, pos + dir)); } }
public Queue <Vector2> Search(Vector2 a, Vector2 b) { Location start = TerrainBoard.transformPositionToGrid(a); Location goal = TerrainBoard.transformPositionToGrid(b); SearchAlgorithm.Search(start, goal); Queue <Vector2> targets = new Queue <Vector2>(); foreach (Location l in SearchAlgorithm.GetResult()) { targets.Enqueue(TerrainBoard.transformGridToPosition(l.x, l.y)); } return(targets); //TerrainBoard.ResetColor(); //foreach (Location i in TerrainBoard.AStar.GetExploredList()) //{ // TerrainBoard.SetColor(i.x,i.y,Color.red); //} }
//Location l, float radius, float intensity,float power) private void UpdateSoundParticle(SoundEmitter e) { int Rangex = e.location.x + (int)e.radius; int Rangey = e.location.y + (int)e.radius; List <Location> walls = new List <Location>(); //Find wall for (int x = e.location.x - (int)e.radius - 1; x < Rangex; x++) { for (int y = e.location.y - (int)e.radius; y < Rangey; y++) { if (TerrainBoard.map.IsWall(x, y)) { walls.Add(new Location(x, y)); } } } for (int x = 0; x < Rangex; x++) { if (x < 0 || x >= TerrainBoard.map.width) { continue; } for (int y = 0; y < Rangey; y++) { if (y < 0 || y >= TerrainBoard.map.height) { continue; } Vector2 dir = new Vector2(x - e.location.x, y - e.location.y); //Check if collided with wall bool intersected = false; foreach (Location i in walls) { int wallNeighbourCount = 0; if (TerrainBoard.map.IsWall(i + new Location(-1, -1))) { wallNeighbourCount++; } if (TerrainBoard.map.IsWall(i + new Location(0, -1))) { wallNeighbourCount++; } if (TerrainBoard.map.IsWall(i + new Location(1, -1))) { wallNeighbourCount++; } if (TerrainBoard.map.IsWall(i + new Location(-1, 0))) { wallNeighbourCount++; } if (TerrainBoard.map.IsWall(i + new Location(1, 0))) { wallNeighbourCount++; } if (TerrainBoard.map.IsWall(i + new Location(-1, 1))) { wallNeighbourCount++; } if (TerrainBoard.map.IsWall(i + new Location(0, 1))) { wallNeighbourCount++; } if (TerrainBoard.map.IsWall(i + new Location(1, 1))) { wallNeighbourCount++; } if (i.x == e.location.x && i.y == e.location.y) { continue; } Vector2 rayStart = new Vector2(x, y); Vector2 rayEnd = new Vector2(e.location.x, e.location.y); if (LineAABBIntersect(new Vector2(i.x, i.y), rayStart, rayEnd)) { intersected = true; if (e.ChildCount < 3 && !e.isChild) { if (!toBeCreatedLocation.Contains(e.location) && wallNeighbourCount < 2) { ++e.ChildCount; CreateEmitter(TerrainBoard.transformGridToPosition(i.x, i.y), e.soundPower / 3, true); } } } } if (intersected) { continue; } if (dir.magnitude < e.radius) { float currentIntensity = IntensityGrid[x, y] + e.intensity; if (currentIntensity > 1) { currentIntensity = 1; } IntensityGrid[x, y] = currentIntensity; } } } }