Mouse.Where is failing to respond
Author |
Message |
J-son
|
Posted: Thu Feb 06, 2014 11:07 pm Post subject: Mouse.Where is failing to respond |
|
|
Alright. I am using a for loop, and Mouse.Where after the for to read the Mouse's button.
When the button goes down, my code is to advance.
However, only RARELY does pressing the mouse actually work. Most of the time there is no response.
I had my code working earlier- I changed a few variables prior to this for loop, but I doubt they have any impact on this.
Turing: |
for k : 1 .. 25
for p : 1 .. 20
Mouse.Where (Mx, My, Mb )
if (((Stat.XC (CurT ) * 40 - 20) - (k * 40 - 20)) ** 2) + (((Stat.YC (CurT ) * 40 + 80) - (p * 40 + 80)) ** 2) <= (Stat.Burst (CurT ) * 40) ** 2 then
Draw.Box (k * 40 - 40 + PosX, p * 40 + 60 + PosY, k * 40 + PosX, p * 40 + 100 + PosY, 116)
Draw.Box (k * 40 - 41 + PosX, p * 40 + 59 + PosY, k * 40 + PosX + 1, p * 40 + 101 + PosY, 14)
if Mx > k * 40 - 40 + PosX and Mx < k * 40 + PosX and My > p * 40 + 60 + PosY and My < p * 40 + 100 + PosY then
Draw.Box (k * 40 - 40 + PosX, p * 40 + 60 + PosY, k * 40 + PosX, p * 40 + 100 + PosY, 55)
Draw.Box (k * 40 - 41 + PosX, p * 40 + 59 + PosY, k * 40 + PosX + 1, p * 40 + 101 + PosY, 52)
if Mb = 1 then
for Check : 1 .. FightSize
if Stat.Real (Check ) = true and Check not= CurT then
if k = Stat.XC (CurT ) and p = Stat.YC (CurT ) then
Cancel := true
exit
end if
end if
end for
Advant (1) := k * 40 - Stat.XC (CurT ) * 40
Advant (2) := p * 40 - Stat.YC (CurT ) * 40
for decreasing Shakugan : 10 .. 1
Draw.Line (Stat.XC (CurT ) * 40 - 20 + PosX, Stat.YC (CurT ) * 40 + 80 + PosY, Stat.XC (CurT ) * 40 - 20 + (Advant (1) div Shakugan ) + PosX,
Stat.YC (CurT ) *
40 + 80 + (Advant (2) div Shakugan ) + PosY, 37)
Draw.Oval (Stat.XC (CurT ) * 40 - 20 + (Advant (1) div Shakugan ) + PosX, Stat.YC (CurT ) * 40 + 60 + 20 + (Advant (2) div Shakugan ) + PosY, 2, 2, 54)
View.Update
delay (100)
end for
Stat.XC (CurT ) := k
Stat.YC (CurT ) := p
FirstNo := true
Moved := true
exit
end if
end if
end if
exit when Moved = true
end for
exit when Moved = true
end for
|
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
Raknarg
|
Posted: Fri Feb 07, 2014 12:56 am Post subject: RE:Mouse.Where is failing to respond |
|
|
Without context this code is really just not making sense to me.
If you want a better response (if no one else if able to help you right now), upload the whole code, and document your code so we know what the block is supposed to be doing. |
|
|
|
|
|
DemonWasp
|
Posted: Fri Feb 07, 2014 2:04 am Post subject: RE:Mouse.Where is failing to respond |
|
|
Turing: |
for p : 1 .. 20
Mouse.Where (Mx, My, Mb )
[...snip. .. ]
for decreasing Shakugan : 10 .. 1
[...snip. .. ]
delay (100)
end for
[...snip. .. ]
end for
|
If you pause for a full second in between calls to Mouse.Where, it's easily possible to miss entire clicks. You need to avoid having too many long delays between each call to Mouse.Where. |
|
|
|
|
|
J-son
|
Posted: Fri Feb 07, 2014 8:08 am Post subject: Re: Mouse.Where is failing to respond |
|
|
Turing: |
for k : 1 .. 25 % For horizontal blocks
for p : 1 .. 20 % For Vertical Blocks
Mouse.Where (Mx, My, Mb ) % Detect Mouse x,y,b
if (((Stat.XC (CurT ) * 40 - 20) - (k * 40 - 20)) ** 2) + (((Stat.YC (CurT ) * 40 + 80) - (p * 40 + 80)) ** 2) <= (Stat.Burst (CurT ) * 40) ** 2 then
% ^ If the block is within the move radius of the Character (Stat.Burst) then see below
Draw.Box (k * 40 - 40 + PosX, p * 40 + 60 + PosY, k * 40 + PosX, p * 40 + 100 + PosY, 116)
% Then draw two boxes, one dark ^, and one light that is larger for a glow.
Draw.Box (k * 40 - 41 + PosX, p * 40 + 59 + PosY, k * 40 + PosX + 1, p * 40 + 101 + PosY, 14)
if Mx > k * 40 - 40 + PosX and Mx < k * 40 + PosX and My > p * 40 + 60 + PosY and My < p * 40 + 100 + PosY then
% If the mouse is within the Box's radius, then see below.
Draw.Box (k * 40 - 40 + PosX, p * 40 + 60 + PosY, k * 40 + PosX, p * 40 + 100 + PosY, 55)
Draw.Box (k * 40 - 41 + PosX, p * 40 + 59 + PosY, k * 40 + PosX + 1, p * 40 + 101 + PosY, 52)
% Draw another two boxes, different in colour. ^
if Mb = 1 then
% If the mouse is clicked, see below.
for Check : 1 .. FightSize
% For 1 .. People + Enemies (FightSize) Ids
if Stat.Real (Check ) = true and Check not= CurT then
% If the target exists and the target is not the character moving then
if k = Stat.XC (CurT ) and p = Stat.YC (CurT ) then
% If you try to move on top of another person's box then Cancel = true and exit.
Cancel := true
exit
end if
end if
end for
% If the box is free, then proceed
Advant (1) := k * 40 - Stat.XC (CurT ) * 40
Advant (2) := p * 40 - Stat.YC (CurT ) * 40
% The distance from your new position to your old is Advant
for decreasing Shakugan : 10 .. 1
% Animation begins
Draw.Line (Stat.XC (CurT ) * 40 - 20 + PosX, Stat.YC (CurT ) * 40 + 80 + PosY, Stat.XC (CurT ) * 40 - 20 + (Advant (1) div Shakugan ) + PosX,
Stat.YC (CurT ) *
40 + 80 + (Advant (2) div Shakugan ) + PosY, 37)
Draw.Oval (Stat.XC (CurT ) * 40 - 20 + (Advant (1) div Shakugan ) + PosX, Stat.YC (CurT ) * 40 + 60 + 20 + (Advant (2) div Shakugan ) + PosY, 2, 2, 54)
View.Update
delay (100)
end for
% Animation ends, if all is successful then New co-ordinates are assigned
Stat.XC (CurT ) := k
Stat.YC (CurT ) := p
FirstNo := true
% ^ This means the person has done an action without ending their turn
Moved := true
% ^ Moved means they have moved
exit
% Exit
end if
end if
end if
exit when Moved = true
end for
exit when Moved = true
end for
|
|
|
|
|
|
|
Raknarg
|
Posted: Fri Feb 07, 2014 12:40 pm Post subject: RE:Mouse.Where is failing to respond |
|
|
Oh good call, DemonWasp.
He's right, if your delays are too long, it won't even register your mouse. Usually if you ahve a delay it's only for a few milliseconds. Why's yours so long? |
|
|
|
|
|
Zren
|
Posted: Fri Feb 07, 2014 1:01 pm Post subject: RE:Mouse.Where is failing to respond |
|
|
Some things that make your code easier to read:
When doing a long calculation, break it up and put it the parts on their own line and assign it to a variable. This way you can use descriptive variable names to make the code more readable.
Turing: |
if (((Stat.XC (CurT) * 40 - 20) - (k * 40 - 20)) ** 2) + (((Stat.YC (CurT) * 40 + 80) - (p * 40 + 80)) ** 2) <= (Stat.Burst (CurT) * 40) ** 2 then
|
Turing: |
var x := (Stat.XC (CurT) * 40 - 20) - (k * 40 - 20)
var y := (Stat.YC (CurT) * 40 + 80) - (p * 40 + 80)
var r := Stat.Burst (CurT) * 40
if x ** 2 + y ** 2 <= r ** 2 then
|
Turing: |
var blockX := k * 40 - 20
var blockY := p * 40 + 80
var characterX := Stat.XC (CurT) * 40 - 20
var characterY := Stat.YC (CurT) * 40 + 80
var x := characterX - blockX
var y := characterY - blockY
var r := Stat.Burst (CurT) * 40
if x ** 2 + y ** 2 <= r ** 2 then
|
I'm guessing Stat is a record. XY and YC are the center of the blocks?
What does the number 40 represent? What about 80? 20? You have a LOT of "Magic Numbers" that represent some transformation on the coordinates, but you haven't described them.
Assign the value to a variable if you ever use a number more than once. You ought to be assigning it to a variable. That way you only have to change it in one spot should you ever need to. Even if you only use it once, using a descriptive variable name will make the code more readable than a number the reader has to guess at.
Turing: |
var descriptiveVariableName1 := 40
var descriptiveVariableName2 := 20
var descriptiveVariableName3 := 80
var blockX := k * descriptiveVariableName1 - descriptiveVariableName2
var blockY := p * descriptiveVariableName1 + descriptiveVariableName3
var characterX := Stat.XC (CurT) * blockWidth - descriptiveVariableName2
var characterY := Stat.YC (CurT) * blockHeight + descriptiveVariableName3
var x := characterX - blockX
var y := characterY - blockY
var r := Stat.Burst (CurT) * descriptiveVariableName1
if x ** 2 + y ** 2 <= r ** 2 then
|
I'm guessing 40, 20 and 80 all have something in common, or are based on 40?
Turing: |
var descriptiveVariableName1 := 40
var descriptiveVariableName2 := descriptiveVariableName1 div 2
var descriptiveVariableName3 := descriptiveVariableName1 * 2
|
|
|
|
|
|
|
J-son
|
Posted: Fri Feb 07, 2014 3:38 pm Post subject: Re: Mouse.Where is failing to respond |
|
|
I didn't think I would need to post other parts of my code, I needed to know why the Mouse did not respond.
For the delay:
If the mouse is pressed, then it moves into the animation.
The animation needs the delay so the user can see the character moving.
So: for decreasing Shakugan : 10 .. 1, draw the line, delay, draw the line a bit further, and so on.
When the animation is finished, a variable is called to true and then the loop is exited. After this, the character cannot be moved until they leave their turn.
My problem is: I cannot get the Mouse click to activate. With no clicks, there will be no animation. No animation means no delay.
My other problem is: This code worked previously. I then added a second character into the controls, and now clicking rarely works.
Background info:
I am making a game - a turn based RPG, similar to Tactics ogre, Grimoire of the rift etc..
Except the map is 2d, so each 'block' or 'tile' is 40x40.
The 20 and 80 is to get into the middle of the block, so I can judge distances of the character.
E.G - If the character has 3 'burst,' the character can go to a block with its middle 120 away from his current tile's middle.
Vars:
Stat := Person's stats, Type
Records - XC,YC: - X-Coordinate, Y-Coordinate
Burst: Similar to move
CurT: Current Target
Advant, Shakugan: Animation vars, not much use
FightSize: Determines the amount of players of both sides
Mb: Mouse button
Moved: Determines whether the player has used up his/her Movement for his turn
So- I've placed a delay before the [if Mb = 1 then] and after it.
If works for the before, which means it gets to that code.
After the code, however, no reaction.
I still can't find out why |
|
|
|
|
|
evildaddy911
|
Posted: Fri Feb 07, 2014 4:15 pm Post subject: RE:Mouse.Where is failing to respond |
|
|
there could be 2 reasons for that. one would be its not running the mouse.where line, another could be a second delay somewhere else.
question: is this section of your code within another loop? otherwise it could easily be doing the 25*20=500 iterations, then continuing. looking at the code, if the mouse is not pressed in time, the 500 iterations could be over in under 10 milliseconds if you have a decent computer
If it is already inside an infinite loop, then you need to check for any other delays that could be causing it to miss the click |
|
|
|
|
|
Sponsor Sponsor
|
|
|
J-son
|
Posted: Fri Feb 07, 2014 4:43 pm Post subject: Re: Mouse.Where is failing to respond |
|
|
I only have 2 delays - One for buttons in the "Action" section, which does not run if movement is being run, and the movement animation.
My laptop is a gaming laptop, Top of the line (MSI GS70)
It is in an infinite loop, with boolean vars causing lines to run or not.
I ran my file again, the char moved twice then once again not reponding
Edit: I've done more testing .. may have the problem strangled in a bit |
|
|
|
|
|
J-son
|
Posted: Fri Feb 07, 2014 5:43 pm Post subject: Re: Mouse.Where is failing to respond |
|
|
I've found the problem; it appears to be 2 sections of code that conflict.
Prior to my original posted code, where these 2 chunks.
Chunk A:
Turing: |
for k : 1 .. 25
for p : 1 .. 20
if BattleBlock (k, p ) = 1 or BattleBlock (k, p ) = 2 then
Pic.Draw (TileWater, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
elsif BattleBlock (k, p ) = 3 or BattleBlock (k, p ) = 4 or BattleBlock (k, p ) = 5 or BattleBlock (k, p ) = 7 then
Pic.Draw (TileTree, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
elsif BattleBlock (k, p ) = 6 then
Pic.Draw (TileBridge, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
elsif BattleBlock (k, p ) = 8 or BattleBlock (k, p ) = 9 then
Pic.Draw (TileFlower, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
elsif BattleBlock (k, p ) < 20 then
Pic.Draw (TileGrass2, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
else
Pic.Draw (TileGrass, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
end if
end for
end for
|
Chunk B
Turing: |
for T : 1 .. FightSize
Mouse.Where (Mx, My, Mb )
if Stat.Real (T ) = true then % Detect what is clicked
if Mx > Stat.XC (CurT ) * 40 - 40 + PosX and Mx < Stat.XC (CurT ) * 40 + PosX and Stat.YC (CurT ) * 40 + 60 + PosY < My and Stat.YC (CurT ) * 40 + 100 + PosY > My then
Draw.Box (Stat.XC (CurT ) * 40 - 40 + PosX, Stat.YC (CurT ) * 40 + 60 + PosY, Stat.XC (CurT ) * 40 + PosX, Stat.YC (CurT ) * 40 + 100 + PosY, 121)
if Mb = 1 then
% if char selected
ClickedChar := true
SelectChar := CurT
exit
end if
elsif Mx > Stat.XC (T ) * 40 - 40 + PosX and Mx < Stat.XC (T ) * 40 + PosX and Stat.YC (T ) * 40 + 60 + PosY < My and Stat.YC (T ) * 40 + 100 + PosY > My then
Draw.Box (Stat.XC (T ) * 40 - 40 + PosX, Stat.YC (T ) * 40 + 60 + PosY, Stat.XC (T ) * 40 + PosX, Stat.YC (T ) * 40 + 100 + PosY, 121)
if Mb = 1 then
% if char selected
ClickedChar := true
SelectChar := T
exit
end if
elsif Mb = 1 and Mx > 0 and Mx < 800 and My > 100 and My < 700 then % If map selected
Burst := false
Action := false
ClickedChar := false
PosX + = Mx - Dx
PosY + = My - Dy
exit
end if
end if
end for
|
The problem:
If Chunk A is on top of Chunk B, Moving works, but the enemies cannot be selected. Edit: Highlighting fails here
If Chunk B is on top of Chunk A, Moving fails but enemies can be selected. Edit: Enemies are highlighted, but cannot be selected
Still a problem with the mouse either way. I do not see a correlation between the Chunks of code, but obvious there is. |
|
|
|
|
|
Zren
|
Posted: Fri Feb 07, 2014 7:52 pm Post subject: Re: Mouse.Where is failing to respond |
|
|
Tip: Whenever you have extremely similar code, there's likely tools to simplify things. Take Chunk A for example.
J-son @ Fri Feb 07, 2014 5:43 pm wrote:
Chunk A:
Turing: |
for k : 1 .. 25
for p : 1 .. 20
if BattleBlock (k, p ) = 1 or BattleBlock (k, p ) = 2 then
Pic.Draw (TileWater, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
elsif BattleBlock (k, p ) = 3 or BattleBlock (k, p ) = 4 or BattleBlock (k, p ) = 5 or BattleBlock (k, p ) = 7 then
Pic.Draw (TileTree, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
elsif BattleBlock (k, p ) = 6 then
Pic.Draw (TileBridge, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
elsif BattleBlock (k, p ) = 8 or BattleBlock (k, p ) = 9 then
Pic.Draw (TileFlower, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
elsif BattleBlock (k, p ) < 20 then
Pic.Draw (TileGrass2, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
else
Pic.Draw (TileGrass, - 40 + k * 40 + PosX, 60 + p * 40 + PosY, picCopy)
end if
end for
end for
|
The only difference in most of those if statements is the picId you're going to draw, and the blockId you use to select which picId. You can map blockIds to picIds with an array.
Turing: |
var blockIdToPicId : array 1 .. 3 of int
blockIdToPicId (1) := TileWater % Ocean
blockIdToPicId (2) := TileWater % Lake
blockIdToPicId (3) := TileTree % Forest
var blockId := BattleBlock (k, p )
var picId := blockIdToPicId (blockId )
Pic.Draw (picId, .. .)
|
~~~
Quote: If Chunk A is on top of Chunk B, Moving works, but the enemies cannot be selected
All chunk A does is draw things. Chunk B has logic code AND drawing code intermingled. Try to break apart the logic from the drawing code.
Turing: |
% Game Loop
loop
% Input
Mouse.Where(.. .)
% Events
events () % if mouse.b = 1 then
% Logic
update () % character(i).position += character(i).velocity
% Draw next frame
draw () % drawBoard(), drawBrick(), etc
% FPS Control
Time.DelaySinceLast(1000 div 60)
end loop
|
~~~
Why are you updating the mouse variables FightSize number of times every game loop?
~~~
The only common thing between the two pieces of code that I can see is that you change PosX and PosY in Chunk B, and Chunk A references it. |
|
|
|
|
|
J-son
|
Posted: Fri Feb 07, 2014 11:10 pm Post subject: Re: Mouse.Where is failing to respond |
|
|
I attempted to separate the code, where Draw used to be was then LogicFix (k)
However, Highlighting stopped working, and so enemies still could not be accessed.
I've noticed that clicking is slower or inaccurate when the Mouse.Where is not in the for loops.
So I put it after every for loop I have that used the mouse.
Enemy clicking still fails to respond, movement is fixed.
I've gone closer to the problem:
Turing: |
for T : 1 .. FightSize
if Stat.Real (T ) = true then % Detect what is clicked
if Mx > Stat.XC (CurT ) * 40 - 40 + PosX and Mx < Stat.XC (CurT ) * 40 + PosX and Stat.YC (CurT ) * 40 + 60 + PosY < My and Stat.YC (CurT ) * 40 + 100 + PosY > My then
Draw.Box (Stat.XC (CurT ) * 40 - 40 + PosX, Stat.YC (CurT ) * 40 + 60 + PosY, Stat.XC (CurT ) * 40 + PosX, Stat.YC (CurT ) * 40 + 100 + PosY, 35)
if Mb = 1 then
% if char selected
ClickedChar := true
SelectChar := CurT
exit
end if
elsif Mx > Stat.XC (T ) * 40 - 40 + PosX and Mx < Stat.XC (T ) * 40 + PosX and Stat.YC (T ) * 40 + 60 + PosY < My and Stat.YC (T ) * 40 + 100 + PosY > My then
Draw.Box (Stat.XC (T ) * 40 - 40 + PosX, Stat.YC (T ) * 40 + 60 + PosY, Stat.XC (T ) * 40 + PosX, Stat.YC (T ) * 40 + 100 + PosY, 40)
if Mb = 1 then
% if char selected
ClickedChar := true
SelectChar := T
exit
end if
elsif Mb = 1 and Mx > 0 and Mx < 800 and My > 100 and My < 700 then % If map selected
Draw.Oval (Mx, My, 60, 60, 30)
Burst := false
Action := false
ClickedChar := false
PosX + = Mx - Dx
PosY + = My - Dy
exit
end if
end if
end for
|
The enemy's Stat.Real is true.
So, the if statement is passed, and proceeds to the next if.
Now, the first if determines if it is the character's whose turn it is, is highlighted.
The second elsif is for any character who is waiting.. enemies fall in this category.
The last determines if no character is clicked but the map is.
My problem now- when I click on the enemy, it goes straight to the last elsif
This means the previous elsif is not true.
How so?
Mx > Stat.XC (T) * 40 - 40 + PosX and Mx < Stat.XC (T) * 40 + PosX and Stat.YC (T) * 40 + 60 + PosY < My and Stat.YC (T) * 40 + 100 + PosY > My
Let's say Mx = 100, My = 200
PosX and PosY = 0
Stat.XC = 3,Stat.YC = 3 (Actual coordinates)
So 100 > 80 and 100 < 120 and 180 < 200 and 220 > 200
It should work |
|
|
|
|
|
J-son
|
Posted: Sat Feb 08, 2014 9:37 am Post subject: Re: Mouse.Where is failing to respond |
|
|
I've narrowed the possibilities down further:
It appears the for loop is the cause.
It goes from the character 1 .. FightSize (12)
Char 1 is the main character, 10 being the target I am using.
So, in the first for loop, if Mouse.Click = 1 then it will go to the last elsif and exit. This causes no targeting.
Only problem now is my 'Moving' is having hiccups. It's working 70% of the time, it may be a for loop problem too. |
|
|
|
|
|
J-son
|
Posted: Sat Feb 08, 2014 9:52 am Post subject: Re: Mouse.Where is failing to respond |
|
|
It appears that for loop had caused all problems.
Through more tests, it appears when I click for a location to move - It goes through that loop first, and counts the 'Move' as an outlier click.
There, it cancels the 'Move' boolean and therefore cancels the 'Move.'
Future reference of new code:
Turing: |
for T : 1 .. 10
if Stat.Real (T ) = true then % Detect what is clicked
if Mx > Stat.XC (CurT ) * 40 - 40 + PosX and Mx < Stat.XC (CurT ) * 40 + PosX and Stat.YC (CurT ) * 40 + 60 + PosY < My and Stat.YC (CurT ) * 40 + 100 + PosY > My then
Draw.Box (Stat.XC (CurT ) * 40 - 40 + PosX, Stat.YC (CurT ) * 40 + 60 + PosY, Stat.XC (CurT ) * 40 + PosX, Stat.YC (CurT ) * 40 + 100 + PosY, 35)
if Mb = 1 then
% if char selected
ClickedChar := true
SelectChar := CurT
FlipSide := false
exit
end if
elsif Mx > Stat.XC (T ) * 40 - 40 + PosX and Mx < Stat.XC (T ) * 40 + PosX and Stat.YC (T ) * 40 + 60 + PosY < My and Stat.YC (T ) * 40 + 100 + PosY > My then
Draw.Box (Stat.XC (T ) * 40 - 40 + PosX, Stat.YC (T ) * 40 + 60 + PosY, Stat.XC (T ) * 40 + PosX, Stat.YC (T ) * 40 + 100 + PosY, 40)
if Mb = 1 then
% if char selected
ClickedChar := true
SelectChar := T
FlipSide := false
exit
end if
elsif Mb = 1 and Mx > 0 and Mx < 800 and My > 100 and My < 700 and MovingInAction = false then % If map selected
Draw.Oval (Mx, My, 60, 60, 30)
ClickedChar := false
FlipSide := true
end if
end if
end for
if FlipSide = true then
PosX + = Mx - Dx
PosY + = My - Dy
Burst := false
Action := false
end if
|
|
|
|
|
|
|
Insectoid
|
Posted: Sat Feb 08, 2014 10:58 pm Post subject: RE:Mouse.Where is failing to respond |
|
|
Maybe you could find a way to eliminate the for loops entirely. |
|
|
|
|
|
|
|