From 9c207e2f2af563be5b6427f8c6bf21666c77c5cd Mon Sep 17 00:00:00 2001 From: "sigonasr2, Sig, Sigo" Date: Thu, 9 Jun 2022 16:09:03 +0000 Subject: [PATCH] New String class system that wraps a builder and keeps track of text bounds. Added background to editor message logs Co-authored-by: r3cp3ct <45179536+r3cp3ct@users.noreply.github.com> Co-authored-by: sigonasr2 --- README.md | 30 +++++- bin/RabiClone.jar | Bin 259071 -> 260738 bytes src/sig/DrawLoop.java | 7 +- src/sig/engine/Edge.java | 2 +- src/sig/engine/Key.java | 2 +- src/sig/engine/KeyBind.java | 2 +- src/sig/engine/Object.java | 4 +- src/sig/engine/PaletteColor.java | 2 +- src/sig/engine/Point.java | 2 +- src/sig/engine/Rectangle.java | 2 +- src/sig/engine/String.java | 125 +++++++++++++++++++++++++ src/sig/objects/ConfigureControls.java | 7 +- src/sig/objects/EditorRenderer.java | 22 ++--- 13 files changed, 179 insertions(+), 28 deletions(-) create mode 100644 src/sig/engine/String.java diff --git a/README.md b/README.md index bf35222..9ecc951 100644 --- a/README.md +++ b/README.md @@ -42,4 +42,32 @@ Sliding Key Buffer Movement Systems Collectibles Combat Systems -Storyboarding / Event Systems \ No newline at end of file +Storyboarding / Event Systems + + +`all` to suppress all warnings +`boxing` to suppress warnings relative to boxing/unboxing operations +`cast` to suppress warnings relative to cast operations +`dep`-ann to suppress warnings relative to deprecated annotation +`deprecation` to suppress warnings relative to deprecation +`fallthrough` to suppress warnings relative to missing breaks in switch statements +`finally` to suppress warnings relative to finally block that don’t return +`hiding` to suppress warnings relative to locals that hide variable +`incomplete`-switch to suppress warnings relative to missing entries in a switch statement (enum case) +`nls` to suppress warnings relative to non-nls string literals +`null` to suppress warnings relative to null analysis +`restriction` to suppress warnings relative to usage of discouraged or forbidden references +`serial` to suppress warnings relative to missing serialVersionUID field for a serializable class +`static`-access to suppress warnings relative to incorrect static access +`synthetic`-access to suppress warnings relative to unoptimized access from inner classes +`unchecked` to suppress warnings relative to unchecked operations +`unqualified`-field-access to suppress warnings relative to field access unqualified +`unused` to suppress warnings relative to unused code + +`javadoc` to suppress warnings relative to javadoc warnings +`rawtypes` to suppress warnings relative to usage of raw types +`static`-method to suppress warnings relative to methods that could be declared as static +`super` to suppress warnings relative to overriding a method without super invocations + +`resource` to suppress warnings relative to usage of resources of type Closeable +`sync-override` to suppress warnings because of missing synchronize when overriding a synchronized method \ No newline at end of file diff --git a/bin/RabiClone.jar b/bin/RabiClone.jar index 50aa3fef29aef1a711db799ea8c2a51dcdc3d872..c976f1d615a8fd3e3da2f0df32c17633bdc3b5d8 100644 GIT binary patch delta 18221 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 z zCh>y)5Ie+1g4FRja+dI_};2LW6 zD0^iAMubJ1fTcV`IU#AK2)SM>feZu>LMX9toh7NHD)+V5j*J z^}tbs{|>7>`8%vY@{}h)SqEbuRsWV_sUKLcBOigc#%TaJ;RFD#h<}_3{U^XC1j~HX zCO-uTqnt+q$UqR(^5v0;ez@fgoq{Dnj1~VAqrw=!fKgzt&Val>S3j~tN`YJU-+OJr z8Q|u7?IRo5>kwcoXTZ><)jv4a0j)JZN~XU7g9<$dAhcQ@IlwGLfvui{u`#OQs^NGA N;NZC1fah|!{{x3*6%qgd delta 16476 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 { return RabiClone.CONTROLLERS[port].getComponent(id).getName(); } else diff --git a/src/sig/engine/Object.java b/src/sig/engine/Object.java index 66803fe..e97cbd5 100644 --- a/src/sig/engine/Object.java +++ b/src/sig/engine/Object.java @@ -78,11 +78,11 @@ public abstract class Object implements GameEntity{ DrawLoop.Draw_Animated_Sprite(x,y,sprite,frameIndex,transform); } - protected void Draw_Text(double x, double y, StringBuilder string, Font font){ + protected void Draw_Text(double x, double y, String string, Font font){ DrawLoop.Draw_Text(x,y,string,font); } - protected void Draw_Text_Ext(double x, double y, StringBuilder string, Font font, Alpha alpha, PaletteColor col){ + protected void Draw_Text_Ext(double x, double y, String string, Font font, Alpha alpha, PaletteColor col){ DrawLoop.Draw_Text_Ext(x,y,string,font,alpha,col); } diff --git a/src/sig/engine/PaletteColor.java b/src/sig/engine/PaletteColor.java index 46a1e32..d9274e5 100644 --- a/src/sig/engine/PaletteColor.java +++ b/src/sig/engine/PaletteColor.java @@ -36,7 +36,7 @@ public enum PaletteColor { NORMAL; @Override - public String toString() { + public java.lang.String toString() { return Character.valueOf((char)26)+Integer.toString(ordinal())+" "; } diff --git a/src/sig/engine/Point.java b/src/sig/engine/Point.java index c12c76c..0a37ea9 100644 --- a/src/sig/engine/Point.java +++ b/src/sig/engine/Point.java @@ -34,7 +34,7 @@ public class Point { } @Override - public String toString() { + public java.lang.String toString() { return "Point(" + x + "," + y + ")"; } } diff --git a/src/sig/engine/Rectangle.java b/src/sig/engine/Rectangle.java index edc4d21..f4615c3 100644 --- a/src/sig/engine/Rectangle.java +++ b/src/sig/engine/Rectangle.java @@ -43,7 +43,7 @@ public class Rectangle { } @Override - public String toString() { + public java.lang.String toString() { return new StringBuilder("Rectangle(x=").append(x).append(",") .append("y=").append(y).append(",") .append("w=").append(w).append(",") diff --git a/src/sig/engine/String.java b/src/sig/engine/String.java new file mode 100644 index 0000000..499df02 --- /dev/null +++ b/src/sig/engine/String.java @@ -0,0 +1,125 @@ +package sig.engine; + +import java.util.regex.Pattern; + +@SuppressWarnings("unused") +public class String{ + private StringBuilder sb; + private Point bounds = new Point(0,1); + private int currentLineWidth; + public String() { + this.sb=new StringBuilder(); + } + public String(java.lang.String str) { + this.sb=new StringBuilder(str); + updateBounds(str); + } + public String(Object obj) { + this.sb=new StringBuilder(obj.toString()); + updateBounds(obj.toString()); + } + public String append(char c) { + this.sb.append(c); + updateBounds(Character.toString(c)); + return this; + } + public String append(java.lang.Object...obj) { + for (java.lang.Object o : obj) { + this.sb.append(o.toString()); + updateBounds(o.toString()); + } + return this; + } + + public StringBuilder getBuilder() { + return this.sb; + } + + /** + * Returns the index within this string of the first occurrence of the + * specified substring. + * + *

