MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / updateSignalAnimationSide

Function updateSignalAnimationSide

src/OpenLoco/src/Map/SignalElement.cpp:24–51  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22 };
23
24 static AnimResult updateSignalAnimationSide(SignalElement::Side& side)
25 {
26 AnimResult res{};
27 if (side.hasSignal())
28 {
29 const auto* signalObj = ObjectManager::get<TrainSignalObject>(side.signalObjectId());
30 const auto targetFrame = std::min(side.getUnk4() * 3, signalObj->numFrames - 1);
31 if (side.frame() != targetFrame)
32 {
33 res.hasAnimation = true;
34 if (!(ScenarioManager::getScenarioTicks() & signalObj->animationSpeed))
35 {
36 uint8_t newFrame = side.frame() + 1;
37 if (side.frame() >= targetFrame)
38 {
39 newFrame = side.frame() - 1;
40 if (signalObj->hasFlags(TrainSignalObjectFlags::unk2))
41 {
42 newFrame = std::min<uint8_t>(newFrame, 1U);
43 }
44 }
45 side.setFrame(newFrame);
46 res.shouldInvalidate = true;
47 }
48 }
49 }
50 return res;
51 }
52
53 // 0x0048950F
54 bool updateSignalAnimation(const Animation& anim)

Callers 1

updateSignalAnimationFunction · 0.85

Calls 7

getScenarioTicksFunction · 0.85
signalObjectIdMethod · 0.80
getUnk4Method · 0.80
frameMethod · 0.80
setFrameMethod · 0.80
hasSignalMethod · 0.45
hasFlagsMethod · 0.45

Tested by

no test coverage detected