(i.e.
|_|_|2|_|_|
|_|2|1|2|_|
|2|1|x|1|2|
|_|2|1|2|_|
|_|_|2|_|_|
where
x = player location
1 = turfs available at range 1
2 = turfs available at range 2
)
I have tried printf() style debugging, and it seems like it should work. When I try to actually use the range finder, however, something messes up and I am not sure what.
Code:
mob
proc
InRange(var/range as num)
{ //define the range area
//just need to snub the diagonals from this area.
var/turf/turfsInRange = oview(range);
for(var/i = 1, i <= length(turfsInRange), i++)
{
//be able to reference turfs in the list easily.
var/turf/t = turfsInRange[i];
var/relX = src.x - t.x;
src.Room("Turf [i]'s relative X is [relX]");
var/relY = src.y - t.y;
src.Room("Turf [i]'s relative Y is [relY]");
var/relLoc = abs(relX) + abs(relY);
src.Room("Turf [i]'s relative location is [relLoc]");
//the issue starts when I add this in
if(relLoc > range)
{
turfsInRange -= turfsInRange[i];
}
//end of problem section.
//do not include the user's current position
//in the list.
if(t.x == src.x && t.y == src.y)
{
turfsInRange -= turfsInRange[i];
}
}
var/c = 1;
while(c <= length(turfsInRange))
{
//establish reference
var/turf/t = turfsInRange[c];
//paint everything within range red.
t.text = "<font color='red'>[t.text]";
c++;
}
}
What happens:
This is a picture of what happens when range 1 is used.

This is what happens when range 2 is used.

Things onward from that point tend to follow a trend of what range 2 looks like.
This is strange and confusing for me. My debug code looks like this if I remove the IF statement that I marked off:
Turf 1's relative X is 0
Turf 1's relative Y is 0
Turf 1's relative location is 0
Turf 2's relative X is 1
Turf 2's relative Y is 1
Turf 2's relative location is 2
Turf 3's relative X is 0
Turf 3's relative Y is 1
Turf 3's relative location is 1
Turf 4's relative X is -1
Turf 4's relative Y is 1
Turf 4's relative location is 2
Turf 5's relative X is 1
Turf 5's relative Y is 0
Turf 5's relative location is 1
Turf 6's relative X is -1
Turf 6's relative Y is 0
Turf 6's relative location is 1
Turf 7's relative X is 1
Turf 7's relative Y is -1
Turf 7's relative location is 2
Turf 8's relative X is 0
Turf 8's relative Y is -1
Turf 8's relative location is 1
Turf 9's relative X is -1
Turf 9's relative Y is -1
Turf 9's relative location is 2
Turf 10's relative X is 2
Turf 10's relative Y is 2
Turf 10's relative location is 4
Turf 11's relative X is 1
Turf 11's relative Y is 2
Turf 11's relative location is 3
Turf 12's relative X is 0
Turf 12's relative Y is 2
Turf 12's relative location is 2
Turf 13's relative X is -1
Turf 13's relative Y is 2
Turf 13's relative location is 3
Turf 14's relative X is -2
Turf 14's relative Y is 2
Turf 14's relative location is 4
Turf 15's relative X is 2
Turf 15's relative Y is 1
Turf 15's relative location is 3
Turf 16's relative X is -2
Turf 16's relative Y is 1
Turf 16's relative location is 3
Turf 17's relative X is 2
Turf 17's relative Y is 0
Turf 17's relative location is 2
Turf 18's relative X is -2
Turf 18's relative Y is 0
Turf 18's relative location is 2
Turf 19's relative X is 2
Turf 19's relative Y is -1
Turf 19's relative location is 3
Turf 20's relative X is -2
Turf 20's relative Y is -1
Turf 20's relative location is 3
Turf 21's relative X is 2
Turf 21's relative Y is -2
Turf 21's relative location is 4
Turf 22's relative X is 1
Turf 22's relative Y is -2
Turf 22's relative location is 3
Turf 23's relative X is 0
Turf 23's relative Y is -2
Turf 23's relative location is 2
Turf 24's relative X is -1
Turf 24's relative Y is -2
Turf 24's relative location is 3
Turf 25's relative X is -2
Turf 25's relative Y is -2
Turf 25's relative location is 4
So essentially, it is recognizing the distance properly. But it changes when I add the IF statement back in:
Turf 1's relative X is 0
Turf 1's relative Y is 0
Turf 1's relative location is 0
Turf 2's relative X is 1
Turf 2's relative Y is 1
Turf 2's relative location is 2
Turf 3's relative X is 0
Turf 3's relative Y is 1
Turf 3's relative location is 1
Turf 4's relative X is -1
Turf 4's relative Y is 1
Turf 4's relative location is 2
Turf 5's relative X is 1
Turf 5's relative Y is 0
Turf 5's relative location is 1
Turf 6's relative X is -1
Turf 6's relative Y is 0
Turf 6's relative location is 1
Turf 7's relative X is 1
Turf 7's relative Y is -1
Turf 7's relative location is 2
Turf 8's relative X is 0
Turf 8's relative Y is -1
Turf 8's relative location is 1
Turf 9's relative X is -1
Turf 9's relative Y is -1
Turf 9's relative location is 2
Turf 10's relative X is 2
Turf 10's relative Y is 2
Turf 10's relative location is 4
Turf 11's relative X is 0
Turf 11's relative Y is 2
Turf 11's relative location is 2
Turf 12's relative X is -1
Turf 12's relative Y is 2
Turf 12's relative location is 3
Turf 13's relative X is 2
Turf 13's relative Y is 1
Turf 13's relative location is 3
Turf 14's relative X is 2
Turf 14's relative Y is 0
Turf 14's relative location is 2
Turf 15's relative X is -2
Turf 15's relative Y is 0
Turf 15's relative location is 2
Turf 16's relative X is 2
Turf 16's relative Y is -1
Turf 16's relative location is 3
Turf 17's relative X is 2
Turf 17's relative Y is -2
Turf 17's relative location is 4
Turf 18's relative X is 0
Turf 18's relative Y is -2
Turf 18's relative location is 2
Turf 19's relative X is -1
Turf 19's relative Y is -2
Turf 19's relative location is 3
What concerns me most about that is that it is only displaying 19 tiles. I do not know why that would be, since the turfs should display their information before being removed by the IF statement.
Can anyone explain what is happening here?
You already reference turfsInRange[i] when you assign turf/t to it. Because of this you don't need to do turfsInRange -= turfsInRange[i], you can do turfsInRange -= t.
Also, your if statement that checks for srcs location is more complicated than need be. Simply doing if(src.loc == t) will do the same thing.
The problem obviously is that the list is not removing entries too far away. Hopefully these small fixes will help, though if they don't at least they will have simplified things a bit.