The returned index is the smallest value {@code k} for which: + *

{@code
+     * this.toString().startsWith(str, k)
+     * }
+ * If no such value of {@code k} exists, then {@code -1} is returned. + * + * @param str the substring to search for. + * @return the index of the first occurrence of the specified substring, + * or {@code -1} if there is no such occurrence. + */ + public int indexOf(java.lang.String str) { + return this.sb.indexOf(str); + } + + /** + * Returns the index within this string of the first occurrence of the + * specified substring, starting at the specified index. + * + *

The returned index is the smallest value {@code k} for which: + *

{@code
+     *     k >= Math.min(fromIndex, this.length()) &&
+     *                   this.toString().startsWith(str, k)
+     * }
+ * If no such value of {@code k} exists, then {@code -1} is returned. + * + * @param str the substring to search for. + * @param fromIndex the index from which to start the search. + * @return the index of the first occurrence of the specified substring, + * starting at the specified index, + * or {@code -1} if there is no such occurrence. + */ + public int indexOf(java.lang.String str,int fromIndex) { + return this.sb.indexOf(str,fromIndex); + } + /** + * Replaces the characters in a substring of this sequence + * with characters in the specified {@code String}. The substring + * begins at the specified {@code start} and extends to the character + * at index {@code end - 1} or to the end of the + * sequence if no such character exists. First the + * characters in the substring are removed and then the specified + * {@code String} is inserted at {@code start}. (This + * sequence will be lengthened to accommodate the + * specified String if necessary.) + * + * @param start The beginning index, inclusive. + * @param end The ending index, exclusive. + * @param str String that will replace previous contents. + * @return This object. + * @throws StringIndexOutOfBoundsException if {@code start} + * is negative, greater than {@code length()}, or + * greater than {@code end}. + */ + public String replace(int start,int end,java.lang.String str) { + this.sb.replace(start,end,str); + return this; + } + public int length() { + return this.sb.length(); + } + public java.lang.String toString() { + return this.sb.toString(); + } + public Point getBounds(Font f) { + return new Point(bounds.x*f.getGlyphWidth(),length()>0?Math.max(bounds.y*f.getGlyphHeight(),f.getGlyphHeight()):0); + } + private void updateBounds(java.lang.String string) { + for (int i=0;ibounds.x?i+1:bounds.x; + bounds.y++; + currentLineWidth=0; + } else + if (string.charAt(i)==(char)26&&ibounds.x?currentLineWidth:bounds.x; + } + } + } +} diff --git a/src/sig/objects/ConfigureControls.java b/src/sig/objects/ConfigureControls.java index c57e8db..8a78ded 100644 --- a/src/sig/objects/ConfigureControls.java +++ b/src/sig/objects/ConfigureControls.java @@ -16,6 +16,7 @@ import sig.engine.KeyBind; import sig.engine.Object; import sig.engine.PaletteColor; import sig.engine.Panel; +import sig.engine.String; public class ConfigureControls extends Object{ @@ -113,7 +114,7 @@ public class ConfigureControls extends Object{ Draw_Line(p,storedX,getY()+storedY+Font.PROFONT_12.getGlyphHeight()+4,storedEndX,getY()+storedY,PaletteColor.BLACK,Alpha.ALPHA32); } } else { - Draw_Text_Ext(4, 4, new StringBuilder("Press a key to assign to ").append(selectedAction), Font.PROFONT_12, Alpha.ALPHA0, PaletteColor.MIDNIGHT_BLUE); + Draw_Text_Ext(4, 4, new String("Press a key to assign to ").append(selectedAction), Font.PROFONT_12, Alpha.ALPHA0, PaletteColor.MIDNIGHT_BLUE); } } @@ -132,8 +133,8 @@ public class ConfigureControls extends Object{ } } - private StringBuilder DisplayActionKeys(Action a) { - StringBuilder sb = new StringBuilder(a.toString()).append(": "); + private String DisplayActionKeys(Action a) { + String sb = new String(a.toString()).append(": "); for (int i=0;i