Refactored Raycasting, Added Layers for Raycasting to C#, Fixed Collision Tag Panel #331
|
@ -363,8 +363,6 @@ MigrationBackup/
|
||||||
|
|
||||||
*.filters
|
*.filters
|
||||||
|
|
||||||
Assets/Editor/Layouts/UserLayout.ini
|
|
||||||
|
|
||||||
JSON/Schemas/Catalog/
|
JSON/Schemas/Catalog/
|
||||||
|
|
||||||
Assets/Editor/Editor.SHConfig
|
Assets/Editor/Editor.SHConfig
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Start in Fullscreen: false
|
Start in Fullscreen: false
|
||||||
Starting Scene ID: 87244611
|
Starting Scene ID: 97158628
|
||||||
Window Size: {x: 1920, y: 1080}
|
Window Size: {x: 1920, y: 1080}
|
||||||
Window Title: SHADE Engine
|
Window Title: SHADE Engine
|
|
@ -0,0 +1,165 @@
|
||||||
|
[Window][MainStatusBar]
|
||||||
|
Pos=0,989
|
||||||
|
Size=1920,20
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][SHEditorMenuBar]
|
||||||
|
Pos=0,48
|
||||||
|
Size=1920,941
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][Hierarchy Panel]
|
||||||
|
Pos=0,187
|
||||||
|
Size=300,802
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x00000004,0
|
||||||
|
|
||||||
|
[Window][Debug##Default]
|
||||||
|
Pos=60,60
|
||||||
|
Size=400,400
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][Inspector]
|
||||||
|
Pos=1604,48
|
||||||
|
Size=316,941
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x00000006,0
|
||||||
|
|
||||||
|
[Window][Profiler]
|
||||||
|
Pos=0,48
|
||||||
|
Size=300,137
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x00000003,0
|
||||||
|
|
||||||
|
[Window][Viewport]
|
||||||
|
Pos=227,48
|
||||||
|
Size=1457,1012
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x0000000B,0
|
||||||
|
|
||||||
|
[Window][ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌð‡Žoû]
|
||||||
|
Pos=60,60
|
||||||
|
Size=32,64
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ]
|
||||||
|
Pos=60,60
|
||||||
|
Size=999,581
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][ð‡–oû]
|
||||||
|
Pos=60,60
|
||||||
|
Size=32,64
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][ÌÌÌÌ]
|
||||||
|
Pos=60,60
|
||||||
|
Size=553,422
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][]
|
||||||
|
Pos=60,60
|
||||||
|
Size=770,394
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][ Viewport]
|
||||||
|
Pos=227,48
|
||||||
|
Size=1457,1012
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x0000000B,0
|
||||||
|
|
||||||
|
[Window][ Viewport]
|
||||||
|
Pos=227,48
|
||||||
|
Size=1457,1012
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x0000000B,0
|
||||||
|
|
||||||
|
[Window][î<>‹ Viewport]
|
||||||
|
Pos=302,48
|
||||||
|
Size=1300,836
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x0000000B,0
|
||||||
|
|
||||||
|
[Window][V]
|
||||||
|
Pos=310,722
|
||||||
|
Size=1501,338
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x00000008,0
|
||||||
|
|
||||||
|
[Window][p›£€Ê]
|
||||||
|
Pos=310,750
|
||||||
|
Size=1501,310
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x0000000A,0
|
||||||
|
|
||||||
|
[Window][ Asset Browser]
|
||||||
|
Pos=302,886
|
||||||
|
Size=1300,103
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x0000000C,0
|
||||||
|
|
||||||
|
[Window][Material Inspector]
|
||||||
|
Pos=1604,48
|
||||||
|
Size=316,941
|
||||||
|
Collapsed=0
|
||||||
|
DockId=0x00000006,1
|
||||||
|
|
||||||
|
[Window][Save scene as...]
|
||||||
|
Pos=1197,693
|
||||||
|
Size=165,120
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][Create New Asset]
|
||||||
|
Pos=896,472
|
||||||
|
Size=464,144
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][Collider Tag Panel]
|
||||||
|
Pos=60,60
|
||||||
|
Size=625,744
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][Input Bindings Panel]
|
||||||
|
Pos=60,60
|
||||||
|
Size=154,204
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Window][Save Scene As]
|
||||||
|
Pos=877,444
|
||||||
|
Size=165,120
|
||||||
|
Collapsed=0
|
||||||
|
|
||||||
|
[Table][0x9D40AE32,17]
|
||||||
|
Column 0 Weight=1.0000
|
||||||
|
Column 1 Weight=1.0000
|
||||||
|
Column 2 Weight=1.0000
|
||||||
|
Column 3 Weight=1.0000
|
||||||
|
Column 4 Weight=1.0000
|
||||||
|
Column 5 Weight=1.0000
|
||||||
|
Column 6 Weight=1.0000
|
||||||
|
Column 7 Weight=1.0000
|
||||||
|
Column 8 Weight=1.0000
|
||||||
|
Column 9 Weight=1.0000
|
||||||
|
Column 10 Weight=1.0000
|
||||||
|
Column 11 Weight=1.0000
|
||||||
|
Column 12 Weight=1.0000
|
||||||
|
Column 13 Weight=1.0000
|
||||||
|
Column 14 Weight=1.0000
|
||||||
|
Column 15 Weight=1.0000
|
||||||
|
Column 16 Weight=1.0000
|
||||||
|
|
||||||
|
[Docking][Data]
|
||||||
|
DockSpace ID=0xC5C9B8AB Window=0xBE4044E9 Pos=0,71 Size=1920,941 Split=X
|
||||||
|
DockNode ID=0x00000005 Parent=0xC5C9B8AB SizeRef=1602,1036 Split=X
|
||||||
|
DockNode ID=0x00000001 Parent=0x00000005 SizeRef=300,1036 Split=Y Selected=0x1E6EB881
|
||||||
|
DockNode ID=0x00000003 Parent=0x00000001 SizeRef=225,147 Selected=0x1E6EB881
|
||||||
|
DockNode ID=0x00000004 Parent=0x00000001 SizeRef=225,863 Selected=0xE096E5AE
|
||||||
|
DockNode ID=0x00000002 Parent=0x00000005 SizeRef=1300,1036 Split=Y Selected=0xB41284E7
|
||||||
|
DockNode ID=0x00000007 Parent=0x00000002 SizeRef=1501,672 Split=Y Selected=0xB41284E7
|
||||||
|
DockNode ID=0x00000009 Parent=0x00000007 SizeRef=1501,700 Split=Y Selected=0xB41284E7
|
||||||
|
DockNode ID=0x0000000B Parent=0x00000009 SizeRef=1501,836 CentralNode=1 Selected=0xB41284E7
|
||||||
|
DockNode ID=0x0000000C Parent=0x00000009 SizeRef=1501,103 Selected=0xB128252A
|
||||||
|
DockNode ID=0x0000000A Parent=0x00000007 SizeRef=1501,310 Selected=0xD446F7B6
|
||||||
|
DockNode ID=0x00000008 Parent=0x00000002 SizeRef=1501,338 Selected=0xD9F31532
|
||||||
|
DockNode ID=0x00000006 Parent=0xC5C9B8AB SizeRef=316,1036 Selected=0xE7039252
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
- VertexShader: 46580970
|
- VertexShader: 46580970
|
||||||
FragmentShader: 35983630
|
FragmentShader: 35983630
|
||||||
SubPass: G-Buffer Write
|
SubPass: UI
|
||||||
Properties:
|
Properties:
|
||||||
data.color: {x: 1, y: 1, z: 1, w: 1}
|
data.color: {x: 1, y: 1, z: 1, w: 1}
|
||||||
data.textureIndex: 54324293
|
data.textureIndex: 54324293
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
- VertexShader: 46580970
|
- VertexShader: 46580970
|
||||||
FragmentShader: 35983630
|
FragmentShader: 35983630
|
||||||
SubPass: G-Buffer Write
|
SubPass: UI
|
||||||
Properties:
|
Properties:
|
||||||
data.color: {x: 1, y: 1, z: 1, w: 1}
|
data.color: {x: 1, y: 1, z: 1, w: 1}
|
||||||
data.textureIndex: 54429632
|
data.textureIndex: 54429632
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
- VertexShader: 46580970
|
- VertexShader: 46580970
|
||||||
FragmentShader: 35983630
|
FragmentShader: 35983630
|
||||||
SubPass: G-Buffer Write
|
SubPass: UI
|
||||||
Properties:
|
Properties:
|
||||||
data.color: {x: 1, y: 1, z: 1, w: 1}
|
data.color: {x: 1, y: 1, z: 1, w: 1}
|
||||||
data.textureIndex: 57302694
|
data.textureIndex: 57302694
|
||||||
|
|
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -0,0 +1,10 @@
|
||||||
|
Name: MD_CarRed
|
||||||
|
ID: 76808537
|
||||||
|
Type: 4
|
||||||
|
Sub Assets:
|
||||||
|
Name: CarBody
|
||||||
|
ID: 135736753
|
||||||
|
Type: 8
|
||||||
|
Name: CarWindows
|
||||||
|
ID: 139618182
|
||||||
|
Type: 8
|
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -0,0 +1,22 @@
|
||||||
|
Name: MD_Prop_Large_Watermelon
|
||||||
|
ID: 70609427
|
||||||
|
Type: 4
|
||||||
|
Sub Assets:
|
||||||
|
Name: Watermelon_Unbroken
|
||||||
|
ID: 134305891
|
||||||
|
Type: 8
|
||||||
|
Name: Watermelon_Broken01
|
||||||
|
ID: 144023586
|
||||||
|
Type: 8
|
||||||
|
Name: Watermelon_Broken02
|
||||||
|
ID: 142132679
|
||||||
|
Type: 8
|
||||||
|
Name: Watermelon_Broken03
|
||||||
|
ID: 138231239
|
||||||
|
Type: 8
|
||||||
|
Name: Watermelon_Broken04
|
||||||
|
ID: 135293480
|
||||||
|
Type: 8
|
||||||
|
Name: Watermelon_Broken05
|
||||||
|
ID: 146157335
|
||||||
|
Type: 8
|
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -0,0 +1,19 @@
|
||||||
|
Name: MD_Prop_Small_Egg
|
||||||
|
ID: 78383364
|
||||||
|
Type: 4
|
||||||
|
Sub Assets:
|
||||||
|
Name: Egg_Unbroken
|
||||||
|
ID: 147457317
|
||||||
|
Type: 8
|
||||||
|
Name: Egg._Broken01
|
||||||
|
ID: 134900190
|
||||||
|
Type: 8
|
||||||
|
Name: Egg._Broken02
|
||||||
|
ID: 146271645
|
||||||
|
Type: 8
|
||||||
|
Name: Egg._Broken03
|
||||||
|
ID: 135945648
|
||||||
|
Type: 8
|
||||||
|
Name: Egg._Broken04
|
||||||
|
ID: 141722646
|
||||||
|
Type: 8
|
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -0,0 +1,19 @@
|
||||||
|
Name: MD_TutorialGarageProps01
|
||||||
|
ID: 75936469
|
||||||
|
Type: 4
|
||||||
|
Sub Assets:
|
||||||
|
Name: MetalShelf
|
||||||
|
ID: 141619727
|
||||||
|
Type: 8
|
||||||
|
Name: Chair01.001
|
||||||
|
ID: 139750047
|
||||||
|
Type: 8
|
||||||
|
Name: Cube.002
|
||||||
|
ID: 137072050
|
||||||
|
Type: 8
|
||||||
|
Name: Cube.003
|
||||||
|
ID: 149524108
|
||||||
|
Type: 8
|
||||||
|
Name: GarageDoor
|
||||||
|
ID: 148373587
|
||||||
|
Type: 8
|
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -0,0 +1,10 @@
|
||||||
|
Name: MD_TutorialGarageProps02
|
||||||
|
ID: 79889545
|
||||||
|
Type: 4
|
||||||
|
Sub Assets:
|
||||||
|
Name: CupboardSolidBlock.001
|
||||||
|
ID: 141180771
|
||||||
|
Type: 8
|
||||||
|
Name: CupboardSinkPiece.002
|
||||||
|
ID: 141816633
|
||||||
|
Type: 8
|
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -0,0 +1,10 @@
|
||||||
|
Name: MD_WashingMachine
|
||||||
|
ID: 67614549
|
||||||
|
Type: 4
|
||||||
|
Sub Assets:
|
||||||
|
Name: WashingMachine
|
||||||
|
ID: 138744683
|
||||||
|
Type: 8
|
||||||
|
Name: WashingMachineDoor
|
||||||
|
ID: 139502794
|
||||||
|
Type: 8
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,3 @@
|
||||||
|
Name: Level1Scene
|
||||||
|
ID: 96668835
|
||||||
|
Type: 5
|
|
@ -8466,7 +8466,7 @@
|
||||||
- EID: 240
|
- EID: 240
|
||||||
Name: ====ItemPool====
|
Name: ====ItemPool====
|
||||||
IsActive: true
|
IsActive: true
|
||||||
NumberOfChildren: 9
|
NumberOfChildren: 11
|
||||||
Components: ~
|
Components: ~
|
||||||
Scripts: ~
|
Scripts: ~
|
||||||
- EID: 241
|
- EID: 241
|
||||||
|
@ -8514,6 +8514,8 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 50
|
Score: 50
|
||||||
currCategory: 1
|
currCategory: 1
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
- EID: 157
|
- EID: 157
|
||||||
Name: Mesh_Meat
|
Name: Mesh_Meat
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8559,6 +8561,8 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 50
|
Score: 50
|
||||||
currCategory: 1
|
currCategory: 1
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
- EID: 156
|
- EID: 156
|
||||||
Name: Mesh_Meat
|
Name: Mesh_Meat
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8604,6 +8608,8 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 50
|
Score: 50
|
||||||
currCategory: 1
|
currCategory: 1
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
- EID: 155
|
- EID: 155
|
||||||
Name: Mesh_Cheese
|
Name: Mesh_Cheese
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8649,6 +8655,8 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 100
|
Score: 100
|
||||||
currCategory: 2
|
currCategory: 2
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
- EID: 154
|
- EID: 154
|
||||||
Name: Mesh_Cheese
|
Name: Mesh_Cheese
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8694,6 +8702,8 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 100
|
Score: 100
|
||||||
currCategory: 2
|
currCategory: 2
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
- EID: 153
|
- EID: 153
|
||||||
Name: Mesh_Cheese
|
Name: Mesh_Cheese
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8739,6 +8749,8 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 100
|
Score: 100
|
||||||
currCategory: 2
|
currCategory: 2
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
- EID: 65778
|
- EID: 65778
|
||||||
Name: Mesh_Apple
|
Name: Mesh_Apple
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8784,6 +8796,8 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 10
|
Score: 10
|
||||||
currCategory: 0
|
currCategory: 0
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
- EID: 152
|
- EID: 152
|
||||||
Name: Mesh_Apple
|
Name: Mesh_Apple
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8829,6 +8843,8 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 10
|
Score: 10
|
||||||
currCategory: 0
|
currCategory: 0
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
- EID: 151
|
- EID: 151
|
||||||
Name: Mesh_Apple
|
Name: Mesh_Apple
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8874,6 +8890,509 @@
|
||||||
Enabled: true
|
Enabled: true
|
||||||
Score: 10
|
Score: 10
|
||||||
currCategory: 0
|
currCategory: 0
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
|
- EID: 65686
|
||||||
|
Name: Watermelon
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 5
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 2.44600534, y: 0.333341181, z: 6.14019775}
|
||||||
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
|
Scale: {x: 0.999979734, y: 1, z: 0.999979734}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 134305891
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Sphere
|
||||||
|
Radius: 0.5
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
|
IsActive: true
|
||||||
|
Scripts:
|
||||||
|
- Type: Breakable
|
||||||
|
Enabled: true
|
||||||
|
threshHold: 2
|
||||||
|
ignoreRaccoon: true
|
||||||
|
- Type: Item
|
||||||
|
Enabled: true
|
||||||
|
Score: 100
|
||||||
|
currCategory: 2
|
||||||
|
density: 1
|
||||||
|
dontReturn: false
|
||||||
|
- EID: 131220
|
||||||
|
Name: Piece1
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -0.0219824314, y: 2.77459621e-05, z: 0.140744686}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 144023586
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.25, y: 0.25, z: 0.100000001}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0.164060935, y: 0, z: 0}
|
||||||
|
IsActive: true
|
||||||
|
Scripts:
|
||||||
|
- Type: Item
|
||||||
|
Enabled: true
|
||||||
|
Score: 10
|
||||||
|
currCategory: 1
|
||||||
|
density: 5
|
||||||
|
dontReturn: false
|
||||||
|
- EID: 131219
|
||||||
|
Name: Piece2
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0.0213363171, y: 0.0825135708, z: -0.0573720932}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 142132679
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.300000012, y: 0.200000003, z: 0.200000003}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: -0.34906584}
|
||||||
|
IsActive: true
|
||||||
|
Scripts:
|
||||||
|
- Type: Item
|
||||||
|
Enabled: true
|
||||||
|
Score: 10
|
||||||
|
currCategory: 1
|
||||||
|
density: 5
|
||||||
|
dontReturn: false
|
||||||
|
- EID: 131221
|
||||||
|
Name: Piece3
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -0.0268242359, y: -0.140726641, z: -0.0336794853}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 138231239
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.200000003, y: 0.0799999982, z: 0.200000003}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: -0.261799395}
|
||||||
|
IsActive: true
|
||||||
|
Scripts:
|
||||||
|
- Type: Item
|
||||||
|
Enabled: true
|
||||||
|
Score: 10
|
||||||
|
currCategory: 1
|
||||||
|
density: 5
|
||||||
|
dontReturn: false
|
||||||
|
- EID: 145
|
||||||
|
Name: Piece4
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -0.194803953, y: -0.0580093563, z: -0.00789308548}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 135293480
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.200000003, y: 0.0500000007, z: 0.200000003}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: -1.04719758}
|
||||||
|
IsActive: true
|
||||||
|
Scripts:
|
||||||
|
- Type: Item
|
||||||
|
Enabled: true
|
||||||
|
Score: 10
|
||||||
|
currCategory: 1
|
||||||
|
density: 5
|
||||||
|
dontReturn: false
|
||||||
|
- EID: 196754
|
||||||
|
Name: Piece5
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -0.0839636326, y: 0.175804704, z: 0.0484313965}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 146157335
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.25, y: 0.0500000007, z: 0.200000003}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: 0.436332315}
|
||||||
|
IsActive: true
|
||||||
|
Scripts:
|
||||||
|
- Type: Item
|
||||||
|
Enabled: true
|
||||||
|
Score: 10
|
||||||
|
currCategory: 1
|
||||||
|
density: 5
|
||||||
|
dontReturn: false
|
||||||
|
- EID: 144
|
||||||
|
Name: Egg
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 4
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 3.11708331, y: 0.333341181, z: 6.14019775}
|
||||||
|
Rotate: {x: 0, y: 0, z: 0}
|
||||||
|
Scale: {x: 0.999979734, y: 1, z: 0.999979734}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 147457317
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Sphere
|
||||||
|
Radius: 0.075000003
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: 0}
|
||||||
|
IsActive: true
|
||||||
|
Scripts:
|
||||||
|
- Type: Breakable
|
||||||
|
Enabled: true
|
||||||
|
threshHold: 1
|
||||||
|
ignoreRaccoon: true
|
||||||
|
- Type: Item
|
||||||
|
Enabled: true
|
||||||
|
Score: 10
|
||||||
|
currCategory: 0
|
||||||
|
density: 80
|
||||||
|
dontReturn: false
|
||||||
|
- EID: 143
|
||||||
|
Name: Piece1
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0.0224030018, y: 0.0607728958, z: -0.00627422333}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 134900190
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.0500000007, y: 0.0500000007, z: 0.0500000007}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0.164060935, y: 0, z: 0}
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 142
|
||||||
|
Name: Piece2
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -0.00627422333, y: 0.0337567925, z: -0.00243234634}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 146271645
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.0500000007, y: 0.0500000007, z: 0.0500000007}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: -0.34906584}
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 141
|
||||||
|
Name: Piece3
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: -0.0166685581, y: -0.0367090404, z: 0.0114421844}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 135945648
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.0500000007, y: 0.0500000007, z: 0.0500000007}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: -0.261799395}
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
|
- EID: 140
|
||||||
|
Name: Piece4
|
||||||
|
IsActive: true
|
||||||
|
NumberOfChildren: 0
|
||||||
|
Components:
|
||||||
|
Transform Component:
|
||||||
|
Translate: {x: 0.020128727, y: -0.0155199468, z: -0.0045747757}
|
||||||
|
Rotate: {x: 0, y: 3.6088712e-09, z: 1.97286229e-16}
|
||||||
|
Scale: {x: 1, y: 1, z: 1}
|
||||||
|
IsActive: true
|
||||||
|
Renderable Component:
|
||||||
|
Mesh: 141722646
|
||||||
|
Material: 131956078
|
||||||
|
IsActive: true
|
||||||
|
RigidBody Component:
|
||||||
|
Type: Dynamic
|
||||||
|
Drag: 0.00999999978
|
||||||
|
Angular Drag: 0.00999999978
|
||||||
|
Use Gravity: true
|
||||||
|
Interpolate: true
|
||||||
|
Sleeping Enabled: true
|
||||||
|
Freeze Position X: false
|
||||||
|
Freeze Position Y: false
|
||||||
|
Freeze Position Z: false
|
||||||
|
Freeze Rotation X: false
|
||||||
|
Freeze Rotation Y: false
|
||||||
|
Freeze Rotation Z: false
|
||||||
|
IsActive: true
|
||||||
|
Collider Component:
|
||||||
|
Colliders:
|
||||||
|
- Is Trigger: false
|
||||||
|
Collision Tag: 1
|
||||||
|
Type: Box
|
||||||
|
Half Extents: {x: 0.0500000007, y: 0.0500000007, z: 0.0500000007}
|
||||||
|
Friction: 0.400000006
|
||||||
|
Bounciness: 0
|
||||||
|
Density: 1
|
||||||
|
Position Offset: {x: 0, y: 0, z: 0}
|
||||||
|
Rotation Offset: {x: 0, y: 0, z: -1.04719758}
|
||||||
|
IsActive: true
|
||||||
|
Scripts: ~
|
||||||
- EID: 15
|
- EID: 15
|
||||||
Name: ====ScoreZonePool====
|
Name: ====ScoreZonePool====
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -8966,8 +9485,6 @@
|
||||||
Scripts:
|
Scripts:
|
||||||
- Type: GameManager
|
- Type: GameManager
|
||||||
Enabled: true
|
Enabled: true
|
||||||
itemPool: 240
|
|
||||||
zonePool: 15
|
|
||||||
winScene: 92009475
|
winScene: 92009475
|
||||||
loseScene: 91685359
|
loseScene: 91685359
|
||||||
currGameState: 0
|
currGameState: 0
|
||||||
|
@ -9087,7 +9604,7 @@
|
||||||
NumberOfChildren: 0
|
NumberOfChildren: 0
|
||||||
Components:
|
Components:
|
||||||
Transform Component:
|
Transform Component:
|
||||||
Translate: {x: 0, y: 0.700000048, z: 0.200000286}
|
Translate: {x: 0, y: 0.899999976, z: 0.200000286}
|
||||||
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
|
||||||
|
@ -9206,7 +9723,7 @@
|
||||||
- Type: Breakable
|
- Type: Breakable
|
||||||
Enabled: true
|
Enabled: true
|
||||||
threshHold: 0.100000001
|
threshHold: 0.100000001
|
||||||
force: 1
|
ignoreRaccoon: false
|
||||||
- EID: 196
|
- EID: 196
|
||||||
Name: Piece1
|
Name: Piece1
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -9415,7 +9932,7 @@
|
||||||
- Type: Breakable
|
- Type: Breakable
|
||||||
Enabled: true
|
Enabled: true
|
||||||
threshHold: 0.100000001
|
threshHold: 0.100000001
|
||||||
force: 1
|
ignoreRaccoon: false
|
||||||
- EID: 65703
|
- EID: 65703
|
||||||
Name: Piece1
|
Name: Piece1
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
@ -9624,7 +10141,7 @@
|
||||||
- Type: Breakable
|
- Type: Breakable
|
||||||
Enabled: true
|
Enabled: true
|
||||||
threshHold: 0.100000001
|
threshHold: 0.100000001
|
||||||
force: 1
|
ignoreRaccoon: false
|
||||||
- EID: 65708
|
- EID: 65708
|
||||||
Name: Piece1
|
Name: Piece1
|
||||||
IsActive: true
|
IsActive: true
|
||||||
|
|
|
@ -95,6 +95,9 @@ public partial class LeafAttack : BehaviourTreeNode
|
||||||
//Catch player when in range for long enough
|
//Catch player when in range for long enough
|
||||||
//Debug.Log("Success: Caught");
|
//Debug.Log("Success: Caught");
|
||||||
player.GetScript<PlayerController>().currentState = PlayerController.RaccoonStates.CAUGHT;
|
player.GetScript<PlayerController>().currentState = PlayerController.RaccoonStates.CAUGHT;
|
||||||
|
if (player.GetScript<PlayerController>().stateMachine && !player.GetScript<PlayerController>().stateMachine.IsState(typeof(PlayerCaughtState)))
|
||||||
|
player.GetScript<PlayerController>().stateMachine.SetState(typeof(PlayerCaughtState));
|
||||||
|
|
||||||
status = BehaviourTreeNodeStatus.SUCCESS;
|
status = BehaviourTreeNodeStatus.SUCCESS;
|
||||||
onExit(BehaviourTreeNodeStatus.SUCCESS);
|
onExit(BehaviourTreeNodeStatus.SUCCESS);
|
||||||
return status;
|
return status;
|
||||||
|
|
|
@ -7,12 +7,13 @@ using System.Xml.Linq;
|
||||||
public class Breakable : Script
|
public class Breakable : Script
|
||||||
{
|
{
|
||||||
public float threshHold = 1.0f;
|
public float threshHold = 1.0f;
|
||||||
public float force = 2.0f;
|
public bool ignoreRaccoon = false;
|
||||||
private RigidBody rb;
|
private RigidBody rb;
|
||||||
private Transform trans;
|
private Transform trans;
|
||||||
private bool isBreak = false;
|
public bool isBreak { get; set; }
|
||||||
private List<GameObject> itemPieces = new List<GameObject>();
|
private List<GameObject> itemPieces = new List<GameObject>();
|
||||||
private Random ran = new Random();
|
private Random ran = new Random();
|
||||||
|
|
||||||
protected override void awake()
|
protected override void awake()
|
||||||
{
|
{
|
||||||
rb = GetComponent<RigidBody>();
|
rb = GetComponent<RigidBody>();
|
||||||
|
@ -28,6 +29,8 @@ public class Breakable : Script
|
||||||
itemPieces.Add(pieces);
|
itemPieces.Add(pieces);
|
||||||
pieces.SetActive(false);
|
pieces.SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isBreak = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void update()
|
protected override void update()
|
||||||
|
@ -38,9 +41,14 @@ public class Breakable : Script
|
||||||
|
|
||||||
protected override void onCollisionEnter(CollisionInfo info)
|
protected override void onCollisionEnter(CollisionInfo info)
|
||||||
{
|
{
|
||||||
|
if (ignoreRaccoon && info.GameObject.GetScript<PlayerController>())
|
||||||
|
return;
|
||||||
|
|
||||||
if (rb.LinearVelocity.GetSqrMagnitude() > threshHold)
|
if (rb.LinearVelocity.GetSqrMagnitude() > threshHold)
|
||||||
{
|
{
|
||||||
isBreak = true;
|
isBreak = true;
|
||||||
|
if(GameObject.GetScript<Item>())
|
||||||
|
GameManager.Instance.totalItemCount -= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected override void onTriggerEnter(CollisionInfo info)
|
protected override void onTriggerEnter(CollisionInfo info)
|
||||||
|
@ -54,12 +62,14 @@ public class Breakable : Script
|
||||||
{
|
{
|
||||||
item.SetActive(true);
|
item.SetActive(true);
|
||||||
item.GetComponent<Transform>().GlobalPosition = trans.LocalPosition + item.GetComponent<Transform>().LocalPosition;
|
item.GetComponent<Transform>().GlobalPosition = trans.LocalPosition + item.GetComponent<Transform>().LocalPosition;
|
||||||
|
if (item.GetScript<Item>())
|
||||||
|
GameManager.Instance.totalItemCount += 1;
|
||||||
GameObject gO = item;
|
GameObject gO = item;
|
||||||
gO.Parent = GameObject.Null;
|
gO.Parent = GameObject.Null;
|
||||||
}
|
}
|
||||||
|
|
||||||
isBreak = false;
|
isBreak = false;
|
||||||
Audio.PlaySFXOnce2D("event:/Props/impact_break");
|
Audio.PlaySFXOnce2D("event:/Props/impact_break");
|
||||||
Owner.SetActive(false);
|
GameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -12,33 +12,65 @@ public class Item : Script
|
||||||
public int Score = 10;
|
public int Score = 10;
|
||||||
|
|
||||||
public ItemCategory currCategory;
|
public ItemCategory currCategory;
|
||||||
private RigidBody rb;
|
public bool returnBack { get; set; }
|
||||||
private bool once = false;
|
private Transform transform;
|
||||||
|
private bool playSound = false;
|
||||||
|
private bool caputurePos = false;
|
||||||
|
private Vector3 firstPostion;
|
||||||
|
private Collider collider;
|
||||||
|
public float density = 1.0f;
|
||||||
|
public bool dontReturn = false;
|
||||||
|
|
||||||
protected override void awake()
|
protected override void awake()
|
||||||
{
|
{
|
||||||
rb = GetComponent<RigidBody>();
|
transform = GetComponent<Transform>();
|
||||||
|
collider = GetComponent<Collider>();
|
||||||
|
if(collider)
|
||||||
|
collider.GetCollisionShape(0).Density = density;
|
||||||
|
|
||||||
|
returnBack = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void start()
|
||||||
|
{
|
||||||
|
GameManager.Instance.totalItemCount += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
|
if (returnBack && !dontReturn)
|
||||||
|
{
|
||||||
|
transform.LocalPosition = firstPostion;
|
||||||
|
returnBack = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void onCollisionEnter(CollisionInfo info)
|
protected override void onCollisionEnter(CollisionInfo info)
|
||||||
{
|
{
|
||||||
if (once)
|
if (!caputurePos)
|
||||||
|
{
|
||||||
|
firstPostion = transform.LocalPosition;
|
||||||
|
caputurePos = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playSound)
|
||||||
{
|
{
|
||||||
if(currCategory == ItemCategory.LIGHT)
|
if(currCategory == ItemCategory.LIGHT)
|
||||||
Audio.PlaySFXOnce2D("event:/Props/impact_elastic");
|
Audio.PlaySFXOnce2D("event:/Props/impact_elastic");
|
||||||
else if (currCategory == ItemCategory.MEDIUM || currCategory == ItemCategory.HEAVY)
|
else if (currCategory == ItemCategory.MEDIUM || currCategory == ItemCategory.HEAVY)
|
||||||
Audio.PlaySFXOnce2D("event:/Props/impact_hard");
|
Audio.PlaySFXOnce2D("event:/Props/impact_hard");
|
||||||
once = false;
|
playSound = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.GameObject.GetScript<Homeowner1>())
|
||||||
|
{
|
||||||
|
returnBack = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void onCollisionExit(CollisionInfo info)
|
protected override void onCollisionExit(CollisionInfo info)
|
||||||
{
|
{
|
||||||
once = true;
|
playSound = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -235,7 +235,6 @@ public class PickAndThrow : Script
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ public class PlayerController : Script
|
||||||
public Camera cam { get; set; }
|
public Camera cam { get; set; }
|
||||||
public CameraArm camArm { get; set; }
|
public CameraArm camArm { get; set; }
|
||||||
private PickAndThrow pat;
|
private PickAndThrow pat;
|
||||||
private StateMachine stateMachine;
|
public StateMachine stateMachine;
|
||||||
|
|
||||||
public bool holdItem { get; set; }
|
public bool holdItem { get; set; }
|
||||||
public bool isAiming { get; set; }
|
public bool isAiming { get; set; }
|
||||||
|
@ -370,6 +370,13 @@ public class PlayerController : Script
|
||||||
if (stateMachine && !stateMachine.IsState(typeof(PlayerIdleState)))
|
if (stateMachine && !stateMachine.IsState(typeof(PlayerIdleState)))
|
||||||
stateMachine.SetState(typeof(PlayerIdleState));
|
stateMachine.SetState(typeof(PlayerIdleState));
|
||||||
tranform.LocalPosition = respawnPoint.GetComponent<Transform>().LocalPosition;
|
tranform.LocalPosition = respawnPoint.GetComponent<Transform>().LocalPosition;
|
||||||
|
|
||||||
|
if (pat && pat.item.GetScript<Item>())
|
||||||
|
{
|
||||||
|
holdItem = false;
|
||||||
|
isAiming = false;
|
||||||
|
pat.item.GetScript<Item>().returnBack = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,9 +11,6 @@ public class GameManager : Script
|
||||||
LOSE
|
LOSE
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameObject itemPool;
|
|
||||||
public GameObject zonePool;
|
|
||||||
|
|
||||||
public uint winScene = 92009475;
|
public uint winScene = 92009475;
|
||||||
public uint loseScene = 91685359;
|
public uint loseScene = 91685359;
|
||||||
|
|
||||||
|
@ -26,49 +23,29 @@ public class GameManager : Script
|
||||||
[NonSerialized]
|
[NonSerialized]
|
||||||
public float timer;
|
public float timer;
|
||||||
|
|
||||||
private IEnumerable<Item> listOfItems;
|
|
||||||
private IEnumerable<ScoringZone> listOfZone;
|
|
||||||
|
|
||||||
public GameObject scoreText;
|
public GameObject scoreText;
|
||||||
public GameObject timeText;
|
public GameObject timeText;
|
||||||
|
|
||||||
private bool once = true;
|
public static GameManager Instance { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
protected override void awake()
|
protected override void awake()
|
||||||
{
|
{
|
||||||
|
if (Instance != null && Instance != this)
|
||||||
|
RemoveScript<GameManager>();
|
||||||
|
else
|
||||||
|
Instance = this;
|
||||||
|
|
||||||
Audio.PlayBGMOnce2D("event:/Music/player_undetected");
|
Audio.PlayBGMOnce2D("event:/Music/player_undetected");
|
||||||
Audio.PlayBGMOnce2D("event:/Ambience/roomtone_kitchen");
|
Audio.PlayBGMOnce2D("event:/Ambience/roomtone_kitchen");
|
||||||
totalItemCount = 0;
|
totalItemCount = 0;
|
||||||
Score = 0;
|
Score = 0;
|
||||||
currGameState = GameState.START;
|
currGameState = GameState.START;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void update()
|
protected override void update()
|
||||||
{
|
{
|
||||||
Cheats();
|
Cheats();
|
||||||
|
|
||||||
if (once)
|
|
||||||
{
|
|
||||||
if (itemPool)
|
|
||||||
{
|
|
||||||
listOfItems = itemPool.GetScriptsInChildren<Item>();
|
|
||||||
if (listOfItems != null)
|
|
||||||
foreach (Item i in listOfItems)
|
|
||||||
totalItemCount += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zonePool)
|
|
||||||
{
|
|
||||||
listOfZone = zonePool.GetScriptsInChildren<ScoringZone>();
|
|
||||||
if (listOfZone != null)
|
|
||||||
foreach (ScoringZone sz in listOfZone)
|
|
||||||
sz.gameManger = Owner.GetScript<GameManager>();
|
|
||||||
}
|
|
||||||
once = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (currGameState == GameState.START)
|
if (currGameState == GameState.START)
|
||||||
{
|
{
|
||||||
timer -= Time.DeltaTimeF;
|
timer -= Time.DeltaTimeF;
|
||||||
|
@ -77,7 +54,7 @@ public class GameManager : Script
|
||||||
if(timeText)
|
if(timeText)
|
||||||
timeText.GetComponent<TextRenderable>().Text = $"Time Left: {timer.ToString("0.00")}";
|
timeText.GetComponent<TextRenderable>().Text = $"Time Left: {timer.ToString("0.00")}";
|
||||||
|
|
||||||
if ((timer > 0 && totalItemCount <= 0) || Input.GetKeyDown(Input.KeyCode.F1))
|
if ((timer > 0 && totalItemCount < 0) || Input.GetKeyDown(Input.KeyCode.F1))
|
||||||
{
|
{
|
||||||
currGameState = GameState.WIN;
|
currGameState = GameState.WIN;
|
||||||
Audio.StopAllSounds();
|
Audio.StopAllSounds();
|
||||||
|
@ -94,6 +71,12 @@ public class GameManager : Script
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void onDestroy()
|
||||||
|
{
|
||||||
|
if (Instance == this)
|
||||||
|
Instance = null;
|
||||||
|
}
|
||||||
|
|
||||||
private void Cheats()
|
private void Cheats()
|
||||||
{
|
{
|
||||||
if (Input.GetKeyDown(Input.KeyCode.Escape))
|
if (Input.GetKeyDown(Input.KeyCode.Escape))
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
using System;
|
using System;
|
||||||
public class ScoringZone : Script
|
public class ScoringZone : Script
|
||||||
{
|
{
|
||||||
public GameManager gameManger { get; set; }
|
|
||||||
|
|
||||||
protected override void awake()
|
protected override void awake()
|
||||||
{
|
{
|
||||||
|
@ -10,11 +9,11 @@ public class ScoringZone : Script
|
||||||
|
|
||||||
protected override void onTriggerEnter(CollisionInfo info)
|
protected override void onTriggerEnter(CollisionInfo info)
|
||||||
{
|
{
|
||||||
if (gameManger && info.GameObject.GetScript<Item>())
|
if (GameManager.Instance && info.GameObject.GetScript<Item>())
|
||||||
{
|
{
|
||||||
Audio.PlaySFXOnce2D("event:/Music/stingers/item_scored");
|
Audio.PlaySFXOnce2D("event:/Music/stingers/item_scored");
|
||||||
gameManger.Score += info.GameObject.GetScript<Item>().Score;
|
GameManager.Instance.Score += info.GameObject.GetScript<Item>().Score;
|
||||||
gameManger.totalItemCount -= 1;
|
GameManager.Instance.totalItemCount -= 1;
|
||||||
info.GameObject.SetActive(false);
|
info.GameObject.SetActive(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,18 +33,11 @@ layout (std430, set = 2, binding = 0) buffer MaterialProperties // For mater
|
||||||
MatPropData data[];
|
MatPropData data[];
|
||||||
} MatProp;
|
} MatProp;
|
||||||
|
|
||||||
layout(location = 0) out vec4 position;
|
layout(location = 0) out vec4 fragColor;
|
||||||
layout(location = 1) out uint outEntityID;
|
layout(location = 1) out uint outEntityID;
|
||||||
layout(location = 2) out uint lightLayerIndices;
|
|
||||||
layout(location = 3) out vec4 normals;
|
|
||||||
layout(location = 4) out vec4 albedo;
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
position = In.vertPos;
|
fragColor = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv);
|
||||||
normals = In.normal;
|
|
||||||
albedo = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv);
|
|
||||||
|
|
||||||
outEntityID = In2.eid;
|
outEntityID = In2.eid;
|
||||||
lightLayerIndices = In2.lightLayerIndex;
|
|
||||||
}
|
}
|
Binary file not shown.
|
@ -27,6 +27,7 @@
|
||||||
#include "Libraries/Compilers/SHShaderSourceCompiler.h"
|
#include "Libraries/Compilers/SHShaderSourceCompiler.h"
|
||||||
|
|
||||||
#include "Filesystem/SHFileSystem.h"
|
#include "Filesystem/SHFileSystem.h"
|
||||||
|
#include <rttr/registration.h>
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
@ -733,3 +734,25 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace rttr
|
||||||
|
{
|
||||||
|
using namespace SHADE;
|
||||||
|
RTTR_REGISTRATION
|
||||||
|
{
|
||||||
|
registration::enumeration<AssetType>("Asset Type")
|
||||||
|
(
|
||||||
|
value("Invalid", AssetType::INVALID),
|
||||||
|
value("Shader", AssetType::SHADER),
|
||||||
|
value("Shader [Built-In]", AssetType::SHADER_BUILT_IN),
|
||||||
|
value("Texture", AssetType::TEXTURE),
|
||||||
|
value("Model", AssetType::MODEL),
|
||||||
|
value("Scene", AssetType::SCENE),
|
||||||
|
value("Prefab", AssetType::PREFAB),
|
||||||
|
value("Material", AssetType::MATERIAL),
|
||||||
|
value("Mesh", AssetType::MESH),
|
||||||
|
value("Script", AssetType::SCRIPT),
|
||||||
|
value("Font", AssetType::FONT)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -309,7 +309,7 @@ namespace SHADE
|
||||||
camera.orthoProjMatrix(3, 3) = 1.0f;
|
camera.orthoProjMatrix(3, 3) = 1.0f;
|
||||||
|
|
||||||
//camera.perspProjMatrix = SHMatrix::OrthographicLH(9.0f, 9.0f, 0.1f, 20.0f);
|
//camera.perspProjMatrix = SHMatrix::OrthographicLH(9.0f, 9.0f, 0.1f, 20.0f);
|
||||||
camera.orthoProjMatrix = SHMatrix::OrthographicRH(camera.GetWidth(), camera.GetHeight(), camera.GetNear(), camera.GetFar());
|
//camera.orthoProjMatrix = SHMatrix::OrthographicLH(camera.GetWidth(), camera.GetHeight(), camera.GetNear(), camera.GetFar());
|
||||||
//camera.perspProjMatrix = SHMatrix::OrthographicLH(5.0f, 5.0f, 0.1f, 20.0f);
|
//camera.perspProjMatrix = SHMatrix::OrthographicLH(5.0f, 5.0f, 0.1f, 20.0f);
|
||||||
//camera.projMatrix.Transpose();
|
//camera.projMatrix.Transpose();
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,9 @@
|
||||||
#include "Editor/EditorWindow/SHEditorWindowManager.h"
|
#include "Editor/EditorWindow/SHEditorWindowManager.h"
|
||||||
#include "Scripting/SHVSUtilities.h"
|
#include "Scripting/SHVSUtilities.h"
|
||||||
#include "Scripting/SHScriptEngine.h"
|
#include "Scripting/SHScriptEngine.h"
|
||||||
|
#include "Tools/Utilities/SHStringUtilities.h"
|
||||||
|
#include <filesystem>
|
||||||
|
#include <rttr/type>
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
@ -27,6 +30,13 @@ namespace SHADE
|
||||||
void SHAssetBrowser::Init()
|
void SHAssetBrowser::Init()
|
||||||
{
|
{
|
||||||
SHEditorWindow::Init();
|
SHEditorWindow::Init();
|
||||||
|
rttr::array_range<rttr::string_view> typeNames = typeEnumAlign.get_names();
|
||||||
|
|
||||||
|
for(auto const& name : typeNames)
|
||||||
|
{
|
||||||
|
uint64_t val = typeEnumAlign.name_to_value(name).to_uint64();
|
||||||
|
typeFilters[val] = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHAssetBrowser::Update()
|
void SHAssetBrowser::Update()
|
||||||
|
@ -34,7 +44,10 @@ namespace SHADE
|
||||||
SHEditorWindow::Update();
|
SHEditorWindow::Update();
|
||||||
if (Begin())
|
if (Begin())
|
||||||
{
|
{
|
||||||
RecursivelyDrawTree(rootFolder);
|
for(auto subFolder : rootFolder->subFolders)
|
||||||
|
{
|
||||||
|
RecursivelyDrawTree(subFolder);
|
||||||
|
}
|
||||||
DrawMenuBar();
|
DrawMenuBar();
|
||||||
DrawCurrentFolder();
|
DrawCurrentFolder();
|
||||||
DrawAssetBeingCreated();
|
DrawAssetBeingCreated();
|
||||||
|
@ -50,6 +63,11 @@ namespace SHADE
|
||||||
refreshQueued = true;
|
refreshQueued = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHAssetBrowser::SetScrollTo(AssetID assetid)
|
||||||
|
{
|
||||||
|
assetToScrollTo = assetid;
|
||||||
|
}
|
||||||
|
|
||||||
void SHAssetBrowser::Refresh() noexcept
|
void SHAssetBrowser::Refresh() noexcept
|
||||||
{
|
{
|
||||||
SHAssetManager::RefreshDirectory();
|
SHAssetManager::RefreshDirectory();
|
||||||
|
@ -69,6 +87,7 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
isAssetBeingCreated = true;
|
isAssetBeingCreated = true;
|
||||||
}
|
}
|
||||||
|
DrawAssetBrowserFilter();
|
||||||
ImGui::EndMenuBar();
|
ImGui::EndMenuBar();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,13 +100,34 @@ namespace SHADE
|
||||||
auto files = folder->files;
|
auto files = folder->files;
|
||||||
const bool isSelected = std::ranges::find(selectedFolders, folder) != selectedFolders.end();
|
const bool isSelected = std::ranges::find(selectedFolders, folder) != selectedFolders.end();
|
||||||
ImGuiTreeNodeFlags flags = (subFolders.empty() && files.empty()) ? ImGuiTreeNodeFlags_Leaf : ImGuiTreeNodeFlags_OpenOnArrow;
|
ImGuiTreeNodeFlags flags = (subFolders.empty() && files.empty()) ? ImGuiTreeNodeFlags_Leaf : ImGuiTreeNodeFlags_OpenOnArrow;
|
||||||
|
if(!filter.empty() && (!subFolders.empty() || !files.empty()))
|
||||||
|
{
|
||||||
|
ImGui::SetNextItemOpen(true);
|
||||||
|
}
|
||||||
if (isSelected)
|
if (isSelected)
|
||||||
flags |= ImGuiTreeNodeFlags_Selected;
|
flags |= ImGuiTreeNodeFlags_Selected;
|
||||||
if (folder == rootFolder)
|
if (folder == rootFolder)
|
||||||
flags |= ImGuiTreeNodeFlags_DefaultOpen;
|
flags |= ImGuiTreeNodeFlags_DefaultOpen;
|
||||||
|
|
||||||
bool isOpen = ImGui::TreeNodeEx(folder, flags, "%s %s", ICON_MD_FOLDER, folder->name.data());
|
if(assetToScrollTo != 0)
|
||||||
ImGuiID folderID = ImGui::GetItemID();
|
{
|
||||||
|
if(auto asset = SHAssetManager::GetAsset(assetToScrollTo))
|
||||||
|
{
|
||||||
|
if(!asset->path.empty())
|
||||||
|
{
|
||||||
|
ImGui::SetNextItemOpen(SHStringUtilities::StringFindInsensitive(asset->path.string(), folder->name.data()) != std::string::npos);
|
||||||
|
}
|
||||||
|
else if(auto parent = SHAssetManager::GetAsset(asset->parent))
|
||||||
|
{
|
||||||
|
ImGui::SetNextItemOpen(SHStringUtilities::StringFindInsensitive(parent->path.string(), folder->name.data()) != std::string::npos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isOpen = false;
|
||||||
|
if(filter.empty())
|
||||||
|
isOpen = ImGui::TreeNodeEx(folder, flags, "%s %s", ICON_MD_FOLDER, folder->name.data());
|
||||||
|
|
||||||
const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
||||||
|
|
||||||
//if (ImGui::BeginPopupContextItem())
|
//if (ImGui::BeginPopupContextItem())
|
||||||
|
@ -101,7 +141,7 @@ namespace SHADE
|
||||||
selectedFolders.push_back(folder);
|
selectedFolders.push_back(folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isOpen)
|
if (isOpen || !filter.empty())
|
||||||
{
|
{
|
||||||
const ImColor treeLineColor = ImGui::GetColorU32(ImGuiCol_CheckMark);
|
const ImColor treeLineColor = ImGui::GetColorU32(ImGuiCol_CheckMark);
|
||||||
const float horizontalOffset = 0.0f;
|
const float horizontalOffset = 0.0f;
|
||||||
|
@ -127,7 +167,8 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1);
|
drawList->AddLine(vertLineStart, vertLineEnd, treeLineColor, 1);
|
||||||
|
|
||||||
ImGui::TreePop();
|
if(filter.empty())
|
||||||
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
return nodeRect;
|
return nodeRect;
|
||||||
}
|
}
|
||||||
|
@ -167,8 +208,26 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf;
|
ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf;
|
||||||
static constexpr std::string_view icon = ICON_MD_FILE_PRESENT;
|
static constexpr std::string_view icon = ICON_MD_FILE_PRESENT;
|
||||||
|
bool highlighted = false;
|
||||||
|
if (!filter.empty())
|
||||||
|
{
|
||||||
|
if (SHStringUtilities::StringFindInsensitive(file.name.data(), filter) == std::string::npos)
|
||||||
|
{
|
||||||
|
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
highlighted = true;
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Text, highlightedColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
ImGui::PushID(file.name.data());
|
ImGui::PushID(file.name.data());
|
||||||
|
|
||||||
bool const isOpen = ImGui::TreeNodeEx(file.name.data(), flags, "%s %s%s", icon.data(), file.name.data(), file.ext.data());
|
bool const isOpen = ImGui::TreeNodeEx(file.name.data(), flags, "%s %s%s", icon.data(), file.name.data(), file.ext.data());
|
||||||
|
if(highlighted)
|
||||||
|
{
|
||||||
|
ImGui::PopStyleColor();
|
||||||
|
}
|
||||||
const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
||||||
if(ImGui::BeginPopupContextItem())
|
if(ImGui::BeginPopupContextItem())
|
||||||
{
|
{
|
||||||
|
@ -194,6 +253,27 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if (asset == nullptr)
|
if (asset == nullptr)
|
||||||
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
||||||
|
|
||||||
|
if (!typeFilters[static_cast<uint64_t>(asset->type)])
|
||||||
|
{
|
||||||
|
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool highlighted = false;
|
||||||
|
if(!filter.empty())
|
||||||
|
{
|
||||||
|
ImGui::SetNextItemOpen(true);
|
||||||
|
if(SHStringUtilities::StringFindInsensitive(asset->name.data(), filter) == std::string::npos)
|
||||||
|
{
|
||||||
|
return ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
highlighted = true;
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Text, highlightedColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const bool isSelected = std::ranges::find(selectedAssets, asset->id) != selectedAssets.end();
|
const bool isSelected = std::ranges::find(selectedAssets, asset->id) != selectedAssets.end();
|
||||||
ImGuiTreeNodeFlags flags = (!asset->subAssets.empty()) ? ImGuiTreeNodeFlags_OpenOnArrow : ImGuiTreeNodeFlags_Leaf;
|
ImGuiTreeNodeFlags flags = (!asset->subAssets.empty()) ? ImGuiTreeNodeFlags_OpenOnArrow : ImGuiTreeNodeFlags_Leaf;
|
||||||
if (isSelected)
|
if (isSelected)
|
||||||
|
@ -214,8 +294,34 @@ namespace SHADE
|
||||||
case AssetType::MAX_COUNT: break;
|
case AssetType::MAX_COUNT: break;
|
||||||
default:;
|
default:;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(assetToScrollTo != 0)
|
||||||
|
{
|
||||||
|
if(asset->id == assetToScrollTo)
|
||||||
|
{
|
||||||
|
ImGui::SetScrollHereY();
|
||||||
|
selectedAssets.clear();
|
||||||
|
selectedAssets.push_back(asset->id);
|
||||||
|
assetToScrollTo = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (auto const& subAsset : asset->subAssets)
|
||||||
|
{
|
||||||
|
if(subAsset->id == assetToScrollTo)
|
||||||
|
{
|
||||||
|
ImGui::SetNextItemOpen(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool const isOpen = ImGui::TreeNodeEx(asset, flags, "%s %s%s", icon.data(), asset->name.data(), ext.data());
|
bool const isOpen = ImGui::TreeNodeEx(asset, flags, "%s %s%s", icon.data(), asset->name.data(), ext.data());
|
||||||
|
|
||||||
|
if(highlighted)
|
||||||
|
{
|
||||||
|
ImGui::PopStyleColor();
|
||||||
|
}
|
||||||
const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
const ImRect nodeRect = ImRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax());
|
||||||
if (SHDragDrop::BeginSource())
|
if (SHDragDrop::BeginSource())
|
||||||
{
|
{
|
||||||
|
@ -339,4 +445,43 @@ namespace SHADE
|
||||||
// QueueRefresh();
|
// QueueRefresh();
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHAssetBrowser::DrawAssetBrowserFilter()
|
||||||
|
{
|
||||||
|
if (ImGui::InputTextWithHint("##hierarchyPanelFilter", "Filter", &filter))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
if (ImGui::Button("x"))
|
||||||
|
{
|
||||||
|
filter.clear();
|
||||||
|
}
|
||||||
|
if(ImGui::BeginMenu("Type"))
|
||||||
|
{
|
||||||
|
if (ImGui::Button("All"))
|
||||||
|
{
|
||||||
|
for (auto& [id, value] : typeFilters)
|
||||||
|
value = true;
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::Button("None"))
|
||||||
|
{
|
||||||
|
for (auto& [id, value] : typeFilters)
|
||||||
|
value = false;
|
||||||
|
}
|
||||||
|
for (auto& [id, value] : typeFilters)
|
||||||
|
{
|
||||||
|
if(ImGui::Checkbox(typeEnumAlign.value_to_name(id).data(), &value))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
if(ImGui::IsItemClicked(ImGuiMouseButton_Right))
|
||||||
|
{
|
||||||
|
for (auto& [id2, value2] : typeFilters)
|
||||||
|
value2 = false;
|
||||||
|
value = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,18 +4,21 @@
|
||||||
#include "Assets/SHAsset.h"
|
#include "Assets/SHAsset.h"
|
||||||
#include "Editor/EditorWindow/SHEditorWindow.h"
|
#include "Editor/EditorWindow/SHEditorWindow.h"
|
||||||
#include "Filesystem/SHFolder.h"
|
#include "Filesystem/SHFolder.h"
|
||||||
|
#include <rttr/enumeration.h>
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
class SHAssetBrowser final : public SHEditorWindow
|
class SHAssetBrowser final : public SHEditorWindow
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
static constexpr ImVec4 highlightedColor = ImVec4(0.f, 0.7f, 0.0f, 1.0f);
|
||||||
SHAssetBrowser();
|
SHAssetBrowser();
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
void QueueRefresh() noexcept;
|
void QueueRefresh() noexcept;
|
||||||
|
void SetScrollTo(AssetID assetid);
|
||||||
private:
|
private:
|
||||||
void DrawMenuBar();
|
void DrawMenuBar();
|
||||||
ImRect RecursivelyDrawTree(FolderPointer folder);
|
ImRect RecursivelyDrawTree(FolderPointer folder);
|
||||||
|
@ -23,6 +26,7 @@ namespace SHADE
|
||||||
ImRect DrawFile(SHFile& file) noexcept;
|
ImRect DrawFile(SHFile& file) noexcept;
|
||||||
ImRect DrawAsset(SHAsset const* const asset, FileExt const& ext = "") noexcept;
|
ImRect DrawAsset(SHAsset const* const asset, FileExt const& ext = "") noexcept;
|
||||||
void DrawAssetBeingCreated() noexcept;
|
void DrawAssetBeingCreated() noexcept;
|
||||||
|
void DrawAssetBrowserFilter();
|
||||||
|
|
||||||
void Refresh() noexcept;
|
void Refresh() noexcept;
|
||||||
|
|
||||||
|
@ -30,9 +34,13 @@ namespace SHADE
|
||||||
std::vector<FolderPointer> selectedFolders;
|
std::vector<FolderPointer> selectedFolders;
|
||||||
std::vector<AssetID> selectedAssets;
|
std::vector<AssetID> selectedAssets;
|
||||||
static constexpr float tileWidth = 50.0f;
|
static constexpr float tileWidth = 50.0f;
|
||||||
|
static constexpr std::string_view newAssetPopup = "Create New Asset";
|
||||||
|
std::string nameOfAssetBeingCreated, filter;
|
||||||
|
rttr::enumeration typeEnumAlign = rttr::type::get<AssetType>().get_enumeration();
|
||||||
|
std::unordered_map<uint64_t, bool> typeFilters;
|
||||||
|
|
||||||
|
AssetID assetToScrollTo = 0;
|
||||||
bool refreshQueued = false;
|
bool refreshQueued = false;
|
||||||
bool isAssetBeingCreated = false;
|
bool isAssetBeingCreated = false;
|
||||||
static constexpr std::string_view newAssetPopup = "Create New Asset";
|
|
||||||
std::string nameOfAssetBeingCreated;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,11 +15,11 @@
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
class SHSceneNode;
|
class SHSceneNode;
|
||||||
constexpr ImVec4 highlightedColor = ImVec4(0.f, 0.7f, 0.0f, 1.0f);
|
|
||||||
|
|
||||||
class SHHierarchyPanel final : public SHEditorWindow
|
class SHHierarchyPanel final : public SHEditorWindow
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
static constexpr ImVec4 highlightedColor = ImVec4(0.f, 0.7f, 0.0f, 1.0f);
|
||||||
SHHierarchyPanel();
|
SHHierarchyPanel();
|
||||||
void Init() override;
|
void Init() override;
|
||||||
void Update() override;
|
void Update() override;
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#include "Animation/SHAnimatorComponent.h"
|
#include "Animation/SHAnimatorComponent.h"
|
||||||
#include "Physics/Collision/Shapes/SHBox.h"
|
#include "Physics/Collision/Shapes/SHBox.h"
|
||||||
#include "Physics/Collision/Shapes/SHSphere.h"
|
#include "Physics/Collision/Shapes/SHSphere.h"
|
||||||
|
#include "../SHEditorWindowManager.h"
|
||||||
|
#include "../AssetBrowser/SHAssetBrowser.h"
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -505,6 +507,15 @@ namespace SHADE
|
||||||
SHResourceManager::FinaliseChanges();
|
SHResourceManager::FinaliseChanges();
|
||||||
}, SHDragDrop::DRAG_RESOURCE);
|
}, 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const auto MAT_NAME = mat ? SHResourceManager::GetAssetName<SHMaterial>(mat->GetBaseMaterial()).value_or("") : "";
|
const auto MAT_NAME = mat ? SHResourceManager::GetAssetName<SHMaterial>(mat->GetBaseMaterial()).value_or("") : "";
|
||||||
SHEditorWidgets::DragDropReadOnlyField<AssetID>("Material", MAT_NAME,
|
SHEditorWidgets::DragDropReadOnlyField<AssetID>("Material", MAT_NAME,
|
||||||
[component]()
|
[component]()
|
||||||
|
@ -524,6 +535,15 @@ namespace SHADE
|
||||||
auto gfxSystem = SHSystemManager::GetSystem<SHGraphicsSystem>();
|
auto gfxSystem = SHSystemManager::GetSystem<SHGraphicsSystem>();
|
||||||
component->SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(SHResourceManager::LoadOrGet<SHMaterial>(id)));
|
component->SetMaterial(gfxSystem->AddOrGetBaseMaterialInstance(SHResourceManager::LoadOrGet<SHMaterial>(id)));
|
||||||
}, SHDragDrop::DRAG_RESOURCE);
|
}, SHDragDrop::DRAG_RESOURCE);
|
||||||
|
if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))
|
||||||
|
{
|
||||||
|
if(Handle<SHMaterialInstance> const& mat = component->GetMaterial())
|
||||||
|
{
|
||||||
|
AssetID assetID = SHResourceManager::GetAssetID<SHMaterial>(mat->GetBaseMaterial()).value_or(0);
|
||||||
|
SHEditorWindowManager::GetEditorWindow<SHAssetBrowser>()->SetScrollTo(assetID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -561,7 +581,14 @@ namespace SHADE
|
||||||
component->SetFont(SHResourceManager::LoadOrGet<SHFont>(id));
|
component->SetFont(SHResourceManager::LoadOrGet<SHFont>(id));
|
||||||
SHResourceManager::FinaliseChanges();
|
SHResourceManager::FinaliseChanges();
|
||||||
}, SHDragDrop::DRAG_RESOURCE);
|
}, SHDragDrop::DRAG_RESOURCE);
|
||||||
|
if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))
|
||||||
|
{
|
||||||
|
if (Handle<SHFont> const& font = component->GetFont())
|
||||||
|
{
|
||||||
|
AssetID assetID = SHResourceManager::GetAssetID<SHFont>(font).value_or(0);
|
||||||
|
SHEditorWindowManager::GetEditorWindow<SHAssetBrowser>()->SetScrollTo(assetID);
|
||||||
|
}
|
||||||
|
}
|
||||||
SHEditorWidgets::InputText("Text",
|
SHEditorWidgets::InputText("Text",
|
||||||
[component](void)
|
[component](void)
|
||||||
{
|
{
|
||||||
|
@ -609,7 +636,14 @@ namespace SHADE
|
||||||
component->SetRig(SHResourceManager::LoadOrGet<SHRig>(id));
|
component->SetRig(SHResourceManager::LoadOrGet<SHRig>(id));
|
||||||
SHResourceManager::FinaliseChanges();
|
SHResourceManager::FinaliseChanges();
|
||||||
}, SHDragDrop::DRAG_RESOURCE);
|
}, SHDragDrop::DRAG_RESOURCE);
|
||||||
|
if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))
|
||||||
|
{
|
||||||
|
if (Handle<SHRig> const& rig = component->GetRig())
|
||||||
|
{
|
||||||
|
AssetID assetID = SHResourceManager::GetAssetID<SHRig>(rig).value_or(0);
|
||||||
|
SHEditorWindowManager::GetEditorWindow<SHAssetBrowser>()->SetScrollTo(assetID);
|
||||||
|
}
|
||||||
|
}
|
||||||
Handle<SHAnimationClip> const& clip = component->GetCurrentClip();
|
Handle<SHAnimationClip> const& clip = component->GetCurrentClip();
|
||||||
const auto CLIP_NAME = clip ? SHResourceManager::GetAssetName<SHAnimationClip>(clip).value_or("") : "";
|
const auto CLIP_NAME = clip ? SHResourceManager::GetAssetName<SHAnimationClip>(clip).value_or("") : "";
|
||||||
SHEditorWidgets::DragDropReadOnlyField<AssetID>("Clip", CLIP_NAME,
|
SHEditorWidgets::DragDropReadOnlyField<AssetID>("Clip", CLIP_NAME,
|
||||||
|
@ -627,6 +661,14 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
component->SetClip(SHResourceManager::LoadOrGet<SHAnimationClip>(id));
|
component->SetClip(SHResourceManager::LoadOrGet<SHAnimationClip>(id));
|
||||||
}, SHDragDrop::DRAG_RESOURCE);
|
}, SHDragDrop::DRAG_RESOURCE);
|
||||||
|
if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left))
|
||||||
|
{
|
||||||
|
if (Handle<SHAnimationClip> const& clip = component->GetCurrentClip())
|
||||||
|
{
|
||||||
|
AssetID assetID = SHResourceManager::GetAssetID<SHAnimationClip>(clip).value_or(0);
|
||||||
|
SHEditorWindowManager::GetEditorWindow<SHAssetBrowser>()->SetScrollTo(assetID);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
#include "SHpch.h"
|
#include "SHpch.h"
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
#include <imgui.h>
|
||||||
|
|
||||||
#include "Serialization/SHSerializationHelper.hpp"
|
#include "Serialization/SHSerializationHelper.hpp"
|
||||||
#include "SHMaterialInspector.h"
|
#include "SHMaterialInspector.h"
|
||||||
#include "Editor/SHImGuiHelpers.hpp"
|
#include "Editor/SHImGuiHelpers.hpp"
|
||||||
#include <imgui.h>
|
|
||||||
|
|
||||||
#include "Assets/SHAssetManager.h"
|
#include "Assets/SHAssetManager.h"
|
||||||
#include "Editor/IconsMaterialDesign.h"
|
#include "Editor/IconsMaterialDesign.h"
|
||||||
|
@ -89,11 +92,17 @@ namespace SHADE
|
||||||
if (vertShader && fragShader && gfxSystem)
|
if (vertShader && fragShader && gfxSystem)
|
||||||
{
|
{
|
||||||
// - Retrieve pipeline from pipeline library
|
// - Retrieve pipeline from pipeline library
|
||||||
auto renderPass = gfxSystem->GetPrimaryRenderpass();
|
auto subPass = gfxSystem->GetUsableSubpass(currentMatSpec->subpassName);
|
||||||
auto subPass = renderPass->GetSubpass(currentMatSpec->subpassName);
|
if (subPass)
|
||||||
auto pipeline = renderPass->GetOrCreatePipeline({ vertShader, fragShader }, subPass);
|
{
|
||||||
// - Set Pipeline
|
// Set Pipeline if valid
|
||||||
matHandle->SetPipeline(pipeline);
|
auto pipeline = subPass->GetParentNode()->GetOrCreatePipeline({vertShader, fragShader}, subPass);
|
||||||
|
matHandle->SetPipeline(pipeline);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SHLOG_ERROR("[SHMaterialInspector] Failed to find material subpass of type \"{}\"", currentMatSpec->subpassName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,7 +185,7 @@ namespace SHADE
|
||||||
const std::string VERT_SHADER_NAME = VERT_SHADER_INFO ? VERT_SHADER_INFO->name : "Unknown Shader";
|
const std::string VERT_SHADER_NAME = VERT_SHADER_INFO ? VERT_SHADER_INFO->name : "Unknown Shader";
|
||||||
isDirty |= SHEditorWidgets::DragDropReadOnlyField<AssetID>
|
isDirty |= SHEditorWidgets::DragDropReadOnlyField<AssetID>
|
||||||
(
|
(
|
||||||
"Fragment Shader", VERT_SHADER_NAME.data(),
|
"Vertex Shader", VERT_SHADER_NAME.data(),
|
||||||
[this]() { return currentMatSpec->vertexShader; },
|
[this]() { return currentMatSpec->vertexShader; },
|
||||||
[this](const AssetID& id) { currentMatSpec->vertexShader = id; },
|
[this](const AssetID& id) { currentMatSpec->vertexShader = id; },
|
||||||
SHDragDrop::DRAG_RESOURCE
|
SHDragDrop::DRAG_RESOURCE
|
||||||
|
@ -191,6 +200,37 @@ namespace SHADE
|
||||||
SHDragDrop::DRAG_RESOURCE
|
SHDragDrop::DRAG_RESOURCE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Subpass
|
||||||
|
const auto& SP_NAMES = SHGraphicsConstants::RenderGraphEntityNames::USABLE_SUBPASSES;
|
||||||
|
ImGui::Text("Subpass");
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::BeginCombo("##", currentMatSpec->subpassName.data(), ImGuiComboFlags_None))
|
||||||
|
{
|
||||||
|
for (const auto& NAME : SP_NAMES)
|
||||||
|
{
|
||||||
|
const bool IS_SELECTED = currentMatSpec->subpassName == NAME;
|
||||||
|
if (ImGui::Selectable(NAME.data(), IS_SELECTED))
|
||||||
|
{
|
||||||
|
isDirty = true;
|
||||||
|
SHCommandManager::PerformCommand
|
||||||
|
(
|
||||||
|
std::reinterpret_pointer_cast<SHBaseCommand>(std::make_shared<SHCommand<std::string>>
|
||||||
|
(
|
||||||
|
currentMatSpec->subpassName,
|
||||||
|
std::string(NAME),
|
||||||
|
[&](const std::string& newName){ currentMatSpec->subpassName = newName; }
|
||||||
|
)),
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (IS_SELECTED)
|
||||||
|
{
|
||||||
|
ImGui::SetItemDefaultFocus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndCombo();
|
||||||
|
}
|
||||||
|
|
||||||
// Load the shader to access it's data
|
// Load the shader to access it's data
|
||||||
auto fragShader = SHResourceManager::LoadOrGet<SHVkShaderModule>(currentMatSpec->fragShader);
|
auto fragShader = SHResourceManager::LoadOrGet<SHVkShaderModule>(currentMatSpec->fragShader);
|
||||||
if (!fragShader)
|
if (!fragShader)
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
//|| SHADE Includes ||
|
//|| SHADE Includes ||
|
||||||
//#==============================================================#
|
//#==============================================================#
|
||||||
#include "Editor/EditorWindow/SHEditorWindow.h"
|
#include "Editor/EditorWindow/SHEditorWindow.h"
|
||||||
|
#include "Editor/SHEditor.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
|
|
@ -96,8 +96,10 @@ namespace SHADE
|
||||||
SHLOG_CRITICAL("Failed to create ImGui Context")
|
SHLOG_CRITICAL("Failed to create ImGui Context")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef SHEDITOR
|
||||||
editorConfig = &SHConfigurationManager::LoadEditorConfig();
|
editorConfig = &SHConfigurationManager::LoadEditorConfig();
|
||||||
|
#endif
|
||||||
|
|
||||||
//Add editor windows
|
//Add editor windows
|
||||||
SHEditorWindowManager::CreateEditorWindow<SHEditorMenuBar>();
|
SHEditorWindowManager::CreateEditorWindow<SHEditorMenuBar>();
|
||||||
|
@ -131,8 +133,9 @@ namespace SHADE
|
||||||
|
|
||||||
InitBackend();
|
InitBackend();
|
||||||
|
|
||||||
|
#ifdef SHEDITOR
|
||||||
SetStyle(static_cast<Style>(editorConfig->style));
|
SetStyle(static_cast<Style>(editorConfig->style));
|
||||||
|
#endif // SHEDITOR
|
||||||
|
|
||||||
for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values)
|
for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values)
|
||||||
{
|
{
|
||||||
|
@ -340,13 +343,18 @@ namespace SHADE
|
||||||
ImGui_ImplSDL2_Shutdown();
|
ImGui_ImplSDL2_Shutdown();
|
||||||
ImGui::DestroyContext();
|
ImGui::DestroyContext();
|
||||||
|
|
||||||
|
#ifdef SHEDITOR
|
||||||
editorConfig->startMaximized = shWindow->GetWindowData().isMaximised;
|
editorConfig->startMaximized = shWindow->GetWindowData().isMaximised;
|
||||||
SHConfigurationManager::SaveEditorConfig();
|
SHConfigurationManager::SaveEditorConfig();
|
||||||
|
#endif // SHEDITOR
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHEditor::SetStyle(Style style)
|
void SHEditor::SetStyle(Style style)
|
||||||
{
|
{
|
||||||
|
#ifdef SHEDITOR
|
||||||
editorConfig->style = static_cast<uint32_t>(style);
|
editorConfig->style = static_cast<uint32_t>(style);
|
||||||
|
#endif // SHEDITOR
|
||||||
|
|
||||||
switch (style)
|
switch (style)
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
|
@ -550,7 +558,10 @@ namespace SHADE
|
||||||
|
|
||||||
SHSceneManager::SetCurrentSceneName(newSceneName);
|
SHSceneManager::SetCurrentSceneName(newSceneName);
|
||||||
SHSceneManager::SetCurrentSceneAssetID(SHAssetManager::CreateNewAsset(AssetType::SCENE, newSceneName));
|
SHSceneManager::SetCurrentSceneAssetID(SHAssetManager::CreateNewAsset(AssetType::SCENE, newSceneName));
|
||||||
|
#ifdef SHEDITOR
|
||||||
editorConfig->workingSceneID = SHSceneManager::GetCurrentSceneAssetID();
|
editorConfig->workingSceneID = SHSceneManager::GetCurrentSceneAssetID();
|
||||||
|
#endif // SHEDITOR
|
||||||
|
|
||||||
}
|
}
|
||||||
//Get data, if data is null, asset doesn't exist, prompt for a name and create a new asset with the name
|
//Get data, if data is null, asset doesn't exist, prompt for a name and create a new asset with the name
|
||||||
|
|
||||||
|
@ -559,7 +570,10 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if(shWindow->IsUnsavedChanges())
|
if(shWindow->IsUnsavedChanges())
|
||||||
shWindow->ToggleUnsavedChanges();
|
shWindow->ToggleUnsavedChanges();
|
||||||
|
#ifdef SHEDITOR
|
||||||
editorConfig->workingSceneID = SHSceneManager::GetCurrentSceneAssetID();
|
editorConfig->workingSceneID = SHSceneManager::GetCurrentSceneAssetID();
|
||||||
|
#endif // SHEDITOR
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -624,7 +638,11 @@ namespace SHADE
|
||||||
editorState = SHEditor::State::STOP;
|
editorState = SHEditor::State::STOP;
|
||||||
SHCommandManager::SwapStacks();
|
SHCommandManager::SwapStacks();
|
||||||
SHEventManager::BroadcastEvent<SHEditorStateChangeEvent>(STATE_CHANGE_EVENT, SH_EDITOR_ON_STOP_EVENT);
|
SHEventManager::BroadcastEvent<SHEditorStateChangeEvent>(STATE_CHANGE_EVENT, SH_EDITOR_ON_STOP_EVENT);
|
||||||
|
|
||||||
|
#ifdef SHEDITOR
|
||||||
LoadScene(editorConfig->workingSceneID);
|
LoadScene(editorConfig->workingSceneID);
|
||||||
|
#endif // SHEDITOR
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SHEditor::ProcessShortcuts()
|
void SHEditor::ProcessShortcuts()
|
||||||
|
@ -679,7 +697,9 @@ namespace SHADE
|
||||||
if(width > 0 && height > 0)
|
if(width > 0 && height > 0)
|
||||||
{
|
{
|
||||||
auto [width, height] = shWindow->GetWindowSize();
|
auto [width, height] = shWindow->GetWindowSize();
|
||||||
|
#ifdef SHEditor
|
||||||
editorConfig->windowSize = { static_cast<float>(width), static_cast<float>(height) };
|
editorConfig->windowSize = { static_cast<float>(width), static_cast<float>(height) };
|
||||||
|
#endif // SHEditor
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,8 +127,9 @@ namespace SHADE
|
||||||
std::vector<EntityID> selectedEntities;
|
std::vector<EntityID> selectedEntities;
|
||||||
|
|
||||||
State editorState = State::STOP;
|
State editorState = State::STOP;
|
||||||
|
#ifdef SHEDITOR
|
||||||
SHEditorConfig* editorConfig;
|
SHEditorConfig* editorConfig;
|
||||||
|
#endif // SHEDITOR
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -98,9 +98,9 @@ namespace SHADE
|
||||||
static bool IsItemHovered();
|
static bool IsItemHovered();
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
/* ImGui Wrapper Functions - Menu */
|
/* ImGui Wrapper Functions - Menu */
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
static bool BeginMenu(const std::string& label);
|
static bool BeginMenu(const std::string& label);
|
||||||
static bool BeginMenu(const std::string& label, const char* icon);
|
static bool BeginMenu(const std::string& label, const char* icon);
|
||||||
static void EndMenu();
|
static void EndMenu();
|
||||||
static void BeginTooltip();
|
static void BeginTooltip();
|
||||||
|
@ -164,8 +164,8 @@ namespace SHADE
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="title">Text to display.</param>
|
/// <param name="title">Text to display.</param>
|
||||||
/// <returns>True if button was pressed.</returns>
|
/// <returns>True if button was pressed.</returns>
|
||||||
static bool Button(const std::string& title);
|
static bool Button(const std::string& title);
|
||||||
static bool Selectable(const std::string& label);
|
static bool Selectable(const std::string& label);
|
||||||
static bool Selectable(const std::string& label, const char* icon);
|
static bool Selectable(const std::string& label, const char* icon);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a checkbox widget for boolean input.
|
/// Creates a checkbox widget for boolean input.
|
||||||
|
|
|
@ -424,7 +424,7 @@ namespace SHADE
|
||||||
ImGui::BeginGroup();
|
ImGui::BeginGroup();
|
||||||
ImGui::PushID(label.data());
|
ImGui::PushID(label.data());
|
||||||
TextLabel(label);
|
TextLabel(label);
|
||||||
bool changed = ImGui::InputText("##inputText", &text, ImGuiInputTextFlags_ReadOnly, nullptr, nullptr);
|
bool changed = ImGui::InputText("##inputText", &text, ImGuiInputTextFlags_ReadOnly | ImGuiInputTextFlags_AutoSelectAll, nullptr, nullptr);
|
||||||
if(SHDragDrop::BeginTarget())
|
if(SHDragDrop::BeginTarget())
|
||||||
{
|
{
|
||||||
if(T* payload = SHDragDrop::AcceptPayload<T>(dragDropTag))
|
if(T* payload = SHDragDrop::AcceptPayload<T>(dragDropTag))
|
||||||
|
|
|
@ -13,6 +13,7 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
|
|
||||||
// STL Includes
|
// STL Includes
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
@ -114,7 +115,14 @@ namespace SHADE
|
||||||
static constexpr std::string_view DEFERRED_COMPOSITE_COMPUTE = "Deferred Composite";
|
static constexpr std::string_view DEFERRED_COMPOSITE_COMPUTE = "Deferred Composite";
|
||||||
|
|
||||||
|
|
||||||
|
static constexpr std::string_view GBUFFER_WRITE_SUBPASS = "G-Buffer Write";
|
||||||
|
static constexpr std::string_view UI_SUBPASS = "UI";
|
||||||
|
|
||||||
|
static constexpr std::array USABLE_SUBPASSES =
|
||||||
|
{
|
||||||
|
GBUFFER_WRITE_SUBPASS,
|
||||||
|
UI_SUBPASS
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DescriptorSetBindings
|
struct DescriptorSetBindings
|
||||||
|
|
|
@ -133,6 +133,9 @@ namespace SHADE
|
||||||
//SHAssetManager::CompileAsset("../../Assets/Shaders/PureCopy_CS.glsl", false);
|
//SHAssetManager::CompileAsset("../../Assets/Shaders/PureCopy_CS.glsl", false);
|
||||||
//SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_VS.glsl", false);
|
//SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_VS.glsl", false);
|
||||||
//SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_FS.glsl", false);
|
//SHAssetManager::CompileAsset("../../Assets/Shaders/TestCube_FS.glsl", false);
|
||||||
|
//SHAssetManager::CompileAsset("../../Assets/Shaders/UI_VS.glsl", false);
|
||||||
|
//SHAssetManager::CompileAsset("../../Assets/Shaders/UI_FS.glsl", false);
|
||||||
|
//SHAssetManager::CompileAsset("../../Assets/Shaders/Text_VS.glsl", false);
|
||||||
|
|
||||||
// Load Built In Shaders
|
// Load Built In Shaders
|
||||||
static constexpr AssetID VS_DEFAULT = 39210065; defaultVertShader = SHResourceManager::LoadOrGet<SHVkShaderModule>(VS_DEFAULT);
|
static constexpr AssetID VS_DEFAULT = 39210065; defaultVertShader = SHResourceManager::LoadOrGet<SHVkShaderModule>(VS_DEFAULT);
|
||||||
|
@ -232,7 +235,7 @@ namespace SHADE
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* G-BUFFER SUBPASS INIT */
|
/* G-BUFFER SUBPASS INIT */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
auto gBufferSubpass = gBufferNode->AddSubpass("G-Buffer Write", worldViewport, worldRenderer);
|
auto gBufferSubpass = gBufferNode->AddSubpass(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_WRITE_SUBPASS.data(), worldViewport, worldRenderer);
|
||||||
gBufferSubpass->AddColorOutput("Position");
|
gBufferSubpass->AddColorOutput("Position");
|
||||||
gBufferSubpass->AddColorOutput("Entity ID");
|
gBufferSubpass->AddColorOutput("Entity ID");
|
||||||
gBufferSubpass->AddColorOutput("Light Layer Indices");
|
gBufferSubpass->AddColorOutput("Light Layer Indices");
|
||||||
|
@ -241,6 +244,7 @@ namespace SHADE
|
||||||
gBufferSubpass->AddColorOutput("Position World Space");
|
gBufferSubpass->AddColorOutput("Position World Space");
|
||||||
gBufferSubpass->AddDepthOutput("Depth Buffer", SH_RENDER_GRAPH_RESOURCE_FLAGS::DEPTH_STENCIL);
|
gBufferSubpass->AddDepthOutput("Depth Buffer", SH_RENDER_GRAPH_RESOURCE_FLAGS::DEPTH_STENCIL);
|
||||||
|
|
||||||
|
usableSubpassesMapping.emplace (std::string (SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_WRITE_SUBPASS.data()), gBufferSubpass);
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* SSAO PASS AND DATA INIT */
|
/* SSAO PASS AND DATA INIT */
|
||||||
|
@ -319,7 +323,7 @@ namespace SHADE
|
||||||
/* SCREEN SPACE PASS */
|
/* SCREEN SPACE PASS */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
auto screenSpaceNode = renderGraph->AddNode(SHGraphicsConstants::RenderGraphEntityNames::SCREEN_SPACE_PASS.data(), {"Scene", "Entity ID"}, {SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_PASS.data(), SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data(), SHGraphicsConstants::RenderGraphEntityNames::DEBUG_DRAW.data()});
|
auto screenSpaceNode = renderGraph->AddNode(SHGraphicsConstants::RenderGraphEntityNames::SCREEN_SPACE_PASS.data(), {"Scene", "Entity ID"}, {SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_PASS.data(), SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data(), SHGraphicsConstants::RenderGraphEntityNames::DEBUG_DRAW.data()});
|
||||||
auto uiSubpass = screenSpaceNode->AddSubpass("UI", worldViewport, screenRenderer);
|
auto uiSubpass = screenSpaceNode->AddSubpass(SHGraphicsConstants::RenderGraphEntityNames::UI_SUBPASS.data(), worldViewport, screenRenderer);
|
||||||
uiSubpass->AddColorOutput("Scene");
|
uiSubpass->AddColorOutput("Scene");
|
||||||
uiSubpass->AddColorOutput("Entity ID");
|
uiSubpass->AddColorOutput("Entity ID");
|
||||||
uiSubpass->AddExteriorDrawCalls([=](Handle<SHVkCommandBuffer> cmdBuffer, Handle<SHRenderer> renderer, uint32_t frameIndex)
|
uiSubpass->AddExteriorDrawCalls([=](Handle<SHVkCommandBuffer> cmdBuffer, Handle<SHRenderer> renderer, uint32_t frameIndex)
|
||||||
|
@ -327,6 +331,8 @@ namespace SHADE
|
||||||
textRenderingSubSystem->Render(cmdBuffer, renderer, frameIndex);
|
textRenderingSubSystem->Render(cmdBuffer, renderer, frameIndex);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
usableSubpassesMapping.emplace(SHGraphicsConstants::RenderGraphEntityNames::UI_SUBPASS.data(), uiSubpass);
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
/* RENDER TO SWAPCHAIN IMAGE FOR PRESENT PASS */
|
/* RENDER TO SWAPCHAIN IMAGE FOR PRESENT PASS */
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
|
@ -416,12 +422,12 @@ namespace SHADE
|
||||||
.addressMode = vk::SamplerAddressMode::eClampToBorder,
|
.addressMode = vk::SamplerAddressMode::eClampToBorder,
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
textRenderingSubSystem = resourceManager.Create<SHTextRenderingSubSystem>();
|
textRenderingSubSystem = resourceManager.Create<SHTextRenderingSubSystem>();
|
||||||
|
|
||||||
// initialize the text renderer
|
// initialize the text renderer
|
||||||
auto uiNode = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::SCREEN_SPACE_PASS.data());
|
auto uiNode = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::SCREEN_SPACE_PASS.data());
|
||||||
textRenderingSubSystem->Init(device, uiNode->GetRenderpass(), uiNode->GetSubpass("UI"), descPool, textVS, textFS);
|
textRenderingSubSystem->Init(device, uiNode->GetRenderpass(), uiNode->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::UI_SUBPASS), descPool, textVS, textFS);
|
||||||
|
|
||||||
SHGlobalDescriptorSets::SetLightingSubSystem(lightingSubSystem);
|
SHGlobalDescriptorSets::SetLightingSubSystem(lightingSubSystem);
|
||||||
|
|
||||||
|
@ -448,7 +454,7 @@ namespace SHADE
|
||||||
defaultMaterial = AddMaterial
|
defaultMaterial = AddMaterial
|
||||||
(
|
(
|
||||||
defaultVertShader, defaultFragShader,
|
defaultVertShader, defaultFragShader,
|
||||||
renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data())->GetSubpass("G-Buffer Write")
|
renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data())->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_WRITE_SUBPASS)
|
||||||
);
|
);
|
||||||
defaultMaterial->SetProperty("data.textureIndex", defaultTexture->TextureArrayIndex);
|
defaultMaterial->SetProperty("data.textureIndex", defaultTexture->TextureArrayIndex);
|
||||||
defaultAnimMaterial = AddMaterial
|
defaultAnimMaterial = AddMaterial
|
||||||
|
@ -573,7 +579,7 @@ namespace SHADE
|
||||||
else
|
else
|
||||||
renderer->UpdateData(frameIndex);
|
renderer->UpdateData(frameIndex);
|
||||||
#else
|
#else
|
||||||
renderers[renIndex]->UpdateDataAndBind(frameIndex);
|
renderer->UpdateData(frameIndex);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -589,16 +595,8 @@ namespace SHADE
|
||||||
renderGraph->Begin(frameIndex);
|
renderGraph->Begin(frameIndex);
|
||||||
auto cmdBuffer = renderGraph->GetCommandBuffer(frameIndex);
|
auto cmdBuffer = renderGraph->GetCommandBuffer(frameIndex);
|
||||||
|
|
||||||
// Bind all the buffers required for meshes
|
|
||||||
for (auto& [buffer, bindingPoint] : MESH_DATA)
|
|
||||||
{
|
|
||||||
if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eVertexBuffer)
|
|
||||||
cmdBuffer->BindVertexBuffer(bindingPoint, buffer, 0);
|
|
||||||
else if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eIndexBuffer)
|
|
||||||
cmdBuffer->BindIndexBuffer(buffer, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
renderGraph->Execute(frameIndex, descPool);
|
renderGraph->Execute(frameIndex, descPool, MESH_DATA);
|
||||||
renderGraph->End(frameIndex);
|
renderGraph->End(frameIndex);
|
||||||
|
|
||||||
graphicsQueue->SubmitCommandBuffer
|
graphicsQueue->SubmitCommandBuffer
|
||||||
|
@ -774,7 +772,7 @@ namespace SHADE
|
||||||
auto const& EVENT_DATA = reinterpret_cast<const SHEventSpec<SHLightEnableShadowEvent>*>(eventPtr.get())->data;
|
auto const& EVENT_DATA = reinterpret_cast<const SHEventSpec<SHLightEnableShadowEvent>*>(eventPtr.get())->data;
|
||||||
auto* lightComp = SHComponentManager::GetComponent<SHLightComponent>(EVENT_DATA->lightEntity);
|
auto* lightComp = SHComponentManager::GetComponent<SHLightComponent>(EVENT_DATA->lightEntity);
|
||||||
std::string resourceName = "ShadowMap " + std::to_string(EVENT_DATA->lightEntity);
|
std::string resourceName = "ShadowMap " + std::to_string(EVENT_DATA->lightEntity);
|
||||||
Handle<SHSubpass> companionSubpass = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data())->GetSubpass("G-Buffer Write");
|
Handle<SHSubpass> companionSubpass = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data())->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_WRITE_SUBPASS);
|
||||||
|
|
||||||
if (EVENT_DATA->generateRenderer)
|
if (EVENT_DATA->generateRenderer)
|
||||||
{
|
{
|
||||||
|
@ -1196,6 +1194,16 @@ namespace SHADE
|
||||||
return fontLibrary;
|
return fontLibrary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Handle <SHSubpass> SHGraphicsSystem::GetUsableSubpass(std::string const& subpassName) const noexcept
|
||||||
|
{
|
||||||
|
if (usableSubpassesMapping.contains(subpassName))
|
||||||
|
{
|
||||||
|
return usableSubpassesMapping.at (subpassName);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
Handle<SHVkPipeline> SHGraphicsSystem::createDebugDrawPipeline(Handle<SHVkRenderpass> renderPass, Handle<SHSubpass> subpass, bool filled, bool triMesh, bool instanced)
|
Handle<SHVkPipeline> SHGraphicsSystem::createDebugDrawPipeline(Handle<SHVkRenderpass> renderPass, Handle<SHSubpass> subpass, bool filled, bool triMesh, bool instanced)
|
||||||
{
|
{
|
||||||
auto pipelineLayout = resourceManager.Create<SHVkPipelineLayout>
|
auto pipelineLayout = resourceManager.Create<SHVkPipelineLayout>
|
||||||
|
|
|
@ -399,6 +399,7 @@ namespace SHADE
|
||||||
uint32_t GetCurrentFrameIndex(void) const noexcept { return renderContext.GetCurrentFrame(); }
|
uint32_t GetCurrentFrameIndex(void) const noexcept { return renderContext.GetCurrentFrame(); }
|
||||||
SHFontLibrary const& GetFontLibrary (void) const noexcept;
|
SHFontLibrary const& GetFontLibrary (void) const noexcept;
|
||||||
const SHMeshLibrary& GetMeshLibrary() const noexcept { return meshLibrary; };
|
const SHMeshLibrary& GetMeshLibrary() const noexcept { return meshLibrary; };
|
||||||
|
Handle <SHSubpass> GetUsableSubpass(std::string const& subpassName) const noexcept;
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
/* Getters */
|
/* Getters */
|
||||||
|
@ -509,6 +510,8 @@ namespace SHADE
|
||||||
uint32_t resizeHeight = 1;
|
uint32_t resizeHeight = 1;
|
||||||
bool restoredFromMinimize = false;
|
bool restoredFromMinimize = false;
|
||||||
|
|
||||||
|
std::unordered_map<std::string, Handle<SHSubpass>> usableSubpassesMapping{};
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Helper Functions */
|
/* Helper Functions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -565,7 +565,7 @@ namespace SHADE
|
||||||
|
|
||||||
// TODO: The graph scope buffers were meant to bind vertex buffers and index buffers for meshes. Find a
|
// TODO: The graph scope buffers were meant to bind vertex buffers and index buffers for meshes. Find a
|
||||||
// better way to manage these
|
// better way to manage these
|
||||||
void SHRenderGraph::Execute(uint32_t frameIndex, Handle<SHVkDescriptorPool> descPool) noexcept
|
void SHRenderGraph::Execute(uint32_t frameIndex, Handle<SHVkDescriptorPool> descPool, const std::initializer_list<std::pair<Handle<SHVkBuffer>, uint32_t>> MESH_DATA) noexcept
|
||||||
{
|
{
|
||||||
auto cmdBuffer = commandBuffers[frameIndex];
|
auto cmdBuffer = commandBuffers[frameIndex];
|
||||||
cmdBuffer->BeginLabeledSegment(name);
|
cmdBuffer->BeginLabeledSegment(name);
|
||||||
|
@ -577,6 +577,7 @@ namespace SHADE
|
||||||
cmdBuffer->ForceSetPipelineLayout(batchingSystemData.dummyPipelineLayout, SH_PIPELINE_TYPE::COMPUTE);
|
cmdBuffer->ForceSetPipelineLayout(batchingSystemData.dummyPipelineLayout, SH_PIPELINE_TYPE::COMPUTE);
|
||||||
|
|
||||||
auto const& descMappings = SHGraphicsPredefinedData::GetMappings(SHGraphicsPredefinedData::SystemType::BATCHING);
|
auto const& descMappings = SHGraphicsPredefinedData::GetMappings(SHGraphicsPredefinedData::SystemType::BATCHING);
|
||||||
|
|
||||||
|
|
||||||
for (auto& node : nodes)
|
for (auto& node : nodes)
|
||||||
{
|
{
|
||||||
|
@ -585,6 +586,15 @@ namespace SHADE
|
||||||
// bind static global data
|
// bind static global data
|
||||||
SHGlobalDescriptorSets::BindStaticGlobalData(cmdBuffer, SH_PIPELINE_TYPE::GRAPHICS, descMappings.at(SHPredefinedDescriptorTypes::STATIC_DATA));
|
SHGlobalDescriptorSets::BindStaticGlobalData(cmdBuffer, SH_PIPELINE_TYPE::GRAPHICS, descMappings.at(SHPredefinedDescriptorTypes::STATIC_DATA));
|
||||||
|
|
||||||
|
// Bind all the buffers required for meshes
|
||||||
|
for (auto& [buffer, bindingPoint] : MESH_DATA)
|
||||||
|
{
|
||||||
|
if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eVertexBuffer)
|
||||||
|
cmdBuffer->BindVertexBuffer(bindingPoint, buffer, 0);
|
||||||
|
else if (buffer->GetUsageBits() & vk::BufferUsageFlagBits::eIndexBuffer)
|
||||||
|
cmdBuffer->BindIndexBuffer(buffer, 0);
|
||||||
|
}
|
||||||
|
|
||||||
node->Execute(cmdBuffer, descPool, frameIndex);
|
node->Execute(cmdBuffer, descPool, frameIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,7 +143,7 @@ namespace SHADE
|
||||||
|
|
||||||
void Generate (void) noexcept;
|
void Generate (void) noexcept;
|
||||||
void CheckForNodeComputes (void) noexcept;
|
void CheckForNodeComputes (void) noexcept;
|
||||||
void Execute (uint32_t frameIndex, Handle<SHVkDescriptorPool> descPool) noexcept;
|
void Execute (uint32_t frameIndex, Handle<SHVkDescriptorPool> descPool, const std::initializer_list<std::pair<Handle<SHVkBuffer>, uint32_t>> MESH_DATA) noexcept;
|
||||||
void Begin (uint32_t frameIndex) noexcept;
|
void Begin (uint32_t frameIndex) noexcept;
|
||||||
void End (uint32_t frameIndex) noexcept;
|
void End (uint32_t frameIndex) noexcept;
|
||||||
void FinaliseBatch (uint32_t frameIndex, Handle<SHVkDescriptorPool> descPool);
|
void FinaliseBatch (uint32_t frameIndex, Handle<SHVkDescriptorPool> descPool);
|
||||||
|
|
|
@ -474,7 +474,7 @@ namespace SHADE
|
||||||
|
|
||||||
*/
|
*/
|
||||||
/***************************************************************************/
|
/***************************************************************************/
|
||||||
Handle<SHRenderGraphNode> const& SHSubpass::GetParentNode(void) const noexcept
|
Handle<SHRenderGraphNode> SHSubpass::GetParentNode(void) const noexcept
|
||||||
{
|
{
|
||||||
return parentNode;
|
return parentNode;
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,7 +159,7 @@ namespace SHADE
|
||||||
/*-----------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------*/
|
||||||
void SetCompanionSubpass (Handle<SHSubpass> companion, Handle<SHVkPipeline> pipeline) noexcept;
|
void SetCompanionSubpass (Handle<SHSubpass> companion, Handle<SHVkPipeline> pipeline) noexcept;
|
||||||
|
|
||||||
Handle<SHRenderGraphNode> const& GetParentNode(void) const noexcept;
|
Handle<SHRenderGraphNode> GetParentNode(void) const noexcept;
|
||||||
SHSubPassIndex GetIndex() const noexcept;
|
SHSubPassIndex GetIndex() const noexcept;
|
||||||
Handle<SHSuperBatch> GetSuperBatch(void) const noexcept;
|
Handle<SHSuperBatch> GetSuperBatch(void) const noexcept;
|
||||||
std::vector<vk::AttachmentReference> const& GetColorAttachmentReferences (void) const noexcept;
|
std::vector<vk::AttachmentReference> const& GetColorAttachmentReferences (void) const noexcept;
|
||||||
|
|
|
@ -280,14 +280,8 @@ namespace SHADE
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Grab subpass from worldRenderer
|
// Grab subpass
|
||||||
auto renderPass = gfxSystem->GetPrimaryRenderpass();
|
auto subPass = gfxSystem->GetUsableSubpass(assetData.subpassName);
|
||||||
if (!renderPass)
|
|
||||||
{
|
|
||||||
SHLOG_ERROR("[SHResourceManager] Failed to load material as RenderPass could not be found.");
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
auto subPass = renderPass->GetSubpass(assetData.subpassName);
|
|
||||||
if (!subPass)
|
if (!subPass)
|
||||||
{
|
{
|
||||||
SHLOG_ERROR("[SHResourceManager] Failed to load material as SubPass could not be found.");
|
SHLOG_ERROR("[SHResourceManager] Failed to load material as SubPass could not be found.");
|
||||||
|
|
|
@ -31,6 +31,9 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
#include "Assets/SHAssetMacros.h"
|
#include "Assets/SHAssetMacros.h"
|
||||||
#include "Tools/Utilities/SHExecUtilities.h"
|
#include "Tools/Utilities/SHExecUtilities.h"
|
||||||
#include "SHVSUtilities.h"
|
#include "SHVSUtilities.h"
|
||||||
|
#include "UI/Events/SHButtonClickEvent.h"
|
||||||
|
#include "UI/SHUIComponent.h"
|
||||||
|
#include "Editor/EditorWindow/MenuBar/SHEditorMenuBar.h"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
@ -121,6 +124,11 @@ namespace SHADE
|
||||||
csScriptsRemoveAllImmediately(entity, callOnDestroy);
|
csScriptsRemoveAllImmediately(entity, callOnDestroy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SHScriptEngine::RemoveAllScriptsFromAllImmediately(bool callOnDestroy)
|
||||||
|
{
|
||||||
|
csScriptRemoveAllForAllNow(callOnDestroy);
|
||||||
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Script Serialisation Functions */
|
/* Script Serialisation Functions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
@ -346,6 +354,21 @@ namespace SHADE
|
||||||
return eventData->handle;
|
return eventData->handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SHEventHandle SHScriptEngine::onUIElementRemoved(SHEventPtr eventPtr)
|
||||||
|
{
|
||||||
|
auto eventData = reinterpret_cast<const SHEventSpec<SHComponentRemovedEvent>*>(eventPtr.get());
|
||||||
|
if (eventData->data->removedComponentType == ComponentFamily::GetID<SHUIComponent>())
|
||||||
|
csUIElementOnRemoved(eventData->data->eid);
|
||||||
|
return eventData->handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
SHEventHandle SHScriptEngine::onUIElementClicked(SHEventPtr eventPtr)
|
||||||
|
{
|
||||||
|
auto eventData = reinterpret_cast<const SHEventSpec<SHButtonClickEvent>*>(eventPtr.get());
|
||||||
|
csUIElementOnClicked(eventData->data->EID);
|
||||||
|
return eventData->handle;
|
||||||
|
}
|
||||||
|
|
||||||
SHEventHandle SHScriptEngine::onSceneNodeChildrenAdded(SHEventPtr eventPtr)
|
SHEventHandle SHScriptEngine::onSceneNodeChildrenAdded(SHEventPtr eventPtr)
|
||||||
{
|
{
|
||||||
auto eventData = reinterpret_cast<const SHEventSpec<SHSceneGraphAddChildEvent>*>(eventPtr.get());
|
auto eventData = reinterpret_cast<const SHEventSpec<SHSceneGraphAddChildEvent>*>(eventPtr.get());
|
||||||
|
@ -360,6 +383,13 @@ namespace SHADE
|
||||||
return eventData->handle;
|
return eventData->handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SHEventHandle SHScriptEngine::onSceneDestroyed(SHEventPtr eventPtr)
|
||||||
|
{
|
||||||
|
auto eventData = reinterpret_cast<const SHEventSpec<SHEditorStateChangeEvent>*>(eventPtr.get());
|
||||||
|
csScriptRemoveAllForAllNow(true);
|
||||||
|
return eventData->handle;
|
||||||
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Helper Functions */
|
/* Helper Functions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
@ -460,6 +490,12 @@ namespace SHADE
|
||||||
DEFAULT_CSHARP_NAMESPACE + ".ScriptStore",
|
DEFAULT_CSHARP_NAMESPACE + ".ScriptStore",
|
||||||
"RemoveAllScriptsImmediately"
|
"RemoveAllScriptsImmediately"
|
||||||
);
|
);
|
||||||
|
csScriptRemoveAllForAllNow = dotNet.GetFunctionPtr<CsScriptBoolFuncPtr>
|
||||||
|
(
|
||||||
|
DEFAULT_CSHARP_LIB_NAME,
|
||||||
|
DEFAULT_CSHARP_NAMESPACE + ".ScriptStore",
|
||||||
|
"RemoveAllScriptsFromAllImmediately"
|
||||||
|
);
|
||||||
csScriptsSerialiseYaml = dotNet.GetFunctionPtr<CsScriptSerialiseYamlFuncPtr>
|
csScriptsSerialiseYaml = dotNet.GetFunctionPtr<CsScriptSerialiseYamlFuncPtr>
|
||||||
(
|
(
|
||||||
DEFAULT_CSHARP_LIB_NAME,
|
DEFAULT_CSHARP_LIB_NAME,
|
||||||
|
@ -490,6 +526,18 @@ namespace SHADE
|
||||||
DEFAULT_CSHARP_NAMESPACE + ".ChildListCache",
|
DEFAULT_CSHARP_NAMESPACE + ".ChildListCache",
|
||||||
"OnChildrenChanged"
|
"OnChildrenChanged"
|
||||||
);
|
);
|
||||||
|
csUIElementOnRemoved = dotNet.GetFunctionPtr<CsEventRelayFuncPtr>
|
||||||
|
(
|
||||||
|
DEFAULT_CSHARP_LIB_NAME,
|
||||||
|
DEFAULT_CSHARP_NAMESPACE + ".UIElement",
|
||||||
|
"OnComponentRemoved"
|
||||||
|
);
|
||||||
|
csUIElementOnClicked = dotNet.GetFunctionPtr<CsEventRelayFuncPtr>
|
||||||
|
(
|
||||||
|
DEFAULT_CSHARP_LIB_NAME,
|
||||||
|
DEFAULT_CSHARP_NAMESPACE + ".UIElement",
|
||||||
|
"OnClicked"
|
||||||
|
);
|
||||||
csEditorRenderScripts = dotNet.GetFunctionPtr<CsScriptEditorFuncPtr>
|
csEditorRenderScripts = dotNet.GetFunctionPtr<CsScriptEditorFuncPtr>
|
||||||
(
|
(
|
||||||
DEFAULT_CSHARP_LIB_NAME,
|
DEFAULT_CSHARP_LIB_NAME,
|
||||||
|
@ -520,6 +568,14 @@ namespace SHADE
|
||||||
};
|
};
|
||||||
SHEventManager::SubscribeTo(SH_ENTITY_DESTROYED_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(destroyedEventReceiver));
|
SHEventManager::SubscribeTo(SH_ENTITY_DESTROYED_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(destroyedEventReceiver));
|
||||||
|
|
||||||
|
/* Editor */
|
||||||
|
// Register for editor state change event
|
||||||
|
std::shared_ptr<SHEventReceiverSpec<SHScriptEngine>> destroyedSceneEventReceiver
|
||||||
|
{
|
||||||
|
std::make_shared<SHEventReceiverSpec<SHScriptEngine>>(this, &SHScriptEngine::onSceneDestroyed)
|
||||||
|
};
|
||||||
|
SHEventManager::SubscribeTo(SH_EDITOR_ON_STOP_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(destroyedSceneEventReceiver));
|
||||||
|
|
||||||
/* Colliders */
|
/* Colliders */
|
||||||
// Register for collider added event
|
// Register for collider added event
|
||||||
std::shared_ptr<SHEventReceiverSpec<SHScriptEngine>> addedColliderEventReceiver
|
std::shared_ptr<SHEventReceiverSpec<SHScriptEngine>> addedColliderEventReceiver
|
||||||
|
@ -540,6 +596,18 @@ namespace SHADE
|
||||||
};
|
};
|
||||||
SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(removedColliderComponentEventReceiver));
|
SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(removedColliderComponentEventReceiver));
|
||||||
|
|
||||||
|
/* UI Element */
|
||||||
|
std::shared_ptr<SHEventReceiverSpec<SHScriptEngine>> removedUIElementEventReceiver
|
||||||
|
{
|
||||||
|
std::make_shared<SHEventReceiverSpec<SHScriptEngine>>(this, &SHScriptEngine::onUIElementRemoved)
|
||||||
|
};
|
||||||
|
SHEventManager::SubscribeTo(SH_COMPONENT_REMOVED_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(removedUIElementEventReceiver));
|
||||||
|
std::shared_ptr<SHEventReceiverSpec<SHScriptEngine>> clickedUIElementEventReceiver
|
||||||
|
{
|
||||||
|
std::make_shared<SHEventReceiverSpec<SHScriptEngine>>(this, &SHScriptEngine::onUIElementClicked)
|
||||||
|
};
|
||||||
|
SHEventManager::SubscribeTo(SH_BUTTON_CLICK_EVENT, std::dynamic_pointer_cast<SHEventReceiver>(clickedUIElementEventReceiver));
|
||||||
|
|
||||||
/* SceneGraph */
|
/* SceneGraph */
|
||||||
// Register for SceneNode child added event
|
// Register for SceneNode child added event
|
||||||
std::shared_ptr<SHEventReceiverSpec<SHScriptEngine>> addChildEventReceiver
|
std::shared_ptr<SHEventReceiverSpec<SHScriptEngine>> addChildEventReceiver
|
||||||
|
|
|
@ -148,6 +148,13 @@ namespace SHADE
|
||||||
/// play mode.
|
/// play mode.
|
||||||
/// </param>
|
/// </param>
|
||||||
void RemoveAllScriptsImmediately(EntityID entity, bool callOnDestroy);
|
void RemoveAllScriptsImmediately(EntityID entity, bool callOnDestroy);
|
||||||
|
/// <summary>
|
||||||
|
/// Removes all Scripts attached to all entities immediately. The
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="callOnDestroy">
|
||||||
|
/// Whether or not to call OnDestroy on the scripts.
|
||||||
|
/// </param>
|
||||||
|
void RemoveAllScriptsFromAllImmediately(bool callOnDestroy);
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
/* Script Serialisation Functions */
|
/* Script Serialisation Functions */
|
||||||
|
@ -235,6 +242,7 @@ namespace SHADE
|
||||||
using CsScriptManipFuncPtr = bool(*)(EntityID, const char*);
|
using CsScriptManipFuncPtr = bool(*)(EntityID, const char*);
|
||||||
using CsScriptBasicFuncPtr = void(*)(EntityID);
|
using CsScriptBasicFuncPtr = void(*)(EntityID);
|
||||||
using CsScriptOptionalFuncPtr = void(*)(EntityID, bool);
|
using CsScriptOptionalFuncPtr = void(*)(EntityID, bool);
|
||||||
|
using CsScriptBoolFuncPtr = void(*)(bool);
|
||||||
using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*);
|
using CsScriptSerialiseYamlFuncPtr = bool(*)(EntityID, void*);
|
||||||
using CsScriptDeserialiseYamlFuncPtr = bool(*)(EntityID, const void*);
|
using CsScriptDeserialiseYamlFuncPtr = bool(*)(EntityID, const void*);
|
||||||
using CsScriptEditorFuncPtr = void(*)(EntityID);
|
using CsScriptEditorFuncPtr = void(*)(EntityID);
|
||||||
|
@ -271,12 +279,15 @@ namespace SHADE
|
||||||
CsScriptManipFuncPtr csScriptsAdd = nullptr;
|
CsScriptManipFuncPtr csScriptsAdd = nullptr;
|
||||||
CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr;
|
CsScriptBasicFuncPtr csScriptsRemoveAll = nullptr;
|
||||||
CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr;
|
CsScriptOptionalFuncPtr csScriptsRemoveAllImmediately = nullptr;
|
||||||
|
CsScriptBoolFuncPtr csScriptRemoveAllForAllNow = nullptr;
|
||||||
CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml = nullptr;
|
CsScriptSerialiseYamlFuncPtr csScriptsSerialiseYaml = nullptr;
|
||||||
CsScriptDeserialiseYamlFuncPtr csScriptsDeserialiseYaml = nullptr;
|
CsScriptDeserialiseYamlFuncPtr csScriptsDeserialiseYaml = nullptr;
|
||||||
// - Events
|
// - Events
|
||||||
CsEventRelayFuncPtr csColliderOnListChanged = nullptr;
|
CsEventRelayFuncPtr csColliderOnListChanged = nullptr;
|
||||||
CsEventRelayFuncPtr csColliderOnRemoved = nullptr;
|
CsEventRelayFuncPtr csColliderOnRemoved = nullptr;
|
||||||
CsEventRelayFuncPtr csSceneNodeChildrenChanged = nullptr;
|
CsEventRelayFuncPtr csSceneNodeChildrenChanged = nullptr;
|
||||||
|
CsEventRelayFuncPtr csUIElementOnRemoved = nullptr;
|
||||||
|
CsEventRelayFuncPtr csUIElementOnClicked = nullptr;
|
||||||
// - Editor
|
// - Editor
|
||||||
CsScriptEditorFuncPtr csEditorRenderScripts = nullptr;
|
CsScriptEditorFuncPtr csEditorRenderScripts = nullptr;
|
||||||
CsFuncPtr csEditorUndo = nullptr;
|
CsFuncPtr csEditorUndo = nullptr;
|
||||||
|
@ -289,8 +300,11 @@ namespace SHADE
|
||||||
SHEventHandle onColliderAdded(SHEventPtr eventPtr);
|
SHEventHandle onColliderAdded(SHEventPtr eventPtr);
|
||||||
SHEventHandle onColliderRemoved(SHEventPtr eventPtr);
|
SHEventHandle onColliderRemoved(SHEventPtr eventPtr);
|
||||||
SHEventHandle onColliderComponentRemoved(SHEventPtr eventPtr);
|
SHEventHandle onColliderComponentRemoved(SHEventPtr eventPtr);
|
||||||
|
SHEventHandle onUIElementRemoved(SHEventPtr eventPtr);
|
||||||
|
SHEventHandle onUIElementClicked(SHEventPtr eventPtr);
|
||||||
SHEventHandle onSceneNodeChildrenAdded(SHEventPtr eventPtr);
|
SHEventHandle onSceneNodeChildrenAdded(SHEventPtr eventPtr);
|
||||||
SHEventHandle onSceneNodeChildrenRemoved(SHEventPtr eventPtr);
|
SHEventHandle onSceneNodeChildrenRemoved(SHEventPtr eventPtr);
|
||||||
|
SHEventHandle onSceneDestroyed(SHEventPtr eventPtr);
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
/* Helper Functions */
|
/* Helper Functions */
|
||||||
|
|
|
@ -65,7 +65,7 @@ namespace SHADE
|
||||||
/* System Routine Functions - FrameCleanUpRoutine */
|
/* System Routine Functions - FrameCleanUpRoutine */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
SHScriptEngine::FrameCleanUpRoutine::FrameCleanUpRoutine()
|
SHScriptEngine::FrameCleanUpRoutine::FrameCleanUpRoutine()
|
||||||
: SHSystemRoutine("Script Engine Frame Clean Up", true)
|
: SHSystemRoutine("Script Engine Frame Clean Up", true)
|
||||||
{}
|
{}
|
||||||
void SHScriptEngine::FrameCleanUpRoutine::Execute(double) noexcept
|
void SHScriptEngine::FrameCleanUpRoutine::Execute(double) noexcept
|
||||||
{
|
{
|
||||||
|
|
|
@ -182,7 +182,7 @@ namespace SHADE
|
||||||
mousePos.x = x;
|
mousePos.x = x;
|
||||||
mousePos.y = y;
|
mousePos.y = y;
|
||||||
auto ws = SHSystemManager::GetSystem<SHGraphicsSystem>()->GetWindow()->GetWindowSize();
|
auto ws = SHSystemManager::GetSystem<SHGraphicsSystem>()->GetWindow()->GetWindowSize();
|
||||||
windowSize = { ws.first,ws.second };
|
windowSize = { static_cast<float>(ws.first), static_cast<float>(ws.second) };
|
||||||
mousePos /= windowSize;
|
mousePos /= windowSize;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -300,7 +300,7 @@ namespace SHADE
|
||||||
mousePos.x = x;
|
mousePos.x = x;
|
||||||
mousePos.y = y;
|
mousePos.y = y;
|
||||||
auto ws = SHSystemManager::GetSystem<SHGraphicsSystem>()->GetWindow()->GetWindowSize();
|
auto ws = SHSystemManager::GetSystem<SHGraphicsSystem>()->GetWindow()->GetWindowSize();
|
||||||
windowSize = { ws.first,ws.second };
|
windowSize = { static_cast<float>(ws.first), static_cast<float>(ws.second) };
|
||||||
mousePos /= windowSize;
|
mousePos /= windowSize;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,8 @@ namespace SHADE
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
Asset::operator bool(Asset asset)
|
Asset::operator bool(Asset asset)
|
||||||
{
|
{
|
||||||
|
static_assert(INVALID_ASSET_ID == 0,
|
||||||
|
"This must be 0 due to the way structs are default initialized to ensure Assets are invalid if default constructed.");
|
||||||
return asset.NativeAssetID != INVALID_ASSET_ID;
|
return asset.NativeAssetID != INVALID_ASSET_ID;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -22,7 +22,8 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Struct that contains native asset information.
|
/// Struct that contains native asset information. Default constructed assets have
|
||||||
|
/// an internval value of 0 which is the invalid ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public value struct Asset
|
public value struct Asset
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,34 +30,36 @@ namespace SHADE
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Properties */
|
/* Properties */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
SHADE::MeshAsset^ Renderable::Mesh::get()
|
MeshAsset Renderable::Mesh::get()
|
||||||
{
|
{
|
||||||
return gcnew SHADE::MeshAsset(GetNativeComponent()->GetMesh());
|
auto mesh = GetNativeComponent()->GetMesh();
|
||||||
|
return mesh ? MeshAsset(mesh) : MeshAsset();
|
||||||
}
|
}
|
||||||
void Renderable::Mesh::set(SHADE::MeshAsset^ value)
|
void Renderable::Mesh::set(MeshAsset value)
|
||||||
{
|
{
|
||||||
if (value == nullptr)
|
if (value)
|
||||||
{
|
{
|
||||||
GetNativeComponent()->SetMesh(Handle<SHMesh>());
|
GetNativeComponent()->SetMesh(Handle<SHMesh>());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetNativeComponent()->SetMesh(value->NativeObject);
|
GetNativeComponent()->SetMesh(value.NativeObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SHADE::Material^ Renderable::Material::get()
|
SHADE::Material Renderable::Material::get()
|
||||||
{
|
{
|
||||||
return gcnew SHADE::Material(GetNativeComponent()->GetMaterial());
|
auto mat = GetNativeComponent()->GetMaterial();
|
||||||
|
return mat ? SHADE::Material(mat) : SHADE::Material();
|
||||||
}
|
}
|
||||||
void Renderable::Material::set(SHADE::Material^ value)
|
void Renderable::Material::set(SHADE::Material value)
|
||||||
{
|
{
|
||||||
if (value == nullptr)
|
if (value)
|
||||||
{
|
{
|
||||||
GetNativeComponent()->SetMaterial(Handle<SHMaterialInstance>());
|
GetNativeComponent()->SetMaterial(Handle<SHMaterialInstance>());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetNativeComponent()->SetMaterial(Handle<SHMaterialInstance>(Convert::ToNative(value->NativeObjectHandle)));
|
GetNativeComponent()->SetMaterial(Handle<SHMaterialInstance>(Convert::ToNative(value.NativeObjectHandle)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
System::Byte Renderable::LightLayer::get()
|
System::Byte Renderable::LightLayer::get()
|
||||||
|
|
|
@ -49,18 +49,18 @@ namespace SHADE
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Mesh used to render this Renderable.
|
/// Mesh used to render this Renderable.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
property SHADE::MeshAsset^ Mesh
|
property MeshAsset Mesh
|
||||||
{
|
{
|
||||||
SHADE::MeshAsset^ get();
|
MeshAsset get();
|
||||||
void set(SHADE::MeshAsset^ value);
|
void set(MeshAsset value);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Material used to render this Renderable.
|
/// Material used to render this Renderable.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
property SHADE::Material^ Material
|
property SHADE::Material Material
|
||||||
{
|
{
|
||||||
SHADE::Material^ get();
|
SHADE::Material get();
|
||||||
void set(SHADE::Material^ value);
|
void set(SHADE::Material value);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Material used to render this Renderable.
|
/// Material used to render this Renderable.
|
||||||
|
|
|
@ -39,19 +39,20 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
GetNativeComponent()->SetText(Convert::ToNative(value));
|
GetNativeComponent()->SetText(Convert::ToNative(value));
|
||||||
}
|
}
|
||||||
SHADE::FontAsset^ TextRenderable::Font::get()
|
FontAsset TextRenderable::Font::get()
|
||||||
{
|
{
|
||||||
return gcnew SHADE::FontAsset(GetNativeComponent()->GetFont());
|
auto font = GetNativeComponent()->GetFont();
|
||||||
|
return font ? FontAsset(font) : FontAsset();
|
||||||
}
|
}
|
||||||
void TextRenderable::Font::set(SHADE::FontAsset^ value)
|
void TextRenderable::Font::set(FontAsset value)
|
||||||
{
|
{
|
||||||
if (value == nullptr)
|
if (value)
|
||||||
{
|
{
|
||||||
GetNativeComponent()->SetFont(Handle<SHFont>());
|
GetNativeComponent()->SetFont(Handle<SHFont>());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetNativeComponent()->SetFont(value->NativeObject);
|
GetNativeComponent()->SetFont(value.NativeObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,10 +55,10 @@ namespace SHADE
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Font to use to render using this TextRenderable.
|
/// Font to use to render using this TextRenderable.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
property SHADE::FontAsset^ Font
|
property FontAsset Font
|
||||||
{
|
{
|
||||||
SHADE::FontAsset^ get();
|
FontAsset get();
|
||||||
void set(SHADE::FontAsset^ value);
|
void set(FontAsset value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file UIElement.cxx
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Jan 30, 2023
|
||||||
|
\brief Contains the definition of the functions of the managed UIElement class.
|
||||||
|
|
||||||
|
Note: This file is written in C++17/CLI.
|
||||||
|
|
||||||
|
Copyright (C) 2023 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.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
// Precompiled Headers
|
||||||
|
#include "SHpch.h"
|
||||||
|
// Primary Header
|
||||||
|
#include "UIElement.hxx"
|
||||||
|
#include "Assets/NativeAsset.hxx"
|
||||||
|
#include "Utility/Convert.hxx"
|
||||||
|
#include "Utility/Debug.hxx"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Constructors */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
UIElement::UIElement(Entity entity)
|
||||||
|
: Component(entity)
|
||||||
|
{}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Properties */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
CallbackEvent^ UIElement::OnClick::get()
|
||||||
|
{
|
||||||
|
// Create map if it wasn't before
|
||||||
|
if (onClickEventMap == nullptr)
|
||||||
|
{
|
||||||
|
onClickEventMap = gcnew System::Collections::Generic::Dictionary<Entity, CallbackEvent ^>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create event if it wasn't before
|
||||||
|
if (!onClickEventMap->ContainsKey(owner.EntityId))
|
||||||
|
{
|
||||||
|
onClickEventMap->Add(owner.EntityId, gcnew CallbackEvent());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the event
|
||||||
|
return onClickEventMap[owner.EntityId];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Event Handling Functions */
|
||||||
|
/*-----------------------------------------------------------------------------a----*/
|
||||||
|
void UIElement::OnComponentRemoved(EntityID entity)
|
||||||
|
{
|
||||||
|
SAFE_NATIVE_CALL_BEGIN
|
||||||
|
// Remove the event if it contained an event
|
||||||
|
if (onClickEventMap != nullptr && onClickEventMap->ContainsKey(entity))
|
||||||
|
{
|
||||||
|
onClickEventMap->Remove(entity);
|
||||||
|
}
|
||||||
|
SAFE_NATIVE_CALL_END("UIElement.OnComponentRemoved")
|
||||||
|
}
|
||||||
|
void UIElement::OnClicked(EntityID entity)
|
||||||
|
{
|
||||||
|
SAFE_NATIVE_CALL_BEGIN
|
||||||
|
// Remove the event if it contained an event
|
||||||
|
if (onClickEventMap != nullptr && onClickEventMap->ContainsKey(entity))
|
||||||
|
{
|
||||||
|
onClickEventMap[entity]->Invoke();
|
||||||
|
}
|
||||||
|
SAFE_NATIVE_CALL_END("UIElement.OnClicked")
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file UIElement.hxx
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Jan 30, 2023
|
||||||
|
\brief Contains the definition of the managed UIElement class with the
|
||||||
|
declaration of functions for working with it.
|
||||||
|
|
||||||
|
Note: This file is written in C++17/CLI.
|
||||||
|
|
||||||
|
Copyright (C) 2023 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/Vector3.hxx"
|
||||||
|
#include "Math/Quaternion.hxx"
|
||||||
|
// External Dependencies
|
||||||
|
#include "UI/SHUIComponent.h"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// CLR version of the SHADE Engine's SHUIComponent.
|
||||||
|
/// </summary>
|
||||||
|
public ref class UIElement : public Component<SHUIComponent>
|
||||||
|
{
|
||||||
|
internal:
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Constructors */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a UIElement Component that represents a native SHUIComponent
|
||||||
|
/// tied to the specified Entity.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">Entity that this Component will be tied to.</param>
|
||||||
|
UIElement(Entity entity);
|
||||||
|
|
||||||
|
public:
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Properties */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Event that is raised when this UIElement is clicked.
|
||||||
|
/// </summary>
|
||||||
|
property CallbackEvent^ OnClick
|
||||||
|
{
|
||||||
|
CallbackEvent^ get();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Event Handling Functions */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// To be called from native code when this component is removed.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity which has it's component removed.</param>
|
||||||
|
static void OnComponentRemoved(EntityID entity);
|
||||||
|
/// <summary>
|
||||||
|
/// To be called from native code when this component is clicked.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="entity">The entity which was clicked.</param>
|
||||||
|
static void OnClicked(EntityID entity);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Static Data Members */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
static System::Collections::Generic::Dictionary<Entity, CallbackEvent^>^ onClickEventMap;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
#include "Tools/Logger/SHLog.h"
|
#include "Tools/Logger/SHLog.h"
|
||||||
#include "Graphics\MiddleEnd\Interface\SHRenderable.h"
|
#include "Graphics\MiddleEnd\Interface\SHRenderable.h"
|
||||||
#include "Graphics\MiddleEnd\TextRendering\SHTextRenderableComponent.h"
|
#include "Graphics\MiddleEnd\TextRendering\SHTextRenderableComponent.h"
|
||||||
|
#include "UI\SHUIComponent.h"
|
||||||
// Project Headers
|
// Project Headers
|
||||||
#include "Utility/Convert.hxx"
|
#include "Utility/Convert.hxx"
|
||||||
#include "Utility/Debug.hxx"
|
#include "Utility/Debug.hxx"
|
||||||
|
@ -40,6 +41,7 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
#include "Components/Light.hxx"
|
#include "Components/Light.hxx"
|
||||||
#include "Components\Renderable.hxx"
|
#include "Components\Renderable.hxx"
|
||||||
#include "Components\TextRenderable.hxx"
|
#include "Components\TextRenderable.hxx"
|
||||||
|
#include "Components\UIElement.hxx"
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
@ -324,6 +326,7 @@ namespace SHADE
|
||||||
componentMap.Add(createComponentSet<SHCameraArmComponent, CameraArm>());
|
componentMap.Add(createComponentSet<SHCameraArmComponent, CameraArm>());
|
||||||
componentMap.Add(createComponentSet<SHLightComponent, Light>());
|
componentMap.Add(createComponentSet<SHLightComponent, Light>());
|
||||||
componentMap.Add(createComponentSet<SHTextRenderableComponent, TextRenderable>());
|
componentMap.Add(createComponentSet<SHTextRenderableComponent, TextRenderable>());
|
||||||
|
componentMap.Add(createComponentSet<SHUIComponent, UIElement>());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -259,6 +259,13 @@ namespace SHADE
|
||||||
ScriptStore::RemoveScript<T>(entity);
|
ScriptStore::RemoveScript<T>(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameObject::RemoveScript(Script^ script)
|
||||||
|
{
|
||||||
|
if (!valid)
|
||||||
|
throw gcnew System::NullReferenceException();
|
||||||
|
ScriptStore::RemoveScript(entity, script);
|
||||||
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Scene Graph Functions */
|
/* Scene Graph Functions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
|
@ -259,6 +259,12 @@ namespace SHADE
|
||||||
/// <typeparam name="T">Type of Scripts to remove.</typeparam>
|
/// <typeparam name="T">Type of Scripts to remove.</typeparam>
|
||||||
generic<typename T> where T : ref class, Script
|
generic<typename T> where T : ref class, Script
|
||||||
void RemoveScript();
|
void RemoveScript();
|
||||||
|
/// <summary>
|
||||||
|
/// Removes a specific script from this script's parent.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="script">The script to remove.</param>
|
||||||
|
/// <returns>True if successfully removed. False otherwise.</returns>
|
||||||
|
void RemoveScript(Script^ script);
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
/* Scene Graph Functions */
|
/* Scene Graph Functions */
|
||||||
|
|
|
@ -126,6 +126,11 @@ namespace SHADE
|
||||||
ScriptStore::RemoveScript<T>(owner.GetEntity());
|
ScriptStore::RemoveScript<T>(owner.GetEntity());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Script::RemoveScript(Script^ script)
|
||||||
|
{
|
||||||
|
ScriptStore::RemoveScript(owner.GetEntity(), script);
|
||||||
|
}
|
||||||
|
|
||||||
Script::operator bool(Script^ s)
|
Script::operator bool(Script^ s)
|
||||||
{
|
{
|
||||||
return s != nullptr;
|
return s != nullptr;
|
||||||
|
|
|
@ -198,6 +198,12 @@ namespace SHADE
|
||||||
/// </typeparam>
|
/// </typeparam>
|
||||||
generic<typename T> where T : ref class, Script
|
generic<typename T> where T : ref class, Script
|
||||||
void RemoveScript();
|
void RemoveScript();
|
||||||
|
/// <summary>
|
||||||
|
/// Removes a specific script from this script's parent.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="script">The script to remove.</param>
|
||||||
|
/// <returns>True if successfully removed. False otherwise.</returns>
|
||||||
|
void RemoveScript(Script^ script);
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
/* Operator Overloads */
|
/* Operator Overloads */
|
||||||
|
|
|
@ -400,24 +400,24 @@ namespace SHADE
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Clear all
|
// Clear all
|
||||||
System::Collections::Generic::List<Script^>^ scriptList = scripts[entity];
|
removeAllScriptsImmediately(entity, callOnDestroy && Application::IsPlaying || Application::IsPaused);
|
||||||
for each (Script ^ script in scriptList)
|
SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore")
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptStore::RemoveAllScriptsFromAllImmediately(bool callOnDestroy)
|
||||||
|
{
|
||||||
|
SAFE_NATIVE_CALL_BEGIN
|
||||||
|
// Clear all
|
||||||
|
for each (System::Collections::Generic::KeyValuePair<Entity, ScriptList^>^ pair in scripts)
|
||||||
{
|
{
|
||||||
// Call OnDestroy only if indicated and also if the game has run
|
removeAllScriptsImmediately(pair->Key, callOnDestroy);
|
||||||
if (callOnDestroy && Application::IsPlaying || Application::IsPaused)
|
|
||||||
{
|
|
||||||
script->OnDestroy();
|
|
||||||
}
|
|
||||||
script->OnDetached();
|
|
||||||
|
|
||||||
// Remove scripts from awakening if they were not woken up to begin with
|
|
||||||
awakeList.Remove(script);
|
|
||||||
startList.Remove(script);
|
|
||||||
}
|
}
|
||||||
scriptList->Clear();
|
awakeList.Clear();
|
||||||
|
startList.Clear();
|
||||||
|
disposalQueue.Clear();
|
||||||
SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore")
|
SAFE_NATIVE_CALL_END_N("SHADE_Managed.ScriptStore")
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* Lifecycle Functions */
|
/* Lifecycle Functions */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
@ -798,6 +798,25 @@ namespace SHADE
|
||||||
script->OnDetached();
|
script->OnDetached();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScriptStore::removeAllScriptsImmediately(Entity entity, bool callOnDestroy)
|
||||||
|
{
|
||||||
|
System::Collections::Generic::List<Script^>^ scriptList = scripts[entity];
|
||||||
|
for each (Script ^ script in scriptList)
|
||||||
|
{
|
||||||
|
// Call OnDestroy only if indicated and also if the game has run
|
||||||
|
if (callOnDestroy)
|
||||||
|
{
|
||||||
|
script->OnDestroy();
|
||||||
|
}
|
||||||
|
script->OnDetached();
|
||||||
|
|
||||||
|
// Remove scripts from awakening if they were not woken up to begin with
|
||||||
|
awakeList.Remove(script);
|
||||||
|
startList.Remove(script);
|
||||||
|
}
|
||||||
|
scriptList->Clear();
|
||||||
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
/* Select Many */
|
/* Select Many */
|
||||||
|
|
|
@ -203,7 +203,7 @@ namespace SHADE
|
||||||
generic<typename T> where T : ref class, Script
|
generic<typename T> where T : ref class, Script
|
||||||
static void RemoveScript(Entity entity);
|
static void RemoveScript(Entity entity);
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Removes a specific script from the
|
/// Removes a specific script from the specified entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="entity">The entity to remove the script from.</param>
|
/// <param name="entity">The entity to remove the script from.</param>
|
||||||
/// <param name="script">The script to remove.</param>
|
/// <param name="script">The script to remove.</param>
|
||||||
|
@ -228,6 +228,13 @@ namespace SHADE
|
||||||
/// play mode.
|
/// play mode.
|
||||||
/// </param>
|
/// </param>
|
||||||
static void RemoveAllScriptsImmediately(Entity entity, bool callOnDestroy);
|
static void RemoveAllScriptsImmediately(Entity entity, bool callOnDestroy);
|
||||||
|
/// <summary>
|
||||||
|
/// Removes all Scripts attached to all entities immediately. The
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="callOnDestroy">
|
||||||
|
/// Whether or not to call OnDestroy on the scripts.
|
||||||
|
/// </param>
|
||||||
|
static void RemoveAllScriptsFromAllImmediately(bool callOnDestroy);
|
||||||
|
|
||||||
internal:
|
internal:
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
@ -343,6 +350,7 @@ namespace SHADE
|
||||||
/* Helper Functions */
|
/* Helper Functions */
|
||||||
/*-----------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------*/
|
||||||
static void removeScript(Script^ script);
|
static void removeScript(Script^ script);
|
||||||
|
static void removeAllScriptsImmediately(Entity script, bool callOnDestroy);
|
||||||
static void refreshScriptTypeList();
|
static void refreshScriptTypeList();
|
||||||
static void getGenericMethods();
|
static void getGenericMethods();
|
||||||
static System::Type^ getScriptType(System::String^ scriptName);
|
static System::Type^ getScriptType(System::String^ scriptName);
|
||||||
|
|
Loading…
Reference in New Issue