@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.0.1",
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": "^2.2.0",
29
- "@quenty/baseobject": "^5.1.1",
30
- "@quenty/loader": "^5.0.1",
31
- "@quenty/maid": "^2.4.0",
32
- "@quenty/signal": "^2.2.0",
33
- "@quenty/steputils": "^3.1.0",
34
- "@quenty/valueobject": "^6.0.1"
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": "340ac324c03fb3b844bbbe7ca57ee88874a724c9"
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(self._tweener:GetOriginalDistance(), self._tweener:GetOriginalRadius())
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.Enabled = false
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, speed)
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(speed or DEFAULT_SPEED)
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(speed or DEFAULT_SPEED)
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
- self:_startAnimation()
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