@quenty/depthoffield 4.0.1 → 4.1.1-canary.288.c2f64f9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [4.1.1-canary.288.c2f64f9.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/depthoffield@4.1.0...@quenty/depthoffield@4.1.1-canary.288.c2f64f9.0) (2022-09-26)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* Support near and far intensity in depth of field tweener ([9dcb826](https://github.com/Quenty/NevermoreEngine/commit/9dcb826d1d621859637311e5493605c8b3b5242e))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [4.1.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/depthoffield@4.0.1...@quenty/depthoffield@4.1.0) (2022-08-22)
|
|
18
|
+
|
|
19
|
+
**Note:** Version bump only for package @quenty/depthoffield
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
6
25
|
## [4.0.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/depthoffield@4.0.0...@quenty/depthoffield@4.0.1) (2022-08-16)
|
|
7
26
|
|
|
8
27
|
**Note:** Version bump only for package @quenty/depthoffield
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/depthoffield",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.1-canary.288.c2f64f9.0",
|
|
4
4
|
"description": "Depth of field service to allow multiple systems to write depth of field",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -25,16 +25,16 @@
|
|
|
25
25
|
"Quenty"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@quenty/acceltween": "
|
|
29
|
-
"@quenty/baseobject": "
|
|
30
|
-
"@quenty/loader": "
|
|
31
|
-
"@quenty/maid": "
|
|
32
|
-
"@quenty/signal": "
|
|
33
|
-
"@quenty/steputils": "
|
|
34
|
-
"@quenty/valueobject": "
|
|
28
|
+
"@quenty/acceltween": "2.2.0",
|
|
29
|
+
"@quenty/baseobject": "5.1.2-canary.288.c2f64f9.0",
|
|
30
|
+
"@quenty/loader": "5.0.2-canary.288.c2f64f9.0",
|
|
31
|
+
"@quenty/maid": "2.4.0",
|
|
32
|
+
"@quenty/signal": "2.3.0",
|
|
33
|
+
"@quenty/steputils": "3.1.0",
|
|
34
|
+
"@quenty/valueobject": "6.1.1-canary.288.c2f64f9.0"
|
|
35
35
|
},
|
|
36
36
|
"publishConfig": {
|
|
37
37
|
"access": "public"
|
|
38
38
|
},
|
|
39
|
-
"gitHead": "
|
|
39
|
+
"gitHead": "c2f64f9bb90b0e5f0e4f4bc04a58af852bac6460"
|
|
40
40
|
}
|
|
@@ -11,14 +11,23 @@ local DepthOfFieldModifier = setmetatable({}, BaseObject)
|
|
|
11
11
|
DepthOfFieldModifier.ClassName = "DepthOfFieldModifier"
|
|
12
12
|
DepthOfFieldModifier.__index = DepthOfFieldModifier
|
|
13
13
|
|
|
14
|
-
function DepthOfFieldModifier.new(distance, radius)
|
|
14
|
+
function DepthOfFieldModifier.new(distance, radius, nearIntensity, farIntensity)
|
|
15
15
|
local self = setmetatable(BaseObject.new(), DepthOfFieldModifier)
|
|
16
16
|
|
|
17
|
+
assert(type(distance) == "number", "Bad distance")
|
|
18
|
+
assert(type(radius) == "number", "Bad radius")
|
|
19
|
+
assert(type(nearIntensity) == "number", "Bad nearIntensity")
|
|
20
|
+
assert(type(farIntensity) == "number", "Bad farIntensity")
|
|
21
|
+
|
|
17
22
|
self._originalDistance = distance
|
|
18
23
|
self._originalRadius = radius
|
|
24
|
+
self._originalNearIntensity = nearIntensity
|
|
25
|
+
self._originalFarIntensity = farIntensity
|
|
19
26
|
|
|
20
27
|
self._distance = distance
|
|
21
28
|
self._radius = radius
|
|
29
|
+
self._nearIntensity = nearIntensity
|
|
30
|
+
self._farIntensity = farIntensity
|
|
22
31
|
|
|
23
32
|
--[=[
|
|
24
33
|
Fires when the modifier is removing.
|
|
@@ -47,6 +56,12 @@ function DepthOfFieldModifier.new(distance, radius)
|
|
|
47
56
|
self.RadiusChanged = Signal.new()
|
|
48
57
|
self._maid:GiveTask(self.RadiusChanged)
|
|
49
58
|
|
|
59
|
+
self.NearIntensityChanged = Signal.new()
|
|
60
|
+
self._maid:GiveTask(self.NearIntensityChanged)
|
|
61
|
+
|
|
62
|
+
self.FarIntensityChanged = Signal.new()
|
|
63
|
+
self._maid:GiveTask(self.FarIntensityChanged)
|
|
64
|
+
|
|
50
65
|
return self
|
|
51
66
|
end
|
|
52
67
|
|
|
@@ -66,6 +81,13 @@ function DepthOfFieldModifier:SetDistance(distance, doNotAnimate)
|
|
|
66
81
|
self.DistanceChanged:Fire(distance, doNotAnimate)
|
|
67
82
|
end
|
|
68
83
|
|
|
84
|
+
function DepthOfFieldModifier:GetOriginalDistance()
|
|
85
|
+
return self._originalDistance
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
function DepthOfFieldModifier:GetOriginalRadius()
|
|
89
|
+
return self._originalRadius
|
|
90
|
+
end
|
|
69
91
|
--[=[
|
|
70
92
|
Sets the target depth of field distance
|
|
71
93
|
@param radius number
|
|
@@ -82,6 +104,28 @@ function DepthOfFieldModifier:SetRadius(radius, doNotAnimate)
|
|
|
82
104
|
self.RadiusChanged:Fire(radius, doNotAnimate)
|
|
83
105
|
end
|
|
84
106
|
|
|
107
|
+
function DepthOfFieldModifier:SetNearIntensity(nearIntensity, doNotAnimate)
|
|
108
|
+
assert(type(nearIntensity) == "number", "Bad nearIntensity")
|
|
109
|
+
|
|
110
|
+
if self._nearIntensity == nearIntensity then
|
|
111
|
+
return
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
self._nearIntensity = nearIntensity
|
|
115
|
+
self.NearIntensityChanged:Fire(nearIntensity, doNotAnimate)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
function DepthOfFieldModifier:SetFarIntensity(farIntensity, doNotAnimate)
|
|
119
|
+
assert(type(farIntensity) == "number", "Bad farIntensity")
|
|
120
|
+
|
|
121
|
+
if self._farIntensity == farIntensity then
|
|
122
|
+
return
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
self._farIntensity = farIntensity
|
|
126
|
+
self.FarIntensityChanged:Fire(farIntensity, doNotAnimate)
|
|
127
|
+
end
|
|
128
|
+
|
|
85
129
|
--[=[
|
|
86
130
|
Retrieves the distance
|
|
87
131
|
@return number
|
|
@@ -98,6 +142,14 @@ function DepthOfFieldModifier:GetRadius()
|
|
|
98
142
|
return self._radius
|
|
99
143
|
end
|
|
100
144
|
|
|
145
|
+
function DepthOfFieldModifier:GetNearIntensity()
|
|
146
|
+
return self._nearIntensity
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
function DepthOfFieldModifier:GetFarIntensity()
|
|
150
|
+
return self._farIntensity
|
|
151
|
+
end
|
|
152
|
+
|
|
101
153
|
--[=[
|
|
102
154
|
Resets the radius
|
|
103
155
|
@param doNotAnimate boolean
|
|
@@ -105,6 +157,8 @@ end
|
|
|
105
157
|
function DepthOfFieldModifier:Reset(doNotAnimate)
|
|
106
158
|
self:SetDistance(self._originalDistance, doNotAnimate)
|
|
107
159
|
self:SetRadius(self._originalRadius, doNotAnimate)
|
|
160
|
+
self:SetNearIntensity(self._originalNearIntensity, doNotAnimate)
|
|
161
|
+
self:SetFarIntensity(self._originalFarIntensity, doNotAnimate)
|
|
108
162
|
end
|
|
109
163
|
|
|
110
164
|
return DepthOfFieldModifier
|
|
@@ -32,12 +32,16 @@ function DepthOfFieldService:Init(_serviceBag)
|
|
|
32
32
|
-- Assume we can enable now that we've recorded values
|
|
33
33
|
self._depthOfField.InFocusRadius = self._tweener:GetOriginalRadius()
|
|
34
34
|
self._depthOfField.FocusDistance = self._tweener:GetOriginalDistance()
|
|
35
|
+
self._depthOfField.NearIntensity = self._tweener:GetOriginalNearIntensity()
|
|
36
|
+
self._depthOfField.FarIntensity = self._tweener:GetOriginalFarIntensity()
|
|
35
37
|
self._depthOfField.Enabled = true
|
|
36
38
|
|
|
37
39
|
self._maid:GiveTask(self._topOfStack.Changed:Connect(function(new, _old, maid)
|
|
38
40
|
if new then
|
|
39
41
|
self._tweener:SetDistance(new:GetDistance(), false)
|
|
40
42
|
self._tweener:SetRadius(new:GetRadius(), false)
|
|
43
|
+
self._tweener:SetNearIntensity(new:GetNearIntensity(), false)
|
|
44
|
+
self._tweener:SetFarIntensity(new:GetFarIntensity(), false)
|
|
41
45
|
|
|
42
46
|
maid:GiveTask(new.DistanceChanged:Connect(function(distance, doNotAnimate)
|
|
43
47
|
self._tweener:SetDistance(distance, doNotAnimate)
|
|
@@ -45,6 +49,13 @@ function DepthOfFieldService:Init(_serviceBag)
|
|
|
45
49
|
maid:GiveTask(new.RadiusChanged:Connect(function(radius, doNotAnimate)
|
|
46
50
|
self._tweener:SetRadius(radius, doNotAnimate)
|
|
47
51
|
end))
|
|
52
|
+
maid:GiveTask(new.NearIntensityChanged:Connect(function(nearIntensity, doNotAnimate)
|
|
53
|
+
self._tweener:SetNearIntensity(nearIntensity, doNotAnimate)
|
|
54
|
+
end))
|
|
55
|
+
maid:GiveTask(new.FarIntensityChanged:Connect(function(farIntensity, doNotAnimate)
|
|
56
|
+
self._tweener:SetFarIntensity(farIntensity, doNotAnimate)
|
|
57
|
+
end))
|
|
58
|
+
|
|
48
59
|
else
|
|
49
60
|
self._tweener:Reset()
|
|
50
61
|
end
|
|
@@ -60,7 +71,11 @@ end
|
|
|
60
71
|
function DepthOfFieldService:CreateModifier()
|
|
61
72
|
local maid = Maid.new()
|
|
62
73
|
|
|
63
|
-
local modifier = DepthOfFieldModifier.new(
|
|
74
|
+
local modifier = DepthOfFieldModifier.new(
|
|
75
|
+
self._tweener:GetOriginalDistance(),
|
|
76
|
+
self._tweener:GetOriginalRadius(),
|
|
77
|
+
self._tweener:GetOriginalFarIntensity(),
|
|
78
|
+
self._tweener:GetOriginalNearIntensity())
|
|
64
79
|
maid:GiveTask(modifier)
|
|
65
80
|
|
|
66
81
|
maid:GiveTask(function()
|
|
@@ -109,7 +124,11 @@ function DepthOfFieldService:_getOrCreateDepthOfField()
|
|
|
109
124
|
warn("[DepthOfFieldService._getOrCreateDepthOfField] - Creating depthOfField effect!")
|
|
110
125
|
|
|
111
126
|
local depthOfField = Instance.new("DepthOfFieldEffect")
|
|
112
|
-
depthOfField.
|
|
127
|
+
depthOfField.FarIntensity = 0.75
|
|
128
|
+
depthOfField.FocusDistance = 500
|
|
129
|
+
depthOfField.InFocusRadius = 500
|
|
130
|
+
depthOfField.NearIntensity = 0.75
|
|
131
|
+
depthOfField.Enabled = true
|
|
113
132
|
depthOfField.Parent = Lighting
|
|
114
133
|
self._maid:GiveTask(depthOfField)
|
|
115
134
|
|
|
@@ -9,8 +9,6 @@ local AccelTween = require("AccelTween")
|
|
|
9
9
|
local BaseObject = require("BaseObject")
|
|
10
10
|
local StepUtils = require("StepUtils")
|
|
11
11
|
|
|
12
|
-
local DEFAULT_SPEED = 10000
|
|
13
|
-
|
|
14
12
|
local DepthOfFieldTweener = setmetatable({}, BaseObject)
|
|
15
13
|
DepthOfFieldTweener.ClassName = "DepthOfFieldTweener"
|
|
16
14
|
DepthOfFieldTweener.__index = DepthOfFieldTweener
|
|
@@ -18,10 +16,9 @@ DepthOfFieldTweener.__index = DepthOfFieldTweener
|
|
|
18
16
|
--[=[
|
|
19
17
|
Create a new DepthOfFieldTweener.
|
|
20
18
|
@param depthOfField number
|
|
21
|
-
@param speed number?
|
|
22
19
|
@return DepthOfFieldTweener
|
|
23
20
|
]=]
|
|
24
|
-
function DepthOfFieldTweener.new(depthOfField
|
|
21
|
+
function DepthOfFieldTweener.new(depthOfField)
|
|
25
22
|
local self = setmetatable(BaseObject.new(), DepthOfFieldTweener)
|
|
26
23
|
|
|
27
24
|
self._depthOfField = assert(depthOfField, "No depthOfField")
|
|
@@ -29,18 +26,30 @@ function DepthOfFieldTweener.new(depthOfField, speed)
|
|
|
29
26
|
-- If we aren't enabled we make sure to set distance to be far
|
|
30
27
|
self._originalDistance = self._depthOfField.Enabled and self._depthOfField.FocusDistance or 500
|
|
31
28
|
self._originalRadius = self._depthOfField.Enabled and self._depthOfField.InFocusRadius or 500
|
|
29
|
+
self._originalNearIntensity = self._depthOfField.NearIntensity
|
|
30
|
+
self._originalFarIntensity = self._depthOfField.FarIntensity
|
|
32
31
|
|
|
33
|
-
self._distance = AccelTween.new(
|
|
32
|
+
self._distance = AccelTween.new(10000)
|
|
34
33
|
self._distance.t = self._originalDistance
|
|
35
34
|
self._distance.p = self._originalDistance
|
|
36
35
|
|
|
37
|
-
self._radius = AccelTween.new(
|
|
36
|
+
self._radius = AccelTween.new(10000)
|
|
38
37
|
self._radius.t = self._originalRadius
|
|
39
38
|
self._radius.p = self._originalRadius
|
|
40
39
|
|
|
40
|
+
self._nearIntensity = AccelTween.new(30)
|
|
41
|
+
self._nearIntensity.t = self._originalNearIntensity
|
|
42
|
+
self._nearIntensity.p = self._originalNearIntensity
|
|
43
|
+
|
|
44
|
+
self._farIntensity = AccelTween.new(30)
|
|
45
|
+
self._farIntensity.t = self._originalFarIntensity
|
|
46
|
+
self._farIntensity.p = self._originalFarIntensity
|
|
47
|
+
|
|
41
48
|
self._maid:GiveTask(function()
|
|
42
49
|
self._depthOfField.FocusDistance = self._originalDistance
|
|
43
50
|
self._depthOfField.InFocusRadius = self._originalRadius
|
|
51
|
+
self._depthOfField.NearIntensity = self._originalNearIntensity
|
|
52
|
+
self._depthOfField.FarIntensity = self._originalFarIntensity
|
|
44
53
|
end)
|
|
45
54
|
|
|
46
55
|
self._startAnimation, self._maid._stop = StepUtils.bindToRenderStep(self._update)
|
|
@@ -49,12 +58,41 @@ function DepthOfFieldTweener.new(depthOfField, speed)
|
|
|
49
58
|
return self
|
|
50
59
|
end
|
|
51
60
|
|
|
61
|
+
function DepthOfFieldTweener:SetNearIntensity(nearIntensity, doNotAnimate)
|
|
62
|
+
assert(type(nearIntensity) == "number", "Bad nearIntensity")
|
|
63
|
+
|
|
64
|
+
local target = math.clamp(nearIntensity, 0, 1)
|
|
65
|
+
self._nearIntensity.t = target
|
|
66
|
+
if doNotAnimate then
|
|
67
|
+
self._nearIntensity.p = target
|
|
68
|
+
self._nearIntensity.v = 0
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
self:_startAnimation()
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
function DepthOfFieldTweener:SetFarIntensity(farIntensity, doNotAnimate)
|
|
75
|
+
assert(type(farIntensity) == "number", "Bad farIntensity")
|
|
76
|
+
|
|
77
|
+
local target = math.clamp(farIntensity, 0, 1)
|
|
78
|
+
self._farIntensity.t = target
|
|
79
|
+
if doNotAnimate then
|
|
80
|
+
self._farIntensity.p = target
|
|
81
|
+
self._farIntensity.v = 0
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
self:_startAnimation()
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
|
|
52
88
|
--[=[
|
|
53
89
|
Sets the radius and starts any animation
|
|
54
90
|
@param radius number
|
|
55
91
|
@param doNotAnimate boolean
|
|
56
92
|
]=]
|
|
57
93
|
function DepthOfFieldTweener:SetRadius(radius, doNotAnimate)
|
|
94
|
+
assert(type(radius) == "number", "Bad radius")
|
|
95
|
+
|
|
58
96
|
local target = math.clamp(radius, 0, 500)
|
|
59
97
|
self._radius.t = target
|
|
60
98
|
if doNotAnimate then
|
|
@@ -87,6 +125,8 @@ end
|
|
|
87
125
|
@param doNotAnimate boolean
|
|
88
126
|
]=]
|
|
89
127
|
function DepthOfFieldTweener:SetDistance(distance, doNotAnimate)
|
|
128
|
+
assert(type(distance) == "number", "Bad distance")
|
|
129
|
+
|
|
90
130
|
local target = math.clamp(distance, 0, 500)
|
|
91
131
|
self._distance.t = target
|
|
92
132
|
if doNotAnimate then
|
|
@@ -104,6 +144,8 @@ end
|
|
|
104
144
|
function DepthOfFieldTweener:Reset(doNotAnimate)
|
|
105
145
|
self:ResetRadius(doNotAnimate)
|
|
106
146
|
self:ResetDistance(doNotAnimate)
|
|
147
|
+
self:ResetNearIntensity(doNotAnimate)
|
|
148
|
+
self:ResetFarIntensity(doNotAnimate)
|
|
107
149
|
end
|
|
108
150
|
|
|
109
151
|
--[=[
|
|
@@ -112,7 +154,6 @@ end
|
|
|
112
154
|
]=]
|
|
113
155
|
function DepthOfFieldTweener:ResetRadius(doNotAnimate)
|
|
114
156
|
self:SetRadius(self._originalRadius, doNotAnimate)
|
|
115
|
-
self:_startAnimation()
|
|
116
157
|
end
|
|
117
158
|
|
|
118
159
|
--[=[
|
|
@@ -121,7 +162,14 @@ end
|
|
|
121
162
|
]=]
|
|
122
163
|
function DepthOfFieldTweener:ResetDistance(doNotAnimate)
|
|
123
164
|
self:SetDistance(self._originalDistance, doNotAnimate)
|
|
124
|
-
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
function DepthOfFieldTweener:ResetNearIntensity(doNotAnimate)
|
|
168
|
+
self:SetNearIntensity(self._originalNearIntensity, doNotAnimate)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
function DepthOfFieldTweener:ResetFarIntensity(doNotAnimate)
|
|
172
|
+
self:SetFarIntensity(self._originalFarIntensity, doNotAnimate)
|
|
125
173
|
end
|
|
126
174
|
|
|
127
175
|
function DepthOfFieldTweener:GetOriginalRadius()
|
|
@@ -132,12 +180,24 @@ function DepthOfFieldTweener:GetOriginalDistance()
|
|
|
132
180
|
return self._originalDistance
|
|
133
181
|
end
|
|
134
182
|
|
|
183
|
+
function DepthOfFieldTweener:GetOriginalNearIntensity()
|
|
184
|
+
return self._originalNearIntensity
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
function DepthOfFieldTweener:GetOriginalFarIntensity()
|
|
188
|
+
return self._originalFarIntensity
|
|
189
|
+
end
|
|
190
|
+
|
|
135
191
|
function DepthOfFieldTweener:_update()
|
|
136
192
|
self._depthOfField.FocusDistance = self._distance.p
|
|
137
193
|
self._depthOfField.InFocusRadius = self._radius.p
|
|
194
|
+
self._depthOfField.NearIntensity = self._nearIntensity.p
|
|
195
|
+
self._depthOfField.FarIntensity = self._farIntensity.p
|
|
138
196
|
|
|
139
197
|
return self._radius.rtime > 0
|
|
140
198
|
or self._distance.rtime > 0
|
|
199
|
+
or self._nearIntensity.rtime > 0
|
|
200
|
+
or self._farIntensity.rtime > 0
|
|
141
201
|
end
|
|
142
202
|
|
|
143
203
|
return DepthOfFieldTweener
|