When MapArray doesn't have a certain number?

BlitzMax Forums/BlitzMax Beginners Area/When MapArray doesn't have a certain number?

Amon(Posted 2007) [#1]
Hi. Heres my problem.

I use my map editor to build a test map. I have a platform tile with 2 frames. Frame 0 is off and frame 1 is on.

The code below adds 1 to TTile.PlatformOnCount id there are any in the Factory Array.

Function FillTestFactoryMap() 
	For Local x:Int = 0 Until FMWIDTH
		For Local y:Int = 0 Until FMHeight
			FactoryMapTest[x, y]= TTile2.Create() 
			'FactoryMapTest[x,y] = ttile2
			FactoryMapTest[x, y].id = FactoryMap[x, y].id
			If FactoryMapTest[x, y].id = 1
				TTile2.PlatformOnCount:+1
			End If
		Next
	Next
End Function


Now I'm able to switch from on to off when my character stood on one or gone over one. This is not problem.

My problem is that I call this method "DetectChangeableTiles() " in the loop and it has this code in it.



As you can see from the code, if my character walks on the tile and it = 1, it switches it to 0 and deducts 1 from TTile2.PlatformOnCount. Problem is though that TTile2.PlatformOnCount reduces by one as if it was in a loop. ie if I step on the tile instead of it deducting just 1 and stopping it continues to deduct 1.

I need for DetectChangeableTiles() to be in the main loop to detect the tiles in realtime.

Looking at my code is there anyway I can deduct only one from TTile2.PlatformOnCount
and only when the player is on the tile?

[edit] Or, if there is a way to detect when an array no longer contains a specific number that wouyld help me also.

Here's some screenies of what I'm working on.






TomToad(Posted 2007) [#2]
I think this is your problem
		If FactoryMapTest[(x + 20) / 32, y / 32 + 1].id = 1 or FactoryMapTest[(x - 18) / 32 + 1, y / 32 + 1].id = 1
				TTile2.PlatformOnCount:-1

'********* PROBLEM WITH NEXT LINE *****************
				FactoryMapTest[(x + 20) / 32, y / 32 + 1].id = 0 or FactoryMapTest[(x - 18) / 32 + 1, y / 32 + 1].id = 0
			
			End If

I think what you are trying to do is set both values to 0, but instead what you are doing is an equality test with the second value, oring the result with 0 and then storing that in the first value. Essentially changing nothing.
I believe you want this.
		If FactoryMapTest[(x + 20) / 32, y / 32 + 1].id = 1 or FactoryMapTest[(x - 18) / 32 + 1, y / 32 + 1].id = 1
				TTile2.PlatformOnCount:-1
				FactoryMapTest[(x + 20) / 32, y / 32 + 1].id = 0
                                FactoryMapTest[(x - 18) / 32 + 1, y / 32 + 1].id = 0
			
			End If



Amon(Posted 2007) [#3]
That makes sense and has fixed my problem. Thanks, dude. :)