Starsector API
Loading...
Searching...
No Matches
SmoothFacingUtil.java
Go to the documentation of this file.
1package com.fs.starfarer.api.util;
2
3public class SmoothFacingUtil {
4
5 private float turnAcceleration, maxTurnRate;
6 private float turnRate;
7
8 private float facing;
9
10 public SmoothFacingUtil(float turnAcceleration, float maxTurnRate) {
11 this.turnAcceleration = turnAcceleration;
12 this.maxTurnRate = maxTurnRate;
13 }
14
15
16 public void advance(float desiredFacing, float amount) {
17 float absTurnRate = Math.abs(turnRate);
18
19 // v t - 0.5 a t t = dist
20 // dv = a t; t = v / a
21 float decelTime = absTurnRate / turnAcceleration;
22 float decelDistance = absTurnRate * decelTime - 0.5f * turnAcceleration * decelTime * decelTime;
23
24 float diffWithCurrFacing = Misc.getAngleDiff(facing, desiredFacing);
25
26 float turnDir = Misc.getClosestTurnDirection(facing, desiredFacing);
27 if (Math.signum(turnRate) == Math.signum(turnDir)) {
29 turnDir = -turnDir;
30 }
31 }
32
33 turnRate += turnDir * turnAcceleration * amount;
34 //turnRate = maxTurnRate * turnDir;
35 if (Math.abs(turnRate) > maxTurnRate) {
36 turnRate = maxTurnRate * Math.signum(turnRate);
37 //System.out.println("capped at " + maxTurnRate);
38 }
39
40
41 facing += turnRate * amount;
42 facing = Misc.normalizeAngle(facing);
43
44 if (diffWithCurrFacing < turnRate * amount * 1.5f) {
45 facing = desiredFacing;
46 }
47
48 }
49
50
51 public float getFacing() {
52 return facing;
53 }
54
55 public void setFacing(float facing) {
56 this.facing = facing;
57 }
58
59
60 public float getTurnAcceleration() {
61 return turnAcceleration;
62 }
63
64 public void setTurnAcceleration(float turnAcceleration) {
65 this.turnAcceleration = turnAcceleration;
66 }
67
68 public float getMaxTurnRate() {
69 return maxTurnRate;
70 }
71
72 public void setMaxTurnRate(float maxTurnRate) {
73 this.maxTurnRate = maxTurnRate;
74 }
75
76 public float getTurnRate() {
77 return turnRate;
78 }
79
80 public void setTurnRate(float turnRate) {
81 this.turnRate = turnRate;
82 }
83
84
85}
static float getAngleDiff(float from, float to)
Definition Misc.java:1709
static float getClosestTurnDirection(float facing, float desired)
Definition Misc.java:2095
static float normalizeAngle(float angleDeg)
Definition Misc.java:1135
void advance(float desiredFacing, float amount)
void setTurnAcceleration(float turnAcceleration)
SmoothFacingUtil(float turnAcceleration, float maxTurnRate)