Project Zomboid

Project Zomboid

Moodle Framework
UnCheat Dec 30, 2024 @ 10:08pm
Better movement sync
Did push an update for a perfect sync with vanilla moodles:
We've to skip first frame before after start movement.

Here are changes on git (i use stored moodleParked instead of startMove):
index da89c37..8b71524 100644
--- a/contents/mods/neonMoodleIndicator/common/media/lua/client/neonMoodleLevels.lua
+++ b/contents/mods/neonMoodleIndicator/common/media/lua/client/neonMoodleLevels.lua
@@ -21,6 +21,7 @@ function ISNeonMoodleLevels:new()
o.panelY = 0
o.panelX = 0
o.trackedMoodleFrameworkObjects = {}
+ o.moodleParked = {}
o.emptyPath = "media/ui/neonMoodleIndicator_empty.png"
o.backgroundPathUnformatted = "media/ui/neonMoodleIndicator_%d_%d.png"
o.indicatorPathUnformatted = "media/ui/neonMoodleIndicator_%d_%d_i.png"
@@ -161,7 +162,6 @@ function ISNeonMoodleLevels:prerender()
local moodles = player:getMoodles()
local moodlesUI = MoodlesUI.getInstance()
local renderedId = 0
- local startMove = false

self.panelY = moodlesUI:getAbsoluteY()
self.panelX = moodlesUI:getAbsoluteX()
@@ -180,9 +180,6 @@ function ISNeonMoodleLevels:prerender()

if (moodleType == MoodleType.FoodEaten) and moodleLevel < 3 then
-- reset positions
- if self.moodleSlotsPos[moodleId] ~= self.moodleSlotsRestPos then
- startMove = true
- end
self:resetMoodlePosition(moodleId)
self.moodleLevel[moodleId] = moodleLevel -- but keep real level?
elseif moodleLevel > 0 then
@@ -204,9 +201,9 @@ function ISNeonMoodleLevels:prerender()
end
-- Recalculate position
if self.moodleLevel[moodleId] ~= moodleLevel then
- startMove = true
self.moodleLevel[moodleId] = moodleLevel
end
+ self.moodleParked[moodleId] = self.moodleSlotsPos[moodleId] == self.moodleSlotsDesiredPos[moodleId]
self.moodleSlotsDesiredPos[moodleId] = self.panelY + (self.verticalMargin + moodleSize) * renderedId

if self.moodleSlotsPos[moodleId] == self.moodleSlotsRestPos then
@@ -214,17 +211,18 @@ function ISNeonMoodleLevels:prerender()

end

+
if math.abs(self.moodleSlotsPos[moodleId] - self.moodleSlotsDesiredPos[moodleId]) > 0.8 then
- self.moodleSlotsPos[moodleId] = self.moodleSlotsPos[moodleId] + (self.moodleSlotsDesiredPos[moodleId] - self.moodleSlotsPos[moodleId]) * 0.15
+ if not self.moodleParked[moodleId] then
+ self.moodleSlotsPos[moodleId] = self.moodleSlotsPos[moodleId] + (self.moodleSlotsDesiredPos[moodleId] - self.moodleSlotsPos[moodleId]) * 0.15
+ end
else
self.moodleSlotsPos[moodleId] = self.moodleSlotsDesiredPos[moodleId]
end

+
renderedId = renderedId + 1
else
- if self.moodleSlotsPos[moodleId] ~= self.moodleSlotsRestPos then
- startMove = true
- end
self:resetMoodlePosition(moodleId)
self.moodleLevel[moodleId] = 0
end
< >
Showing 1-1 of 1 comments
UnCheat Dec 30, 2024 @ 10:15pm 
basically you've to not move icons the first frame you perform
`

local iconsParked = y == self.posY

-- And if iconsParked the do not change self.posY

if not iconsParked then
self.posY = self.posY + (y - self.posY) * MF.yCorrectionPerFrame
end
Last edited by UnCheat; Dec 31, 2024 @ 6:22am
< >
Showing 1-1 of 1 comments
Per page: 1530 50