merged
This commit is contained in:
commit
3a60eee32f
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,6 +1,6 @@
|
||||||
- VertexShader: 46580970
|
- VertexShader: 46580970
|
||||||
FragmentShader: 50110174
|
FragmentShader: 50110174
|
||||||
SubPass: UI
|
SubPass: UI Translucent
|
||||||
Properties:
|
Properties:
|
||||||
data.color: {x: 0, y: 0, z: 0, w: 1}
|
data.color: {x: 0, y: 0, z: 0, w: 1}
|
||||||
data.textureIndex: 0
|
data.textureIndex: 0
|
||||||
|
|
|
@ -521,47 +521,11 @@
|
||||||
- Is Trigger: false
|
- Is Trigger: false
|
||||||
Collision Tag: 0
|
Collision Tag: 0
|
||||||
Type: Box
|
Type: Box
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
Half Extents: {x: 1.10000002, y: 2, z: 0.550000012}
|
||||||
Friction: 0.400000006
|
Friction: 0.400000006
|
||||||
Bounciness: 0
|
Bounciness: 0
|
||||||
Density: 1
|
Density: 1
|
||||||
Position Offset: {x: 0, y: 0.0299999993, z: 0}
|
Position Offset: {x: 0, y: 1, z: 0}
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.5, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.985000014, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.47500002, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.97000003, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
|
@ -584,47 +548,11 @@
|
||||||
- Is Trigger: false
|
- Is Trigger: false
|
||||||
Collision Tag: 0
|
Collision Tag: 0
|
||||||
Type: Box
|
Type: Box
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
Half Extents: {x: 1.10000002, y: 2, z: 0.550000012}
|
||||||
Friction: 0.400000006
|
Friction: 0.400000006
|
||||||
Bounciness: 0
|
Bounciness: 0
|
||||||
Density: 1
|
Density: 1
|
||||||
Position Offset: {x: 0, y: 0.0299999993, z: 0}
|
Position Offset: {x: 0, y: 1, z: 0}
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.5, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.985000014, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.47500002, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.97000003, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
|
@ -647,47 +575,11 @@
|
||||||
- Is Trigger: false
|
- Is Trigger: false
|
||||||
Collision Tag: 0
|
Collision Tag: 0
|
||||||
Type: Box
|
Type: Box
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
Half Extents: {x: 1.10000002, y: 2, z: 0.550000012}
|
||||||
Friction: 0.400000006
|
Friction: 0.400000006
|
||||||
Bounciness: 0
|
Bounciness: 0
|
||||||
Density: 1
|
Density: 1
|
||||||
Position Offset: {x: 0, y: 0.0299999993, z: 0}
|
Position Offset: {x: 0, y: 1, z: 0}
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.5, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.985000014, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.47500002, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.97000003, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
|
@ -836,47 +728,11 @@
|
||||||
- Is Trigger: false
|
- Is Trigger: false
|
||||||
Collision Tag: 0
|
Collision Tag: 0
|
||||||
Type: Box
|
Type: Box
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
Half Extents: {x: 1.10000002, y: 2, z: 0.550000012}
|
||||||
Friction: 0.400000006
|
Friction: 0.400000006
|
||||||
Bounciness: 0
|
Bounciness: 0
|
||||||
Density: 1
|
Density: 1
|
||||||
Position Offset: {x: 0, y: 0.0299999993, z: 0}
|
Position Offset: {x: 0, y: 1, z: 0}
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.5, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.985000014, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.47500002, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.97000003, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
|
@ -962,47 +818,11 @@
|
||||||
- Is Trigger: false
|
- Is Trigger: false
|
||||||
Collision Tag: 0
|
Collision Tag: 0
|
||||||
Type: Box
|
Type: Box
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
Half Extents: {x: 1.10000002, y: 2, z: 0.550000012}
|
||||||
Friction: 0.400000006
|
Friction: 0.400000006
|
||||||
Bounciness: 0
|
Bounciness: 0
|
||||||
Density: 1
|
Density: 1
|
||||||
Position Offset: {x: 0, y: 0.0299999993, z: 0}
|
Position Offset: {x: 0, y: 1, z: 0}
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.5, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 0.985000014, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.47500002, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
|
||||||
- Is Trigger: false
|
|
||||||
Collision Tag: 0
|
|
||||||
Type: Box
|
|
||||||
Half Extents: {x: 1.04999995, y: 0.0500000007, z: 0.550000012}
|
|
||||||
Friction: 0.400000006
|
|
||||||
Bounciness: 0
|
|
||||||
Density: 1
|
|
||||||
Position Offset: {x: 0, y: 1.97000003, z: 0}
|
|
||||||
Rotation Offset: {x: 0, y: 0, z: 0}
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
|
@ -2583,7 +2403,7 @@
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 0, y: 0, z: 0}
|
Translate: {x: 0, y: 0, z: 0}
|
||||||
Rotate: {x: -1.48352981, y: 0, z: 0}
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Renderable Component:
|
Renderable Component:
|
||||||
|
@ -4293,13 +4113,14 @@
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: -800, y: 400, z: 0}
|
Translate: {x: -800, y: 400, z: 0.100000001}
|
||||||
Rotate: {x: 0, y: 0, z: 0}
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
Scale: {x: 60, y: 60, z: 60}
|
Scale: {x: 60, y: 60, z: 60}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Text Renderer Component:
|
Text Renderer Component:
|
||||||
Text: My name is Brandon.
|
Text: "Score: 0"
|
||||||
Font: 176667660
|
Font: 176667660
|
||||||
|
Color: {x: 1, y: 1, z: 1, w: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
- EID: 206
|
- EID: 206
|
||||||
|
@ -4308,13 +4129,14 @@
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 500, y: 400, z: 0}
|
Translate: {x: 500, y: 400, z: 0.100000001}
|
||||||
Rotate: {x: 0, y: 0, z: 0}
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
Scale: {x: 60, y: 60, z: 60}
|
Scale: {x: 60, y: 60, z: 60}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Text Renderer Component:
|
Text Renderer Component:
|
||||||
Text: My name is Brandon.
|
Text: "Time Left: 200"
|
||||||
Font: 176667660
|
Font: 176667660
|
||||||
|
Color: {x: 1, y: 1, z: 1, w: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
- EID: 238
|
- EID: 238
|
||||||
|
@ -4323,13 +4145,14 @@
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: -800, y: 300, z: 0}
|
Translate: {x: -800, y: 300, z: 0.100000001}
|
||||||
Rotate: {x: 0, y: 0, z: 0}
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
Scale: {x: 60, y: 60, z: 60}
|
Scale: {x: 60, y: 60, z: 60}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Text Renderer Component:
|
Text Renderer Component:
|
||||||
Text: TEST
|
Text: ""
|
||||||
Font: 176667660
|
Font: 176667660
|
||||||
|
Color: {x: 1, y: 1, z: 1, w: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
- EID: 236
|
- EID: 236
|
||||||
|
@ -4343,7 +4166,7 @@
|
||||||
winScene: 86098106
|
winScene: 86098106
|
||||||
loseScene: 91685359
|
loseScene: 91685359
|
||||||
currGameState: 0
|
currGameState: 0
|
||||||
totalItemCount: 0
|
totalItemCount: 4
|
||||||
Score: 0
|
Score: 0
|
||||||
timer: 200
|
timer: 200
|
||||||
scoreText: 237
|
scoreText: 237
|
||||||
|
@ -4352,14 +4175,20 @@
|
||||||
maxMultiplierDuration: 5
|
maxMultiplierDuration: 5
|
||||||
maxMultiplierCombo: 10
|
maxMultiplierCombo: 10
|
||||||
multiplierFont: 60
|
multiplierFont: 60
|
||||||
|
- Type: PauseMenu
|
||||||
|
Enabled: true
|
||||||
|
resumeBtn: 457
|
||||||
|
retryBtn: 455
|
||||||
|
quitBtn: 456
|
||||||
|
canvas: 458
|
||||||
- EID: 235
|
- EID: 235
|
||||||
Name: ====AI=====
|
Name: ====AI=====
|
||||||
IsActive: true
|
IsActive: true
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 0.406909943, y: 0.100000001, z: -2}
|
Translate: {x: 2.13981342, y: 0.0490087792, z: -1.96055627}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: 0, y: -1.53675354, z: 0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Renderable Component:
|
Renderable Component:
|
||||||
|
@ -4385,7 +4214,7 @@
|
||||||
- Is Trigger: false
|
- Is Trigger: false
|
||||||
Collision Tag: 5
|
Collision Tag: 5
|
||||||
Type: Box
|
Type: Box
|
||||||
Half Extents: {x: 1, y: 1.79999995, z: 0.400000006}
|
Half Extents: {x: 0.600000024, y: 1.79999995, z: 0.400000006}
|
||||||
Friction: 0.400000006
|
Friction: 0.400000006
|
||||||
Bounciness: 0
|
Bounciness: 0
|
||||||
Density: 1
|
Density: 1
|
||||||
|
@ -4466,8 +4295,8 @@
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 3.71994686, y: 1.14058578, z: -9.35119247}
|
Translate: {x: 3.71994758, y: 1.0997268, z: -9.35119152}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: 4.18975469e-06, y: -1.08915871e-11, z: -5.03928231e-06}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Renderable Component:
|
Renderable Component:
|
||||||
|
@ -4509,7 +4338,7 @@
|
||||||
dontReturn: false
|
dontReturn: false
|
||||||
soundDistance: 10
|
soundDistance: 10
|
||||||
highlightSpeed: 200
|
highlightSpeed: 200
|
||||||
highlightThickness: 600
|
highlightThickness: 120
|
||||||
highlightLowerClamp: 0.25
|
highlightLowerClamp: 0.25
|
||||||
- EID: 227
|
- EID: 227
|
||||||
Name: Mesh_Cheese
|
Name: Mesh_Cheese
|
||||||
|
@ -4517,8 +4346,8 @@
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 3.22328258, y: 1.08429813, z: -0.57395637}
|
Translate: {x: 3.22328258, y: 1.02709854, z: -0.57395637}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: 5.62993963e-09, y: -7.03049191e-17, z: -1.92319405e-08}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Renderable Component:
|
Renderable Component:
|
||||||
|
@ -4530,7 +4359,7 @@
|
||||||
Drag: 0.00999999978
|
Drag: 0.00999999978
|
||||||
Angular Drag: 0.100000001
|
Angular Drag: 0.100000001
|
||||||
Use Gravity: true
|
Use Gravity: true
|
||||||
Interpolate: true
|
Interpolate: false
|
||||||
Sleeping Enabled: true
|
Sleeping Enabled: true
|
||||||
Freeze Position X: false
|
Freeze Position X: false
|
||||||
Freeze Position Y: false
|
Freeze Position Y: false
|
||||||
|
@ -4560,7 +4389,7 @@
|
||||||
dontReturn: false
|
dontReturn: false
|
||||||
soundDistance: 10
|
soundDistance: 10
|
||||||
highlightSpeed: 200
|
highlightSpeed: 200
|
||||||
highlightThickness: 600
|
highlightThickness: 50
|
||||||
highlightLowerClamp: 0.25
|
highlightLowerClamp: 0.25
|
||||||
- EID: 65778
|
- EID: 65778
|
||||||
Name: Mesh_Apple
|
Name: Mesh_Apple
|
||||||
|
@ -4568,8 +4397,8 @@
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: -2.5, y: 0.778462529, z: -5}
|
Translate: {x: -2.50000072, y: 0.799999774, z: -5.00000095}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -4.09249949e-08, y: 1.40052995e-13, z: 2.95086267e-08}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Renderable Component:
|
Renderable Component:
|
||||||
|
@ -4581,7 +4410,7 @@
|
||||||
Drag: 0.00999999978
|
Drag: 0.00999999978
|
||||||
Angular Drag: 0.100000001
|
Angular Drag: 0.100000001
|
||||||
Use Gravity: true
|
Use Gravity: true
|
||||||
Interpolate: true
|
Interpolate: false
|
||||||
Sleeping Enabled: true
|
Sleeping Enabled: true
|
||||||
Freeze Position X: false
|
Freeze Position X: false
|
||||||
Freeze Position Y: false
|
Freeze Position Y: false
|
||||||
|
@ -4611,7 +4440,7 @@
|
||||||
dontReturn: false
|
dontReturn: false
|
||||||
soundDistance: 10
|
soundDistance: 10
|
||||||
highlightSpeed: 200
|
highlightSpeed: 200
|
||||||
highlightThickness: 600
|
highlightThickness: 60
|
||||||
highlightLowerClamp: 0.25
|
highlightLowerClamp: 0.25
|
||||||
- EID: 216
|
- EID: 216
|
||||||
Name: Mesh_Apple
|
Name: Mesh_Apple
|
||||||
|
@ -4619,8 +4448,8 @@
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: -2.5, y: 0.778462529, z: -4.28408813}
|
Translate: {x: -2.50000072, y: 0.799999893, z: -4.28408909}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -5.83341553e-08, y: 7.48974247e-14, z: 1.10461471e-08}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Renderable Component:
|
Renderable Component:
|
||||||
|
@ -4632,7 +4461,7 @@
|
||||||
Drag: 0.00999999978
|
Drag: 0.00999999978
|
||||||
Angular Drag: 0.100000001
|
Angular Drag: 0.100000001
|
||||||
Use Gravity: true
|
Use Gravity: true
|
||||||
Interpolate: true
|
Interpolate: false
|
||||||
Sleeping Enabled: true
|
Sleeping Enabled: true
|
||||||
Freeze Position X: false
|
Freeze Position X: false
|
||||||
Freeze Position Y: false
|
Freeze Position Y: false
|
||||||
|
@ -4662,7 +4491,7 @@
|
||||||
dontReturn: false
|
dontReturn: false
|
||||||
soundDistance: 10
|
soundDistance: 10
|
||||||
highlightSpeed: 200
|
highlightSpeed: 200
|
||||||
highlightThickness: 600
|
highlightThickness: 60
|
||||||
highlightLowerClamp: 0.25
|
highlightLowerClamp: 0.25
|
||||||
- EID: 229
|
- EID: 229
|
||||||
Name: ====ScoreZonePool====
|
Name: ====ScoreZonePool====
|
||||||
|
@ -4677,7 +4506,7 @@
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: -7.47360849, y: 1.4327563, z: -2.44241929}
|
Translate: {x: -7.47360849, y: 1.4327563, z: -2.44241929}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -0, y: 0, z: 0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
RigidBody Component:
|
RigidBody Component:
|
||||||
|
@ -4739,7 +4568,7 @@
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 1.97487497, y: 1.3500793, z: -10.195508}
|
Translate: {x: 1.97487497, y: 1.3500793, z: -10.195508}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -0, y: 0, z: 0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
RigidBody Component:
|
RigidBody Component:
|
||||||
|
@ -4800,8 +4629,8 @@
|
||||||
NumberOfChildren: 1
|
NumberOfChildren: 1
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: -5.47656059, y: 1.4327563, z: -2.44241929}
|
Translate: {x: -5.47656107, y: 1.4327563, z: -2.44241929}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -0, y: 0, z: 0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
RigidBody Component:
|
RigidBody Component:
|
||||||
|
@ -4863,7 +4692,7 @@
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 6.09239721, y: 1.4327563, z: -6.03106117}
|
Translate: {x: 6.09239721, y: 1.4327563, z: -6.03106117}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -0, y: 0, z: 0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
RigidBody Component:
|
RigidBody Component:
|
||||||
|
@ -4925,7 +4754,7 @@
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 6.09239721, y: 1.4327563, z: -3.94262314}
|
Translate: {x: 6.09239721, y: 1.4327563, z: -3.94262314}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -0, y: 0, z: 0}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
RigidBody Component:
|
RigidBody Component:
|
||||||
|
@ -5075,7 +4904,7 @@
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: -8, y: 1.142977, z: -4}
|
Translate: {x: -8, y: 1.142977, z: -4}
|
||||||
Rotate: {x: -0, y: 0, z: -0}
|
Rotate: {x: -0, y: 1.57079649, z: 0}
|
||||||
Scale: {x: 0.999999881, y: 1, z: 0.999999881}
|
Scale: {x: 0.999999881, y: 1, z: 0.999999881}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Renderable Component:
|
Renderable Component:
|
||||||
|
@ -5090,7 +4919,7 @@
|
||||||
Interpolate: false
|
Interpolate: false
|
||||||
Sleeping Enabled: true
|
Sleeping Enabled: true
|
||||||
Freeze Position X: false
|
Freeze Position X: false
|
||||||
Freeze Position Y: true
|
Freeze Position Y: false
|
||||||
Freeze Position Z: false
|
Freeze Position Z: false
|
||||||
Freeze Rotation X: true
|
Freeze Rotation X: true
|
||||||
Freeze Rotation Y: true
|
Freeze Rotation Y: true
|
||||||
|
@ -5120,23 +4949,27 @@
|
||||||
maxJumpHeight: 2
|
maxJumpHeight: 2
|
||||||
maxJumpTime: 0.75
|
maxJumpTime: 0.75
|
||||||
fallMultipler: 3
|
fallMultipler: 3
|
||||||
jumpPadMultiplayer: 2
|
jumpPadMultiplayer: 1.20000005
|
||||||
lightMultiper: 0.75
|
lightMultiper: 0.899999976
|
||||||
mediumMultiper: 0.5
|
mediumMultiper: 0.699999988
|
||||||
heavyMultiper: 0.25
|
heavyMultiper: 0.5
|
||||||
|
silhouettePlayer: 462
|
||||||
|
silhouetteBag: 465
|
||||||
- Type: PickAndThrow
|
- Type: PickAndThrow
|
||||||
Enabled: true
|
Enabled: true
|
||||||
throwForce: [8, 10, 8]
|
throwForce: [8, 10, 8]
|
||||||
cameraArmOffSet: [0, 0.25, 0]
|
cameraArmOffSet: [0.25, 0.600000024, 0.200000003]
|
||||||
delayTimer: 1
|
delayTimer: 1
|
||||||
aimingLength: 0.899999976
|
aimingLength: 1
|
||||||
throwItem: false
|
throwItem: false
|
||||||
silhouettePlayer: 462
|
rayDistance: 0.75
|
||||||
silhouetteBag: 465
|
|
||||||
rayDistance: 0.5
|
|
||||||
rayHeight: 0.100000001
|
rayHeight: 0.100000001
|
||||||
aimingFOV: 50
|
aimingFOV: 50
|
||||||
defaultFOV: 45
|
defaultFOV: 45
|
||||||
|
- Type: StateMachine
|
||||||
|
Enabled: true
|
||||||
|
currentStateName: Idle State
|
||||||
|
currentAnimName: ""
|
||||||
- EID: 65733
|
- EID: 65733
|
||||||
Name: HoldingPoint
|
Name: HoldingPoint
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -5155,36 +4988,36 @@
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 0, y: -2.98023224e-08, z: 4.76837158e-07}
|
Translate: {x: 0, y: -2.98023224e-08, z: 4.76837158e-07}
|
||||||
Rotate: {x: 0, y: 6.28318548, z: 2.23517329e-08}
|
Rotate: {x: -0.173316926, y: 3.1415925, z: 2.23517329e-08}
|
||||||
Scale: {x: 1, y: 1, z: 1}
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Camera Component:
|
Camera Component:
|
||||||
Position: {x: 2.12735963, y: 0.362327784, z: 7.98933029}
|
Position: {x: -8.9091711, y: 2.05214882, z: -4}
|
||||||
Pitch: 0
|
Pitch: -9.93032837
|
||||||
Yaw: 360
|
Yaw: 270
|
||||||
Roll: 1.28065994e-06
|
Roll: 1.28065994e-06
|
||||||
Width: 1920
|
Width: 1920
|
||||||
Near: 0.00999999978
|
Near: 0.00999999978
|
||||||
Far: 10000
|
Far: 10000
|
||||||
Perspective: true
|
Perspective: true
|
||||||
FOV: 90
|
FOV: 45
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Camera Arm Component:
|
Camera Arm Component:
|
||||||
Arm Pitch: 0
|
Arm Pitch: 45
|
||||||
Arm Yaw: 0
|
Arm Yaw: -90
|
||||||
Arm Length: 1
|
Arm Length: 3
|
||||||
Look At Camera Origin: true
|
Look At Camera Origin: true
|
||||||
Target Offset: {x: 0, y: 0, z: 0}
|
Target Offset: {x: 0, y: 0.75, z: 0}
|
||||||
Camera Collision: true
|
Camera Collision: true
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts:
|
Scripts:
|
||||||
- Type: SHADE_Scripting.ThirdPersonCamera
|
- Type: SHADE_Scripting.ThirdPersonCamera
|
||||||
Enabled: true
|
Enabled: true
|
||||||
armLength: 2
|
armLength: 3
|
||||||
turnSpeedPitch: 0.300000012
|
turnSpeedPitch: 0.200000003
|
||||||
turnSpeedYaw: 0.5
|
turnSpeedYaw: 0.400000006
|
||||||
inverseXControls: true
|
inverseXControls: false
|
||||||
inverseYControls: true
|
inverseYControls: false
|
||||||
pitchUpperClamp: 45
|
pitchUpperClamp: 45
|
||||||
pitchLowerClamp: 5
|
pitchLowerClamp: 5
|
||||||
- EID: 65731
|
- EID: 65731
|
||||||
|
@ -5244,7 +5077,7 @@
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
- EID: 464
|
- EID: 464
|
||||||
Name: Canvas
|
Name: StealFoodCanvas
|
||||||
IsActive: true
|
IsActive: true
|
||||||
NumberOfChildren: 1
|
NumberOfChildren: 1
|
||||||
Components:
|
Components:
|
||||||
|
@ -5277,7 +5110,7 @@
|
||||||
- Type: SHADE_Scripting.UI.StealFoodPopUp
|
- Type: SHADE_Scripting.UI.StealFoodPopUp
|
||||||
Enabled: true
|
Enabled: true
|
||||||
popInDuration: 0.5
|
popInDuration: 0.5
|
||||||
popOutDuration: 0.5
|
popOutDuration: 0.075000003
|
||||||
stayDuration: 1
|
stayDuration: 1
|
||||||
rotationAmt: 1800
|
rotationAmt: 1800
|
||||||
scaleAmtX: 538
|
scaleAmtX: 538
|
||||||
|
@ -5291,6 +5124,192 @@
|
||||||
- Type: SHADE_Scripting.UI.TweenManager
|
- Type: SHADE_Scripting.UI.TweenManager
|
||||||
Enabled: true
|
Enabled: true
|
||||||
- EID: 461
|
- EID: 461
|
||||||
|
Name: CameraPoints
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 3
|
||||||
|
Components: ~
|
||||||
|
Scripts:
|
||||||
|
- Type: SHADE_Scripting.UI.PreviewLevel
|
||||||
|
Enabled: true
|
||||||
|
endPoint1: [-5.5, 1.5, -2]
|
||||||
|
endPoint2: [1, 1.5, -7.5]
|
||||||
|
endPoint3: [2.5, 1.5, -3]
|
||||||
|
playerCamera: 65730
|
||||||
|
duration: 3
|
||||||
|
- EID: 453
|
||||||
|
Name: PreviewLevel1
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -7.5, y: 1.5, z: -2}
|
||||||
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Camera Component:
|
||||||
|
Position: {x: -5.5, y: 1.5, z: -2}
|
||||||
|
Pitch: 0
|
||||||
|
Yaw: 0
|
||||||
|
Roll: 0
|
||||||
|
Width: 1920
|
||||||
|
Near: 0.00999999978
|
||||||
|
Far: 10000
|
||||||
|
Perspective: true
|
||||||
|
FOV: 90
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 452
|
||||||
|
Name: PreviewLevel2
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -1.5, y: 1.5, z: -7.5}
|
||||||
|
Rotate: {x: 0, y: -3.14159274, z: 0}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Camera Component:
|
||||||
|
Position: {x: -0.24528563, y: 1.5, z: -7.5}
|
||||||
|
Pitch: 0
|
||||||
|
Yaw: -180
|
||||||
|
Roll: 0
|
||||||
|
Width: 1920
|
||||||
|
Near: 0.00999999978
|
||||||
|
Far: 10000
|
||||||
|
Perspective: true
|
||||||
|
FOV: 90
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 451
|
||||||
|
Name: PreviewLevel3
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 2.5, y: 1.5, z: -7.5}
|
||||||
|
Rotate: {x: 0, y: 4.71238899, z: 0}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Camera Component:
|
||||||
|
Position: {x: 2.5, y: 1.5, z: -7.5}
|
||||||
|
Pitch: 0
|
||||||
|
Yaw: 270
|
||||||
|
Roll: 0
|
||||||
|
Width: 1920
|
||||||
|
Near: 0.00999999978
|
||||||
|
Far: 10000
|
||||||
|
Perspective: true
|
||||||
|
FOV: 90
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 458
|
||||||
|
Name: PauseCanvas
|
||||||
|
IsActive: false
|
||||||
|
NumberOfChildren: 4
|
||||||
|
Components:
|
||||||
|
Canvas Component:
|
||||||
|
Canvas Width: 1920
|
||||||
|
Canvas Height: 1080
|
||||||
|
Scale by canvas width: false
|
||||||
|
IsActive: false
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 457
|
||||||
|
Name: ResumeButton
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0, y: 100, z: 0}
|
||||||
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
|
Scale: {x: 300, y: 200, z: 500}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 141771688
|
||||||
|
Material: 129340704
|
||||||
|
IsActive: true
|
||||||
|
Button Component:
|
||||||
|
Default Texture: 63979907
|
||||||
|
Hovered Texture: 51379325
|
||||||
|
Clicked Texture: 66788278
|
||||||
|
IsActive: true
|
||||||
|
UI Component:
|
||||||
|
Canvas ID: 458
|
||||||
|
Hovered: false
|
||||||
|
Clicked: false
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 456
|
||||||
|
Name: QuitButton
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0, y: -300, z: 0}
|
||||||
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
|
Scale: {x: 300, y: 200, z: 500}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 141771688
|
||||||
|
Material: 129340704
|
||||||
|
IsActive: true
|
||||||
|
Button Component:
|
||||||
|
Default Texture: 61602036
|
||||||
|
Hovered Texture: 58910810
|
||||||
|
Clicked Texture: 57786063
|
||||||
|
IsActive: true
|
||||||
|
UI Component:
|
||||||
|
Canvas ID: 458
|
||||||
|
Hovered: false
|
||||||
|
Clicked: false
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 455
|
||||||
|
Name: RetryButton
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0, y: -100, z: 0}
|
||||||
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
|
Scale: {x: 300, y: 200, z: 500}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 141771688
|
||||||
|
Material: 129340704
|
||||||
|
IsActive: true
|
||||||
|
Button Component:
|
||||||
|
Default Texture: 64806384
|
||||||
|
Hovered Texture: 58347825
|
||||||
|
Clicked Texture: 63234380
|
||||||
|
IsActive: true
|
||||||
|
UI Component:
|
||||||
|
Canvas ID: 458
|
||||||
|
Hovered: false
|
||||||
|
Clicked: false
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 454
|
||||||
|
Name: GamePauseText
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -250, y: 300, z: 0.100000001}
|
||||||
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
|
Scale: {x: 100, y: 100, z: 100}
|
||||||
|
IsActive: true
|
||||||
|
Text Renderer Component:
|
||||||
|
Text: Game Pause
|
||||||
|
Font: 176667660
|
||||||
|
Color: {x: 1, y: 1, z: 1, w: 1}
|
||||||
|
IsActive: false
|
||||||
|
UI Component:
|
||||||
|
Canvas ID: 458
|
||||||
|
Hovered: false
|
||||||
|
Clicked: false
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 450
|
||||||
Name: TransitionCanvas
|
Name: TransitionCanvas
|
||||||
IsActive: true
|
IsActive: true
|
||||||
NumberOfChildren: 1
|
NumberOfChildren: 1
|
||||||
|
@ -5301,22 +5320,22 @@
|
||||||
Scale by canvas width: false
|
Scale by canvas width: false
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
- EID: 459
|
- EID: 65982
|
||||||
Name: Transition
|
Name: Transition
|
||||||
IsActive: true
|
IsActive: true
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 0, y: 0, z: 0}
|
Translate: {x: 0, y: 0, z: 0.100000001}
|
||||||
Rotate: {x: 0, y: 0, z: 0}
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
Scale: {x: 1920, y: 1080, z: 1}
|
Scale: {x: 2500, y: 1080, z: 1}
|
||||||
IsActive: true
|
IsActive: true
|
||||||
Renderable Component:
|
Renderable Component:
|
||||||
Mesh: 141771688
|
Mesh: 141771688
|
||||||
Material: 120016136
|
Material: 120016136
|
||||||
IsActive: true
|
IsActive: true
|
||||||
UI Component:
|
UI Component:
|
||||||
Canvas ID: 461
|
Canvas ID: 450
|
||||||
Hovered: false
|
Hovered: false
|
||||||
Clicked: false
|
Clicked: false
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -113,7 +113,8 @@ public partial class LeafChase : BehaviourTreeNode
|
||||||
if (GetNodeData("isAlert") != null && (bool)GetNodeData("isAlert") == true)
|
if (GetNodeData("isAlert") != null && (bool)GetNodeData("isAlert") == true)
|
||||||
{
|
{
|
||||||
//AudioHandler.audioClipHandlers["BGMAdpative"].SetParameter("Detected", 0.0f);
|
//AudioHandler.audioClipHandlers["BGMAdpative"].SetParameter("Detected", 0.0f);
|
||||||
Audio.SetParameter("Detected", 0.0f);
|
//Audio.SetParameter("Detected", 0.0f);
|
||||||
|
Audio.SetParameterWithLabel("PlayerDetection", "Undetected");
|
||||||
AudioHandler.audioClipHandlers["SFXHumming"].Play();
|
AudioHandler.audioClipHandlers["SFXHumming"].Play();
|
||||||
}
|
}
|
||||||
SetNodeData("isAlert", false);
|
SetNodeData("isAlert", false);
|
||||||
|
|
|
@ -245,7 +245,8 @@ public partial class LeafPatrol : BehaviourTreeNode
|
||||||
AudioHandler.audioClipHandlers["SFXHumming"].Play();
|
AudioHandler.audioClipHandlers["SFXHumming"].Play();
|
||||||
//AudioHandler.audioClipHandlers["BGMUnalert"].Play();
|
//AudioHandler.audioClipHandlers["BGMUnalert"].Play();
|
||||||
//AudioHandler.audioClipHandlers["BGMAdaptive"].SetParameter("Detected", 0.0f);
|
//AudioHandler.audioClipHandlers["BGMAdaptive"].SetParameter("Detected", 0.0f);
|
||||||
Audio.SetParameter("Detected", 0.0f);
|
//Audio.SetParameter("Detected", 0.0f);
|
||||||
|
Audio.SetParameterWithLabel("PlayerDetection", "Undetected");
|
||||||
}
|
}
|
||||||
SetNodeData("isAlert", false);
|
SetNodeData("isAlert", false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ public partial class LeafSearch : BehaviourTreeNode
|
||||||
private Vector3 eyeOffset;
|
private Vector3 eyeOffset;
|
||||||
private float sightDistance;
|
private float sightDistance;
|
||||||
private GameObject? player; //To be searched for and marked
|
private GameObject? player; //To be searched for and marked
|
||||||
|
private bool screamOnce;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FUNCTIONS HERE
|
//FUNCTIONS HERE
|
||||||
|
@ -67,7 +68,8 @@ public partial class LeafSearch : BehaviourTreeNode
|
||||||
if (GetNodeData("isAlert") != null && (bool)GetNodeData("isAlert") == true)
|
if (GetNodeData("isAlert") != null && (bool)GetNodeData("isAlert") == true)
|
||||||
{
|
{
|
||||||
//AudioHandler.audioClipHandlers["BGMAdaptive"].SetParameter("Detected", 0.0f);
|
//AudioHandler.audioClipHandlers["BGMAdaptive"].SetParameter("Detected", 0.0f);
|
||||||
Audio.SetParameter("Detected", 0.0f);
|
//Audio.SetParameter("Detected", 0.0f);
|
||||||
|
Audio.SetParameterWithLabel("PlayerDetection", "Undetected");
|
||||||
AudioHandler.audioClipHandlers["SFXHumming"].Play();
|
AudioHandler.audioClipHandlers["SFXHumming"].Play();
|
||||||
reevaluateWaypoint();
|
reevaluateWaypoint();
|
||||||
}
|
}
|
||||||
|
@ -97,6 +99,7 @@ public partial class LeafSearch : BehaviourTreeNode
|
||||||
|
|
||||||
//Search for player
|
//Search for player
|
||||||
player = GameObject.Find("Player");
|
player = GameObject.Find("Player");
|
||||||
|
screamOnce = false;
|
||||||
|
|
||||||
//Automatically fail if no player is found
|
//Automatically fail if no player is found
|
||||||
if (player == null)
|
if (player == null)
|
||||||
|
@ -188,31 +191,41 @@ public partial class LeafSearch : BehaviourTreeNode
|
||||||
if (GetNodeData("isAlert") == null)
|
if (GetNodeData("isAlert") == null)
|
||||||
{
|
{
|
||||||
SetNodeData("isAlert", true);
|
SetNodeData("isAlert", true);
|
||||||
|
screamOnce = true;
|
||||||
//Audio.StopAllSounds();
|
//Audio.StopAllSounds();
|
||||||
AudioHandler.audioClipHandlers["SFXDetectAh"].Play();
|
//AudioHandler.audioClipHandlers["SFXDetectAh"].Play();
|
||||||
AudioHandler.audioClipHandlers["SFXDetectSting"].Play();
|
AudioHandler.audioClipHandlers["SFXDetectSting"].Play();
|
||||||
//AudioHandler.audioClipHandlers["BGMAlert"].Play();
|
//AudioHandler.audioClipHandlers["BGMAlert"].Play();
|
||||||
AudioHandler.audioClipHandlers["SFXHumming"].Stop(false);
|
AudioHandler.audioClipHandlers["SFXHumming"].Stop(false);
|
||||||
//AudioHandler.audioClipHandlers["BGMUnalert"].Stop(true);
|
//AudioHandler.audioClipHandlers["BGMUnalert"].Stop(true);
|
||||||
//AudioHandler.audioClipHandlers["BGMAdaptive"].SetParameter("Detected", 1.0f);
|
//AudioHandler.audioClipHandlers["BGMAdaptive"].SetParameter("Detected", 1.0f);
|
||||||
Audio.SetParameter("Detected", 1.0f);
|
//Audio.SetParameter("Detected", 1.0f);
|
||||||
|
Audio.SetParameterWithLabel("PlayerDetection", "Detected");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (GetNodeData("isAlert") != null && (bool)GetNodeData("isAlert") == false)
|
if (GetNodeData("isAlert") != null && (bool)GetNodeData("isAlert") == false)
|
||||||
{
|
{
|
||||||
//Audio.StopAllSounds();
|
//Audio.StopAllSounds();
|
||||||
AudioHandler.audioClipHandlers["SFXDetectAh"].Play();
|
screamOnce = true;
|
||||||
|
//AudioHandler.audioClipHandlers["SFXDetectAh"].Play();
|
||||||
AudioHandler.audioClipHandlers["SFXDetectSting"].Play();
|
AudioHandler.audioClipHandlers["SFXDetectSting"].Play();
|
||||||
//AudioHandler.audioClipHandlers["BGMAlert"].Play();
|
//AudioHandler.audioClipHandlers["BGMAlert"].Play();
|
||||||
AudioHandler.audioClipHandlers["SFXHumming"].Stop(false);
|
AudioHandler.audioClipHandlers["SFXHumming"].Stop(false);
|
||||||
//AudioHandler.audioClipHandlers["BGMUnalert"].Stop(true);
|
//AudioHandler.audioClipHandlers["BGMUnalert"].Stop(true);
|
||||||
//AudioHandler.audioClipHandlers["BGMAdaptive"].SetParameter("Detected", 1.0f);
|
//AudioHandler.audioClipHandlers["BGMAdaptive"].SetParameter("Detected", 1.0f);
|
||||||
Audio.SetParameter("Detected", 1.0f);
|
//Audio.SetParameter("Detected", 1.0f);
|
||||||
|
Audio.SetParameterWithLabel("PlayerDetection", "Detected");
|
||||||
}
|
}
|
||||||
SetNodeData("isAlert", true);
|
SetNodeData("isAlert", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (screamOnce)
|
||||||
|
{
|
||||||
|
screamOnce = false;
|
||||||
|
AudioHandler.audioClipHandlers["SFXDetectAh"].Play();
|
||||||
|
}
|
||||||
|
|
||||||
status = BehaviourTreeNodeStatus.SUCCESS;
|
status = BehaviourTreeNodeStatus.SUCCESS;
|
||||||
onExit(BehaviourTreeNodeStatus.SUCCESS);
|
onExit(BehaviourTreeNodeStatus.SUCCESS);
|
||||||
return status;
|
return status;
|
||||||
|
|
|
@ -28,11 +28,6 @@ public class PickAndThrow : Script
|
||||||
public bool throwItem = false;
|
public bool throwItem = false;
|
||||||
private Vector3 prevTargetOffSet;
|
private Vector3 prevTargetOffSet;
|
||||||
|
|
||||||
public GameObject silhouettePlayer;
|
|
||||||
public Renderable silhouettePlayerRend;
|
|
||||||
public GameObject silhouetteBag;
|
|
||||||
public Renderable silhouetteBagRend;
|
|
||||||
|
|
||||||
[Tooltip("Lenght of ray")]
|
[Tooltip("Lenght of ray")]
|
||||||
public float rayDistance = 1;
|
public float rayDistance = 1;
|
||||||
|
|
||||||
|
@ -58,41 +53,17 @@ public class PickAndThrow : Script
|
||||||
if(!tpc)
|
if(!tpc)
|
||||||
Debug.LogError("TPC EMPTY");
|
Debug.LogError("TPC EMPTY");
|
||||||
|
|
||||||
if(!silhouettePlayer)
|
|
||||||
Debug.LogError("silhouettePlayer EMPTY");
|
|
||||||
else
|
|
||||||
silhouettePlayerRend = silhouettePlayer.GetComponent<Renderable>();
|
|
||||||
|
|
||||||
if (!silhouetteBag)
|
|
||||||
Debug.LogError("silhouetteBag EMPTY");
|
|
||||||
else
|
|
||||||
silhouetteBagRend = silhouetteBag.GetComponent<Renderable>();
|
|
||||||
|
|
||||||
AudioHandler.audioClipHandlers["SFXThrow"] = Audio.CreateAudioClip("event:/Raccoon/raccoon_throw");
|
AudioHandler.audioClipHandlers["SFXThrow"] = Audio.CreateAudioClip("event:/Raccoon/raccoon_throw");
|
||||||
|
|
||||||
timer = delayTimer;
|
timer = delayTimer;
|
||||||
}
|
}
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
if (GameManager.Instance.GamePause)
|
if (GameManager.Instance.GamePause || !GameManager.Instance.stealFoodPopUpDone)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (silhouettePlayerRend && silhouetteBagRend)
|
|
||||||
{
|
|
||||||
//wait for daniel
|
|
||||||
//0.00075f;
|
|
||||||
Vector3 dis = Camera.GetMainCamera().Position - GameObject.GetComponent<Transform>().LocalPosition;
|
|
||||||
float disSqr = dis.GetSqrMagnitude();
|
|
||||||
float ratio = System.Math.Clamp(1 - (disSqr / (1 + disSqr)), 0, 1.0f);
|
|
||||||
float temp = (1 - ratio) * 0.00075f;
|
|
||||||
if (temp <= 0.0006f)
|
|
||||||
temp = 0.1f;
|
|
||||||
silhouettePlayerRend.Material.SetProperty<float>("data.offset", temp);
|
|
||||||
silhouetteBagRend.Material.SetProperty<float>("data.offset", temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timer <= delayTimer)
|
if (timer <= delayTimer)
|
||||||
timer += Time.DeltaTimeF;
|
timer += Time.DeltaTimeF;
|
||||||
|
|
||||||
|
@ -171,7 +142,7 @@ public class PickAndThrow : Script
|
||||||
|
|
||||||
protected override void fixedUpdate()
|
protected override void fixedUpdate()
|
||||||
{
|
{
|
||||||
if (GameManager.Instance.GamePause)
|
if (GameManager.Instance.GamePause || !GameManager.Instance.stealFoodPopUpDone)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,15 +17,6 @@ public class PlayerController : Script
|
||||||
TOTAL
|
TOTAL
|
||||||
}
|
}
|
||||||
|
|
||||||
/* public enum WalkingState
|
|
||||||
{
|
|
||||||
CARRY,
|
|
||||||
AIMING,
|
|
||||||
THROW,
|
|
||||||
WALK,
|
|
||||||
TOTAL
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public RigidBody rb { get; set; }
|
public RigidBody rb { get; set; }
|
||||||
public Transform tranform { get; set; }
|
public Transform tranform { get; set; }
|
||||||
public Camera cam { get; set; }
|
public Camera cam { get; set; }
|
||||||
|
@ -85,6 +76,12 @@ public class PlayerController : Script
|
||||||
[Tooltip("How heavy item will affect player jump")]
|
[Tooltip("How heavy item will affect player jump")]
|
||||||
public float heavyMultiper = 0.25f;
|
public float heavyMultiper = 0.25f;
|
||||||
|
|
||||||
|
//silhouette=====================================================================
|
||||||
|
public GameObject silhouettePlayer;
|
||||||
|
public Renderable silhouettePlayerRend;
|
||||||
|
public GameObject silhouetteBag;
|
||||||
|
public Renderable silhouetteBagRend;
|
||||||
|
|
||||||
protected override void awake()
|
protected override void awake()
|
||||||
{
|
{
|
||||||
//default setup
|
//default setup
|
||||||
|
@ -119,6 +116,21 @@ public class PlayerController : Script
|
||||||
dictionary.Add(typeof(PlayerCaughtState), new PlayerCaughtState(stateMachine));
|
dictionary.Add(typeof(PlayerCaughtState), new PlayerCaughtState(stateMachine));
|
||||||
stateMachine.InitStateMachine(dictionary);
|
stateMachine.InitStateMachine(dictionary);
|
||||||
|
|
||||||
|
if (!silhouettePlayer)
|
||||||
|
Debug.LogError("silhouettePlayer EMPTY");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
silhouettePlayerRend = silhouettePlayer.GetComponent<Renderable>();
|
||||||
|
silhouettePlayerRend.Material.SetProperty<float>("data.offset", 0.1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!silhouetteBag)
|
||||||
|
Debug.LogError("silhouetteBag EMPTY");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
silhouetteBagRend = silhouetteBag.GetComponent<Renderable>();
|
||||||
|
silhouetteBagRend.Material.SetProperty<float>("data.offset", 0.1f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void lateUpdate()
|
protected override void lateUpdate()
|
||||||
|
@ -127,26 +139,23 @@ public class PlayerController : Script
|
||||||
|
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
if (GameManager.Instance.GamePause)
|
if (GameManager.Instance.GamePause || !GameManager.Instance.stealFoodPopUpDone)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (delayTimer <= 1)
|
if (silhouettePlayerRend && silhouetteBagRend)
|
||||||
delayTimer += Time.DeltaTimeF;
|
{
|
||||||
|
Vector3 dis = Camera.GetMainCamera().Position - GameObject.GetComponent<Transform>().LocalPosition;
|
||||||
|
float disSqr = dis.GetSqrMagnitude();
|
||||||
|
float ratio = System.Math.Clamp(1 - (disSqr / (1 + disSqr)), 0, 1.0f);
|
||||||
|
float temp = (1 - ratio) * 0.00075f;
|
||||||
|
if (temp <= 0.0006f)
|
||||||
|
temp = 0.1f;
|
||||||
|
silhouettePlayerRend.Material.SetProperty<float>("data.offset", temp);
|
||||||
|
silhouetteBagRend.Material.SetProperty<float>("data.offset", temp);
|
||||||
|
}
|
||||||
|
|
||||||
if (delayTimer < 1)
|
|
||||||
{
|
|
||||||
if (tranform && respawnPoint && rb)
|
|
||||||
{
|
|
||||||
rb.LinearVelocity = Vector3.Zero;
|
|
||||||
tranform.LocalPosition = respawnPoint.GetComponent<Transform>().LocalPosition;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rb.FreezePositionY = false;
|
|
||||||
}
|
|
||||||
//PickAndThrow check
|
//PickAndThrow check
|
||||||
if (!pat)
|
if (!pat)
|
||||||
{
|
{
|
||||||
|
@ -156,13 +165,15 @@ public class PlayerController : Script
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cam)
|
if (!cam)
|
||||||
|
{
|
||||||
cam = GetComponentInChildren<Camera>();
|
cam = GetComponentInChildren<Camera>();
|
||||||
|
if(pat)
|
||||||
|
cam.FOV = pat.defaultFOV;
|
||||||
|
}
|
||||||
if(!camArm)
|
if(!camArm)
|
||||||
camArm = GetComponentInChildren<CameraArm>();
|
camArm = GetComponentInChildren<CameraArm>();
|
||||||
|
|
||||||
//tempFix
|
|
||||||
if (tranform)
|
|
||||||
tranform.LocalEulerAngles = new Vector3(0.0f, tranform.LocalEulerAngles.y, 0.0f);
|
|
||||||
|
|
||||||
GotCaught();
|
GotCaught();
|
||||||
Rotation();
|
Rotation();
|
||||||
|
@ -178,7 +189,7 @@ public class PlayerController : Script
|
||||||
|
|
||||||
protected override void fixedUpdate()
|
protected override void fixedUpdate()
|
||||||
{
|
{
|
||||||
if (GameManager.Instance.GamePause)
|
if (GameManager.Instance.GamePause || !GameManager.Instance.stealFoodPopUpDone)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -333,10 +344,11 @@ public class PlayerController : Script
|
||||||
|
|
||||||
private void Rotation()
|
private void Rotation()
|
||||||
{
|
{
|
||||||
|
tranform.LocalEulerAngles = new Vector3(0.0f, tranform.LocalEulerAngles.y, 0.0f);
|
||||||
if (isMoveKeyPress && tranform && !isAiming)
|
if (isMoveKeyPress && tranform && !isAiming)
|
||||||
{
|
{
|
||||||
Quaternion currentRotation = tranform.LocalRotation;
|
Quaternion currentRotation = tranform.LocalRotation;
|
||||||
Quaternion targetRotation = Quaternion.LookRotation(new Vector3(axisMove.x, 0.0f, axisMove.y), new Vector3(0.0f, 1.0f, 0.0f));
|
Quaternion targetRotation = Quaternion.LookRotation(new Vector3(axisMove.x, 0.0f, axisMove.y), Vector3.Up);
|
||||||
tranform.LocalRotation = Quaternion.Slerp(currentRotation, targetRotation, rotationFactorPerFrame * (float)Time.FixedDeltaTime);
|
tranform.LocalRotation = Quaternion.Slerp(currentRotation, targetRotation, rotationFactorPerFrame * (float)Time.FixedDeltaTime);
|
||||||
}
|
}
|
||||||
else if (camArm && tranform && isAiming)
|
else if (camArm && tranform && isAiming)
|
||||||
|
@ -345,6 +357,7 @@ public class PlayerController : Script
|
||||||
Quaternion targetRotation = Quaternion.Euler(0.0f, SHADE.Math.DegreesToRadians(camArm.Yaw + 180.0f), 0.0f);
|
Quaternion targetRotation = Quaternion.Euler(0.0f, SHADE.Math.DegreesToRadians(camArm.Yaw + 180.0f), 0.0f);
|
||||||
tranform.LocalRotation = Quaternion.Slerp(currentRotation, targetRotation, rotationFactorPerFrame * (float)Time.FixedDeltaTime);
|
tranform.LocalRotation = Quaternion.Slerp(currentRotation, targetRotation, rotationFactorPerFrame * (float)Time.FixedDeltaTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Gravity()
|
private void Gravity()
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace SHADE_Scripting
|
||||||
|
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
if (GameManager.Instance.GamePause)
|
if (GameManager.Instance.GamePause || !GameManager.Instance.stealFoodPopUpDone)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,8 @@ public class GameManager : Script
|
||||||
public static GameManager Instance { get; private set; }
|
public static GameManager Instance { get; private set; }
|
||||||
|
|
||||||
public bool GamePause { get; set; }
|
public bool GamePause { get; set; }
|
||||||
|
public bool stealFoodPopUpDone { get; set; }
|
||||||
|
public bool PreviewLevelDone { get; set; }
|
||||||
|
|
||||||
public bool itemShatter { get; set; }
|
public bool itemShatter { get; set; }
|
||||||
|
|
||||||
|
@ -63,20 +65,28 @@ public class GameManager : Script
|
||||||
currMultiplierDuration = 0;
|
currMultiplierDuration = 0;
|
||||||
fontScalar = new Vector3(multiplierFont / maxMultiplierDuration, multiplierFont / maxMultiplierDuration , multiplierFont / maxMultiplierDuration);
|
fontScalar = new Vector3(multiplierFont / maxMultiplierDuration, multiplierFont / maxMultiplierDuration , multiplierFont / maxMultiplierDuration);
|
||||||
itemShatter = false;
|
itemShatter = false;
|
||||||
|
GamePause = false;
|
||||||
|
stealFoodPopUpDone = false;
|
||||||
|
PreviewLevelDone = false;
|
||||||
|
|
||||||
AudioHandler.audioClipHandlers["BGMWin"] = Audio.CreateAudioClip("event:/Music/stingers/game_win");
|
AudioHandler.audioClipHandlers["BGMWin"] = Audio.CreateAudioClip("event:/Music/stingers/game_win");
|
||||||
AudioHandler.audioClipHandlers["BGMLose"] = Audio.CreateAudioClip("event:/Music/stingers/game_lose");
|
AudioHandler.audioClipHandlers["BGMLose"] = Audio.CreateAudioClip("event:/Music/stingers/game_lose");
|
||||||
|
|
||||||
goingToWin = false;
|
goingToWin = false;
|
||||||
goingToLose = false;
|
goingToLose = false;
|
||||||
|
|
||||||
|
if (scoreText)
|
||||||
|
scoreText.GetComponent<TextRenderable>().Text = $"{Score}";
|
||||||
|
if (timeText)
|
||||||
|
timeText.GetComponent<TextRenderable>().Text = $"{timer.ToString("0")}";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void start()
|
protected override void start()
|
||||||
{
|
{
|
||||||
AudioHandler.audioClipHandlers["BGMAdaptive"] = Audio.CreateAudioClip("event:/Music/bgm_adaptive");
|
AudioHandler.audioClipHandlers["BGMAdaptive"] = Audio.CreateAudioClip("event:/Music/bgm_adaptive_new");
|
||||||
AudioHandler.audioClipHandlers["BGMAdaptive"].Play();
|
AudioHandler.audioClipHandlers["BGMAdaptive"].Play();
|
||||||
|
|
||||||
Audio.SetParameter("Detected", 0.0f);
|
Audio.SetParameterWithLabel("PlayerDetection", "Undetected");
|
||||||
|
|
||||||
AudioHandler.audioClipHandlers["KitchenAmbience"] = Audio.CreateAudioClip("event:/Ambience/roomtone_kitchen");
|
AudioHandler.audioClipHandlers["KitchenAmbience"] = Audio.CreateAudioClip("event:/Ambience/roomtone_kitchen");
|
||||||
AudioHandler.audioClipHandlers["KitchenAmbience"].Play();
|
AudioHandler.audioClipHandlers["KitchenAmbience"].Play();
|
||||||
|
@ -85,23 +95,24 @@ public class GameManager : Script
|
||||||
AudioHandler.audioClipHandlers["SFXHumming"].SetVolume(0.15f);
|
AudioHandler.audioClipHandlers["SFXHumming"].SetVolume(0.15f);
|
||||||
AudioHandler.audioClipHandlers["SFXHumming"].Play();
|
AudioHandler.audioClipHandlers["SFXHumming"].Play();
|
||||||
|
|
||||||
SceneFadeInOut.Instance.CallFadeOut();
|
if (SceneFadeInOut.Instance != null)
|
||||||
|
SceneFadeInOut.Instance.CallFadeOut();
|
||||||
|
Application.IsCursorVisible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
if (Input.GetKeyDown(Input.KeyCode.G))
|
if (GamePause || !stealFoodPopUpDone)
|
||||||
ItemScored();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (GamePause)
|
|
||||||
{
|
{
|
||||||
|
Input.SetMouseCentering(false);
|
||||||
|
Application.IsCursorVisible = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currGameState == GameState.START)
|
if (currGameState == GameState.START)
|
||||||
{
|
{
|
||||||
|
Input.SetMouseCentering(true);
|
||||||
|
|
||||||
timer -= Time.DeltaTimeF;
|
timer -= Time.DeltaTimeF;
|
||||||
if(scoreText)
|
if(scoreText)
|
||||||
scoreText.GetComponent<TextRenderable>().Text = $"{Score}";
|
scoreText.GetComponent<TextRenderable>().Text = $"{Score}";
|
||||||
|
@ -131,7 +142,8 @@ public class GameManager : Script
|
||||||
AudioHandler.StopAllSounds(false);
|
AudioHandler.StopAllSounds(false);
|
||||||
AudioHandler.audioClipHandlers["BGMWin"].Play();
|
AudioHandler.audioClipHandlers["BGMWin"].Play();
|
||||||
goingToWin = true;
|
goingToWin = true;
|
||||||
SceneFadeInOut.Instance.CallFadeIn();
|
if (SceneFadeInOut.Instance != null)
|
||||||
|
SceneFadeInOut.Instance.CallFadeIn();
|
||||||
}
|
}
|
||||||
else if(!goingToWin && (timer < 0 || Input.GetKeyDown(Input.KeyCode.F2)))
|
else if(!goingToWin && (timer < 0 || Input.GetKeyDown(Input.KeyCode.F2)))
|
||||||
{
|
{
|
||||||
|
@ -139,12 +151,27 @@ public class GameManager : Script
|
||||||
AudioHandler.StopAllSounds(false);
|
AudioHandler.StopAllSounds(false);
|
||||||
AudioHandler.audioClipHandlers["BGMLose"].Play();
|
AudioHandler.audioClipHandlers["BGMLose"].Play();
|
||||||
goingToLose = true;
|
goingToLose = true;
|
||||||
SceneFadeInOut.Instance.CallFadeIn();
|
if (SceneFadeInOut.Instance != null)
|
||||||
|
SceneFadeInOut.Instance.CallFadeIn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Handling transitions
|
//Handling transitions
|
||||||
if (SceneFadeInOut.Instance.FadeInFinished())
|
if (SceneFadeInOut.Instance != null)
|
||||||
|
{
|
||||||
|
if (SceneFadeInOut.Instance.FadeInFinished())
|
||||||
|
{
|
||||||
|
if (goingToWin)
|
||||||
|
{
|
||||||
|
SceneManager.ChangeScene(winScene);
|
||||||
|
}
|
||||||
|
if (goingToLose)
|
||||||
|
{
|
||||||
|
SceneManager.ChangeScene(loseScene);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
if (goingToWin)
|
if (goingToWin)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,158 @@
|
||||||
|
using SHADE;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
|
||||||
|
namespace SHADE_Scripting.UI
|
||||||
|
{
|
||||||
|
public class PreviewLevel : Script
|
||||||
|
{
|
||||||
|
private List<Camera> listOfCamera;
|
||||||
|
|
||||||
|
public Vector3 endPoint1;
|
||||||
|
public Vector3 endPoint2;
|
||||||
|
public Vector3 endPoint3;
|
||||||
|
|
||||||
|
public GameObject playerCamera;
|
||||||
|
public float duration = 3.0f;
|
||||||
|
|
||||||
|
private bool point1Done = false;
|
||||||
|
private bool point2Done = false;
|
||||||
|
private bool point3Done = false;
|
||||||
|
|
||||||
|
private bool reset2 = true;
|
||||||
|
private bool reset3 = true;
|
||||||
|
|
||||||
|
private bool skip = false;
|
||||||
|
[NonSerialized]
|
||||||
|
private TweenThreadVec3 moveToEndPoint1;
|
||||||
|
[NonSerialized]
|
||||||
|
private TweenThreadVec3 moveToEndPoint2;
|
||||||
|
[NonSerialized]
|
||||||
|
private TweenThreadVec3 moveToEndPoint3;
|
||||||
|
|
||||||
|
protected override void awake()
|
||||||
|
{
|
||||||
|
listOfCamera = GameObject.GetComponentsInChildren<Camera>().ToList();
|
||||||
|
|
||||||
|
if (listOfCamera.Count == 0)
|
||||||
|
Debug.LogError("EMPTY PREVIEW POINTS");
|
||||||
|
|
||||||
|
listOfCamera[0].SetMainCamera();
|
||||||
|
|
||||||
|
moveToEndPoint1 = TweenManager.CreateTweenThreadVec3(duration, listOfCamera[0].GetComponent<Transform>().LocalPosition, endPoint1, EASING_METHOD.EASE_IN_SINE);
|
||||||
|
moveToEndPoint2 = TweenManager.CreateTweenThreadVec3(duration, listOfCamera[1].GetComponent<Transform>().LocalPosition, endPoint2, EASING_METHOD.EASE_IN_SINE);
|
||||||
|
moveToEndPoint3 = TweenManager.CreateTweenThreadVec3(duration, listOfCamera[2].GetComponent<Transform>().LocalPosition, endPoint3, EASING_METHOD.EASE_IN_SINE);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void update()
|
||||||
|
{
|
||||||
|
if (!SceneFadeInOut.Instance.FadeOutFinished() && !point1Done)
|
||||||
|
{
|
||||||
|
moveToEndPoint1.Reset();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Input.GetKeyUp(Input.KeyCode.Space))
|
||||||
|
{
|
||||||
|
skip = true;
|
||||||
|
point1Done = true;
|
||||||
|
SceneFadeInOut.Instance.CallFadeIn();
|
||||||
|
SceneFadeInOut.Instance.alphaValue = 0.01f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skip && SceneFadeInOut.Instance.FadeInFinished())
|
||||||
|
{
|
||||||
|
playerCamera.GetComponent<Camera>().SetMainCamera();
|
||||||
|
SceneFadeInOut.Instance.CallFadeOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (skip && SceneFadeInOut.Instance.FadeOutFinished())
|
||||||
|
{
|
||||||
|
GameManager.Instance.PreviewLevelDone = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!skip)
|
||||||
|
{
|
||||||
|
if (!point1Done)
|
||||||
|
{
|
||||||
|
listOfCamera[0].GetComponent<Transform>().LocalPosition = moveToEndPoint1.GetValue();
|
||||||
|
if (moveToEndPoint1.IsCompleted())
|
||||||
|
{
|
||||||
|
point1Done = true;
|
||||||
|
SceneFadeInOut.Instance.CallFadeIn();
|
||||||
|
SceneFadeInOut.Instance.alphaValue = 0.01f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SceneFadeInOut.Instance.FadeInFinished() && point1Done)
|
||||||
|
{
|
||||||
|
listOfCamera[1].SetMainCamera();
|
||||||
|
SceneFadeInOut.Instance.CallFadeOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SceneFadeInOut.Instance.FadeOutFinished() && point1Done)
|
||||||
|
{
|
||||||
|
if (!point2Done)
|
||||||
|
{
|
||||||
|
if (reset2)
|
||||||
|
{
|
||||||
|
moveToEndPoint2.Reset();
|
||||||
|
reset2 = false;
|
||||||
|
}
|
||||||
|
listOfCamera[1].GetComponent<Transform>().LocalPosition = moveToEndPoint2.GetValue();
|
||||||
|
if (moveToEndPoint2.IsCompleted())
|
||||||
|
{
|
||||||
|
point2Done = true;
|
||||||
|
SceneFadeInOut.Instance.CallFadeIn();
|
||||||
|
SceneFadeInOut.Instance.alphaValue = 0.01f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SceneFadeInOut.Instance.FadeInFinished() && point2Done)
|
||||||
|
{
|
||||||
|
listOfCamera[2].SetMainCamera();
|
||||||
|
SceneFadeInOut.Instance.CallFadeOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SceneFadeInOut.Instance.FadeOutFinished() && point2Done)
|
||||||
|
{
|
||||||
|
if (!point3Done)
|
||||||
|
{
|
||||||
|
if (reset3)
|
||||||
|
{
|
||||||
|
moveToEndPoint3 = TweenManager.CreateTweenThreadVec3(duration, listOfCamera[2].GetComponent<Transform>().LocalPosition, endPoint3, EASING_METHOD.EASE_IN_SINE);
|
||||||
|
reset3 = false;
|
||||||
|
}
|
||||||
|
listOfCamera[2].GetComponent<Transform>().LocalPosition = moveToEndPoint3.GetValue();
|
||||||
|
if (moveToEndPoint3.IsCompleted())
|
||||||
|
{
|
||||||
|
point3Done = true;
|
||||||
|
SceneFadeInOut.Instance.CallFadeIn();
|
||||||
|
SceneFadeInOut.Instance.alphaValue = 0.01f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SceneFadeInOut.Instance.FadeInFinished() && point3Done)
|
||||||
|
{
|
||||||
|
playerCamera.GetComponent<Camera>().SetMainCamera();
|
||||||
|
SceneFadeInOut.Instance.CallFadeOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SceneFadeInOut.Instance.FadeOutFinished() && point3Done)
|
||||||
|
{
|
||||||
|
GameManager.Instance.PreviewLevelDone = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Name: SC_PreviewLevel
|
||||||
|
ID: 155897609
|
||||||
|
Type: 9
|
|
@ -52,12 +52,15 @@ namespace SHADE_Scripting.UI
|
||||||
|
|
||||||
private static float EaseInSine(float value)
|
private static float EaseInSine(float value)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (float)(1.0f - Math.Cos((value * Math.PI / 2.0f) ));
|
return (float)(1.0f - Math.Cos((value * Math.PI / 2.0f) ));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static float EaseOutSine(float value)
|
private static float EaseOutSine(float value)
|
||||||
{
|
{
|
||||||
return (float)(Math.Sin(value * Math.PI / 2.0f) );
|
return (float)(Math.Sin(value * Math.PI / 2.0f) );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,22 +22,19 @@ public class ChangeSceneButton : Script
|
||||||
{
|
{
|
||||||
ui.OnRelease.RegisterAction(() =>
|
ui.OnRelease.RegisterAction(() =>
|
||||||
{
|
{
|
||||||
|
|
||||||
if (sceneID != 0)
|
if (sceneID != 0)
|
||||||
{
|
{
|
||||||
Audio.PlaySFXOnce2D("event:/UI/success");
|
Audio.PlaySFXOnce2D("event:/UI/success");
|
||||||
|
Audio.StopAllSounds();
|
||||||
Audio.StopAllSounds();
|
if (SceneFadeInOut.Instance != null)
|
||||||
|
|
||||||
SceneFadeInOut.Instance.CallFadeIn();
|
SceneFadeInOut.Instance.CallFadeIn();
|
||||||
clickedFlag = true;
|
clickedFlag = true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.LogError("Failed to register button action for ChangeSceneButton.");
|
Debug.LogError("Failed to register button action for ChangeSceneButton.");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected override void update()
|
protected override void update()
|
||||||
|
|
|
@ -409,7 +409,11 @@ public class Cutscene : Script
|
||||||
|
|
||||||
private void initCutscene1()
|
private void initCutscene1()
|
||||||
{
|
{
|
||||||
listOfCutscene1Points = cutscene1Points.GetComponentsInChildren<Transform>().ToList();
|
if(cutscene1Points)
|
||||||
|
listOfCutscene1Points = cutscene1Points.GetComponentsInChildren<Transform>().ToList();
|
||||||
|
else
|
||||||
|
Debug.LogError("Cutscene1Points Missing");
|
||||||
|
|
||||||
if (listOfCutscene1Points.Count == 0)
|
if (listOfCutscene1Points.Count == 0)
|
||||||
Debug.LogError("Cutscene1Points Empty");
|
Debug.LogError("Cutscene1Points Empty");
|
||||||
|
|
||||||
|
@ -455,7 +459,11 @@ public class Cutscene : Script
|
||||||
|
|
||||||
private void initCutscene2()
|
private void initCutscene2()
|
||||||
{
|
{
|
||||||
listOfCutscene2Points = cutscene2Points.GetComponentsInChildren<Transform>().ToList();
|
if(cutscene2Points)
|
||||||
|
listOfCutscene2Points = cutscene2Points.GetComponentsInChildren<Transform>().ToList();
|
||||||
|
else
|
||||||
|
Debug.LogError("cutscene2Points Missing");
|
||||||
|
|
||||||
if (listOfCutscene2Points.Count == 0)
|
if (listOfCutscene2Points.Count == 0)
|
||||||
Debug.LogError("Cutscene2Points Empty");
|
Debug.LogError("Cutscene2Points Empty");
|
||||||
|
|
||||||
|
@ -503,7 +511,11 @@ public class Cutscene : Script
|
||||||
|
|
||||||
private void initCutscene3()
|
private void initCutscene3()
|
||||||
{
|
{
|
||||||
listOfCutscene3Points = cutscene3Points.GetComponentsInChildren<Transform>().ToList();
|
if(cutscene3Points)
|
||||||
|
listOfCutscene3Points = cutscene3Points.GetComponentsInChildren<Transform>().ToList();
|
||||||
|
else
|
||||||
|
Debug.LogError("cutscene3Points Missing");
|
||||||
|
|
||||||
if (listOfCutscene3Points.Count == 0)
|
if (listOfCutscene3Points.Count == 0)
|
||||||
Debug.LogError("Cutscene3Points Empty");
|
Debug.LogError("Cutscene3Points Empty");
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using SHADE;
|
using SHADE;
|
||||||
using SHADE_Scripting.Audio;
|
using SHADE_Scripting.Audio;
|
||||||
|
using SHADE_Scripting.UI;
|
||||||
|
|
||||||
public class EndScene : Script
|
public class EndScene : Script
|
||||||
{
|
{
|
||||||
|
@ -12,6 +13,15 @@ public class EndScene : Script
|
||||||
AudioHandler.audioClipHandlers["SFXMouseDownElement"] = Audio.CreateAudioClip("event:/UI/mouse_down_element");
|
AudioHandler.audioClipHandlers["SFXMouseDownElement"] = Audio.CreateAudioClip("event:/UI/mouse_down_element");
|
||||||
AudioHandler.audioClipHandlers["SFXUISuccess"] = Audio.CreateAudioClip("event:/UI/success");
|
AudioHandler.audioClipHandlers["SFXUISuccess"] = Audio.CreateAudioClip("event:/UI/success");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void start()
|
||||||
|
{
|
||||||
|
Debug.Log("EndScene::Start():");
|
||||||
|
//Input.SetMouseCentering(false);
|
||||||
|
//Application.IsCursorVisible = true;
|
||||||
|
SceneFadeInOut.Instance.CallFadeOut();
|
||||||
|
}
|
||||||
|
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
if (Input.GetKeyDown(Input.KeyCode.R))
|
if (Input.GetKeyDown(Input.KeyCode.R))
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using System;
|
using System;
|
||||||
using SHADE;
|
using SHADE;
|
||||||
using SHADE_Scripting.Audio;
|
using SHADE_Scripting.Audio;
|
||||||
|
using SHADE_Scripting.UI;
|
||||||
|
|
||||||
public class MainMenu : Script
|
public class MainMenu : Script
|
||||||
{
|
{
|
||||||
|
@ -23,6 +24,9 @@ public class MainMenu : Script
|
||||||
|
|
||||||
protected override void start()
|
protected override void start()
|
||||||
{
|
{
|
||||||
|
//Input.SetMouseCentering(false);
|
||||||
|
//Application.IsCursorVisible = true;
|
||||||
|
SceneFadeInOut.Instance.CallFadeOut();
|
||||||
}
|
}
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,16 +8,19 @@ public class PauseMenu : Script
|
||||||
public GameObject retryBtn;
|
public GameObject retryBtn;
|
||||||
public GameObject quitBtn;
|
public GameObject quitBtn;
|
||||||
|
|
||||||
public GameObject gamePauseText;
|
private TextRenderable gamePauseText;
|
||||||
public GameObject canvas;
|
public GameObject canvas;
|
||||||
|
|
||||||
protected override void awake()
|
protected override void awake()
|
||||||
{
|
{
|
||||||
GameManager.Instance.GamePause = false;
|
if (GameManager.Instance != null)
|
||||||
if (gamePauseText)
|
GameManager.Instance.GamePause = false;
|
||||||
gamePauseText.GetComponent<TextRenderable>().Enabled = false;
|
|
||||||
if (canvas)
|
if (canvas)
|
||||||
|
{
|
||||||
|
gamePauseText = canvas.GetComponentInChildren<TextRenderable>();
|
||||||
canvas.SetActive(false);
|
canvas.SetActive(false);
|
||||||
|
}
|
||||||
|
|
||||||
if (!resumeBtn)
|
if (!resumeBtn)
|
||||||
Debug.LogError("Resume Btn missing");
|
Debug.LogError("Resume Btn missing");
|
||||||
|
@ -39,9 +42,11 @@ public class PauseMenu : Script
|
||||||
if (GameManager.Instance.GamePause)
|
if (GameManager.Instance.GamePause)
|
||||||
{
|
{
|
||||||
GameManager.Instance.GamePause = false;
|
GameManager.Instance.GamePause = false;
|
||||||
|
Input.SetMouseCentering(true);
|
||||||
|
Application.IsCursorVisible = false;
|
||||||
AudioHandler.PauseAllSounds(false);
|
AudioHandler.PauseAllSounds(false);
|
||||||
if (gamePauseText)
|
if (gamePauseText)
|
||||||
gamePauseText.GetComponent<TextRenderable>().Enabled = false;
|
gamePauseText.Enabled = false;
|
||||||
if (canvas)
|
if (canvas)
|
||||||
canvas.SetActive(false);
|
canvas.SetActive(false);
|
||||||
}
|
}
|
||||||
|
@ -86,12 +91,14 @@ public class PauseMenu : Script
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (Input.GetKeyDown(Input.KeyCode.Escape) && !GameManager.Instance.GamePause)
|
if (Input.GetKeyDown(Input.KeyCode.Escape) && !GameManager.Instance.GamePause && GameManager.Instance.stealFoodPopUpDone)
|
||||||
{
|
{
|
||||||
GameManager.Instance.GamePause = true;
|
GameManager.Instance.GamePause = true;
|
||||||
|
Input.SetMouseCentering(false);
|
||||||
|
Application.IsCursorVisible = true;
|
||||||
AudioHandler.PauseAllSounds(true);
|
AudioHandler.PauseAllSounds(true);
|
||||||
if (gamePauseText)
|
if (gamePauseText)
|
||||||
gamePauseText.GetComponent<TextRenderable>().Enabled = true;
|
gamePauseText.Enabled = true;
|
||||||
if (canvas)
|
if (canvas)
|
||||||
canvas.SetActive(true);
|
canvas.SetActive(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,7 +43,6 @@ namespace SHADE_Scripting.UI
|
||||||
|
|
||||||
protected override void start()
|
protected override void start()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void update()
|
protected override void update()
|
||||||
|
@ -56,7 +55,6 @@ namespace SHADE_Scripting.UI
|
||||||
if (fadeInTime == 0.0f)
|
if (fadeInTime == 0.0f)
|
||||||
{
|
{
|
||||||
alphaValue = 1.0f;
|
alphaValue = 1.0f;
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -64,8 +62,8 @@ namespace SHADE_Scripting.UI
|
||||||
}
|
}
|
||||||
if (alphaValue >= 1.0f)
|
if (alphaValue >= 1.0f)
|
||||||
{
|
{
|
||||||
alphaValue = 1.0f;
|
alphaValue = 1.0f;
|
||||||
GameObject.Parent.SetActive(false);
|
//GameObject.Parent.SetActive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,8 +81,10 @@ namespace SHADE_Scripting.UI
|
||||||
}
|
}
|
||||||
if (alphaValue <= 0.0f)
|
if (alphaValue <= 0.0f)
|
||||||
{
|
{
|
||||||
alphaValue = 0.0f;
|
alphaValue = 0.0f;
|
||||||
GameObject.Parent.SetActive(false);
|
//This line is to be added so that (because the fade in and out item is usually the front-most UI element)
|
||||||
|
//the fade in and out UI element does not block functionality of other UI elements
|
||||||
|
GameObject.Parent.SetActive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Name: SC_ScrollingCredits
|
||||||
|
ID: 159139676
|
||||||
|
Type: 9
|
|
@ -51,6 +51,13 @@ namespace SHADE_Scripting.UI
|
||||||
//538x377
|
//538x377
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
|
if (!GameManager.Instance.PreviewLevelDone)
|
||||||
|
{
|
||||||
|
rot.Reset();
|
||||||
|
scaleX.Reset();
|
||||||
|
scaleY.Reset();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!popInDone)
|
if (!popInDone)
|
||||||
{
|
{
|
||||||
|
@ -79,11 +86,11 @@ namespace SHADE_Scripting.UI
|
||||||
if (scaleOutX.IsCompleted() && scaleOutY.IsCompleted())
|
if (scaleOutX.IsCompleted() && scaleOutY.IsCompleted())
|
||||||
{
|
{
|
||||||
GameObject.SetActive(false);
|
GameObject.SetActive(false);
|
||||||
|
GameManager.Instance.stealFoodPopUpDone = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
layout(local_size_x = 128) in;
|
||||||
|
|
||||||
|
struct EmitterParameters
|
||||||
|
{
|
||||||
|
vec4 angularMin;
|
||||||
|
vec4 angularMax;
|
||||||
|
vec4 lifeAndSizeRange; // min life, max life, min size, max size
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ParticleData
|
||||||
|
{
|
||||||
|
vec4 position;
|
||||||
|
vec4 rotation;
|
||||||
|
vec4 velocity;
|
||||||
|
vec4 acceleration;
|
||||||
|
vec4 scaleAndDecay;
|
||||||
|
float life;
|
||||||
|
uint textureIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct GenericData
|
||||||
|
{
|
||||||
|
//! Delta time
|
||||||
|
float dt;
|
||||||
|
|
||||||
|
//! Elapsed time of the application
|
||||||
|
float elapsedTime;
|
||||||
|
|
||||||
|
//! Viewport width of the scene (excluding imgui, that means smaller than window)
|
||||||
|
uint viewportWidth;
|
||||||
|
|
||||||
|
//! Ditto but for height
|
||||||
|
uint viewportHeight;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (set = 0, binding = 0) uniform GenericDataBuffer
|
||||||
|
{
|
||||||
|
GenericData data;
|
||||||
|
} genericDataBuffer;
|
||||||
|
|
||||||
|
layout (std430, set = 2, binding = 0) readonly buffer EmitterBuffer
|
||||||
|
{
|
||||||
|
EmitterParameters data;
|
||||||
|
} emitterParams;
|
||||||
|
|
||||||
|
layout (std430, set = 2, binding = 1) coherent restrict buffer ParticlesInputBuffer
|
||||||
|
{
|
||||||
|
ParticleData data[];
|
||||||
|
} inputParticles;
|
||||||
|
|
||||||
|
// output buffer not needed
|
||||||
|
// layout (std430, set = 2, binding = 2) coherent restrict buffer ParticlesOutputBuffer
|
||||||
|
// {
|
||||||
|
// ParticleData data[];
|
||||||
|
// } outputParticles;
|
||||||
|
|
||||||
|
layout (std430, set = 2, binding = 3) coherent restrict buffer ParticlesFreelistBuffer
|
||||||
|
{
|
||||||
|
int freeCount;
|
||||||
|
int freeIndices[];
|
||||||
|
|
||||||
|
} freelist;
|
||||||
|
|
||||||
|
|
||||||
|
// push constants
|
||||||
|
layout(std140, push_constant) uniform EmitterPushConstant
|
||||||
|
{
|
||||||
|
vec4 emitterPosition;
|
||||||
|
uint emissionCount;
|
||||||
|
|
||||||
|
} emitterPushConstant;
|
||||||
|
|
||||||
|
uint pcg_hash(uint seed)
|
||||||
|
{
|
||||||
|
uint state = seed * 747796405u + 2891336453u;
|
||||||
|
uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
|
||||||
|
return (word >> 22u) ^ word;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used to advance the PCG state.
|
||||||
|
uint rand_pcg(inout uint rng_state)
|
||||||
|
{
|
||||||
|
uint state = rng_state;
|
||||||
|
rng_state = rng_state * 747796405u + 2891336453u;
|
||||||
|
uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
|
||||||
|
return (word >> 22u) ^ word;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Advances the prng state and returns the corresponding random float.
|
||||||
|
float rand(inout uint state)
|
||||||
|
{
|
||||||
|
uint x = rand_pcg(state);
|
||||||
|
state = x;
|
||||||
|
return float(x)*uintBitsToFloat(0x2f800004u);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
uint emitterInvocationIndex = gl_GlobalInvocationID.x;
|
||||||
|
|
||||||
|
if (emitterInvocationIndex >= emitterPushConstant.emissionCount)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int freelistIndex = atomicAdd (freelist.freeCount, -1) - 1;
|
||||||
|
if (freelistIndex < 0)
|
||||||
|
atomicAdd (freelist.freeCount, 1);
|
||||||
|
|
||||||
|
ParticleData particle;
|
||||||
|
|
||||||
|
int index = freelist.freeIndices[freelistIndex];
|
||||||
|
particle.position = emitterPosition;
|
||||||
|
particle.life = emitterParams.10.0f;
|
||||||
|
|
||||||
|
particles[index] = particle;
|
||||||
|
}
|
|
@ -0,0 +1,141 @@
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
layout(local_size_x = 128) in;
|
||||||
|
|
||||||
|
struct DrawArraysIndirectArgs
|
||||||
|
{
|
||||||
|
uint count;
|
||||||
|
uint instanceCount;
|
||||||
|
uint first;
|
||||||
|
uint baseInstance;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ParticleData
|
||||||
|
{
|
||||||
|
vec4 position;
|
||||||
|
vec4 rotation;
|
||||||
|
vec4 velocity;
|
||||||
|
vec4 acceleration;
|
||||||
|
vec4 scaleAndDecay;
|
||||||
|
float life;
|
||||||
|
uint textureIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct GenericData
|
||||||
|
{
|
||||||
|
//! Delta time
|
||||||
|
float dt;
|
||||||
|
|
||||||
|
//! Elapsed time of the application
|
||||||
|
float elapsedTime;
|
||||||
|
|
||||||
|
//! Viewport width of the scene (excluding imgui, that means smaller than window)
|
||||||
|
uint viewportWidth;
|
||||||
|
|
||||||
|
//! Ditto but for height
|
||||||
|
uint viewportHeight;
|
||||||
|
};
|
||||||
|
|
||||||
|
layout(set = 1, binding = 0) uniform CameraData
|
||||||
|
{
|
||||||
|
vec4 position;
|
||||||
|
mat4 vpMat;
|
||||||
|
mat4 viewMat;
|
||||||
|
mat4 projMat;
|
||||||
|
} cameraData;
|
||||||
|
|
||||||
|
|
||||||
|
layout (set = 0, binding = 0) uniform GenericDataBuffer
|
||||||
|
{
|
||||||
|
GenericData data;
|
||||||
|
} genericDataBuffer;
|
||||||
|
|
||||||
|
layout (std430, set = 2, binding = 1) coherent restrict readonly buffer ParticlesInputBuffer
|
||||||
|
{
|
||||||
|
ParticleData data[];
|
||||||
|
} inputParticles;
|
||||||
|
|
||||||
|
// output buffer not needed
|
||||||
|
layout (std430, set = 2, binding = 2) coherent restrict buffer ParticlesOutputBuffer
|
||||||
|
{
|
||||||
|
ParticleData data[];
|
||||||
|
} outputParticles;
|
||||||
|
|
||||||
|
layout (std430, set = 2, binding = 3) coherent restrict buffer ParticlesFreelistBuffer
|
||||||
|
{
|
||||||
|
int freeCount;
|
||||||
|
int freeIndices[];
|
||||||
|
|
||||||
|
} freelist;
|
||||||
|
|
||||||
|
layout (std430, set = 2, binding = 4) coherent restrict buffer IndicesData
|
||||||
|
{
|
||||||
|
uint indices[];
|
||||||
|
};
|
||||||
|
|
||||||
|
layout (std140, set = 2, binding = 5) coherent restrict uniform IndirectDrawArgs
|
||||||
|
{
|
||||||
|
DrawArraysIndirectArgs indirectArgs;
|
||||||
|
};
|
||||||
|
|
||||||
|
// push constants
|
||||||
|
layout(std140, push_constant) uniform EmitterPushConstant
|
||||||
|
{
|
||||||
|
vec4 emitterPosition;
|
||||||
|
uint emissionCount;
|
||||||
|
|
||||||
|
} emitterPushConstant;
|
||||||
|
|
||||||
|
uint pcg_hash(uint seed)
|
||||||
|
{
|
||||||
|
uint state = seed * 747796405u + 2891336453u;
|
||||||
|
uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
|
||||||
|
return (word >> 22u) ^ word;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used to advance the PCG state.
|
||||||
|
uint rand_pcg(inout uint rng_state)
|
||||||
|
{
|
||||||
|
uint state = rng_state;
|
||||||
|
rng_state = rng_state * 747796405u + 2891336453u;
|
||||||
|
uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
|
||||||
|
return (word >> 22u) ^ word;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Advances the prng state and returns the corresponding random float.
|
||||||
|
float rand(inout uint state)
|
||||||
|
{
|
||||||
|
uint x = rand_pcg(state);
|
||||||
|
state = x;
|
||||||
|
return float(x)*uintBitsToFloat(0x2f800004u);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
uint index = gl_GlobalInvocationID.x;
|
||||||
|
|
||||||
|
ParticleData particle = inputParticles.data[index];
|
||||||
|
|
||||||
|
if (particle.lifetime > 0.0f)
|
||||||
|
{
|
||||||
|
// particle.position += particle.velocity * dt;
|
||||||
|
|
||||||
|
// particle.lifetime -= dt;
|
||||||
|
// particle.size -= 1.2f * dt;
|
||||||
|
// particle.color += 1.0f * dt;
|
||||||
|
|
||||||
|
if (particle.lifetime < 0.0f || particle.size < 0.0f)
|
||||||
|
{
|
||||||
|
particle.lifetime = 0.0f;
|
||||||
|
particle.position.x = 99999.0f;
|
||||||
|
|
||||||
|
outputParticles.data[index] = particle;
|
||||||
|
freelist.freeIndices[atomicAdd(freelist.freeCount, 1)] = int (index);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
outputParticles.data[index] = particle;
|
||||||
|
uint drawIndex = atomicAdd (indirectArgs.instanceCount, 1);
|
||||||
|
indices[drawIndex] = index;
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,5 +32,5 @@ void main()
|
||||||
Out.uv = aUV;
|
Out.uv = aUV;
|
||||||
Out.color = aColor;
|
Out.color = aColor;
|
||||||
|
|
||||||
gl_Position = cameraData.projMat * aTransform * vec4(aPos, 1.0f);
|
gl_Position = cameraData.vpMat * aTransform * vec4(aPos, 1.0f);
|
||||||
}
|
}
|
Binary file not shown.
|
@ -37,7 +37,7 @@ layout(location = 1) out uint outEntityID;
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
fragColor = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv);
|
fragColor = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv);
|
||||||
if (fragColor.a < 0.01f)
|
if (fragColor.a < 0.1f)
|
||||||
{
|
{
|
||||||
discard;
|
discard;
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
|
@ -656,6 +656,15 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHAudioSystem::SetParameterWithLabel(const char* path, const char* label)
|
||||||
|
{
|
||||||
|
result = fmodStudioSystem->setParameterByNameWithLabel(path, label);
|
||||||
|
if (result != FMOD_OK)
|
||||||
|
{
|
||||||
|
ErrorCheck();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AudioClip::Play()
|
void AudioClip::Play()
|
||||||
{
|
{
|
||||||
if(!instance)
|
if(!instance)
|
||||||
|
@ -734,12 +743,16 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//void AudioClip::SetParameterLabel(const char* paramName, const char* label)
|
void AudioClip::SetParameterWithLabel(const char* paramName, const char* label)
|
||||||
//{
|
{
|
||||||
// if (!instance)
|
if (!instance)
|
||||||
// return;
|
return;
|
||||||
// instance->setParameterByNameWithLabel(paramName, label);
|
FMOD_RESULT result = instance->setParameterByNameWithLabel(paramName, label);
|
||||||
//}
|
if (result != FMOD_OK)
|
||||||
|
{
|
||||||
|
SHLOG_ERROR("Audio system error: {}", FMOD_ErrorString(result))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
float AudioClip::GetParameterValue(const char* paramName)
|
float AudioClip::GetParameterValue(const char* paramName)
|
||||||
{
|
{
|
||||||
|
|
|
@ -33,7 +33,7 @@ namespace SHADE
|
||||||
void SetPause(bool pause);
|
void SetPause(bool pause);
|
||||||
bool IsPaused();
|
bool IsPaused();
|
||||||
void SetParameter(const char* paramName, float value);
|
void SetParameter(const char* paramName, float value);
|
||||||
//void SetParameterLabel(const char* paramName, const char* label);
|
void SetParameterWithLabel(const char* paramName, const char* label);
|
||||||
float GetParameterValue(const char* paramName);
|
float GetParameterValue(const char* paramName);
|
||||||
float GetVolume();
|
float GetVolume();
|
||||||
void SetVolume(float volume);
|
void SetVolume(float volume);
|
||||||
|
@ -94,6 +94,7 @@ namespace SHADE
|
||||||
|
|
||||||
float GetParameterValue(const char* path);
|
float GetParameterValue(const char* path);
|
||||||
void SetParameter(const char* path, float value);
|
void SetParameter(const char* path, float value);
|
||||||
|
void SetParameterWithLabel(const char* path, const char* label);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FMOD::Studio::System* fmodStudioSystem;
|
FMOD::Studio::System* fmodStudioSystem;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "SHpch.h"
|
#include "SHpch.h"
|
||||||
#include "SHCameraArmComponent.h"
|
#include "SHCameraArmComponent.h"
|
||||||
|
#include "Math/SHMathHelpers.h"
|
||||||
|
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
|
@ -16,6 +16,11 @@ namespace SHADE
|
||||||
|
|
||||||
SHVec3 const& SHCameraArmComponent::GetOffset() const noexcept
|
SHVec3 const& SHCameraArmComponent::GetOffset() const noexcept
|
||||||
{
|
{
|
||||||
|
SHVec3 result = offset;
|
||||||
|
|
||||||
|
result = SHVec3::RotateX(offset, -(SHMath::DegreesToRadians(GetPitch())));
|
||||||
|
result = SHVec3::RotateY(offset, (SHMath::DegreesToRadians(GetYaw())));
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -172,11 +172,6 @@ namespace SHADE
|
||||||
|
|
||||||
void SHCameraSystem::UpdateCameraArmComponent(SHCameraArmComponent& pivot) noexcept
|
void SHCameraSystem::UpdateCameraArmComponent(SHCameraArmComponent& pivot) noexcept
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SHVec3 offset{ 0.0f,0.0f, 1.0f };
|
SHVec3 offset{ 0.0f,0.0f, 1.0f };
|
||||||
offset = SHVec3::RotateX(offset, -(SHMath::DegreesToRadians(pivot.GetPitch())));
|
offset = SHVec3::RotateX(offset, -(SHMath::DegreesToRadians(pivot.GetPitch())));
|
||||||
offset = SHVec3::RotateY(offset, (SHMath::DegreesToRadians(pivot.GetYaw())));
|
offset = SHVec3::RotateY(offset, (SHMath::DegreesToRadians(pivot.GetYaw())));
|
||||||
|
@ -212,12 +207,18 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Camera Collision stuff
|
||||||
|
|
||||||
SHVec3 cameraPos = camera->position + pivot.offset;
|
SHVec3 cameraPos = camera->position + pivot.offset;
|
||||||
SHVec3 cameraTarget = camera->position;
|
SHVec3 cameraTarget = camera->position;
|
||||||
|
|
||||||
//SHLOG_INFO("Ray position: {},{},{} direction:{},{},{}",pivot.ray.position.x, pivot.ray.position.y, pivot.ray.position.z,pivot.ray.direction.x, pivot.ray.direction.y, pivot.ray.direction.z)
|
|
||||||
SHRaycaster::RaycastInfo info;
|
SHRaycaster::RaycastInfo info;
|
||||||
//info.layers = (SHCollisionTagMatrix::GetTag("7")->GetMask());
|
|
||||||
info.layers = (uint16_t)(SHCollisionTagMatrix::GetTag("Camera")->GetMask());
|
info.layers = (uint16_t)(SHCollisionTagMatrix::GetTag("Camera")->GetMask());
|
||||||
info.distance = pivot.armLength;
|
info.distance = pivot.armLength;
|
||||||
info.continuous = false;
|
info.continuous = false;
|
||||||
|
@ -235,38 +236,10 @@ namespace SHADE
|
||||||
newOffset = SHVec3::RotateY(newOffset, (SHMath::DegreesToRadians(pivot.GetYaw())));
|
newOffset = SHVec3::RotateY(newOffset, (SHMath::DegreesToRadians(pivot.GetYaw())));
|
||||||
newOffset = SHVec3::Normalise(newOffset) * (hitResult.distance * 0.95f);
|
newOffset = SHVec3::Normalise(newOffset) * (hitResult.distance * 0.95f);
|
||||||
pivot.offset = newOffset;
|
pivot.offset = newOffset;
|
||||||
//cameraPos = camera->position + pivot.offset;
|
|
||||||
//SHLOG_INFO("CAMERA COLLISION HIT, {} armlength: {}, true armlength: {}", hitResult.distance, hitResult.distance, (cameraPos - camera->position).Length());
|
|
||||||
//SHLOG_INFO("Racoon Position {}, {}, {}, Camera Position: {}, {}, {}, Distance {}", cameraTarget.x, cameraTarget.y, cameraTarget.z, cameraPos.x, cameraPos.y, cameraPos.z, SHVec3::Distance(cameraTarget, cameraPos));
|
|
||||||
//SHLOG_INFO("Camera Position: {}, {}, {}", cameraPos.x, cameraPos.y, cameraPos.z);
|
|
||||||
//auto otherTransform = SHComponentManager::GetComponent_s<SHTransformComponent>(hitResult.entityHit);
|
|
||||||
//SHVec3 otherPos = hitResult.position;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//SHLOG_INFO("hit distance{} other pos: {},{},{}, distance between: {}", hitResult.distance, otherPos.x, otherPos.y, otherPos.z, SHVec3::Distance(cameraTarget,otherPos));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////auto result = physicsSystem->Raycast(pivot.ray);
|
|
||||||
//if (result && result.distance < pivot.GetArmLength())
|
|
||||||
//{
|
|
||||||
//
|
|
||||||
// SHVec3 newOffset = SHVec3{ 0.0f,0.0f, result.distance * 0.8f };
|
|
||||||
// newOffset = SHVec3::RotateX(newOffset, -(SHMath::DegreesToRadians(pivot.GetPitch())));
|
|
||||||
// newOffset = SHVec3::RotateY(newOffset, (SHMath::DegreesToRadians(pivot.GetYaw())));
|
|
||||||
// pivot.offset = newOffset;
|
|
||||||
// //SHLOG_INFO("CAMERA COLLISION HIT, {}", result.distance);
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// //SHLOG_INFO("CAMERA COLLISION CANT HIT CAMERA");
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
// pivot.rtMatrix = SHMatrix::Inverse(pivot.rtMatrix);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,3 +14,4 @@
|
||||||
#include "Physics/Interface/SHColliderComponent.h"
|
#include "Physics/Interface/SHColliderComponent.h"
|
||||||
#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h"
|
#include "Graphics/MiddleEnd/TextRendering/SHTextRenderableComponent.h"
|
||||||
#include "AudioSystem/SHAudioListenerComponent.h"
|
#include "AudioSystem/SHAudioListenerComponent.h"
|
||||||
|
#include "Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h"
|
||||||
|
|
|
@ -376,7 +376,9 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if(editor->LoadScene(asset->id))
|
if(editor->LoadScene(asset->id))
|
||||||
{
|
{
|
||||||
|
#ifdef SHEDITOR
|
||||||
editor->editorConfig->workingSceneID = asset->id;
|
editor->editorConfig->workingSceneID = asset->id;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
#include "Physics/Collision/Shapes/SHSphere.h"
|
#include "Physics/Collision/Shapes/SHSphere.h"
|
||||||
#include "../SHEditorWindowManager.h"
|
#include "../SHEditorWindowManager.h"
|
||||||
#include "../AssetBrowser/SHAssetBrowser.h"
|
#include "../AssetBrowser/SHAssetBrowser.h"
|
||||||
|
#include "Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -599,8 +601,8 @@ namespace SHADE
|
||||||
component->SetText(val);
|
component->SetText(val);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
SHEditorWidgets::DragVec3("Text Size", { "X", "Y", "Z" }, [&textComp = component]() {return textComp->GetTextSize();}, [&textComp = component](SHVec3 const& size) {textComp->SetTextSize(size); });
|
||||||
SHEditorWidgets::ColorPicker("Color", [&textComp = component]() {return textComp->GetColour(); }, [&textComp = component](SHVec4 const& newColor) {textComp->SetColour(newColor); });
|
SHEditorWidgets::ColorPicker("Color", [&textComp = component]() {return textComp->GetColor(); }, [&textComp = component](SHVec4 const& newColor) {textComp->SetColor(newColor); });
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -679,4 +681,95 @@ namespace SHADE
|
||||||
ImGui::PopID();
|
ImGui::PopID();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
static void DrawComponent(SHTrajectoryRenderableComponent* component)
|
||||||
|
{
|
||||||
|
if (!component)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ImGui::PushID(SHFamilyID<SHComponent>::GetID<SHTrajectoryRenderableComponent>());
|
||||||
|
|
||||||
|
const auto componentType = rttr::type::get(*component);
|
||||||
|
|
||||||
|
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
||||||
|
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::CollapsingHeader(componentType.get_name().data(), ImGuiTreeNodeFlags_DefaultOpen))
|
||||||
|
{
|
||||||
|
DrawContextMenu(component);
|
||||||
|
Handle<SHMesh> const& mesh = component->GetMesh();
|
||||||
|
const auto MESH_NAME = SHResourceManager::GetAssetName<SHMesh>(mesh).value_or("");
|
||||||
|
SHEditorWidgets::DragDropReadOnlyField<AssetID>("Mesh", MESH_NAME, [component]()
|
||||||
|
{
|
||||||
|
Handle<SHMesh> const& mesh = component->GetMesh();
|
||||||
|
return SHResourceManager::GetAssetID<SHMesh>(mesh).value_or(0);
|
||||||
|
},
|
||||||
|
[component](AssetID const& id)
|
||||||
|
{
|
||||||
|
if (SHAssetManager::GetType(id) != AssetType::MESH)
|
||||||
|
{
|
||||||
|
SHLOG_WARNING("Attempted to assign non mesh asset to Renderable Mesh property!")
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
component->SetMesh(SHResourceManager::LoadOrGet<SHMesh>(id));
|
||||||
|
SHResourceManager::FinaliseChanges();
|
||||||
|
}, SHDragDrop::DRAG_RESOURCE);
|
||||||
|
|
||||||
|
if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))
|
||||||
|
{
|
||||||
|
if (Handle<SHMesh> const& mesh = component->GetMesh())
|
||||||
|
{
|
||||||
|
AssetID assetID = SHResourceManager::GetAssetID<SHMesh>(mesh).value_or(0);
|
||||||
|
SHEditorWindowManager::GetEditorWindow<SHAssetBrowser>()->SetScrollTo(assetID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SHEditorWidgets::ColorPicker("Start Color",
|
||||||
|
[comp = component]()
|
||||||
|
{
|
||||||
|
SHVec4 newColor(comp->GetStartColor());
|
||||||
|
newColor.w = comp->GetStartAlpha();
|
||||||
|
return newColor;
|
||||||
|
},
|
||||||
|
[comp = component](SHVec4 vec)
|
||||||
|
{
|
||||||
|
SHVec3 temp{vec.x, vec.y, vec.z};
|
||||||
|
float a = vec.w;
|
||||||
|
comp->SetStartColor(temp);
|
||||||
|
comp->SetStartAlpha(a);
|
||||||
|
});
|
||||||
|
|
||||||
|
SHEditorWidgets::ColorPicker("End Color",
|
||||||
|
[comp = component]()
|
||||||
|
{
|
||||||
|
SHVec4 newColor(comp->GetEndColor());
|
||||||
|
newColor.w = comp->GetEndAlpha();
|
||||||
|
return newColor;
|
||||||
|
},
|
||||||
|
[comp = component](SHVec4 vec)
|
||||||
|
{
|
||||||
|
SHVec3 temp{ vec.x, vec.y, vec.z };
|
||||||
|
float a = vec.w;
|
||||||
|
comp->SetEndColor(temp);
|
||||||
|
comp->SetEndAlpha(a);
|
||||||
|
});
|
||||||
|
|
||||||
|
SHEditorWidgets::DragFloat("Color Evolve Rate",
|
||||||
|
[comp = component]()
|
||||||
|
{
|
||||||
|
return comp->GetColorEvolveRate();
|
||||||
|
},
|
||||||
|
[comp = component](float rate)
|
||||||
|
{
|
||||||
|
return comp->SetColorEvolveRate(rate);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DrawContextMenu(component);
|
||||||
|
}
|
||||||
|
ImGui::PopID();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -180,6 +180,10 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
DrawComponent(listenerComponent);
|
DrawComponent(listenerComponent);
|
||||||
}
|
}
|
||||||
|
if (auto trajectoryComponent = SHComponentManager::GetComponent_s<SHTrajectoryRenderableComponent>(eid))
|
||||||
|
{
|
||||||
|
DrawComponent(trajectoryComponent);
|
||||||
|
}
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
// Render Scripts
|
// Render Scripts
|
||||||
SHScriptEngine* scriptEngine = static_cast<SHScriptEngine*>(SHSystemManager::GetSystem<SHScriptEngine>());
|
SHScriptEngine* scriptEngine = static_cast<SHScriptEngine*>(SHSystemManager::GetSystem<SHScriptEngine>());
|
||||||
|
@ -195,6 +199,7 @@ namespace SHADE
|
||||||
DrawAddComponentButton<SHButtonComponent>(eid);
|
DrawAddComponentButton<SHButtonComponent>(eid);
|
||||||
DrawAddComponentButton<SHToggleButtonComponent>(eid);
|
DrawAddComponentButton<SHToggleButtonComponent>(eid);
|
||||||
DrawAddComponentButton<SHSliderComponent>(eid);
|
DrawAddComponentButton<SHSliderComponent>(eid);
|
||||||
|
DrawAddComponentButton<SHTrajectoryRenderableComponent>(eid);
|
||||||
|
|
||||||
// Components that require Transforms
|
// Components that require Transforms
|
||||||
|
|
||||||
|
|
|
@ -592,8 +592,10 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
//Load the scene
|
//Load the scene
|
||||||
sceneToLoad = 0;
|
sceneToLoad = 0;
|
||||||
|
#ifdef SHEDITOR
|
||||||
editorConfig->workingSceneID = assetID;
|
editorConfig->workingSceneID = assetID;
|
||||||
SHConfigurationManager::SaveEditorConfig();
|
SHConfigurationManager::SaveEditorConfig();
|
||||||
|
#endif
|
||||||
SHSceneManager::RestartScene(assetID);
|
SHSceneManager::RestartScene(assetID);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -262,7 +262,7 @@ namespace SHADE
|
||||||
copyRegions[i].imageSubresource.baseArrayLayer = 0; // TODO: Array textures not supported yet
|
copyRegions[i].imageSubresource.baseArrayLayer = 0; // TODO: Array textures not supported yet
|
||||||
copyRegions[i].imageSubresource.layerCount = layerCount;
|
copyRegions[i].imageSubresource.layerCount = layerCount;
|
||||||
copyRegions[i].imageOffset = vk::Offset3D{ 0,0,0 };
|
copyRegions[i].imageOffset = vk::Offset3D{ 0,0,0 };
|
||||||
copyRegions[i].imageExtent = vk::Extent3D{ width >> i, height >> i, 1 };
|
copyRegions[i].imageExtent = vk::Extent3D{ std::max (1u, width >> i), std::max (1u, height >> i), 1 };
|
||||||
}
|
}
|
||||||
|
|
||||||
cmdBufferHdl->CopyBufferToImage(stagingBuffer, vkImage, copyRegions);
|
cmdBufferHdl->CopyBufferToImage(stagingBuffer, vkImage, copyRegions);
|
||||||
|
|
|
@ -59,6 +59,13 @@ namespace SHADE
|
||||||
{SHPredefinedDescriptorTypes::STATIC_DATA, 0},
|
{SHPredefinedDescriptorTypes::STATIC_DATA, 0},
|
||||||
{SHPredefinedDescriptorTypes::CAMERA, 1},
|
{SHPredefinedDescriptorTypes::CAMERA, 1},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
perSystemData[SHUtilities::ConvertEnum(SystemType::PARTICLE_RENEDERING)].descMappings.AddMappings
|
||||||
|
({
|
||||||
|
{SHPredefinedDescriptorTypes::STATIC_DATA, 0},
|
||||||
|
{SHPredefinedDescriptorTypes::CAMERA, 1},
|
||||||
|
{SHPredefinedDescriptorTypes::PARTICLES, 2},
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHGraphicsPredefinedData::InitDummyPipelineLayouts(Handle<SHVkLogicalDevice> logicalDevice) noexcept
|
void SHGraphicsPredefinedData::InitDummyPipelineLayouts(Handle<SHVkLogicalDevice> logicalDevice) noexcept
|
||||||
|
@ -194,6 +201,73 @@ namespace SHADE
|
||||||
Handle<SHVkDescriptorSetLayout> materialBoneDataPerInstanceLayout = logicalDevice->CreateDescriptorSetLayout({ materialDataBinding, boneDataBinding });
|
Handle<SHVkDescriptorSetLayout> materialBoneDataPerInstanceLayout = logicalDevice->CreateDescriptorSetLayout({ materialDataBinding, boneDataBinding });
|
||||||
SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSetLayout, materialBoneDataPerInstanceLayout->GetVkHandle(), "[Descriptor Set Layout] Material and Bone Globals");
|
SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSetLayout, materialBoneDataPerInstanceLayout->GetVkHandle(), "[Descriptor Set Layout] Material and Bone Globals");
|
||||||
|
|
||||||
|
// particle emitter binding
|
||||||
|
SHVkDescriptorSetLayout::Binding emitterDataBinding
|
||||||
|
{
|
||||||
|
.Type = vk::DescriptorType::eStorageBufferDynamic,
|
||||||
|
.Stage = vk::ShaderStageFlagBits::eCompute,
|
||||||
|
.BindPoint = SHGraphicsConstants::DescriptorSetBindings::PARTICLE_EMITTER_DATA,
|
||||||
|
.DescriptorCount = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
// particle input binding
|
||||||
|
SHVkDescriptorSetLayout::Binding particleInputDataBinding
|
||||||
|
{
|
||||||
|
.Type = vk::DescriptorType::eStorageBufferDynamic,
|
||||||
|
.Stage = vk::ShaderStageFlagBits::eCompute,
|
||||||
|
.BindPoint = SHGraphicsConstants::DescriptorSetBindings::PARTICLE_INPUT_DATA,
|
||||||
|
.DescriptorCount = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
// particle output binding
|
||||||
|
SHVkDescriptorSetLayout::Binding particleOutputDataBinding
|
||||||
|
{
|
||||||
|
.Type = vk::DescriptorType::eStorageBufferDynamic,
|
||||||
|
.Stage = vk::ShaderStageFlagBits::eCompute | vk::ShaderStageFlagBits::eVertex,
|
||||||
|
.BindPoint = SHGraphicsConstants::DescriptorSetBindings::PARTICLE_OUTPUT_DATA,
|
||||||
|
.DescriptorCount = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
// particle freelist binding
|
||||||
|
SHVkDescriptorSetLayout::Binding particleFreelistBinding
|
||||||
|
{
|
||||||
|
.Type = vk::DescriptorType::eStorageBuffer, // non dynamic because we only need 1 copy for all frames
|
||||||
|
.Stage = vk::ShaderStageFlagBits::eCompute,
|
||||||
|
.BindPoint = SHGraphicsConstants::DescriptorSetBindings::PARTICLE_FREELIST_DATA,
|
||||||
|
.DescriptorCount = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
// particle indices binding
|
||||||
|
SHVkDescriptorSetLayout::Binding particleIndicesBinding
|
||||||
|
{
|
||||||
|
.Type = vk::DescriptorType::eStorageBufferDynamic, // dynamic because we have multiple copies.
|
||||||
|
.Stage = vk::ShaderStageFlagBits::eCompute | vk::ShaderStageFlagBits::eVertex,
|
||||||
|
.BindPoint = SHGraphicsConstants::DescriptorSetBindings::PARTICLE_INDICES_DATA,
|
||||||
|
.DescriptorCount = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
// particle draw call binding
|
||||||
|
SHVkDescriptorSetLayout::Binding particleDrawDataBinding
|
||||||
|
{
|
||||||
|
.Type = vk::DescriptorType::eUniformBufferDynamic, // UBO (Because lesser data), dynamic (1 set for each frame)
|
||||||
|
.Stage = vk::ShaderStageFlagBits::eCompute,
|
||||||
|
.BindPoint = SHGraphicsConstants::DescriptorSetBindings::PARTICLE_DRAW_DATA,
|
||||||
|
.DescriptorCount = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
Handle<SHVkDescriptorSetLayout> particleDescSetLayout = logicalDevice->CreateDescriptorSetLayout(
|
||||||
|
{
|
||||||
|
emitterDataBinding,
|
||||||
|
particleInputDataBinding,
|
||||||
|
particleOutputDataBinding,
|
||||||
|
particleFreelistBinding,
|
||||||
|
particleIndicesBinding,
|
||||||
|
particleDrawDataBinding
|
||||||
|
});
|
||||||
|
SET_VK_OBJ_NAME(logicalDevice, vk::ObjectType::eDescriptorSetLayout, particleDescSetLayout->GetVkHandle(), "[Descriptor Set Layout] Particle System Data");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
predefinedLayouts.push_back(staticGlobalLayout);
|
predefinedLayouts.push_back(staticGlobalLayout);
|
||||||
predefinedLayouts.push_back(lightDataDescSetLayout);
|
predefinedLayouts.push_back(lightDataDescSetLayout);
|
||||||
predefinedLayouts.push_back(cameraDataGlobalLayout);
|
predefinedLayouts.push_back(cameraDataGlobalLayout);
|
||||||
|
@ -201,6 +275,7 @@ namespace SHADE
|
||||||
predefinedLayouts.push_back(fontDataDescSetLayout);
|
predefinedLayouts.push_back(fontDataDescSetLayout);
|
||||||
predefinedLayouts.push_back(shadowMapDescLayout);
|
predefinedLayouts.push_back(shadowMapDescLayout);
|
||||||
predefinedLayouts.push_back(materialBoneDataPerInstanceLayout);
|
predefinedLayouts.push_back(materialBoneDataPerInstanceLayout);
|
||||||
|
predefinedLayouts.push_back(particleDescSetLayout);
|
||||||
|
|
||||||
perSystemData[SHUtilities::ConvertEnum(SystemType::BATCHING)].descSetLayouts = GetPredefinedDescSetLayouts
|
perSystemData[SHUtilities::ConvertEnum(SystemType::BATCHING)].descSetLayouts = GetPredefinedDescSetLayouts
|
||||||
(
|
(
|
||||||
|
@ -235,6 +310,13 @@ namespace SHADE
|
||||||
SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::STATIC_DATA |
|
SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::STATIC_DATA |
|
||||||
SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::CAMERA
|
SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::CAMERA
|
||||||
);
|
);
|
||||||
|
|
||||||
|
perSystemData[SHUtilities::ConvertEnum(SystemType::PARTICLE_RENEDERING)].descSetLayouts = GetPredefinedDescSetLayouts
|
||||||
|
(
|
||||||
|
SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::STATIC_DATA |
|
||||||
|
SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::CAMERA |
|
||||||
|
SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::PARTICLES
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHGraphicsPredefinedData::InitPredefinedVertexInputState(void) noexcept
|
void SHGraphicsPredefinedData::InitPredefinedVertexInputState(void) noexcept
|
||||||
|
|
|
@ -29,7 +29,8 @@ namespace SHADE
|
||||||
MATERIALS = 0b00001000,
|
MATERIALS = 0b00001000,
|
||||||
FONT = 0b00010000,
|
FONT = 0b00010000,
|
||||||
SHADOW = 0b00100000,
|
SHADOW = 0b00100000,
|
||||||
MATERIAL_AND_BONES = 0b01000000
|
MATERIAL_AND_BONES = 0b01000000,
|
||||||
|
PARTICLES = 0b10000000
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class SystemType
|
enum class SystemType
|
||||||
|
@ -39,6 +40,7 @@ namespace SHADE
|
||||||
TEXT_RENDERING,
|
TEXT_RENDERING,
|
||||||
RENDER_GRAPH_NODE_COMPUTE,
|
RENDER_GRAPH_NODE_COMPUTE,
|
||||||
TRAJECTORY_RENDERING,
|
TRAJECTORY_RENDERING,
|
||||||
|
PARTICLE_RENEDERING,
|
||||||
NUM_TYPES
|
NUM_TYPES
|
||||||
};
|
};
|
||||||
static constexpr int SYSTEM_TYPE_COUNT = static_cast<int>(SystemType::NUM_TYPES);
|
static constexpr int SYSTEM_TYPE_COUNT = static_cast<int>(SystemType::NUM_TYPES);
|
||||||
|
|
|
@ -16,5 +16,6 @@ namespace SHADE
|
||||||
FONT,
|
FONT,
|
||||||
RENDER_GRAPH_NODE_COMPUTE_RESOURCE,
|
RENDER_GRAPH_NODE_COMPUTE_RESOURCE,
|
||||||
RENDER_GRAPH_RESOURCE,
|
RENDER_GRAPH_RESOURCE,
|
||||||
|
PARTICLES,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,7 +130,7 @@ namespace SHADE
|
||||||
static constexpr std::string_view GBUFFER_WRITE_VFX_SUBPASS = "G-Buffer Write With VFX";
|
static constexpr std::string_view GBUFFER_WRITE_VFX_SUBPASS = "G-Buffer Write With VFX";
|
||||||
static constexpr std::string_view UI_SUBPASS = "UI";
|
static constexpr std::string_view UI_SUBPASS = "UI";
|
||||||
static constexpr std::string_view UI_TRANSLUCENT_SUBPASS = "UI Translucent";
|
static constexpr std::string_view UI_TRANSLUCENT_SUBPASS = "UI Translucent";
|
||||||
static constexpr std::string_view VFX_SUBPASS = "VFX";
|
static constexpr std::string_view VFX_SUBPASS = "VFX Subpass";
|
||||||
static constexpr std::string_view OBJ_VFX_SUBPASS = "Object VFX Subpass No Depth";
|
static constexpr std::string_view OBJ_VFX_SUBPASS = "Object VFX Subpass No Depth";
|
||||||
|
|
||||||
static constexpr std::array USABLE_SUBPASSES =
|
static constexpr std::array USABLE_SUBPASSES =
|
||||||
|
@ -233,6 +233,61 @@ namespace SHADE
|
||||||
*/
|
*/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
static constexpr uint32_t BONE_MATRIX_DATA = 1;
|
static constexpr uint32_t BONE_MATRIX_DATA = 1;
|
||||||
|
|
||||||
|
/***************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Descriptor set binding for particle emitter data.
|
||||||
|
|
||||||
|
*/
|
||||||
|
/***************************************************************************/
|
||||||
|
static constexpr uint32_t PARTICLE_EMITTER_DATA = 0;
|
||||||
|
|
||||||
|
/***************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Descriptor set binding for input particle data.
|
||||||
|
|
||||||
|
*/
|
||||||
|
/***************************************************************************/
|
||||||
|
static constexpr uint32_t PARTICLE_INPUT_DATA = 1;
|
||||||
|
|
||||||
|
/***************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Descriptor set binding for output particle data.
|
||||||
|
|
||||||
|
*/
|
||||||
|
/***************************************************************************/
|
||||||
|
static constexpr uint32_t PARTICLE_OUTPUT_DATA = 2;
|
||||||
|
|
||||||
|
/***************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Descriptor set binding for particle freelist data.
|
||||||
|
|
||||||
|
*/
|
||||||
|
/***************************************************************************/
|
||||||
|
static constexpr uint32_t PARTICLE_FREELIST_DATA = 3;
|
||||||
|
|
||||||
|
/***************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Descriptor set binding for particle indices data.
|
||||||
|
|
||||||
|
*/
|
||||||
|
/***************************************************************************/
|
||||||
|
static constexpr uint32_t PARTICLE_INDICES_DATA = 4;
|
||||||
|
|
||||||
|
/***************************************************************************/
|
||||||
|
/*!
|
||||||
|
\brief
|
||||||
|
Descriptor set binding for bone matrix data.
|
||||||
|
|
||||||
|
*/
|
||||||
|
/***************************************************************************/
|
||||||
|
static constexpr uint32_t PARTICLE_DRAW_DATA = 5;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VertexBufferBindings
|
struct VertexBufferBindings
|
||||||
|
@ -307,6 +362,7 @@ namespace SHADE
|
||||||
*/
|
*/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
static constexpr uint32_t TRAJECTORY_COLOR = 2;
|
static constexpr uint32_t TRAJECTORY_COLOR = 2;
|
||||||
|
static constexpr uint32_t TRAJECTORY_TRANSFORM = 3;
|
||||||
|
|
||||||
static constexpr uint32_t CALCULATED_GLYPH_POSITION = 0;
|
static constexpr uint32_t CALCULATED_GLYPH_POSITION = 0;
|
||||||
static constexpr uint32_t GLYPH_INDEX = 1;
|
static constexpr uint32_t GLYPH_INDEX = 1;
|
||||||
|
|
|
@ -337,7 +337,7 @@ namespace SHADE
|
||||||
/* VFX PASS */
|
/* VFX PASS */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
auto vfxPass = renderGraph->AddNode(SHGraphicsConstants::RenderGraphEntityNames::VFX_PASS.data(), { "Scene", "Depth Buffer" }, { SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data(), SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_PASS.data() });
|
auto vfxPass = renderGraph->AddNode(SHGraphicsConstants::RenderGraphEntityNames::VFX_PASS.data(), { "Scene", "Depth Buffer" }, { SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data(), SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_PASS.data() });
|
||||||
auto vfxSubpass = vfxPass->AddSubpass("Vfx Subpass", worldViewport, worldRenderer);
|
auto vfxSubpass = vfxPass->AddSubpass(SHGraphicsConstants::RenderGraphEntityNames::VFX_SUBPASS.data(), worldViewport, worldRenderer);
|
||||||
vfxSubpass->AddColorOutput("Scene");
|
vfxSubpass->AddColorOutput("Scene");
|
||||||
vfxSubpass->AddDepthOutput("Depth Buffer");
|
vfxSubpass->AddDepthOutput("Depth Buffer");
|
||||||
vfxSubpass->AddExteriorDrawCalls([=](Handle<SHVkCommandBuffer> cmdBuffer, Handle<SHRenderer> renderer, uint32_t frameIndex)
|
vfxSubpass->AddExteriorDrawCalls([=](Handle<SHVkCommandBuffer> cmdBuffer, Handle<SHRenderer> renderer, uint32_t frameIndex)
|
||||||
|
@ -485,8 +485,8 @@ namespace SHADE
|
||||||
|
|
||||||
trajectoryRenderingSubSystem = resourceManager.Create<SHTrajectoryRenderingSubSystem>();
|
trajectoryRenderingSubSystem = resourceManager.Create<SHTrajectoryRenderingSubSystem>();
|
||||||
|
|
||||||
auto vfxNode = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::SCREEN_SPACE_PASS.data());
|
auto vfxNode = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::VFX_PASS.data());
|
||||||
trajectoryRenderingSubSystem->Init(device, vfxNode->GetRenderpass(), vfxNode->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::UI_SUBPASS), trajectoryVS, trajectoryFS);
|
trajectoryRenderingSubSystem->Init(device, vfxNode->GetRenderpass(), vfxNode->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::VFX_SUBPASS), trajectoryVS, trajectoryFS);
|
||||||
|
|
||||||
SHGlobalDescriptorSets::SetLightingSubSystem(lightingSubSystem);
|
SHGlobalDescriptorSets::SetLightingSubSystem(lightingSubSystem);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#include "SHpch.h"
|
||||||
|
#include "SHParticleEmitterComponent.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
|
||||||
|
void SHParticleEmitterComponent::OnCreate(void)
|
||||||
|
{
|
||||||
|
timeBeforeEmission = emissionInterval;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleEmitterComponent::OnDestroy(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleEmitterComponent::Emit(void) noexcept
|
||||||
|
{
|
||||||
|
toEmit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,111 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Resource/SHHandle.h"
|
||||||
|
#include "Math/Vector/SHVec4.h"
|
||||||
|
#include "ECS_Base/Components/SHComponent.h"
|
||||||
|
#include "Graphics/MiddleEnd/Interface/SHGraphicsConstants.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
class SHVkBuffer;
|
||||||
|
class SHVkDescriptorSetGroup;
|
||||||
|
class SHVkDescriptorSetLayout;
|
||||||
|
|
||||||
|
class SHParticleEmitterComponent : public SHComponent
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
struct GPUEmitterStruct
|
||||||
|
{
|
||||||
|
//! Minimum emitting angular range
|
||||||
|
SHVec4 angularMin;
|
||||||
|
|
||||||
|
//! Maximum emitting angular range
|
||||||
|
SHVec4 angularMax;
|
||||||
|
|
||||||
|
//! Spawn lifetime and size range (min and max)
|
||||||
|
SHVec4 lifeAndSizeRange;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GPUParticleStruct
|
||||||
|
{
|
||||||
|
//! Position of the particle
|
||||||
|
SHVec4 position;
|
||||||
|
|
||||||
|
//! Rotation of the particle
|
||||||
|
SHVec4 rotation;
|
||||||
|
|
||||||
|
//! Velocity of the particle
|
||||||
|
SHVec4 velocity;
|
||||||
|
|
||||||
|
//! Acceleration of the particle
|
||||||
|
SHVec4 acceleration;
|
||||||
|
|
||||||
|
//! x scale, x scale decay, y scale and y scale decay
|
||||||
|
SHVec4 scaleAndDecay;
|
||||||
|
|
||||||
|
//! Life of the particle
|
||||||
|
float life;
|
||||||
|
|
||||||
|
//! Texture into the desc array that the particle is using
|
||||||
|
uint32_t textureIndex;
|
||||||
|
};
|
||||||
|
|
||||||
|
//! Max number of particles of this emitter
|
||||||
|
uint32_t maxParticles;
|
||||||
|
|
||||||
|
//! num bytes of all particles in 1 chunk (1 frame)
|
||||||
|
uint32_t chunkSize;
|
||||||
|
|
||||||
|
//! emission count per emit
|
||||||
|
uint32_t emissionCount;
|
||||||
|
|
||||||
|
//! emission interval of the emitter
|
||||||
|
float emissionInterval;
|
||||||
|
|
||||||
|
//! Counter that decreases to 0 from emissionInterval. When 0, emit particles.
|
||||||
|
float timeBeforeEmission;
|
||||||
|
|
||||||
|
//! Data for the emitter
|
||||||
|
Handle<SHVkBuffer> emitterData;
|
||||||
|
|
||||||
|
//! GPU Particle data
|
||||||
|
Handle<SHVkBuffer> particleData;
|
||||||
|
|
||||||
|
//! Freelist data
|
||||||
|
Handle<SHVkBuffer> freelistData;
|
||||||
|
|
||||||
|
//! Indices data
|
||||||
|
Handle<SHVkBuffer> indicesData;
|
||||||
|
|
||||||
|
//! draw call data
|
||||||
|
Handle<SHVkBuffer> drawCallData;
|
||||||
|
|
||||||
|
//! We need more descriptor sets because the operations on a frame's particle data needs to rely on the previous frame's. Each set
|
||||||
|
//! will contain 2 bindings that point to 2 buffers (input and output).
|
||||||
|
Handle<SHVkDescriptorSetGroup> particleDescriptorSet;
|
||||||
|
|
||||||
|
//! Emitter's data on the CPU side. To be copied to GPU.
|
||||||
|
GPUEmitterStruct cpuEmitterData;
|
||||||
|
|
||||||
|
//! If passive, emitter emits particles based on timer above.
|
||||||
|
bool isPassive;
|
||||||
|
|
||||||
|
//! Have the particle system initialize variables in this component when this is false
|
||||||
|
bool initialized;
|
||||||
|
|
||||||
|
//! If true, particle system will emit particles in Run function. Sets to false every frame.
|
||||||
|
bool toEmit;
|
||||||
|
|
||||||
|
//! For all the dynamic SSBOs in the descriptor set
|
||||||
|
std::array<std::array<uint32_t, 5>, SHGraphicsConstants::NUM_FRAME_BUFFERS> dynamicOffsets{};
|
||||||
|
|
||||||
|
public:
|
||||||
|
void OnCreate(void) override final;
|
||||||
|
void OnDestroy(void) override final;
|
||||||
|
|
||||||
|
void Emit (void) noexcept;
|
||||||
|
|
||||||
|
friend class SHParticleSubSystem;
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
|
@ -1,41 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "Resource/SHHandle.h"
|
|
||||||
#include "Graphics/Pipeline/SHPipelineState.h"
|
|
||||||
#include "Math/SHMatrix.h"
|
|
||||||
|
|
||||||
namespace SHADE
|
|
||||||
{
|
|
||||||
class SHVkLogicalDevice;
|
|
||||||
class SHVkDescriptorPool;
|
|
||||||
class SHVkDescriptorSetGroup;
|
|
||||||
class SHVkDescriptorSetLayout;
|
|
||||||
class SHVkBuffer;
|
|
||||||
class SHLightComponent;
|
|
||||||
class SHVkCommandBuffer;
|
|
||||||
class SHVkPipeline;
|
|
||||||
class SHVkPipelineLayout;
|
|
||||||
class SHVkRenderpass;
|
|
||||||
class SHSubpass;
|
|
||||||
class SHVkShaderModule;
|
|
||||||
class SHRenderer;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SHParticleSubSystem
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
Handle<SHVkLogicalDevice> logicalDevice;
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
void Init(Handle<SHVkLogicalDevice> device, Handle<SHVkRenderpass> compatibleRenderpass, Handle<SHSubpass> subpass) noexcept;
|
|
||||||
|
|
||||||
void Run(uint32_t frameIndex) noexcept;
|
|
||||||
|
|
||||||
void Render(Handle<SHVkCommandBuffer> cmdBuffer, Handle<SHRenderer> renderer, uint32_t frameIndex) noexcept;
|
|
||||||
void Exit(void) noexcept;
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,7 +1,309 @@
|
||||||
#include "SHpch.h"
|
#include "SHpch.h"
|
||||||
#include "SHParticleSubSustem.h"
|
#include "SHParticleSubSystem.h"
|
||||||
|
#include "Graphics/Pipeline/SHPipelineLayoutParams.h"
|
||||||
|
#include "Graphics/MiddleEnd/GlobalData/SHGraphicsPredefinedData.h"
|
||||||
|
#include "Graphics/Devices/SHVkLogicalDevice.h"
|
||||||
|
#include "Graphics/MiddleEnd/Particles/SHParticleEmitterComponent.h"
|
||||||
|
#include "ECS_Base/Managers/SHComponentManager.h"
|
||||||
|
#include "Graphics/Descriptors/SHVkDescriptorSetGroup.h"
|
||||||
|
#include "Graphics/Descriptors/SHVkDescriptorSetLayout.h"
|
||||||
|
#include "Graphics/MiddleEnd/GlobalData/SHGlobalDescriptorSets.h"
|
||||||
|
#include "Math/Transform/SHTransformComponent.h"
|
||||||
|
#include "Graphics/Buffers/SHVkBuffer.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
|
||||||
|
void SHParticleSubSystem::InitializeComponent(SHParticleEmitterComponent& comp) noexcept
|
||||||
|
{
|
||||||
|
uint32_t emitterStructAligned = logicalDevice->PadSSBOSize(sizeof (SHParticleEmitterComponent::GPUEmitterStruct));
|
||||||
|
uint32_t particleStructAligned = logicalDevice->PadUBOSize(sizeof (SHParticleEmitterComponent::GPUParticleStruct));
|
||||||
|
uint32_t sizeofIndirectCmd = static_cast<uint32_t>(sizeof(vk::DrawIndirectCommand));
|
||||||
|
uint32_t sizeofUint = static_cast<uint32_t>(sizeof(uint32_t));
|
||||||
|
|
||||||
|
// TODO: temporary only.
|
||||||
|
static constexpr uint32_t NUM_PARTICLES = 500;
|
||||||
|
comp.maxParticles = NUM_PARTICLES;
|
||||||
|
|
||||||
|
// offset into the buffer for input and output
|
||||||
|
uint32_t const PARTICLE_FRAME_CHUNK_SIZE = (particleStructAligned * comp.maxParticles);
|
||||||
|
|
||||||
|
// Buffer Initialization
|
||||||
|
{
|
||||||
|
// count, value
|
||||||
|
std::vector<uint32_t> freelistInit(comp.maxParticles + 1, 0);
|
||||||
|
freelistInit[0] = comp.maxParticles;
|
||||||
|
|
||||||
|
// Particle emitter buffer. Multiple copies, Host-visible mapped. We want multiple copies because we'll be writing to it from the CPU. We don't want to do that while the GPU
|
||||||
|
// is using it during compute operations so we write to another portion.
|
||||||
|
comp.emitterData = logicalDevice->CreateBuffer(SHGraphicsConstants::NUM_FRAME_BUFFERS * emitterStructAligned, nullptr, 0, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT);
|
||||||
|
|
||||||
|
// buffer for particle data: pure GPU memory, no transfers, no flags. We want to triple buffer this so that we can submit work to the GPU
|
||||||
|
// without having to wait for rendering to finish reading the data
|
||||||
|
comp.particleData = logicalDevice->CreateBuffer(SHGraphicsConstants::NUM_FRAME_BUFFERS * particleStructAligned * NUM_PARTICLES, nullptr, 0, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, {});
|
||||||
|
|
||||||
|
// Buffer for freelist data. 1 copy only, host-visible mapped. We only need 1 copy because it is only required in compute. If it was used or read in another
|
||||||
|
// stage we would need more copies.
|
||||||
|
comp.freelistData = logicalDevice->CreateBuffer(sizeofUint * (comp.maxParticles + 1), freelistInit.data(), sizeofUint * (comp.maxParticles + 1), vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT);
|
||||||
|
|
||||||
|
// Buffer for indices. NUM_FRAME_BUFFERS copies since it's used in rendering. host-visible mapped.
|
||||||
|
comp.indicesData = logicalDevice->CreateBuffer(sizeofUint * comp.maxParticles, nullptr, 0, vk::BufferUsageFlagBits::eStorageBuffer, VMA_MEMORY_USAGE_AUTO, VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT);
|
||||||
|
|
||||||
|
// Draw call data will not be tampered with after this initialization except for one variable: instanceCount, which will be modified from compute shader
|
||||||
|
std::array<vk::DrawIndirectCommand, SHGraphicsConstants::NUM_FRAME_BUFFERS> indirectCommands{};
|
||||||
|
for (auto& cmd : indirectCommands)
|
||||||
|
{
|
||||||
|
cmd.vertexCount = 4;
|
||||||
|
cmd.firstVertex = 0;
|
||||||
|
cmd.firstInstance = 0;
|
||||||
|
cmd.instanceCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// buffer to store draw call data. Non-indexed, host-visible mapped, triple buffered.
|
||||||
|
comp.drawCallData = logicalDevice->CreateBuffer(SHGraphicsConstants::NUM_FRAME_BUFFERS * sizeofIndirectCmd, indirectCommands.data(), SHGraphicsConstants::NUM_FRAME_BUFFERS * sizeofIndirectCmd, vk::BufferUsageFlagBits::eUniformBuffer | vk::BufferUsageFlagBits::eIndirectBuffer, VMA_MEMORY_USAGE_AUTO, VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VmaAllocationCreateFlagBits::VMA_ALLOCATION_CREATE_MAPPED_BIT);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Descriptor set initialization
|
||||||
|
{
|
||||||
|
// Get particle desc set layout
|
||||||
|
auto descSetLayout = SHGraphicsPredefinedData::GetPredefinedDescSetLayouts(SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::PARTICLES);
|
||||||
|
|
||||||
|
// Since we are populating the set as is, the set index will be 0
|
||||||
|
static constexpr uint32_t PARTICLE_DATA_SET_INDEX = 0;
|
||||||
|
|
||||||
|
// Variable desc counts, all ignored anyway (This is required but its a dumb interface. You can only blame yourself, Brandon. )
|
||||||
|
std::vector const VARIABLE_COUNTS = {0u,0u,0u,0u,0u};
|
||||||
|
|
||||||
|
// allocate new desc set
|
||||||
|
comp.particleDescriptorSet = descPool->Allocate(descSetLayout, VARIABLE_COUNTS);
|
||||||
|
|
||||||
|
// convenience handle
|
||||||
|
auto set = comp.particleDescriptorSet;
|
||||||
|
|
||||||
|
// After buffers are created, we want to populate all bindings(6) with the buffers
|
||||||
|
set->ModifyWriteDescBuffer(PARTICLE_DATA_SET_INDEX, SHGraphicsConstants::DescriptorSetBindings::PARTICLE_EMITTER_DATA, { &comp.emitterData, 1 }, 0, emitterStructAligned);
|
||||||
|
set->ModifyWriteDescBuffer(PARTICLE_DATA_SET_INDEX, SHGraphicsConstants::DescriptorSetBindings::PARTICLE_INPUT_DATA, { &comp.particleData, 1 }, 0, PARTICLE_FRAME_CHUNK_SIZE); // input and output will be th same until we bind using dynamic offsets
|
||||||
|
set->ModifyWriteDescBuffer(PARTICLE_DATA_SET_INDEX, SHGraphicsConstants::DescriptorSetBindings::PARTICLE_OUTPUT_DATA, { &comp.particleData, 1 }, 0, PARTICLE_FRAME_CHUNK_SIZE);
|
||||||
|
set->ModifyWriteDescBuffer(PARTICLE_DATA_SET_INDEX, SHGraphicsConstants::DescriptorSetBindings::PARTICLE_FREELIST_DATA, { &comp.freelistData, 1 }, 0, sizeofUint * (comp.maxParticles + 1));
|
||||||
|
set->ModifyWriteDescBuffer(PARTICLE_DATA_SET_INDEX, SHGraphicsConstants::DescriptorSetBindings::PARTICLE_INDICES_DATA, { &comp.indicesData, 1 }, 0, sizeofUint * (comp.maxParticles));
|
||||||
|
set->ModifyWriteDescBuffer(PARTICLE_DATA_SET_INDEX, SHGraphicsConstants::DescriptorSetBindings::PARTICLE_DRAW_DATA, { &comp.drawCallData, 1 }, 0, sizeofIndirectCmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
comp.initialized = true;
|
||||||
|
comp.timeBeforeEmission = comp.emissionInterval;
|
||||||
|
comp.toEmit = false;
|
||||||
|
comp.chunkSize = PARTICLE_FRAME_CHUNK_SIZE;
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < SHGraphicsConstants::NUM_FRAME_BUFFERS; ++i)
|
||||||
|
{
|
||||||
|
auto& offsets = comp.dynamicOffsets[i];
|
||||||
|
|
||||||
|
uint32_t inputOffset = PARTICLE_FRAME_CHUNK_SIZE * ((i + SHGraphicsConstants::NUM_FRAME_BUFFERS - 1) % SHGraphicsConstants::NUM_FRAME_BUFFERS); // take previous frame's data
|
||||||
|
uint32_t outputOffset = PARTICLE_FRAME_CHUNK_SIZE * i;
|
||||||
|
|
||||||
|
// In the order of:
|
||||||
|
// 1. Emitter data
|
||||||
|
// 2. Particle input
|
||||||
|
// 3. Particle output
|
||||||
|
// 4. Particle draw data
|
||||||
|
offsets[DYOFF_INDEX_EMITTER] = i * emitterStructAligned;
|
||||||
|
offsets[DYOFF_INDEX_PARTICLE_INPUT] = inputOffset;
|
||||||
|
offsets[DYOFF_INDEX_PARTICLE_OUTPUT] = outputOffset;
|
||||||
|
offsets[DYOFF_INDEX_INDICES_DATA] = i * sizeofUint * comp.maxParticles;
|
||||||
|
offsets[DYOFF_INDEX_DRAW_DATA] = i * sizeofIndirectCmd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleSubSystem::EmitComponent(Handle<SHVkCommandBuffer> cmdBuffer, SHParticleEmitterComponent& comp, uint32_t frameIndex) noexcept
|
||||||
|
{
|
||||||
|
auto const& mappings = SHGraphicsPredefinedData::GetMappings(SHGraphicsPredefinedData::SystemType::PARTICLE_RENEDERING);
|
||||||
|
auto* transform = SHComponentManager::GetComponent<SHTransformComponent>(comp.GetEID());
|
||||||
|
|
||||||
|
// bind the descriptor sets required for emitting particles
|
||||||
|
cmdBuffer->BindDescriptorSet(comp.particleDescriptorSet, SH_PIPELINE_TYPE::COMPUTE, mappings.at(SHPredefinedDescriptorTypes::PARTICLES), comp.dynamicOffsets[frameIndex]);
|
||||||
|
|
||||||
|
cmdBuffer->SetPushConstantVariable("EmitterPushConstant.emitterPosition", transform->GetWorldPosition(), SH_PIPELINE_TYPE::COMPUTE);
|
||||||
|
cmdBuffer->SetPushConstantVariable("EmitterPushConstant.emissionCount", comp.emissionCount, SH_PIPELINE_TYPE::COMPUTE);
|
||||||
|
|
||||||
|
// emit particles
|
||||||
|
cmdBuffer->ComputeDispatch((comp.emissionCount / EMITTER_WORKGROUP_SIZE) + 1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleSubSystem::UpdateCompoennt(Handle<SHVkCommandBuffer> cmdBuffer, SHParticleEmitterComponent& comp, uint32_t frameIndex) noexcept
|
||||||
|
{
|
||||||
|
auto const& mappings = SHGraphicsPredefinedData::GetMappings(SHGraphicsPredefinedData::SystemType::PARTICLE_RENEDERING);
|
||||||
|
|
||||||
|
uint32_t instanceCountOffset = sizeof (vk::DrawIndirectCommand) * frameIndex + offsetof(vk::DrawIndirectCommand, instanceCount);
|
||||||
|
uint32_t ZERO = 0;
|
||||||
|
|
||||||
|
// reset instance count to 0
|
||||||
|
comp.drawCallData->WriteToMemory (&ZERO, sizeof(uint32_t), 0, instanceCountOffset);
|
||||||
|
|
||||||
|
|
||||||
|
// bind the descriptor sets required for emitting particles
|
||||||
|
cmdBuffer->BindDescriptorSet(comp.particleDescriptorSet, SH_PIPELINE_TYPE::COMPUTE, mappings.at(SHPredefinedDescriptorTypes::PARTICLES), comp.dynamicOffsets[frameIndex]);
|
||||||
|
|
||||||
|
// dispatch the compute shaders to update particles
|
||||||
|
cmdBuffer->ComputeDispatch((comp.maxParticles / EMITTER_WORKGROUP_SIZE) + 1, 1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleSubSystem::RenderComponent(Handle<SHVkCommandBuffer> cmdBuffer, SHParticleEmitterComponent& comp, uint32_t frameIndex) noexcept
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleSubSystem::Init(Handle<SHVkLogicalDevice> device, Handle<SHVkDescriptorPool> inDescPool, Handle<SHVkRenderpass> compatibleRenderpass, Handle<SHSubpass> subpass, Handle<SHVkShaderModule> VS, Handle<SHVkShaderModule> FS, Handle<SHVkShaderModule> emitCS, Handle<SHVkShaderModule> defaultUpdateCS) noexcept
|
||||||
|
{
|
||||||
|
descPool = inDescPool;
|
||||||
|
logicalDevice = device;
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* INITIALIZE ALL PIPELINES */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
SHPipelineLayoutParams plParams
|
||||||
|
{
|
||||||
|
.shaderModules = {VS, FS},
|
||||||
|
.predefinedDescSetLayouts = SHGraphicsPredefinedData::GetSystemData(SHGraphicsPredefinedData::SystemType::PARTICLE_RENEDERING).descSetLayouts
|
||||||
|
};
|
||||||
|
|
||||||
|
renderingPipelineData.pipelineLayout = logicalDevice->CreatePipelineLayout(plParams);
|
||||||
|
renderingPipelineData.pipeline = logicalDevice->CreateGraphicsPipeline(renderingPipelineData.pipelineLayout, nullptr, compatibleRenderpass, subpass);
|
||||||
|
|
||||||
|
SHPipelineLayoutParams emitPlParams
|
||||||
|
{
|
||||||
|
.shaderModules = {emitCS},
|
||||||
|
.predefinedDescSetLayouts = SHGraphicsPredefinedData::GetSystemData(SHGraphicsPredefinedData::SystemType::PARTICLE_RENEDERING).descSetLayouts
|
||||||
|
};
|
||||||
|
|
||||||
|
emittingPipelineData.pipelineLayout = logicalDevice->CreatePipelineLayout(emitPlParams);
|
||||||
|
emittingPipelineData.pipeline = logicalDevice->CreateComputePipeline(emittingPipelineData.pipelineLayout);
|
||||||
|
|
||||||
|
SHPipelineLayoutParams defaultUpdatePlParams
|
||||||
|
{
|
||||||
|
.shaderModules = {defaultUpdateCS},
|
||||||
|
.predefinedDescSetLayouts = SHGraphicsPredefinedData::GetSystemData(SHGraphicsPredefinedData::SystemType::PARTICLE_RENEDERING).descSetLayouts
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultUpdatePipelineData.pipelineLayout = logicalDevice->CreatePipelineLayout(defaultUpdatePlParams);
|
||||||
|
defaultUpdatePipelineData.pipeline = logicalDevice->CreateComputePipeline(defaultUpdatePipelineData.pipelineLayout);
|
||||||
|
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* OTHER INITIALIZATION */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
SHComponentManager::CreateComponentSparseSet<SHParticleEmitterComponent>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleSubSystem::Run(Handle<SHVkCommandBuffer> cmdBuffer, uint32_t frameIndex, float dt) noexcept
|
||||||
|
{
|
||||||
|
auto& emitters = SHComponentManager::GetDense<SHParticleEmitterComponent>();
|
||||||
|
auto const& mappings = SHGraphicsPredefinedData::GetMappings(SHGraphicsPredefinedData::SystemType::PARTICLE_RENEDERING);
|
||||||
|
|
||||||
|
// Get offset into GPU emitter data (for updating)
|
||||||
|
uint32_t emitterDataOffset = frameIndex * sizeof (SHParticleEmitterComponent::GPUEmitterStruct);
|
||||||
|
|
||||||
|
// Barriers to make sure emitting shader is done completely before update is run.
|
||||||
|
// Every emitter will have its own barrier.
|
||||||
|
std::vector<vk::BufferMemoryBarrier> preUpdateBarriers{};
|
||||||
|
preUpdateBarriers.resize(emitters.size());
|
||||||
|
|
||||||
|
// If we wanted to be VERY safe, a barrier would be good here to make sure output particles have finish reading input particles in
|
||||||
|
// the update compute. HOWEVER since a NUM_FRAME_BUFFERS frames would have passed by then, we will not insert 1 here.
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* BEGIN EMITTING PARTICES */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// TODO: Might need to issue a barrier here for input particle data
|
||||||
|
|
||||||
|
// bind the pipeline for emitting particles
|
||||||
|
cmdBuffer->BindPipeline(emittingPipelineData.pipeline);
|
||||||
|
|
||||||
|
// Generic data
|
||||||
|
SHGlobalDescriptorSets::BindGenericAndTextureData(logicalDevice, cmdBuffer, SH_PIPELINE_TYPE::COMPUTE, mappings.at(SHPredefinedDescriptorTypes::STATIC_DATA), frameIndex);
|
||||||
|
|
||||||
|
uint32_t i = 0;
|
||||||
|
for (auto& emitter : emitters)
|
||||||
|
{
|
||||||
|
if (!emitter.initialized)
|
||||||
|
InitializeComponent(emitter);
|
||||||
|
|
||||||
|
// Set emitter emit flag to true here if there are ready to be emitted
|
||||||
|
if (emitter.isPassive)
|
||||||
|
{
|
||||||
|
// decrement emission timer
|
||||||
|
emitter.timeBeforeEmission -= dt;
|
||||||
|
|
||||||
|
// Check if time to emit
|
||||||
|
if (emitter.timeBeforeEmission <= 0.0f)
|
||||||
|
{
|
||||||
|
// reset timer
|
||||||
|
emitter.timeBeforeEmission = emitter.emissionInterval;
|
||||||
|
|
||||||
|
// Emit later
|
||||||
|
emitter.toEmit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (emitter.toEmit) // take note that if emitter is not passive, this can also be set to true outside of this function
|
||||||
|
{
|
||||||
|
// Copy data to host visible buffer of emitter
|
||||||
|
emitter.emitterData->WriteToMemory (&emitter.cpuEmitterData, sizeof (SHParticleEmitterComponent::GPUEmitterStruct), 0, emitterDataOffset);
|
||||||
|
|
||||||
|
// Call emit function here
|
||||||
|
EmitComponent(cmdBuffer, emitter, frameIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
// make new barrier on stack...
|
||||||
|
vk::BufferMemoryBarrier barrier
|
||||||
|
{
|
||||||
|
.srcAccessMask = vk::AccessFlagBits::eShaderWrite,
|
||||||
|
.dstAccessMask = vk::AccessFlagBits::eShaderRead,
|
||||||
|
.buffer = emitter.particleData->GetVkBuffer(),
|
||||||
|
.offset = emitter.dynamicOffsets[frameIndex][DYOFF_INDEX_PARTICLE_INPUT],
|
||||||
|
.size = emitter.chunkSize
|
||||||
|
};
|
||||||
|
|
||||||
|
// ...copy assign barrier on heap
|
||||||
|
preUpdateBarriers[i] = barrier;
|
||||||
|
|
||||||
|
emitter.toEmit = false;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// issue the barrier to wait
|
||||||
|
cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eComputeShader, vk::PipelineStageFlagBits::eComputeShader, {}, {}, preUpdateBarriers, {});
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
/* EMITTING PARTICLES DONE, BEGIN UPDATES.... */
|
||||||
|
/*-----------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
// bind the pipeline for updating
|
||||||
|
cmdBuffer->BindPipeline(defaultUpdatePipelineData.pipeline);
|
||||||
|
|
||||||
|
for (auto& emitter : emitters)
|
||||||
|
{
|
||||||
|
UpdateCompoennt(cmdBuffer, emitter, frameIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleSubSystem::Render(Handle<SHVkCommandBuffer> cmdBuffer, Handle<SHRenderer> renderer, uint32_t frameIndex) noexcept
|
||||||
|
{
|
||||||
|
auto& emitters = SHComponentManager::GetDense<SHParticleEmitterComponent>();
|
||||||
|
|
||||||
|
// TODO: Issue barrier for output particle data. Semaphore should also be issued outside in SHGraphicsSystem
|
||||||
|
for (auto& emitter : emitters)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHParticleSubSystem::Exit(void) noexcept
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -0,0 +1,93 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Resource/SHHandle.h"
|
||||||
|
#include "Graphics/Pipeline/SHPipelineState.h"
|
||||||
|
#include "Math/SHMatrix.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
class SHVkLogicalDevice;
|
||||||
|
class SHVkDescriptorPool;
|
||||||
|
class SHVkDescriptorSetGroup;
|
||||||
|
class SHVkDescriptorSetLayout;
|
||||||
|
class SHVkBuffer;
|
||||||
|
class SHLightComponent;
|
||||||
|
class SHVkCommandBuffer;
|
||||||
|
class SHVkPipeline;
|
||||||
|
class SHVkPipelineLayout;
|
||||||
|
class SHVkRenderpass;
|
||||||
|
class SHSubpass;
|
||||||
|
class SHVkShaderModule;
|
||||||
|
class SHRenderer;
|
||||||
|
class SHParticleEmitterComponent;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class SHParticleSubSystem
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
static constexpr uint32_t EMITTER_WORKGROUP_SIZE = 128;
|
||||||
|
static constexpr uint32_t DYOFF_INDEX_EMITTER = 0;
|
||||||
|
static constexpr uint32_t DYOFF_INDEX_PARTICLE_INPUT = 1;
|
||||||
|
static constexpr uint32_t DYOFF_INDEX_PARTICLE_OUTPUT = 2;
|
||||||
|
static constexpr uint32_t DYOFF_INDEX_INDICES_DATA = 3;
|
||||||
|
static constexpr uint32_t DYOFF_INDEX_DRAW_DATA = 4;
|
||||||
|
|
||||||
|
|
||||||
|
// To hold data for a pipeline and pipeline layout.
|
||||||
|
// We want this here because particles require 3 pipeline sets:
|
||||||
|
// - Rendering
|
||||||
|
// - Emit Compute
|
||||||
|
// - Update Compute
|
||||||
|
struct PipelineData
|
||||||
|
{
|
||||||
|
//! Pipeline
|
||||||
|
Handle<SHVkPipeline> pipeline;
|
||||||
|
|
||||||
|
//! Pipeline layout for pipeline creation
|
||||||
|
Handle<SHVkPipelineLayout> pipelineLayout;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if 0 // not used, mainly for convenience to show what shaders use
|
||||||
|
// Push constant data for emitters
|
||||||
|
struct EmitterShaderPC
|
||||||
|
{
|
||||||
|
//! Emitter position
|
||||||
|
SHVec4 emitterPosition;
|
||||||
|
|
||||||
|
//! emission count for 1 single emission
|
||||||
|
uint32_t emissionCount;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! Logical device for creation and destruction
|
||||||
|
Handle<SHVkLogicalDevice> logicalDevice;
|
||||||
|
|
||||||
|
//! Pipeline data for rendering particles
|
||||||
|
PipelineData renderingPipelineData;
|
||||||
|
|
||||||
|
//! Pipeline data for emitting particles
|
||||||
|
PipelineData emittingPipelineData;
|
||||||
|
|
||||||
|
//! Pipeline data for updating particles
|
||||||
|
PipelineData defaultUpdatePipelineData;
|
||||||
|
|
||||||
|
//! Desc pool for particle component desc set allocation
|
||||||
|
Handle<SHVkDescriptorPool> descPool;
|
||||||
|
|
||||||
|
|
||||||
|
void InitializeComponent (SHParticleEmitterComponent& comp) noexcept;
|
||||||
|
void EmitComponent (Handle<SHVkCommandBuffer> cmdBuffer, SHParticleEmitterComponent& comp, uint32_t frameIndex) noexcept;
|
||||||
|
void UpdateCompoennt(Handle<SHVkCommandBuffer> cmdBuffer, SHParticleEmitterComponent& comp, uint32_t frameIndex) noexcept;
|
||||||
|
void RenderComponent(Handle<SHVkCommandBuffer> cmdBuffer, SHParticleEmitterComponent& comp, uint32_t frameIndex) noexcept;
|
||||||
|
|
||||||
|
public:
|
||||||
|
void Init(Handle<SHVkLogicalDevice> device, Handle<SHVkDescriptorPool> inDescPool, Handle<SHVkRenderpass> compatibleRenderpass, Handle<SHSubpass> subpass, Handle<SHVkShaderModule> VS, Handle<SHVkShaderModule> FS, Handle<SHVkShaderModule> emitCS, Handle<SHVkShaderModule> defaultUpdateCS) noexcept;
|
||||||
|
|
||||||
|
void Run(Handle<SHVkCommandBuffer> cmdBuffer, uint32_t frameIndex, float dt) noexcept;
|
||||||
|
|
||||||
|
void Render(Handle<SHVkCommandBuffer> cmdBuffer, Handle<SHRenderer> renderer, uint32_t frameIndex) noexcept;
|
||||||
|
void Exit(void) noexcept;
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
|
@ -29,6 +29,8 @@ namespace SHADE
|
||||||
|
|
||||||
// Default white color.
|
// Default white color.
|
||||||
color = SHColour::WHITE;
|
color = SHColour::WHITE;
|
||||||
|
|
||||||
|
textSize = SHVec3::One;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTextRenderableComponent::OnDestroy(void)
|
void SHTextRenderableComponent::OnDestroy(void)
|
||||||
|
@ -61,11 +63,16 @@ namespace SHADE
|
||||||
MakeDirty();
|
MakeDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTextRenderableComponent::SetColour(SHColour const& newColor) noexcept
|
void SHTextRenderableComponent::SetColor(SHColour const& newColor) noexcept
|
||||||
{
|
{
|
||||||
color = newColor;
|
color = newColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHTextRenderableComponent::SetTextSize(SHVec3 const& size) noexcept
|
||||||
|
{
|
||||||
|
textSize = size;
|
||||||
|
}
|
||||||
|
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
/*!
|
/*!
|
||||||
|
|
||||||
|
@ -87,11 +94,16 @@ namespace SHADE
|
||||||
return fontHandle;
|
return fontHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
SHADE::SHColour const& SHTextRenderableComponent::GetColour(void) const noexcept
|
SHADE::SHColour const& SHTextRenderableComponent::GetColor(void) const noexcept
|
||||||
{
|
{
|
||||||
return color;
|
return color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SHVec3 const& SHTextRenderableComponent::GetTextSize(void) const noexcept
|
||||||
|
{
|
||||||
|
return textSize;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace rttr
|
namespace rttr
|
||||||
|
|
|
@ -40,6 +40,9 @@ namespace SHADE
|
||||||
//! character position data for each letter in the text
|
//! character position data for each letter in the text
|
||||||
Handle<SHVkBuffer> charPositionDataBuffer;
|
Handle<SHVkBuffer> charPositionDataBuffer;
|
||||||
|
|
||||||
|
//! Text size. Multiplied to TRS.
|
||||||
|
SHVec3 textSize;
|
||||||
|
|
||||||
void MakeDirty (void) noexcept;
|
void MakeDirty (void) noexcept;
|
||||||
void Clean (void) noexcept;
|
void Clean (void) noexcept;
|
||||||
|
|
||||||
|
@ -52,11 +55,13 @@ namespace SHADE
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
void SetText (std::string_view newText) noexcept;
|
void SetText (std::string_view newText) noexcept;
|
||||||
void SetFont(Handle<SHFont> font) noexcept;
|
void SetFont(Handle<SHFont> font) noexcept;
|
||||||
void SetColour(SHColour const& newColor) noexcept;
|
void SetColor(SHColour const& newColor) noexcept;
|
||||||
|
void SetTextSize (SHVec3 const& size) noexcept;
|
||||||
|
|
||||||
std::string const& GetText (void) const noexcept;
|
std::string const& GetText (void) const noexcept;
|
||||||
Handle<SHFont> GetFont (void) const noexcept;
|
Handle<SHFont> GetFont (void) const noexcept;
|
||||||
SHColour const& GetColour (void) const noexcept;
|
SHColour const& GetColor (void) const noexcept;
|
||||||
|
SHVec3 const& GetTextSize (void) const noexcept;
|
||||||
|
|
||||||
friend class SHTextRenderingSubSystem;
|
friend class SHTextRenderingSubSystem;
|
||||||
|
|
||||||
|
|
|
@ -210,10 +210,13 @@ namespace SHADE
|
||||||
cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::CALCULATED_GLYPH_POSITION, comp.charPositionDataBuffer, 0);
|
cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::CALCULATED_GLYPH_POSITION, comp.charPositionDataBuffer, 0);
|
||||||
cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::GLYPH_INDEX, comp.indexingDataBuffer, 0);
|
cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::GLYPH_INDEX, comp.indexingDataBuffer, 0);
|
||||||
|
|
||||||
|
auto const& textSize = comp.textSize;
|
||||||
|
SHMatrix textSizeScale{textSize.x, 0.0f, 0.0f, 0.0f, 0.0f, textSize.y, 0.0f, 0.0f, 0.0f, 0.0f, textSize.z, 0.0f};
|
||||||
|
|
||||||
if (auto* uiComp = SHComponentManager::GetComponent_s<SHUIComponent>(comp.GetEID()))
|
if (auto* uiComp = SHComponentManager::GetComponent_s<SHUIComponent>(comp.GetEID()))
|
||||||
cmdBuffer->SetPushConstantVariable("TestPushConstant.worldTransform", uiComp->GetMatrix(), SH_PIPELINE_TYPE::GRAPHICS);
|
cmdBuffer->SetPushConstantVariable("TestPushConstant.worldTransform", textSizeScale * uiComp->GetMatrix(), SH_PIPELINE_TYPE::GRAPHICS);
|
||||||
else
|
else
|
||||||
cmdBuffer->SetPushConstantVariable("TestPushConstant.worldTransform", transform->GetTRS(), SH_PIPELINE_TYPE::GRAPHICS);
|
cmdBuffer->SetPushConstantVariable("TestPushConstant.worldTransform", textSizeScale * transform->GetTRS(), SH_PIPELINE_TYPE::GRAPHICS);
|
||||||
|
|
||||||
|
|
||||||
cmdBuffer->SetPushConstantVariable("TestPushConstant.eid", comp.GetEID(), SH_PIPELINE_TYPE::GRAPHICS);
|
cmdBuffer->SetPushConstantVariable("TestPushConstant.eid", comp.GetEID(), SH_PIPELINE_TYPE::GRAPHICS);
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace SHADE
|
||||||
//! of the texture library would mean the recreation of the desc set that also
|
//! of the texture library would mean the recreation of the desc set that also
|
||||||
//! involves the generic data, which is bad bad bad. Solution is to separate the
|
//! involves the generic data, which is bad bad bad. Solution is to separate the
|
||||||
//! 2 desc sets.
|
//! 2 desc sets.
|
||||||
static constexpr uint32_t DEFAULT_MAX_TEXTURES = 2000;
|
static constexpr uint32_t DEFAULT_MAX_TEXTURES = 1000;
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
/* Usage Functions */
|
/* Usage Functions */
|
||||||
|
|
|
@ -42,16 +42,26 @@ namespace SHADE
|
||||||
return mesh;
|
return mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
SHVec4 const& SHTrajectoryRenderableComponent::GetStartColor(void) const noexcept
|
SHVec3 const& SHTrajectoryRenderableComponent::GetStartColor(void) const noexcept
|
||||||
{
|
{
|
||||||
return startColor;
|
return startColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
SHVec4 const& SHTrajectoryRenderableComponent::GetEndColor(void) const noexcept
|
SHVec3 const& SHTrajectoryRenderableComponent::GetEndColor(void) const noexcept
|
||||||
{
|
{
|
||||||
return endColor;
|
return endColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float SHTrajectoryRenderableComponent::GetStartAlpha(void) const noexcept
|
||||||
|
{
|
||||||
|
return startAlpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
float SHTrajectoryRenderableComponent::GetEndAlpha(void) const noexcept
|
||||||
|
{
|
||||||
|
return endAlpha;
|
||||||
|
}
|
||||||
|
|
||||||
float SHTrajectoryRenderableComponent::GetColorEvolveRate(void) const noexcept
|
float SHTrajectoryRenderableComponent::GetColorEvolveRate(void) const noexcept
|
||||||
{
|
{
|
||||||
return colorEvolveRate;
|
return colorEvolveRate;
|
||||||
|
@ -67,17 +77,27 @@ namespace SHADE
|
||||||
positions = inPositions;
|
positions = inPositions;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTrajectoryRenderableComponent::SetStartColor(SHVec4 color) noexcept
|
void SHTrajectoryRenderableComponent::SetStartColor(SHVec3 color) noexcept
|
||||||
{
|
{
|
||||||
startColor = color;
|
startColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTrajectoryRenderableComponent::SetEndColor(SHVec4 color) noexcept
|
void SHTrajectoryRenderableComponent::SetEndColor(SHVec3 color) noexcept
|
||||||
{
|
{
|
||||||
endColor = color;
|
endColor = color;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHTrajectoryRenderableComponent::SetStartAlpha(float a) noexcept
|
||||||
|
{
|
||||||
|
startAlpha = a;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SHTrajectoryRenderableComponent::SetEndAlpha(float a) noexcept
|
||||||
|
{
|
||||||
|
endAlpha = a;
|
||||||
|
}
|
||||||
|
|
||||||
void SHTrajectoryRenderableComponent::SetColorEvolveRate(float rate) noexcept
|
void SHTrajectoryRenderableComponent::SetColorEvolveRate(float rate) noexcept
|
||||||
{
|
{
|
||||||
colorEvolveRate = rate;
|
colorEvolveRate = rate;
|
||||||
|
|
|
@ -10,7 +10,7 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
class SHMesh;
|
class SHMesh;
|
||||||
|
|
||||||
class SHTrajectoryRenderableComponent : public SHComponent
|
class SH_API SHTrajectoryRenderableComponent : public SHComponent
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -21,10 +21,16 @@ namespace SHADE
|
||||||
std::vector<SHVec3> positions;
|
std::vector<SHVec3> positions;
|
||||||
|
|
||||||
//! Starting color of the trajectory
|
//! Starting color of the trajectory
|
||||||
SHVec4 startColor;
|
SHVec3 startColor;
|
||||||
|
|
||||||
//! Color the trajectory should evolve to the longer it is
|
//! Color the trajectory should evolve to the longer it is
|
||||||
SHVec4 endColor;
|
SHVec3 endColor;
|
||||||
|
|
||||||
|
//! Starting alpha of the trajectory
|
||||||
|
float startAlpha;
|
||||||
|
|
||||||
|
//! end alpha of the trajectory
|
||||||
|
float endAlpha;
|
||||||
|
|
||||||
//! evolving rate of the color
|
//! evolving rate of the color
|
||||||
float colorEvolveRate;
|
float colorEvolveRate;
|
||||||
|
@ -35,14 +41,18 @@ namespace SHADE
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
void SetMesh(Handle<SHMesh> newMesh) noexcept;
|
void SetMesh(Handle<SHMesh> newMesh) noexcept;
|
||||||
void SetPositions (std::vector<SHVec3> const& inPositions) noexcept;
|
void SetPositions (std::vector<SHVec3> const& inPositions) noexcept;
|
||||||
void SetStartColor(SHVec4 startColor) noexcept;
|
void SetStartColor(SHVec3 startColor) noexcept;
|
||||||
void SetEndColor (SHVec4 endColor) noexcept;
|
void SetEndColor (SHVec3 endColor) noexcept;
|
||||||
void SetColorEvolveRate (float rate) noexcept;
|
void SetStartAlpha(float a) noexcept;
|
||||||
|
void SetEndAlpha (float a) noexcept;
|
||||||
|
void SetColorEvolveRate(float rate) noexcept;
|
||||||
|
|
||||||
std::vector<SHVec3> GetPositions (void) const noexcept;
|
std::vector<SHVec3> GetPositions (void) const noexcept;
|
||||||
Handle<SHMesh> GetMesh (void) const noexcept;
|
Handle<SHMesh> GetMesh (void) const noexcept;
|
||||||
SHVec4 const& GetStartColor (void) const noexcept;
|
SHVec3 const& GetStartColor (void) const noexcept;
|
||||||
SHVec4 const& GetEndColor (void) const noexcept;
|
SHVec3 const& GetEndColor (void) const noexcept;
|
||||||
|
float GetStartAlpha (void) const noexcept;
|
||||||
|
float GetEndAlpha (void) const noexcept;
|
||||||
float GetColorEvolveRate (void) const noexcept;
|
float GetColorEvolveRate (void) const noexcept;
|
||||||
|
|
||||||
void OnCreate(void) override final;
|
void OnCreate(void) override final;
|
||||||
|
|
|
@ -59,8 +59,8 @@ namespace SHADE
|
||||||
.srcColorBlendFactor = vk::BlendFactor::eSrcAlpha,
|
.srcColorBlendFactor = vk::BlendFactor::eSrcAlpha,
|
||||||
.dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha,
|
.dstColorBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha,
|
||||||
.colorBlendOp = vk::BlendOp::eAdd,
|
.colorBlendOp = vk::BlendOp::eAdd,
|
||||||
.srcAlphaBlendFactor = vk::BlendFactor::eOne,
|
.srcAlphaBlendFactor = vk::BlendFactor::eSrcAlpha,
|
||||||
.dstAlphaBlendFactor = vk::BlendFactor::eZero,
|
.dstAlphaBlendFactor = vk::BlendFactor::eOneMinusSrcAlpha,
|
||||||
.alphaBlendOp = vk::BlendOp::eAdd,
|
.alphaBlendOp = vk::BlendOp::eAdd,
|
||||||
.colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA,
|
.colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA,
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,8 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
|
|
||||||
pipeline->GetPipelineState().SetColorBlenState(colorBlendState);
|
pipeline->GetPipelineState().SetColorBlenState(colorBlendState);
|
||||||
|
|
||||||
|
pipeline->ConstructPipeline();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHTrajectoryRenderingSubSystem::Run(uint32_t frameIndex) noexcept
|
void SHTrajectoryRenderingSubSystem::Run(uint32_t frameIndex) noexcept
|
||||||
|
@ -75,21 +77,31 @@ namespace SHADE
|
||||||
auto& comps = SHComponentManager::GetDense<SHTrajectoryRenderableComponent>();
|
auto& comps = SHComponentManager::GetDense<SHTrajectoryRenderableComponent>();
|
||||||
for (auto& comp : comps)
|
for (auto& comp : comps)
|
||||||
{
|
{
|
||||||
comp.SetPositions(std::vector
|
//std::vector<SHVec3> test{};
|
||||||
{
|
//test.resize(10);
|
||||||
SHVec3 {},
|
//float x = 0.0f;
|
||||||
SHVec3 {}
|
//for (auto& vec : test)
|
||||||
});
|
//{
|
||||||
|
// vec = SHVec3(x, 5.0f, 0.0f);
|
||||||
|
// x += 0.5f;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//comp.SetPositions (test);
|
||||||
// If has positions, feed data to buffer.
|
// If has positions, feed data to buffer.
|
||||||
if (comp.HasPositions())
|
if (comp.HasPositions())
|
||||||
{
|
{
|
||||||
|
auto meshHandle = comp.GetMesh();
|
||||||
|
|
||||||
|
// dont do anything if no mesh
|
||||||
|
if (!meshHandle)
|
||||||
|
continue;
|
||||||
|
|
||||||
SHTransformComponent* transform = SHComponentManager::GetComponent_s<SHTransformComponent>(comp.GetEID());
|
SHTransformComponent* transform = SHComponentManager::GetComponent_s<SHTransformComponent>(comp.GetEID());
|
||||||
if (transform)
|
if (transform)
|
||||||
{
|
{
|
||||||
// convenient variable
|
// convenient variable
|
||||||
SHVec4 const& startColor = comp.GetStartColor();
|
SHVec3 const& startColor = comp.GetStartColor();
|
||||||
SHVec4 const& endColor = comp.GetEndColor();
|
SHVec3 const& endColor = comp.GetEndColor();
|
||||||
float colorEvolveRate = comp.GetColorEvolveRate();
|
float colorEvolveRate = comp.GetColorEvolveRate();
|
||||||
|
|
||||||
// trs to be reused
|
// trs to be reused
|
||||||
|
@ -104,7 +116,6 @@ namespace SHADE
|
||||||
// Will be used for baseInstance later
|
// Will be used for baseInstance later
|
||||||
uint32_t oldTransformDataSize = transformData.size();
|
uint32_t oldTransformDataSize = transformData.size();
|
||||||
|
|
||||||
auto meshHandle = comp.GetMesh();
|
|
||||||
|
|
||||||
auto const& positions = comp.GetPositions();
|
auto const& positions = comp.GetPositions();
|
||||||
for (auto& pos : positions)
|
for (auto& pos : positions)
|
||||||
|
@ -117,11 +128,13 @@ namespace SHADE
|
||||||
transformData.push_back(trs);
|
transformData.push_back(trs);
|
||||||
colorData.push_back(currentColor);
|
colorData.push_back(currentColor);
|
||||||
|
|
||||||
// evolve color
|
|
||||||
currentColor = SHVec4::Lerp(startColor, endColor, lerpValue);
|
|
||||||
|
|
||||||
// evolve lerp value and clamp to 1
|
// evolve lerp value and clamp to 1
|
||||||
lerpValue = std::max (1.0f, lerpValue + colorEvolveRate);
|
lerpValue = std::min (1.0f, lerpValue + colorEvolveRate);
|
||||||
|
|
||||||
|
// evolve color
|
||||||
|
currentColor = SHVec3::Lerp(startColor, endColor, lerpValue);
|
||||||
|
currentColor.w = SHMath::Lerp (comp.GetStartAlpha(), comp.GetEndAlpha(), lerpValue);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// add draw data for this trajectory
|
// add draw data for this trajectory
|
||||||
|
@ -172,6 +185,9 @@ namespace SHADE
|
||||||
// Bind color vertex buffer
|
// Bind color vertex buffer
|
||||||
cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRAJECTORY_COLOR, colorBuffer, 0);
|
cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRAJECTORY_COLOR, colorBuffer, 0);
|
||||||
|
|
||||||
|
// Bind transform data
|
||||||
|
cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRAJECTORY_TRANSFORM, transformBuffer, 0);
|
||||||
|
|
||||||
// call draw call
|
// call draw call
|
||||||
cmdBuffer->DrawMultiIndirect(drawDataBuffer, drawData.size());
|
cmdBuffer->DrawMultiIndirect(drawDataBuffer, drawData.size());
|
||||||
|
|
||||||
|
|
|
@ -198,7 +198,8 @@ namespace SHADE
|
||||||
|
|
||||||
void SHWindow::SetMouseVisible(bool show)
|
void SHWindow::SetMouseVisible(bool show)
|
||||||
{
|
{
|
||||||
ShowCursor(show);
|
while(GetMouseVisible() != show)
|
||||||
|
ShowCursor(show);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHWindow::SetMousePosition(int x, int y)
|
void SHWindow::SetMousePosition(int x, int y)
|
||||||
|
|
|
@ -247,6 +247,7 @@ namespace SHADE
|
||||||
AddComponentToComponentNode<SHAnimatorComponent>(components, eid);
|
AddComponentToComponentNode<SHAnimatorComponent>(components, eid);
|
||||||
AddComponentToComponentNode<SHUIComponent>(components, eid);
|
AddComponentToComponentNode<SHUIComponent>(components, eid);
|
||||||
AddComponentToComponentNode<SHAudioListenerComponent>(components, eid);
|
AddComponentToComponentNode<SHAudioListenerComponent>(components, eid);
|
||||||
|
AddComponentToComponentNode<SHTrajectoryRenderableComponent>(components, eid);
|
||||||
|
|
||||||
node[ComponentsNode] = components;
|
node[ComponentsNode] = components;
|
||||||
|
|
||||||
|
@ -308,6 +309,7 @@ namespace SHADE
|
||||||
AddComponentID<SHAnimatorComponent>(componentIDList, componentsNode);
|
AddComponentID<SHAnimatorComponent>(componentIDList, componentsNode);
|
||||||
AddComponentID<SHUIComponent>(componentIDList, componentsNode);
|
AddComponentID<SHUIComponent>(componentIDList, componentsNode);
|
||||||
AddComponentID<SHAudioListenerComponent>(componentIDList, componentsNode);
|
AddComponentID<SHAudioListenerComponent>(componentIDList, componentsNode);
|
||||||
|
AddComponentID<SHTrajectoryRenderableComponent>(componentIDList, componentsNode);
|
||||||
|
|
||||||
return componentIDList;
|
return componentIDList;
|
||||||
}
|
}
|
||||||
|
@ -395,5 +397,6 @@ namespace SHADE
|
||||||
SHSerializationHelper::InitializeComponentFromNode<SHAnimatorComponent>(componentsNode, eid);
|
SHSerializationHelper::InitializeComponentFromNode<SHAnimatorComponent>(componentsNode, eid);
|
||||||
SHSerializationHelper::InitializeComponentFromNode<SHUIComponent>(componentsNode, eid);
|
SHSerializationHelper::InitializeComponentFromNode<SHUIComponent>(componentsNode, eid);
|
||||||
SHSerializationHelper::InitializeComponentFromNode<SHAudioListenerComponent>(componentsNode, eid);
|
SHSerializationHelper::InitializeComponentFromNode<SHAudioListenerComponent>(componentsNode, eid);
|
||||||
|
SHSerializationHelper::InitializeComponentFromNode<SHTrajectoryRenderableComponent>(componentsNode, eid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -207,10 +207,10 @@ namespace SHADE
|
||||||
if constexpr (YAML::HasYAMLConv<ComponentType>())
|
if constexpr (YAML::HasYAMLConv<ComponentType>())
|
||||||
{
|
{
|
||||||
auto component = SHComponentManager::GetComponent_s<ComponentType>(eid);
|
auto component = SHComponentManager::GetComponent_s<ComponentType>(eid);
|
||||||
if (componentsNode.IsNull() || !component)
|
if (!component)
|
||||||
return false;
|
return false;
|
||||||
auto componentNode = GetComponentNode<ComponentType>(componentsNode, eid);
|
auto componentNode = GetComponentNode<ComponentType>(componentsNode, eid);
|
||||||
if (componentNode.IsNull() || !componentNode.IsDefined())
|
if (!componentNode.IsDefined())
|
||||||
return false;
|
return false;
|
||||||
if (componentNode[IsActive.data()].IsDefined())
|
if (componentNode[IsActive.data()].IsDefined())
|
||||||
component->isActive = componentNode[IsActive.data()].as<bool>();
|
component->isActive = componentNode[IsActive.data()].as<bool>();
|
||||||
|
@ -220,7 +220,7 @@ namespace SHADE
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ComponentType* component = SHComponentManager::GetComponent_s<ComponentType>(eid);
|
ComponentType* component = SHComponentManager::GetComponent_s<ComponentType>(eid);
|
||||||
if (componentsNode.IsNull() && !component)
|
if (!component)
|
||||||
return false;
|
return false;
|
||||||
auto rttrType = rttr::type::get<ComponentType>();
|
auto rttrType = rttr::type::get<ComponentType>();
|
||||||
auto componentNode = componentsNode[rttrType.get_name().data()];
|
auto componentNode = componentsNode[rttrType.get_name().data()];
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#include "Graphics/MiddleEnd/TextRendering/SHFont.h"
|
#include "Graphics/MiddleEnd/TextRendering/SHFont.h"
|
||||||
#include "Animation/SHAnimatorComponent.h"
|
#include "Animation/SHAnimatorComponent.h"
|
||||||
#include "Physics/Collision/CollisionTags/SHCollisionTagMatrix.h"
|
#include "Physics/Collision/CollisionTags/SHCollisionTagMatrix.h"
|
||||||
|
#include "Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h"
|
||||||
|
|
||||||
namespace YAML
|
namespace YAML
|
||||||
{
|
{
|
||||||
|
@ -31,6 +32,8 @@ namespace YAML
|
||||||
struct HasYAMLConv<SHTextRenderableComponent> : std::true_type {};
|
struct HasYAMLConv<SHTextRenderableComponent> : std::true_type {};
|
||||||
template<>
|
template<>
|
||||||
struct HasYAMLConv<SHAnimatorComponent> : std::true_type {};
|
struct HasYAMLConv<SHAnimatorComponent> : std::true_type {};
|
||||||
|
template<>
|
||||||
|
struct HasYAMLConv<SHTrajectoryRenderableComponent> : std::true_type {};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
struct convert<SHVec4>
|
struct convert<SHVec4>
|
||||||
|
@ -353,12 +356,15 @@ namespace YAML
|
||||||
{
|
{
|
||||||
static constexpr std::string_view TEXT_YAML_TAG = "Text";
|
static constexpr std::string_view TEXT_YAML_TAG = "Text";
|
||||||
static constexpr std::string_view FONT_YAML_TAG = "Font";
|
static constexpr std::string_view FONT_YAML_TAG = "Font";
|
||||||
|
static constexpr std::string_view COLOR_YAML_TAG = "Color";
|
||||||
|
static constexpr std::string_view TEXT_SIZE_YAML_TAG = "Text Size";
|
||||||
|
|
||||||
static YAML::Node encode(SHTextRenderableComponent const& rhs)
|
static YAML::Node encode(SHTextRenderableComponent const& rhs)
|
||||||
{
|
{
|
||||||
YAML::Node node;
|
YAML::Node node;
|
||||||
node[TEXT_YAML_TAG.data()] = rhs.GetText();
|
node[TEXT_YAML_TAG.data()] = rhs.GetText();
|
||||||
auto font = rhs.GetFont();
|
auto font = rhs.GetFont();
|
||||||
|
SHColour const& textColor = rhs.GetColor();
|
||||||
if (font)
|
if (font)
|
||||||
{
|
{
|
||||||
node[FONT_YAML_TAG.data()] = SHResourceManager::GetAssetID<SHFont>(rhs.GetFont()).value_or(0);
|
node[FONT_YAML_TAG.data()] = SHResourceManager::GetAssetID<SHFont>(rhs.GetFont()).value_or(0);
|
||||||
|
@ -367,6 +373,8 @@ namespace YAML
|
||||||
{
|
{
|
||||||
node[FONT_YAML_TAG.data()] = 0;
|
node[FONT_YAML_TAG.data()] = 0;
|
||||||
}
|
}
|
||||||
|
node[COLOR_YAML_TAG.data()] = SHVec4(textColor);
|
||||||
|
node[TEXT_SIZE_YAML_TAG.data()] = rhs.GetTextSize();
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
static bool decode(YAML::Node const& node, SHTextRenderableComponent& rhs)
|
static bool decode(YAML::Node const& node, SHTextRenderableComponent& rhs)
|
||||||
|
@ -385,6 +393,14 @@ namespace YAML
|
||||||
|
|
||||||
rhs.SetFont(SHResourceManager::LoadOrGet<SHFont>(node[FONT_YAML_TAG.data()].as<AssetID>()));
|
rhs.SetFont(SHResourceManager::LoadOrGet<SHFont>(node[FONT_YAML_TAG.data()].as<AssetID>()));
|
||||||
}
|
}
|
||||||
|
if (node[COLOR_YAML_TAG.data()].IsDefined())
|
||||||
|
{
|
||||||
|
rhs.SetColor(node[COLOR_YAML_TAG.data()].as<SHVec4>());
|
||||||
|
}
|
||||||
|
if (node[TEXT_SIZE_YAML_TAG.data()].IsDefined())
|
||||||
|
{
|
||||||
|
rhs.SetTextSize(node[TEXT_SIZE_YAML_TAG.data()].as<SHVec3>());
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -417,4 +433,50 @@ namespace YAML
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct convert<SHTrajectoryRenderableComponent>
|
||||||
|
{
|
||||||
|
static constexpr std::string_view MESH_YAML_TAG = "Mesh";
|
||||||
|
static constexpr std::string_view START_COLOR_YAML_TAG = "Start Color";
|
||||||
|
static constexpr std::string_view END_COLOR_YAML_TAG = "End Color";
|
||||||
|
static constexpr std::string_view START_ALPHA_YAML_TAG = "Start Alpha";
|
||||||
|
static constexpr std::string_view END_ALPHA_YAML_TAG = "End Alpha";
|
||||||
|
static constexpr std::string_view COLOR_EVAL_RATE_YAML_TAG = "Color Eval Rate ";
|
||||||
|
|
||||||
|
static YAML::Node encode(SHTrajectoryRenderableComponent const& rhs)
|
||||||
|
{
|
||||||
|
YAML::Node node;
|
||||||
|
node[MESH_YAML_TAG.data()] = SHResourceManager::GetAssetID<SHMesh>(rhs.GetMesh()).value_or(0);
|
||||||
|
node[START_COLOR_YAML_TAG.data()] = SHVec3(rhs.GetStartColor());
|
||||||
|
node[START_ALPHA_YAML_TAG.data()] = rhs.GetStartAlpha();
|
||||||
|
node[END_COLOR_YAML_TAG.data()] = SHVec3(rhs.GetEndColor());
|
||||||
|
node[END_ALPHA_YAML_TAG.data()] = rhs.GetEndAlpha();
|
||||||
|
node[COLOR_EVAL_RATE_YAML_TAG.data()] = rhs.GetColorEvolveRate();
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
static bool decode(YAML::Node const& node, SHTrajectoryRenderableComponent& rhs)
|
||||||
|
{
|
||||||
|
if (node[MESH_YAML_TAG.data()].IsDefined())
|
||||||
|
rhs.SetMesh(SHResourceManager::LoadOrGet<SHMesh>(node[MESH_YAML_TAG.data()].as<AssetID>()));
|
||||||
|
|
||||||
|
if (node[START_COLOR_YAML_TAG.data()].IsDefined())
|
||||||
|
rhs.SetStartColor(node[START_COLOR_YAML_TAG.data()].as<SHVec3>());
|
||||||
|
|
||||||
|
if (node[START_ALPHA_YAML_TAG.data()].IsDefined())
|
||||||
|
rhs.SetStartAlpha(node[START_ALPHA_YAML_TAG.data()].as<float>());
|
||||||
|
|
||||||
|
if (node[END_COLOR_YAML_TAG.data()].IsDefined())
|
||||||
|
rhs.SetEndColor(node[END_COLOR_YAML_TAG.data()].as<SHVec3>());
|
||||||
|
|
||||||
|
if (node[END_ALPHA_YAML_TAG.data()].IsDefined())
|
||||||
|
rhs.SetEndAlpha(node[END_ALPHA_YAML_TAG.data()].as<float>());
|
||||||
|
|
||||||
|
if (node[COLOR_EVAL_RATE_YAML_TAG.data()].IsDefined())
|
||||||
|
rhs.SetColorEvolveRate(node[COLOR_EVAL_RATE_YAML_TAG.data()].as<float>());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,6 +124,12 @@ namespace SHADE
|
||||||
audioSys->SetParameter(Convert::ToNative(path).data(), value);
|
audioSys->SetParameter(Convert::ToNative(path).data(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Audio::SetParameterWithLabel(System::String^ path, System::String^ label)
|
||||||
|
{
|
||||||
|
auto audioSys = SHSystemManager::GetSystem<SHAudioSystem>();
|
||||||
|
audioSys->SetParameterWithLabel(Convert::ToNative(path).data(), Convert::ToNative(label).data());
|
||||||
|
}
|
||||||
|
|
||||||
AudioClipHandler Audio::CreateAudioClip(System::String^ path)
|
AudioClipHandler Audio::CreateAudioClip(System::String^ path)
|
||||||
{
|
{
|
||||||
auto audioSys = SHSystemManager::GetSystem<SHAudioSystem>();
|
auto audioSys = SHSystemManager::GetSystem<SHAudioSystem>();
|
||||||
|
|
|
@ -105,6 +105,7 @@ namespace SHADE
|
||||||
static void SetVCAVolume(System::String^ path, float volume);
|
static void SetVCAVolume(System::String^ path, float volume);
|
||||||
static float GetParameterValue(System::String^ path);
|
static float GetParameterValue(System::String^ path);
|
||||||
static void SetParameter(System::String^ path, float value);
|
static void SetParameter(System::String^ path, float value);
|
||||||
|
static void SetParameterWithLabel(System::String^ path, System::String^ label);
|
||||||
|
|
||||||
//to comment ltr
|
//to comment ltr
|
||||||
static AudioClipHandler CreateAudioClip(System::String^ path);
|
static AudioClipHandler CreateAudioClip(System::String^ path);
|
||||||
|
|
|
@ -79,6 +79,11 @@ namespace SHADE
|
||||||
NativeObject->SetParameter(Convert::ToNative(paramName).data(), value);
|
NativeObject->SetParameter(Convert::ToNative(paramName).data(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioClipHandler::SetParameterWithLabel(System::String^ paramName, System::String^ label)
|
||||||
|
{
|
||||||
|
NativeObject->SetParameterWithLabel(Convert::ToNative(paramName).data(), Convert::ToNative(label).data());
|
||||||
|
}
|
||||||
|
|
||||||
float AudioClipHandler::GetParameterValue(System::String^ paramName)
|
float AudioClipHandler::GetParameterValue(System::String^ paramName)
|
||||||
{
|
{
|
||||||
return NativeObject->GetParameterValue(Convert::ToNative(paramName).data());
|
return NativeObject->GetParameterValue(Convert::ToNative(paramName).data());
|
||||||
|
|
|
@ -71,6 +71,7 @@ namespace SHADE
|
||||||
void SetPause(bool pause);
|
void SetPause(bool pause);
|
||||||
bool IsPaused();
|
bool IsPaused();
|
||||||
void SetParameter(System::String^ paramName, float value);
|
void SetParameter(System::String^ paramName, float value);
|
||||||
|
void SetParameterWithLabel(System::String^ paramName, System::String^ label);
|
||||||
float GetParameterValue(System::String^ paramName);
|
float GetParameterValue(System::String^ paramName);
|
||||||
float GetVolume();
|
float GetVolume();
|
||||||
void SetVolume(float volume);
|
void SetVolume(float volume);
|
||||||
|
|
|
@ -59,12 +59,12 @@ namespace SHADE
|
||||||
|
|
||||||
Color TextRenderable::TextColor::get()
|
Color TextRenderable::TextColor::get()
|
||||||
{
|
{
|
||||||
return Convert::ToCLI(GetNativeComponent()->GetColour());
|
return Convert::ToCLI(GetNativeComponent()->GetColor());
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextRenderable::TextColor::set(Color value)
|
void TextRenderable::TextColor::set(Color value)
|
||||||
{
|
{
|
||||||
GetNativeComponent()->SetColour(Convert::ToNative(value));
|
GetNativeComponent()->SetColor(Convert::ToNative(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
#include "SHpch.h"
|
||||||
|
|
||||||
|
#include "TrajectoryRenderable.hxx"
|
||||||
|
#include "Assets/NativeAsset.hxx"
|
||||||
|
#include "Utility/Convert.hxx"
|
||||||
|
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
TrajectoryRenderable::TrajectoryRenderable(Entity entity)
|
||||||
|
:Component(entity)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
MeshAsset TrajectoryRenderable::Mesh::get()
|
||||||
|
{
|
||||||
|
auto mesh = GetNativeComponent()->GetMesh();
|
||||||
|
return mesh ? MeshAsset(mesh) : MeshAsset();
|
||||||
|
}
|
||||||
|
void TrajectoryRenderable::Mesh::set(MeshAsset value)
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
GetNativeComponent()->SetMesh(Handle<SHMesh>());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GetNativeComponent()->SetMesh(value.NativeObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TrajectoryRenderable::StartColor::set(Vector3 val)
|
||||||
|
{
|
||||||
|
GetNativeComponent()->SetStartColor(Convert::ToNative(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 TrajectoryRenderable::StartColor::get()
|
||||||
|
{
|
||||||
|
return Convert::ToCLI(GetNativeComponent()->GetStartColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrajectoryRenderable::EndColor::set(Vector3 val)
|
||||||
|
{
|
||||||
|
GetNativeComponent()->SetEndColor(Convert::ToNative(val));
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector3 TrajectoryRenderable::EndColor::get()
|
||||||
|
{
|
||||||
|
return Convert::ToCLI(GetNativeComponent()->GetEndColor());
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrajectoryRenderable::StartAlpha::set(float val)
|
||||||
|
{
|
||||||
|
GetNativeComponent()->SetStartAlpha(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
float TrajectoryRenderable::StartAlpha::get()
|
||||||
|
{
|
||||||
|
return GetNativeComponent()->GetStartAlpha();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrajectoryRenderable::EndAlpha::set(float val)
|
||||||
|
{
|
||||||
|
GetNativeComponent()->SetEndAlpha(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
float TrajectoryRenderable::EndAlpha::get()
|
||||||
|
{
|
||||||
|
return GetNativeComponent()->GetEndAlpha();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrajectoryRenderable::ColorEvolveRate::set(float val)
|
||||||
|
{
|
||||||
|
GetNativeComponent()->SetColorEvolveRate(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
float TrajectoryRenderable::ColorEvolveRate::get()
|
||||||
|
{
|
||||||
|
return GetNativeComponent()->GetColorEvolveRate();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file TrajectoryRenderable.hxx
|
||||||
|
\author Brandon Mak, brandon.hao,
|
||||||
|
\par email: brandon.hao\@digipen.edu
|
||||||
|
\date 1st March, 2023
|
||||||
|
\brief Contains the definition of the managed Renderable class with the
|
||||||
|
declaration of functions for working with it.
|
||||||
|
|
||||||
|
Note: This file is written in C++17/CLI.
|
||||||
|
|
||||||
|
Copyright (C) 2022 DigiPen Institute of Technology.
|
||||||
|
Reproduction or disclosure of this file or its contents without the prior written consent
|
||||||
|
of DigiPen Institute of Technology is prohibited.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Project Includes
|
||||||
|
#include "Components/Component.hxx"
|
||||||
|
#include "Math/Quaternion.hxx"
|
||||||
|
// External Dependencies
|
||||||
|
#include "Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h"
|
||||||
|
#include "Graphics/Color.hxx"
|
||||||
|
#include "Assets/MeshAsset.hxx"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// CLR version of the SHADE Engine's SHRenderableComponent.
|
||||||
|
/// </summary>
|
||||||
|
public ref class TrajectoryRenderable : public Component<SHTrajectoryRenderableComponent>
|
||||||
|
{
|
||||||
|
internal:
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Constructors */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a Trajectory Renderable Component that represents a native Trajectory Renderable
|
||||||
|
/// component tied to the specified Entity.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">Entity that this Component will be tied to.</param>
|
||||||
|
TrajectoryRenderable(Entity entity);
|
||||||
|
|
||||||
|
public:
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Properties */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Mesh used to render this Renderable.
|
||||||
|
/// </summary>
|
||||||
|
property MeshAsset Mesh
|
||||||
|
{
|
||||||
|
MeshAsset get();
|
||||||
|
void set(MeshAsset value);
|
||||||
|
}
|
||||||
|
|
||||||
|
property Vector3 StartColor
|
||||||
|
{
|
||||||
|
Vector3 get();
|
||||||
|
void set (Vector3 val);
|
||||||
|
}
|
||||||
|
|
||||||
|
property Vector3 EndColor
|
||||||
|
{
|
||||||
|
Vector3 get();
|
||||||
|
void set(Vector3 val);
|
||||||
|
}
|
||||||
|
|
||||||
|
property float StartAlpha
|
||||||
|
{
|
||||||
|
float get();
|
||||||
|
void set (float val);
|
||||||
|
}
|
||||||
|
|
||||||
|
property float EndAlpha
|
||||||
|
{
|
||||||
|
float get();
|
||||||
|
void set(float val);
|
||||||
|
}
|
||||||
|
|
||||||
|
property float ColorEvolveRate
|
||||||
|
{
|
||||||
|
float get();
|
||||||
|
void set(float val);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -77,7 +77,7 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
void Application::IsCursorVisible::set(bool value)
|
void Application::IsCursorVisible::set(bool value)
|
||||||
{
|
{
|
||||||
SHWindow::SetMouseVisible(value);
|
//SHWindow::SetMouseVisible(value);
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Usage Functions */
|
/* Usage Functions */
|
||||||
|
|
|
@ -46,6 +46,8 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
#include "Components\UIElement.hxx"
|
#include "Components\UIElement.hxx"
|
||||||
#include "Components\Canvas.hxx"
|
#include "Components\Canvas.hxx"
|
||||||
#include "Components\Slider.hxx"
|
#include "Components\Slider.hxx"
|
||||||
|
#include "Components\TrajectoryRenderable.hxx"
|
||||||
|
#include "Graphics\MiddleEnd\TrajectoryRendering\SHTrajectoryRenderableComponent.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -335,6 +337,7 @@ namespace SHADE
|
||||||
componentMap.Add(createComponentSet<SHUIComponent, UIElement>());
|
componentMap.Add(createComponentSet<SHUIComponent, UIElement>());
|
||||||
componentMap.Add(createComponentSet<SHCanvasComponent, Canvas>());
|
componentMap.Add(createComponentSet<SHCanvasComponent, Canvas>());
|
||||||
componentMap.Add(createComponentSet<SHSliderComponent, Slider>());
|
componentMap.Add(createComponentSet<SHSliderComponent, Slider>());
|
||||||
|
componentMap.Add(createComponentSet<SHTrajectoryRenderableComponent, TrajectoryRenderable>());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -149,7 +149,7 @@ namespace SHADE
|
||||||
|
|
||||||
void Input::SetMouseCentering(bool state)
|
void Input::SetMouseCentering(bool state)
|
||||||
{
|
{
|
||||||
SHInputManager::SetMouseCentering(state);
|
//SHInputManager::SetMouseCentering(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Input::GetMouseCentering()
|
bool Input::GetMouseCentering()
|
||||||
|
|
Loading…
Reference in New Issue