Starsector API
Loading...
Searching...
No Matches
JitterUtil.java
Go to the documentation of this file.
1package com.fs.starfarer.api.util;
2
3import java.util.Random;
4
5import org.lwjgl.util.vector.Vector2f;
6
7import com.fs.starfarer.api.graphics.SpriteAPI;
8
9public class JitterUtil {
10
11 public static void renderWithJitter(SpriteAPI s, float x, float y, float maxJitter, int numCopies) {
12 for (int i = 0; i < numCopies; i++) {
13 Vector2f jv = new Vector2f();
14 jv.x = (float) Math.random() * maxJitter - maxJitter/2f;
15 jv.y = (float) Math.random() * maxJitter - maxJitter/2f;
16 //if (jv.lengthSquared() != 0) jv.normalise();
17 s.renderAtCenter(x + jv.x, y + jv.y);
18 }
19 }
20
21 private long seed = Misc.genRandomSeed();
22 private Random random = new Random(seed);
23
24 public void updateSeed() {
25 //seed = (long)(Math.random() * 1000000000f);
26 seed = Misc.genRandomSeed();
27 }
28
29 public Random getRandom() {
30 random.setSeed(seed);
31 return random;
32 }
33
34 public void render(SpriteAPI s, float x, float y, float maxJitter, int numCopies) {
35 render(s, x, y, 0f, maxJitter, numCopies);
36 }
37
38 private boolean setSeedOnRender = true;
39 private boolean circular;
40 public boolean isSetSeedOnRender() {
41 return setSeedOnRender;
42 }
43
45 this.setSeedOnRender = resetSeedOnRender;
46 }
47
48 public void setUseCircularJitter(boolean circular) {
49 this.circular = circular;
50 }
51
52 public void render(SpriteAPI s, float x, float y, float minJitter, float maxJitter, int numCopies) {
53 if (setSeedOnRender) {
54 random.setSeed(seed);
55 }
56 for (int i = 0; i < numCopies; i++) {
57 Vector2f jv = new Vector2f();
58
59// if (true) {
60// float r = minJitter + (maxJitter - minJitter) * (float) random.nextFloat();
61// r *= 0.5f;
62// float angle = (float) ((float) random.nextFloat() * Math.PI * 2f);
63// float jx = (float) Math.cos(angle) * r;
64// float jy = (float) Math.sin(angle) * r;
65// s.renderAtCenter(x + jx, y + jy);
66// continue;
67// }
68
69 if (circular) {
70 float r = minJitter + (maxJitter - minJitter) * (float) random.nextFloat();
71 jv = Misc.getPointAtRadius(jv, r, random);
72 } else {
73 if (minJitter <= 0) {
74 jv.x = random.nextFloat() * maxJitter - maxJitter/2f;
75 jv.y = random.nextFloat() * maxJitter - maxJitter/2f;
76 } else {
77 jv.x = random.nextFloat() * (maxJitter - minJitter) + minJitter;
78 jv.y = random.nextFloat() * (maxJitter - minJitter) + minJitter;
79 if (jv.x < minJitter) jv.x = minJitter;
80 if (jv.y < minJitter) jv.y = minJitter;
81 jv.x *= Math.signum(random.nextFloat() - 0.5f);
82 jv.y *= Math.signum(random.nextFloat() - 0.5f);
83 }
84 }
85 //if (jv.lengthSquared() != 0) jv.normalise();
86 s.renderAtCenter(x + jv.x, y + jv.y);
87 }
88 }
89}
void render(SpriteAPI s, float x, float y, float maxJitter, int numCopies)
static void renderWithJitter(SpriteAPI s, float x, float y, float maxJitter, int numCopies)
void setUseCircularJitter(boolean circular)
void render(SpriteAPI s, float x, float y, float minJitter, float maxJitter, int numCopies)
void setSetSeedOnRender(boolean resetSeedOnRender)
static Vector2f getPointAtRadius(Vector2f from, float r)
Definition Misc.java:690