v0.6.1b: fixed rare concurrent modification of actor sets
This commit is contained in:
parent
70cce2c8b3
commit
25c0449bb0
|
@ -100,13 +100,12 @@ public abstract class Actor implements Bundlable {
|
|||
private static HashSet<Actor> all = new HashSet<>();
|
||||
private static HashSet<Char> chars = new HashSet<>();
|
||||
private static volatile Actor current;
|
||||
private static volatile boolean processing;
|
||||
|
||||
private static SparseArray<Actor> ids = new SparseArray<>();
|
||||
|
||||
private static float now = 0;
|
||||
|
||||
public static void clear() {
|
||||
public static synchronized void clear() {
|
||||
|
||||
now = 0;
|
||||
|
||||
|
@ -116,7 +115,7 @@ public abstract class Actor implements Bundlable {
|
|||
ids.clear();
|
||||
}
|
||||
|
||||
public static void fixTime() {
|
||||
public static synchronized void fixTime() {
|
||||
|
||||
if (Dungeon.hero != null && all.contains( Dungeon.hero )) {
|
||||
Statistics.duration += now;
|
||||
|
@ -264,7 +263,7 @@ public abstract class Actor implements Bundlable {
|
|||
add( actor, now + delay );
|
||||
}
|
||||
|
||||
private static void add( Actor actor, float time ) {
|
||||
private static synchronized void add( Actor actor, float time ) {
|
||||
|
||||
if (all.contains( actor )) {
|
||||
return;
|
||||
|
@ -286,7 +285,7 @@ public abstract class Actor implements Bundlable {
|
|||
}
|
||||
}
|
||||
|
||||
public static void remove( Actor actor ) {
|
||||
public static synchronized void remove( Actor actor ) {
|
||||
|
||||
if (actor != null) {
|
||||
all.remove( actor );
|
||||
|
@ -299,7 +298,7 @@ public abstract class Actor implements Bundlable {
|
|||
}
|
||||
}
|
||||
|
||||
public static Char findChar( int pos ) {
|
||||
public static synchronized Char findChar( int pos ) {
|
||||
for (Char ch : chars){
|
||||
if (ch.pos == pos)
|
||||
return ch;
|
||||
|
@ -307,13 +306,13 @@ public abstract class Actor implements Bundlable {
|
|||
return null;
|
||||
}
|
||||
|
||||
public static Actor findById( int id ) {
|
||||
public static synchronized Actor findById( int id ) {
|
||||
return ids.get( id );
|
||||
}
|
||||
|
||||
public static HashSet<Actor> all() {
|
||||
return all;
|
||||
public static synchronized HashSet<Actor> all() {
|
||||
return new HashSet<Actor>(all);
|
||||
}
|
||||
|
||||
public static HashSet<Char> chars() { return chars; }
|
||||
public static synchronized HashSet<Char> chars() { return new HashSet<Char>(chars); }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user