From db8646587e8a64688d69384a508d18bc294a7966 Mon Sep 17 00:00:00 2001
From: Pan
Date: Sat, 14 Aug 2021 12:35:19 +1200
Subject: [PATCH] Fixed a issue where mouse icon leaves trail behind
---
gui/gameCursor.java | 42 ++++++++++++++++++++++++++++++++++++++----
1 file changed, 38 insertions(+), 4 deletions(-)
diff --git a/gui/gameCursor.java b/gui/gameCursor.java
index b9a0c6c..1b5aee7 100644
--- a/gui/gameCursor.java
+++ b/gui/gameCursor.java
@@ -15,6 +15,8 @@ public class gameCursor {
public int[] smallArrowIcons4;
public int[] cursorIcon;
public int[] screen;
+ public int[][] iconOverWriteBuffer;
+ public int iconOverWriteBufferIndex;
public void init() {
@@ -35,6 +37,11 @@ public class gameCursor {
smallArrowIcons4 = new int[20*20];
loadTexture(folder + "smallArrow4.png", smallArrowIcons4, 20,20);
+
+ iconOverWriteBuffer = new int[1024][2];
+ for(int i = 0; i < 1024; i++) {
+ iconOverWriteBuffer[i][0] = -1;
+ }
}
public void updateAndDraw(int[] screen) {
@@ -55,10 +62,17 @@ public class gameCursor {
boolean cursorIsInSideBar = mainThread.pc.cursorIsInSideBar();
+ for(int i = 0; i < 1024; i++) {
+ if(iconOverWriteBuffer[i][0] == -1)
+ break;
+
+ screen[iconOverWriteBuffer[i][0]] = iconOverWriteBuffer[i][1];
+ iconOverWriteBuffer[i][0] = -1;
+ }
+ iconOverWriteBufferIndex = 0;
if(!mainThread.gamePaused && mainThread.gameStarted) {
-
//draw arrow icons if the player is scrolling the screen with the mouse
int cursorX = 0;
int cursorY = 0;
@@ -152,9 +166,9 @@ public class gameCursor {
}
}else if(!mouseOverSelectableUnit && !cursorIsInMiniMap && !cursorIsInSideBar){
- if(!hasHarvesterSelected && !hasTroopsSelected && !hasTowerSelected && !hasConVehicleSelected) {
+ if(!hasHarvesterSelected && !hasTroopsSelected && !(hasTowerSelected && attackKeyPressed) && !hasConVehicleSelected) {
drawIcon(cursorIcon, mouseX, mouseY);
- }else if(((hasHarvesterSelected || hasConVehicleSelected) && !(hasTroopsSelected)) || ((hasTroopsSelected || hasTowerSelected) && !attackKeyPressed) ) {
+ }else if(((hasHarvesterSelected || hasConVehicleSelected) && !(hasTroopsSelected)) || ((hasTroopsSelected) && !attackKeyPressed) ) {
drawActionIcon(mouseX, mouseY, 0);
//drawIcon(cursorIcon, mouseX, mouseY);
}else if((hasTroopsSelected || hasTowerSelected) && attackKeyPressed) {
@@ -165,7 +179,6 @@ public class gameCursor {
}else if(cursorIsInMiniMap && (hasTroopsSelected || hasConVehicleSelected || hasHarvesterSelected)){
drawMinimapMoveIcon(mouseX, mouseY);
}else {
-
//draw default icon
drawIcon(cursorIcon, mouseX, mouseY);
}
@@ -248,6 +261,9 @@ public class gameCursor {
if(red > 150)
color = arrowColor;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][0] = index;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][1] = screen[index];
+ iconOverWriteBufferIndex++;
screen[index] = color;
}
}
@@ -292,6 +308,9 @@ public class gameCursor {
if(red > 200)
color = arrowColor;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][0] = index;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][1] = screen[index];
+ iconOverWriteBufferIndex++;
screen[index] = color;
}
}
@@ -315,6 +334,9 @@ public class gameCursor {
if(red > 200)
color = arrowColor;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][0] = index;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][1] = screen[index];
+ iconOverWriteBufferIndex++;
screen[index] = color;
}
}
@@ -338,6 +360,9 @@ public class gameCursor {
if(red > 200)
color = arrowColor;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][0] = index;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][1] = screen[index];
+ iconOverWriteBufferIndex++;
screen[index] = color;
}
}
@@ -361,6 +386,10 @@ public class gameCursor {
if(red > 200)
color = arrowColor;
+
+ iconOverWriteBuffer[iconOverWriteBufferIndex][0] = index;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][1] = screen[index];
+ iconOverWriteBufferIndex++;
screen[index] = color;
}
}
@@ -402,7 +431,12 @@ public class gameCursor {
int red = (color&0xff0000) >> 16;
if(red < 100 && blue > 100)
continue;
+
+ iconOverWriteBuffer[iconOverWriteBufferIndex][0] = x + y*768;
+ iconOverWriteBuffer[iconOverWriteBufferIndex][1] = screen[x + y*768];
+ iconOverWriteBufferIndex++;
screen[x + y*768] = color;
+
}
}