Merge branch 'develop' into 'fearure/Yarn_FP'

Develop

See merge request aibis-dream/aibis-dream!203
This commit is contained in:
2025-01-18 11:42:40 +00:00
46 changed files with 1243 additions and 1734 deletions
@@ -1,9 +0,0 @@
using UnityEditor;
namespace AibisDream.SystemEditor
{
[CustomEditor(typeof(EngineSystem))]
public class EngineSystemEditor : SystemHasDataEditor
{
}
}
@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 4f1fc42dd0984554846404f2cc1e1b02
timeCreated: 1732926273
@@ -97,7 +97,7 @@ ScriptedImporter:
- name: "\u5DE6\u4FA7\u754C\u9762"
originalName:
pivot: {x: 0.5, y: 0.5}
alignment: 0
alignment: 9
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
@@ -122,8 +122,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2599
y: 6657
x: 4056
y: 1378
width: 20
height: 43
spriteID: d7537a977e1aff249a7a37ce740f186d
@@ -134,7 +134,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2599, y: 6657}
uvTransform: {x: 4056, y: 1378}
spritePosition: {x: 1294, y: 1305}
- name: "\u8F6C\u901F\u8868"
originalName:
@@ -164,8 +164,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2143
y: 6615
x: 3984
y: 224
width: 86
height: 86
spriteID: 0d86bbea963bd064fa75f3e32ddc6171
@@ -176,7 +176,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2143, y: 6615}
uvTransform: {x: 3984, y: 224}
spritePosition: {x: 1182, y: 1058}
- name: "\u9F7F\u8F6E\u6258\u76D8"
originalName:
@@ -248,8 +248,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2660
y: 6441
x: 3852
y: 940
width: 162
height: 162
spriteID: ce498871e2f93464682178488c9f2eeb
@@ -260,7 +260,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2660, y: 6441}
uvTransform: {x: 3852, y: 940}
spritePosition: {x: 2165, y: 999}
- name: "\u9AD8\u7EA7\u9F7F\u8F6EA"
originalName:
@@ -269,8 +269,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2317
y: 6441
x: 3852
y: 593
width: 166
height: 165
spriteID: d1eef4db336a0a44b97a09b6c3f59b51
@@ -281,7 +281,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2317, y: 6441}
uvTransform: {x: 3852, y: 593}
spritePosition: {x: 1957, y: 1000}
- name: "\u574F\u9F7F\u8F6EC"
originalName:
@@ -290,8 +290,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3347
y: 6441
x: 3852
y: 1579
width: 144
height: 154
spriteID: 5fe6954d52480e344a63304c96ad02ec
@@ -302,7 +302,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3347, y: 6441}
uvTransform: {x: 3852, y: 1579}
spritePosition: {x: 531, y: 1262}
- name: "\u574F\u9F7F\u8F6EB"
originalName:
@@ -311,8 +311,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2830
y: 6441
x: 3852
y: 1110
width: 154
height: 166
spriteID: 7f6287eef393ecf4b811f77f2530ab60
@@ -323,7 +323,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2830, y: 6441}
uvTransform: {x: 3852, y: 1110}
spritePosition: {x: 624, y: 1096}
- name: "\u574F\u9F7F\u8F6EA"
originalName:
@@ -332,8 +332,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2491
y: 6441
x: 3852
y: 766
width: 161
height: 166
spriteID: 892f0014245c39c48a1574f6adecda1a
@@ -344,7 +344,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2491, y: 6441}
uvTransform: {x: 3852, y: 766}
spritePosition: {x: 442, y: 1104}
- name: "\u788E\u7247E"
originalName:
@@ -353,8 +353,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2599
y: 6615
x: 4014
y: 1378
width: 34
height: 34
spriteID: 00173d16f3962a34da66f56604ff84fe
@@ -365,7 +365,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2599, y: 6615}
uvTransform: {x: 4014, y: 1378}
spritePosition: {x: 946, y: 777}
- name: "\u788E\u7247D"
originalName:
@@ -374,8 +374,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2660
y: 6611
x: 3675
y: 5549
width: 162
height: 105
spriteID: 25a080d1c30706f4b827080b388fd6ed
@@ -386,7 +386,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2660, y: 6611}
uvTransform: {x: 3675, y: 5549}
spritePosition: {x: 794, y: 772}
- name: "\u788E\u7247C"
originalName:
@@ -395,8 +395,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2830
y: 6615
x: 3845
y: 5549
width: 114
height: 92
spriteID: 7f63a61d19250aa44ac37596276ace1c
@@ -407,7 +407,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2830, y: 6615}
uvTransform: {x: 3845, y: 5549}
spritePosition: {x: 659, y: 780}
- name: "\u788E\u7247B"
originalName:
@@ -416,8 +416,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2237
y: 6615
x: 4014
y: 1284
width: 68
height: 86
spriteID: 0edfdf4071c16ce4197d75fa6a7c4f0d
@@ -428,7 +428,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2237, y: 6615}
uvTransform: {x: 4014, y: 1284}
spritePosition: {x: 592, y: 782}
- name: "\u5531\u9488"
originalName:
@@ -437,8 +437,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3675
y: 5577
x: 4014
y: 1110
width: 76
height: 73
spriteID: 2ddca43741137c54ba5d7e72ff04353c
@@ -449,7 +449,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3675, y: 5577}
uvTransform: {x: 4014, y: 1110}
spritePosition: {x: 1504, y: 990}
- name: "\u5531\u9488\u81C2"
originalName:
@@ -458,8 +458,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3675
y: 5549
x: 3175
y: 5554
width: 293
height: 20
spriteID: 6adc419d9b00341419026a5802c9d8d6
@@ -470,7 +470,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3675, y: 5549}
uvTransform: {x: 3175, y: 5554}
spritePosition: {x: 1606, y: 1026}
- name: "\u53D8\u901F\u7BB1\u9F7F\u8F6EA"
originalName:
@@ -479,8 +479,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2992
y: 6441
x: 3852
y: 1284
width: 154
height: 154
spriteID: 6c71322698065a54eb5e2a1fb4f86514
@@ -491,7 +491,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2992, y: 6441}
uvTransform: {x: 3852, y: 1284}
spritePosition: {x: 1454, y: 1050}
- name: "\u53D8\u901F\u7BB1\u9F7F\u8F6EB"
originalName:
@@ -501,7 +501,7 @@ ScriptedImporter:
rect:
serializedVersion: 2
x: 3962
y: 5054
y: 5192
width: 128
height: 130
spriteID: d2f1a521626f14145b0d2b884c5dbf6f
@@ -512,7 +512,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3962, y: 5054}
uvTransform: {x: 3962, y: 5192}
spritePosition: {x: 1406, y: 946}
- name: "\u53D8\u901F\u7BB1\u9F7F\u8F6EC"
originalName:
@@ -521,8 +521,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2143
y: 6441
x: 3852
y: 419
width: 166
height: 166
spriteID: 33e8c8bbebb24d34286d612f0b261daa
@@ -533,7 +533,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2143, y: 6441}
uvTransform: {x: 3852, y: 419}
spritePosition: {x: 1476, y: 824}
- name: "\u53D8\u901F\u7BB1\u5531\u7247\u9F7F\u8F6E"
originalName:
@@ -542,8 +542,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3154
y: 6574
x: 3962
y: 5054
width: 130
height: 130
spriteID: db22083879843b843b69dc1550fe5bfc
@@ -554,7 +554,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3154, y: 6574}
uvTransform: {x: 3962, y: 5054}
spritePosition: {x: 1318, y: 859}
- name: "\u53D8\u901F\u7BB1\u8F93\u51FA\u9F7F\u8F6E"
originalName:
@@ -563,8 +563,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2599
y: 6708
x: 4056
y: 1429
width: 0
height: 0
spriteID: 9e9c52a5ed9bedc49995cb646b5911c5
@@ -575,7 +575,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2437, y: 6548}
uvTransform: {x: 3894, y: 1269}
spritePosition: {x: 1782, y: 1048}
- name: "\u53D8\u901F\u7BB1"
originalName:
@@ -605,8 +605,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3154
y: 6441
x: 3852
y: 1446
width: 185
height: 125
spriteID: fa945402410b1f347a1469cfe5243495
@@ -617,8 +617,50 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3154, y: 6441}
uvTransform: {x: 3852, y: 1446}
spritePosition: {x: 1073, y: 1212}
- name: "\u62C9\u7EF3\u906E\u7F69"
originalName:
pivot: {x: 0.5, y: 0.5}
alignment: 0
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3983
y: 5675
width: 108
height: 345
spriteID: 96589d249466f6d4db2a673bb8211c54
spriteBone: []
spriteOutline: []
vertices: []
spritePhysicsOutline: []
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3981, y: 5674}
spritePosition: {x: 747, y: 1025}
- name: "\u62C9\u7EF3"
originalName:
pivot: {x: 0.5, y: 0.03}
alignment: 9
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3852
y: 4
width: 124
height: 407
spriteID: bdee20e596cc4d74fade29040e21b79f
spriteBone: []
spriteOutline: []
vertices: []
spritePhysicsOutline: []
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3852, y: 4}
spritePosition: {x: 738, y: 958}
- name: "\u5F15\u64CE\u5916\u9F7F\u8F6E"
originalName:
pivot: {x: 0.5, y: 0.5}
@@ -647,8 +689,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2317
y: 6614
x: 3984
y: 318
width: 86
height: 86
spriteID: 51b6debf8b8e0c342962b76031b04cdc
@@ -659,7 +701,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2317, y: 6614}
uvTransform: {x: 3984, y: 318}
spritePosition: {x: 900, y: 1231}
- name: "\u5FC3\u810F\u76D6\u5B50"
originalName:
@@ -689,8 +731,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3983
y: 5675
x: 3852
y: 1741
width: 16
height: 243
spriteID: d1fd39ae7def9f8429306cbdf5b6226c
@@ -701,7 +743,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3983, y: 5675}
uvTransform: {x: 3852, y: 1741}
spritePosition: {x: 1287, y: 1618}
- name: "\u8FDB\u6C14\u5EA6\u91CF"
originalName:
@@ -710,8 +752,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3983
y: 5926
x: 3876
y: 1741
width: 16
height: 243
spriteID: d504cc99c8f5dc14a9dca37818f3686a
@@ -722,7 +764,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3983, y: 5926}
uvTransform: {x: 3876, y: 1741}
spritePosition: {x: 1204, y: 1618}
- name: "\u6C14\u95E8\u62C9\u6746"
originalName:
@@ -731,8 +773,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3962
y: 5302
x: 3876
y: 1992
width: 106
height: 28
spriteID: 0234a2ed53d4a2d44a7c0c9ae9a4c0b7
@@ -743,7 +785,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3962, y: 5302}
uvTransform: {x: 3876, y: 1992}
spritePosition: {x: 1031, y: 1666}
- name: "\u62C9\u6746\u6C60"
originalName:
@@ -773,8 +815,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2607
y: 6708
x: 4064
y: 1429
width: 0
height: 0
spriteID: c4af958de8260c04c998bba16422774b
@@ -785,7 +827,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2421, y: 6522}
uvTransform: {x: 3878, y: 1243}
spritePosition: {x: 1459, y: 1570}
- name: "\u5FC3\u810F\u9F7F\u8F6EB"
originalName:
@@ -794,8 +836,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2615
y: 6708
x: 4072
y: 1429
width: 0
height: 0
spriteID: 9e1fb2c4e71c07348835a03b647f2390
@@ -806,7 +848,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2409, y: 6501}
uvTransform: {x: 3866, y: 1222}
spritePosition: {x: 1344, y: 1445}
- name: "\u5FC3\u810F\u9F7F\u8F6EC"
originalName:
@@ -815,8 +857,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2599
y: 6716
x: 4056
y: 1437
width: 0
height: 0
spriteID: 10cfd30a75e3f13498f0e156ee72fd9a
@@ -827,7 +869,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2439, y: 6557}
uvTransform: {x: 3896, y: 1278}
spritePosition: {x: 1295, y: 1611}
- name: "\u5FC3\u810F\u9F7F\u8F6ED"
originalName:
@@ -836,8 +878,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2607
y: 6716
x: 4064
y: 1437
width: 0
height: 0
spriteID: 7b3c12797bd298e498872da80d3c9774
@@ -848,7 +890,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2371, y: 6480}
uvTransform: {x: 3828, y: 1201}
spritePosition: {x: 1622, y: 1454}
- name: "\u5FC3\u810F\u9F7F\u8F6EE"
originalName:
@@ -857,8 +899,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2615
y: 6716
x: 4072
y: 1437
width: 0
height: 0
spriteID: b3746e118421a8f469f19af5c28ae880
@@ -869,7 +911,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2485, y: 6586}
uvTransform: {x: 3942, y: 1307}
spritePosition: {x: 1541, y: 1536}
- name: "\u5FC3\u810F\u5F15\u64CE"
originalName:
@@ -899,8 +941,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 3962
y: 5192
x: 3967
y: 5549
width: 100
height: 102
spriteID: 083fac6154604144c8a51ad9da1359f8
@@ -911,7 +953,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 3962, y: 5192}
uvTransform: {x: 3967, y: 5549}
spritePosition: {x: 1990, y: 1443}
- name: "\u80C3\u63D2\u5B54"
originalName:
@@ -920,8 +962,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2992
y: 6603
x: 3984
y: 4
width: 100
height: 102
spriteID: f29558bb0c039ec4f96c64e296bbd05b
@@ -932,7 +974,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2992, y: 6603}
uvTransform: {x: 3984, y: 4}
spritePosition: {x: 1018, y: 206}
- name: "\u80C3"
originalName:
@@ -962,8 +1004,8 @@ ScriptedImporter:
border: {x: 0, y: 0, z: 0, w: 0}
rect:
serializedVersion: 2
x: 2491
y: 6615
x: 3984
y: 114
width: 100
height: 102
spriteID: 435ef27b284ac1242a7e286c6c25d48b
@@ -974,7 +1016,7 @@ ScriptedImporter:
indices:
edges: []
tessellationDetail: 0
uvTransform: {x: 2491, y: 6615}
uvTransform: {x: 3984, y: 114}
spritePosition: {x: 1783, y: 446}
- name: "\u809D"
originalName:
@@ -1159,7 +1201,7 @@ ScriptedImporter:
parentIndex: 1
spriteID: d7537a977e1aff249a7a37ce740f186d
layerID: 229
mosaicPosition: {x: 2599, y: 6657}
mosaicPosition: {x: 4056, y: 1378}
flatten: 0
isImported: 1
isVisible: 1
@@ -1179,7 +1221,7 @@ ScriptedImporter:
parentIndex: 1
spriteID: 0d86bbea963bd064fa75f3e32ddc6171
layerID: 260
mosaicPosition: {x: 2143, y: 6615}
mosaicPosition: {x: 3984, y: 224}
flatten: 0
isImported: 1
isVisible: 1
@@ -1229,7 +1271,7 @@ ScriptedImporter:
parentIndex: 8
spriteID: ce498871e2f93464682178488c9f2eeb
layerID: 786
mosaicPosition: {x: 2660, y: 6441}
mosaicPosition: {x: 3852, y: 940}
flatten: 0
isImported: 1
isVisible: 1
@@ -1239,7 +1281,7 @@ ScriptedImporter:
parentIndex: 8
spriteID: d1eef4db336a0a44b97a09b6c3f59b51
layerID: 712
mosaicPosition: {x: 2317, y: 6441}
mosaicPosition: {x: 3852, y: 593}
flatten: 0
isImported: 1
isVisible: 1
@@ -1259,7 +1301,7 @@ ScriptedImporter:
parentIndex: 11
spriteID: 5fe6954d52480e344a63304c96ad02ec
layerID: 698
mosaicPosition: {x: 3347, y: 6441}
mosaicPosition: {x: 3852, y: 1579}
flatten: 0
isImported: 1
isVisible: 1
@@ -1269,7 +1311,7 @@ ScriptedImporter:
parentIndex: 11
spriteID: 7f6287eef393ecf4b811f77f2530ab60
layerID: 697
mosaicPosition: {x: 2830, y: 6441}
mosaicPosition: {x: 3852, y: 1110}
flatten: 0
isImported: 1
isVisible: 1
@@ -1279,7 +1321,7 @@ ScriptedImporter:
parentIndex: 11
spriteID: 892f0014245c39c48a1574f6adecda1a
layerID: 687
mosaicPosition: {x: 2491, y: 6441}
mosaicPosition: {x: 3852, y: 766}
flatten: 0
isImported: 1
isVisible: 1
@@ -1299,7 +1341,7 @@ ScriptedImporter:
parentIndex: 15
spriteID: 00173d16f3962a34da66f56604ff84fe
layerID: 693
mosaicPosition: {x: 2599, y: 6615}
mosaicPosition: {x: 4014, y: 1378}
flatten: 0
isImported: 1
isVisible: 1
@@ -1309,7 +1351,7 @@ ScriptedImporter:
parentIndex: 15
spriteID: 25a080d1c30706f4b827080b388fd6ed
layerID: 691
mosaicPosition: {x: 2660, y: 6611}
mosaicPosition: {x: 3675, y: 5549}
flatten: 0
isImported: 1
isVisible: 1
@@ -1319,7 +1361,7 @@ ScriptedImporter:
parentIndex: 15
spriteID: 7f63a61d19250aa44ac37596276ace1c
layerID: 692
mosaicPosition: {x: 2830, y: 6615}
mosaicPosition: {x: 3845, y: 5549}
flatten: 0
isImported: 1
isVisible: 1
@@ -1329,7 +1371,7 @@ ScriptedImporter:
parentIndex: 15
spriteID: 0edfdf4071c16ce4197d75fa6a7c4f0d
layerID: 695
mosaicPosition: {x: 2237, y: 6615}
mosaicPosition: {x: 4014, y: 1284}
flatten: 0
isImported: 1
isVisible: 1
@@ -1359,7 +1401,7 @@ ScriptedImporter:
parentIndex: 21
spriteID: 2ddca43741137c54ba5d7e72ff04353c
layerID: 791
mosaicPosition: {x: 3675, y: 5577}
mosaicPosition: {x: 4014, y: 1110}
flatten: 0
isImported: 1
isVisible: 1
@@ -1369,7 +1411,7 @@ ScriptedImporter:
parentIndex: 21
spriteID: 6adc419d9b00341419026a5802c9d8d6
layerID: 797
mosaicPosition: {x: 3675, y: 5549}
mosaicPosition: {x: 3175, y: 5554}
flatten: 0
isImported: 1
isVisible: 1
@@ -1379,7 +1421,7 @@ ScriptedImporter:
parentIndex: 1
spriteID: 6c71322698065a54eb5e2a1fb4f86514
layerID: 287
mosaicPosition: {x: 2992, y: 6441}
mosaicPosition: {x: 3852, y: 1284}
flatten: 0
isImported: 1
isVisible: 1
@@ -1389,7 +1431,7 @@ ScriptedImporter:
parentIndex: 1
spriteID: d2f1a521626f14145b0d2b884c5dbf6f
layerID: 274
mosaicPosition: {x: 3962, y: 5054}
mosaicPosition: {x: 3962, y: 5192}
flatten: 0
isImported: 1
isVisible: 1
@@ -1399,7 +1441,7 @@ ScriptedImporter:
parentIndex: 1
spriteID: 33e8c8bbebb24d34286d612f0b261daa
layerID: 280
mosaicPosition: {x: 2143, y: 6441}
mosaicPosition: {x: 3852, y: 419}
flatten: 0
isImported: 1
isVisible: 1
@@ -1409,7 +1451,7 @@ ScriptedImporter:
parentIndex: 1
spriteID: db22083879843b843b69dc1550fe5bfc
layerID: 279
mosaicPosition: {x: 3154, y: 6574}
mosaicPosition: {x: 3962, y: 5054}
flatten: 0
isImported: 1
isVisible: 1
@@ -1419,7 +1461,7 @@ ScriptedImporter:
parentIndex: 1
spriteID: 9e9c52a5ed9bedc49995cb646b5911c5
layerID: 281
mosaicPosition: {x: 2599, y: 6708}
mosaicPosition: {x: 4056, y: 1429}
flatten: 0
isImported: 1
isVisible: 1
@@ -1439,7 +1481,7 @@ ScriptedImporter:
parentIndex: 1
spriteID: fa945402410b1f347a1469cfe5243495
layerID: 254
mosaicPosition: {x: 3154, y: 6441}
mosaicPosition: {x: 3852, y: 1446}
flatten: 0
isImported: 1
isVisible: 1
@@ -1453,6 +1495,26 @@ ScriptedImporter:
flatten: 0
isImported: 0
isVisible: 1
- name: "\u62C9\u7EF3\u906E\u7F69"
spriteName: "\u62C9\u7EF3\u906E\u7F69"
isGroup: 0
parentIndex: 31
spriteID: 96589d249466f6d4db2a673bb8211c54
layerID: 806
mosaicPosition: {x: 3983, y: 5675}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u62C9\u7EF3"
spriteName: "\u62C9\u7EF3"
isGroup: 0
parentIndex: 31
spriteID: bdee20e596cc4d74fade29040e21b79f
layerID: 804
mosaicPosition: {x: 3852, y: 4}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u5F15\u64CE\u5916\u9F7F\u8F6E"
spriteName: "\u5F15\u64CE\u5916\u9F7F\u8F6E"
isGroup: 0
@@ -1476,17 +1538,17 @@ ScriptedImporter:
- name: "\u5FC3\u810F\u63D2\u5B54"
spriteName: "\u5FC3\u810F\u63D2\u5B54"
isGroup: 0
parentIndex: 33
parentIndex: 35
spriteID: 51b6debf8b8e0c342962b76031b04cdc
layerID: 307
mosaicPosition: {x: 2317, y: 6614}
mosaicPosition: {x: 3984, y: 318}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u5FC3\u810F\u76D6\u5B50"
spriteName: "\u5FC3\u810F\u76D6\u5B50"
isGroup: 0
parentIndex: 33
parentIndex: 35
spriteID: 2f776ec13f0fe234ab7735824e9a4001
layerID: 608
mosaicPosition: {x: 3175, y: 4340}
@@ -1506,37 +1568,37 @@ ScriptedImporter:
- name: "\u55B7\u6CB9\u5EA6\u91CF"
spriteName: "\u55B7\u6CB9\u5EA6\u91CF"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: d1fd39ae7def9f8429306cbdf5b6226c
layerID: 421
mosaicPosition: {x: 3983, y: 5675}
mosaicPosition: {x: 3852, y: 1741}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u8FDB\u6C14\u5EA6\u91CF"
spriteName: "\u8FDB\u6C14\u5EA6\u91CF"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: d504cc99c8f5dc14a9dca37818f3686a
layerID: 420
mosaicPosition: {x: 3983, y: 5926}
mosaicPosition: {x: 3876, y: 1741}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u6C14\u95E8\u62C9\u6746"
spriteName: "\u6C14\u95E8\u62C9\u6746"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: 0234a2ed53d4a2d44a7c0c9ae9a4c0b7
layerID: 295
mosaicPosition: {x: 3962, y: 5302}
mosaicPosition: {x: 3876, y: 1992}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u62C9\u6746\u6C60"
spriteName: "\u62C9\u6746\u6C60"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: ccf5a0714985b474aaa4ac947ed3a220
layerID: 298
mosaicPosition: {x: 1424, y: 6726}
@@ -1546,50 +1608,50 @@ ScriptedImporter:
- name: "\u5FC3\u810F\u9F7F\u8F6EA"
spriteName: "\u5FC3\u810F\u9F7F\u8F6EA"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: c4af958de8260c04c998bba16422774b
layerID: 446
mosaicPosition: {x: 2607, y: 6708}
mosaicPosition: {x: 4064, y: 1429}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u5FC3\u810F\u9F7F\u8F6EB"
spriteName: "\u5FC3\u810F\u9F7F\u8F6EB"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: 9e1fb2c4e71c07348835a03b647f2390
layerID: 445
mosaicPosition: {x: 2615, y: 6708}
mosaicPosition: {x: 4072, y: 1429}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u5FC3\u810F\u9F7F\u8F6EC"
spriteName: "\u5FC3\u810F\u9F7F\u8F6EC"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: 10cfd30a75e3f13498f0e156ee72fd9a
layerID: 444
mosaicPosition: {x: 2599, y: 6716}
mosaicPosition: {x: 4056, y: 1437}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u5FC3\u810F\u9F7F\u8F6ED"
spriteName: "\u5FC3\u810F\u9F7F\u8F6ED"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: 7b3c12797bd298e498872da80d3c9774
layerID: 443
mosaicPosition: {x: 2607, y: 6716}
mosaicPosition: {x: 4064, y: 1437}
flatten: 0
isImported: 1
isVisible: 1
- name: "\u5FC3\u810F\u9F7F\u8F6EE"
spriteName: "\u5FC3\u810F\u9F7F\u8F6EE"
isGroup: 0
parentIndex: 36
parentIndex: 38
spriteID: b3746e118421a8f469f19af5c28ae880
layerID: 439
mosaicPosition: {x: 2615, y: 6716}
mosaicPosition: {x: 4072, y: 1437}
flatten: 0
isImported: 1
isVisible: 1
@@ -1609,7 +1671,7 @@ ScriptedImporter:
parentIndex: -1
spriteID: 083fac6154604144c8a51ad9da1359f8
layerID: 238
mosaicPosition: {x: 3962, y: 5192}
mosaicPosition: {x: 3967, y: 5549}
flatten: 0
isImported: 1
isVisible: 1
@@ -1619,7 +1681,7 @@ ScriptedImporter:
parentIndex: -1
spriteID: f29558bb0c039ec4f96c64e296bbd05b
layerID: 236
mosaicPosition: {x: 2992, y: 6603}
mosaicPosition: {x: 3984, y: 4}
flatten: 0
isImported: 1
isVisible: 1
@@ -1639,7 +1701,7 @@ ScriptedImporter:
parentIndex: -1
spriteID: 435ef27b284ac1242a7e286c6c25d48b
layerID: 237
mosaicPosition: {x: 2491, y: 6615}
mosaicPosition: {x: 3984, y: 114}
flatten: 0
isImported: 1
isVisible: 1
@@ -810,12 +810,6 @@ MonoBehaviour:
bodyModuleGroup: {fileID: 2309837242789316790}
oscilloscopeSystem: {fileID: 0}
heatMapController: {fileID: 0}
plugInEvent:
m_PersistentCalls:
m_Calls: []
plugOutEvent:
m_PersistentCalls:
m_Calls: []
inHotErr: 0
plugSnappingRange: 1
--- !u!1 &4168341163486249011
@@ -1215,9 +1209,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a2e20b111511460a8f3a151bd470da9d, type: 3}
m_Name:
m_EditorClassIdentifier:
isScanning: 0
isPlaying: 0
canScan: 0
--- !u!1 &4645710116166496809
GameObject:
m_ObjectHideFlags: 0
@@ -1230,6 +1221,7 @@ GameObject:
- component: {fileID: 2511148540085322114}
- component: {fileID: 8338330826391681420}
- component: {fileID: 2869143889230164099}
- component: {fileID: 7908307127668400731}
m_Layer: 0
m_Name: Plug
m_TagString: Untagged
@@ -1352,6 +1344,39 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: eceaf3bcec07439d8391175331323e3c, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &7908307127668400731
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4645710116166496809}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 0c4fbab01ad40c2449c849cd2a8c620f, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Delegates:
- eventID: 5
callback:
m_PersistentCalls:
m_Calls: []
- eventID: 0
callback:
m_PersistentCalls:
m_Calls: []
- eventID: 1
callback:
m_PersistentCalls:
m_Calls: []
- eventID: 2
callback:
m_PersistentCalls:
m_Calls: []
- eventID: 3
callback:
m_PersistentCalls:
m_Calls: []
--- !u!1 &5242786820683991507
GameObject:
m_ObjectHideFlags: 0
File diff suppressed because it is too large Load Diff
@@ -1,83 +0,0 @@
using System;
using AibisDream.Utility;
using Yarn.Unity;
namespace AibisDream
{
public class CommandOptionView : DialogueViewBase
{
// 进入指令选项模式
private bool _waitCommandOptions;
private string _commandName;
public override void RunLine(LocalizedLine dialogueLine, Action onDialogueLineFinished)
{
ProcessCommandLine(dialogueLine, onDialogueLineFinished);
}
public override void RunOptions(DialogueOption[] dialogueOptions, Action<int> onOptionSelected)
{
// 非指令直接跳过
if (!_waitCommandOptions)
{
base.RunOptions(dialogueOptions, onOptionSelected);
return;
}
DialogController.Instance.IsTalking = false;
// 传输选项
YarnOption[] options = YarnOption.GeneOptions(dialogueOptions, onOptionSelected);
DialogController.Instance.InvokeOptionCommand(_commandName, options);
}
public override void InterruptLine(LocalizedLine dialogueLine, Action onDialogueLineFinished)
{
base.InterruptLine(dialogueLine, onDialogueLineFinished);
}
public override void DismissLine(Action onDismissalComplete)
{
base.DismissLine(onDismissalComplete);
}
public override void UserRequestedViewAdvancement()
{
base.UserRequestedViewAdvancement();
}
private void ProcessCommandLine(LocalizedLine dialogueLine, Action onDialogueLineFinished)
{
// 判断当前行是否是Command行,否则直接跳过
CommandLineType commandLineType = dialogueLine.Text.MatchCommandType();
// 分情况处理
switch (commandLineType)
{
case CommandLineType.Pause:
// 获取选项名称
dialogueLine.Text.TryGetPauseCommandAttr(out var pauseCommandName);
// 传递暂停指令
var step = YarnContinueStep.GeneContinueStep(onDialogueLineFinished);
DialogController.Instance.InvokePauseCommand(pauseCommandName, step);
break;
case CommandLineType.OptionCommand:
// 选项指令
_waitCommandOptions = true;
dialogueLine.Text.TryGetOptionCommandAttr(out var curCommandName);
// 保存指令
_commandName = curCommandName;
// 进入下一步
onDialogueLineFinished.Invoke();
break;
case CommandLineType.NonCommand:
default:
// 非Command直接跳过
_waitCommandOptions = false;
base.RunLine(dialogueLine, onDialogueLineFinished);
break;
}
}
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 4e61040b961ba1446ad453ee17f4a737
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,6 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using AibisDream.Framework;
using AibisDream.Kit;
using UnityEngine;
@@ -14,9 +13,6 @@ namespace AibisDream
private DialogueRunner _dialogueRunner;
private VariableStorageBehaviour _variableStorage;
private readonly Dictionary<string, Action<YarnOption[]>> _commandMap = new();
private readonly Dictionary<string, Action<YarnContinueStep>> _pauseCommandMap = new();
# region controller状态标识
private bool _isTalking;
@@ -41,9 +37,6 @@ namespace AibisDream
get => _isTalking;
}
// 对话框被阻塞时不能继续对话框交互
public bool IsBlock { get; private set; }
public bool quickRunMode;
# endregion
@@ -58,11 +51,13 @@ namespace AibisDream
_dialogueRunner.onDialogueStart.AddListener(() =>
{
EnumEventSystem.Global.Send(InteractionEventEnum.End);
OnDialogueStart?.Invoke();
IsTalking = true;
});
_dialogueRunner.onDialogueComplete.AddListener(() =>
{
EnumEventSystem.Global.Send(InteractionEventEnum.Start);
OnDialogueComplete?.Invoke();
IsTalking = false;
});
@@ -141,123 +136,6 @@ namespace AibisDream
}
}
#region
/// <summary>
/// 调用命令
/// </summary>
/// <param name="commandName">命令名</param>
/// <param name="options">选项</param>
public void InvokeOptionCommand(string commandName, YarnOption[] options)
{
if (commandName == null)
{
Debug.Log("命令名为空");
return;
}
if (_commandMap.TryGetValue(commandName, out var action))
{
action(options);
}
else
{
Debug.LogWarning($"命令 {commandName} 不存在");
}
}
/// <summary>
/// 注册命令
/// </summary>
/// <param name="commandName">命令名称</param>
/// <param name="commandAction">注册名称</param>
public void RegisterOptionCommand(string commandName, Action<YarnOption[]> commandAction)
{
if (_commandMap.ContainsKey(commandName))
{
Debug.Log($"命令 {commandName} 已经存在,将被替换");
}
_commandMap[commandName] = commandAction;
}
/// <summary>
/// 移除命令
/// </summary>
/// <param name="commandName">命令名称</param>
public void RemoveOptionCommand(string commandName)
{
if (_commandMap.ContainsKey(commandName))
{
_commandMap.Remove(commandName);
}
else
{
Debug.Log($"命令 {commandName} 不存在");
}
}
#endregion
#region
/// <summary>
/// 执行暂停命令
/// </summary>
/// <param name="commandName">命令名</param>
/// <param name="pauseCommand">参数</param>
public void InvokePauseCommand(string commandName, YarnContinueStep pauseCommand)
{
if (string.IsNullOrEmpty(commandName))
{
Debug.Log("命令名为空");
return;
}
if (_pauseCommandMap.TryGetValue(commandName, out var action))
{
action(pauseCommand);
}
else
{
Debug.LogWarning($"命令 {commandName} 不存在");
}
}
/// <summary>
/// 注册暂停命令
/// </summary>
/// <param name="commandName">命令名</param>
/// <param name="commandAction">注册命令函数</param>
public void RegisterPauseCommand(string commandName, Action<YarnContinueStep> commandAction)
{
if (_pauseCommandMap.ContainsKey(commandName))
{
Debug.Log($"命令 {commandName} 已经存在,将被替换");
}
_pauseCommandMap[commandName] = commandAction;
}
/// <summary>
/// 移除命令
/// </summary>
/// <param name="commandName">命令名称</param>
public void RemovePauseCommand(string commandName)
{
if (_pauseCommandMap.ContainsKey(commandName))
{
_pauseCommandMap.Remove(commandName);
}
else
{
Debug.Log($"命令 {commandName} 不存在");
}
}
#endregion
#region
[YarnCommand("NextYarn")]
@@ -284,8 +162,6 @@ namespace AibisDream
public static IEnumerator LoadScene(string sceneName, float duration = 1)
{
HideDialog();
Camera.main.orthographicSize = 5;
Camera.main.transform.position = new Vector3(0, 0, -10);
yield return SceneLoader.Instance.LoadSceneAsync(sceneName);
DialogCanvasManager.Instance.SwitchDialogView(sceneName == "ClinicScene"
? DialogViewType.Bubble
+9 -18
View File
@@ -1,6 +1,7 @@
using System;
using AibisDream.Framework;
using AibisDream.Utility;
using UnityEngine;
using Yarn.Unity;
namespace AibisDream
@@ -67,39 +68,29 @@ namespace AibisDream
var options = DialogOption.GeneOptions(dialogueOptions, onOptionSelected);
DialogCanvasManager.GetCurView().ShowOptions(options);
}
public override void UserRequestedViewAdvancement()
private void Update()
{
if (_isInCommand)
if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))
{
return;
}
if (DialogController.Instance.IsBlock)
{
return;
}
if (!DialogCanvasManager.GetCurView().TrySkipLine())
{
AudioManager.Instance.StopVoice();
requestInterrupt?.Invoke();
JumpLine();
}
}
/// <summary>
/// 跳到下一句
/// </summary>
public void JumpLine()
private void JumpLine()
{
if (_isInCommand)
{
return;
}
if (DialogController.Instance.IsBlock)
if (!DialogCanvasManager.GetCurView().TrySkipLine())
{
return;
AudioManager.Instance.StopVoice();
DialogCanvasManager.GetCurView().NextStep();
}
}
}
@@ -59,12 +59,12 @@ namespace AibisDream.FixSystem
public void PlugIn()
{
// 插入就在示波器显示图片
if (!_bodyModuleSystem.inHotErr)
{
// StartCoroutine(FixSystemCenter.SystemDic.Get<IOscilloscopeSystem>()
// ?.ShowScanImage(data.ScreenPic, data.checkPoints));
}
// // 插入就在示波器显示图片
// if (!_bodyModuleSystem.inHotErr)
// {
// StartCoroutine(FixSystemCenter.SystemDic.Get<IOscilloscopeSystem>()
// ?.ShowScanImage(data.ScreenPic, data.checkPoints));
// }
if (DialogController.Instance)
// 然后触发Yarn节点
@@ -32,6 +32,7 @@ namespace AibisDream.FixSystem
public bool inHotErr;
private int _heatValue;
public bool isAvailable;
private int HeatValue
{
@@ -287,6 +288,22 @@ namespace AibisDream.FixSystem
}
#endregion
/// <summary>
/// 激活交互系统
/// </summary>
public void EnableSystem()
{
isAvailable = true;
}
/// <summary>
/// 停止交互系统
/// </summary>
public void DisableSystem()
{
isAvailable = false;
}
}
public struct BodyModuleSystemData
+30 -7
View File
@@ -6,7 +6,8 @@ using UnityEngine.EventSystems;
namespace AibisDream.FixSystem
{
public class Plug : MonoBehaviour, IDragHandler, IPointerDownHandler, IPointerUpHandler
[RequireComponent(typeof(EventTriggerEx))]
public class Plug : MonoBehaviour, IInteraction
{
#region
@@ -22,6 +23,7 @@ namespace AibisDream.FixSystem
private CableSystem _cableSystem;
private SpriteRenderer _sprite;
private Transform _plugRootPos;
private EventTriggerEx _trigger;
#endregion
@@ -30,6 +32,7 @@ namespace AibisDream.FixSystem
private void Awake()
{
InitComponentRef();
EventRegister();
}
private void InitComponentRef()
@@ -37,6 +40,14 @@ namespace AibisDream.FixSystem
_cableSystem = transform.parent.GetComponent<CableSystem>();
_sprite = GetComponent<SpriteRenderer>();
_plugRootPos = transform.Find("Plug Root Pos");
_trigger = GetComponent<EventTriggerEx>();
}
private void EventRegister()
{
_trigger.Register(EventTriggerType.Drag, OnDrag);
_trigger.Register(EventTriggerType.PointerDown, OnPointerDown);
_trigger.Register(EventTriggerType.PointerUp, OnPointerUp);
}
public void InitPlug(ISocket initSocket)
@@ -90,18 +101,21 @@ namespace AibisDream.FixSystem
_cableSystem.curSocket = null;
}
public void OnDrag(PointerEventData eventData)
private void OnDrag(BaseEventData eventData)
{
// 系统被锁定就返回
if (!_cableSystem.IsPlugAvailable()) return;
// 未被拖拽也返回
if (!_isDragging) return;
transform.position = CommonUtil.GetMouseWorldPos(eventData.position, transform);
if (eventData is PointerEventData pointerData)
{
transform.position = CommonUtil.GetMouseWorldPos(pointerData.position, transform);
}
}
public void OnPointerDown(PointerEventData eventData)
private void OnPointerDown(BaseEventData eventData)
{
// 系统被锁定就返回
if (!_cableSystem.IsPlugAvailable()) return;
@@ -115,7 +129,7 @@ namespace AibisDream.FixSystem
AdjustPlugPos();
}
public void OnPointerUp(PointerEventData eventData)
private void OnPointerUp(BaseEventData eventData)
{
// 停止拖拽
_isDragging = false;
@@ -147,5 +161,14 @@ namespace AibisDream.FixSystem
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(transform.position, 0.5f);
}
public bool IsActive => true;
public bool IsAvailable => _cableSystem.BodyModuleSystem.isAvailable;
public GameObject GetGameObject()
{
return gameObject;
}
}
}
+10 -2
View File
@@ -109,6 +109,8 @@ namespace AibisDream.FixSystem
bodyModuleSystem.ResetPlug();
// 切换相机
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
// 开启交互
bodyModuleSystem.EnableSystem();
}
public IEnumerator Exit()
@@ -116,6 +118,8 @@ namespace AibisDream.FixSystem
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
// 拔出插头
bodyModuleSystem.ResetPlug();
// 关闭交互
bodyModuleSystem.DisableSystem();
yield break;
}
}
@@ -169,22 +173,26 @@ namespace AibisDream.FixSystem
public IEnumerator Enter()
{
var engineSystem = FixSystemCenter.SystemDic.Get<EngineSystem>();
// 先切BodyModule
if (!CameraKit.Instance.EqualToCameraState(CameraEnum.BodyModule))
{
//yield return MainUIController.Instance?.FadeInSync(0.5f);
yield return CameraKit.Instance.SwitchCamera(CameraEnum.BodyModule);
//yield return MainUIController.Instance?.FadeOutSync(0.5f);
}
// 切换相机
yield return CameraKit.Instance.SwitchCamera(CameraEnum.Engine);
// 激活交互
engineSystem.EnableSystem();
}
public IEnumerator Exit()
{
var bodyModuleSystem = FixSystemCenter.SystemDic.Get<BodyModuleSystem>();
bodyModuleSystem.ResetPlug();
// 关闭交互
var engineSystem = FixSystemCenter.SystemDic.Get<EngineSystem>();
engineSystem.DisableSystem();
yield break;
}
}
@@ -1,6 +1,5 @@
using AibisDream.Framework;
using AibisDream.Kit;
using UnityEngine;
namespace AibisDream.FixSystem
{
@@ -8,8 +7,6 @@ namespace AibisDream.FixSystem
{
public FixState CurState => StateMachine.CurState;
public Canvas deepCanvas;
public override void OnSingletonInit()
{
SystemDic ??= new IOCContainer();
@@ -17,9 +14,6 @@ namespace AibisDream.FixSystem
// TODO 这个回头要改
AudioManager.PlayAmb1Audio("amb_room");
// 初始化场景组件
InitScene();
// 初始化状态机
StateMachine = new FixStateMachine();
StartCoroutine(StateMachine.SwitchState(FixState.Clinic));
@@ -31,15 +25,6 @@ namespace AibisDream.FixSystem
GameLoopManager.Instance.StartCoroutine(StateMachine.QuitState());
SystemDic.Clear();
}
private void InitScene()
{
if (deepCanvas)
{
deepCanvas.worldCamera = CameraKit.Instance.uiCamera;
deepCanvas.sortingLayerName = "FixTop";
}
}
#region
+1 -1
View File
@@ -49,7 +49,7 @@ namespace AibisDream.Framework
}
}
public IUnRegister Register<T, TE>(T key, Action<TE> onEvent) where T : IConvertible where TE : struct
public IUnRegister Register<T, TE>(T key, Action<TE> onEvent) where T : IConvertible
{
var kv = key.ToInt32(null);
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 630fe61c68acf6e49a99491b75ac5566
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,66 @@
using AibisDream.Kit;
using UnityEngine;
namespace AibisDream.Framework
{
public class EventSystemEx : SingletonBase<EventSystemEx>
{
public GameObject pointerOverObj;
public GameObject draggingObj;
public GameObject holdingObj;
#region
public void OnPointerEnter(IInteraction interaction)
{
pointerOverObj = interaction.GetGameObject();
EnumEventSystem.Global.Send(TriggerEnum.PointerEnter, interaction);
}
public void OnPointerExit(IInteraction interaction)
{
if (pointerOverObj == interaction.GetGameObject())
{
EnumEventSystem.Global.Send(TriggerEnum.PointerExit, interaction);
pointerOverObj = null;
}
}
public void OnPointerDown(IInteraction interaction)
{
EnumEventSystem.Global.Send(TriggerEnum.PointerDown, interaction);
holdingObj = interaction.GetGameObject();
}
public void OnPointerUp(IInteraction interaction)
{
if (holdingObj == interaction.GetGameObject())
{
EnumEventSystem.Global.Send(TriggerEnum.PointerUp, interaction);
holdingObj = null;
}
}
#endregion
#region
private EventSystemEx()
{
}
public override void OnSingletonInit()
{
}
#endregion
}
public enum TriggerEnum
{
PointerEnter,
PointerExit,
PointerDown,
PointerUp
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f55689aa6dac4461bba273d8987762dd
timeCreated: 1737014094
@@ -0,0 +1,118 @@
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace AibisDream.Framework
{
/// <summary>
/// EventTrigger扩展
/// </summary>
[RequireComponent(typeof(Collider2D))]
public class EventTriggerEx : EventTrigger
{
private IInteraction _interaction;
private void Awake()
{
_interaction = GetComponent<IInteraction>();
}
/// <summary>
/// 注册事件
/// </summary>
/// <param name="triggerType">事件类型</param>
/// <param name="action">函数</param>
public void Register(EventTriggerType triggerType, UnityAction<BaseEventData> action)
{
if (TryGetTriggerEvent(triggerType, out var triggerEvent))
{
triggerEvent.AddListener(action);
}
else
{
Debug.LogWarning($"{triggerType.ToString()}未添加");
}
}
/// <summary>
/// 卸载事件
/// </summary>
/// <param name="triggerType">事件类型</param>
/// <param name="action">函数</param>
public void UnRegister(EventTriggerType triggerType, UnityAction<BaseEventData> action)
{
if (TryGetTriggerEvent(triggerType, out var triggerEvent))
{
triggerEvent.RemoveListener(action);
}
else
{
Debug.LogWarning($"{triggerType.ToString()}未添加");
}
}
/// <summary>
/// 获取触发事件
/// </summary>
/// <param name="triggerType">事件类型</param>
/// <param name="triggerEvent">事件</param>
/// <returns>是否存在</returns>
private bool TryGetTriggerEvent(EventTriggerType triggerType, out TriggerEvent triggerEvent)
{
var entry = triggers.FirstOrDefault(item => item.eventID == triggerType);
if (entry == null)
{
triggerEvent = null;
return false;
}
else
{
triggerEvent = entry.callback;
return true;
}
}
public override void OnPointerEnter(PointerEventData data)
{
EventSystemEx.Instance.OnPointerEnter(_interaction);
base.OnPointerEnter(data);
}
public override void OnPointerExit(PointerEventData data)
{
EventSystemEx.Instance.OnPointerExit(_interaction);
base.OnPointerExit(data);
}
public override void OnPointerDown(PointerEventData eventData)
{
if (_interaction.IsAvailable)
{
EventSystemEx.Instance.OnPointerDown(_interaction);
base.OnPointerDown(eventData);
}
}
public override void OnPointerUp(PointerEventData eventData)
{
if (_interaction.IsAvailable)
{
EventSystemEx.Instance.OnPointerUp(_interaction);
base.OnPointerUp(eventData);
}
}
}
public interface IInteraction
{
// 判断是否激活,激活就正常显示鼠标,否则就显示禁用标志
public bool IsActive { get; }
// 判断是否可用,可用就正常显示鼠标,否则就保持原有标志不变
public bool IsAvailable { get; }
// 返回GameObject
public GameObject GetGameObject();
}
}
@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 5758967c5b7371f4996079b044127a60
guid: 0c4fbab01ad40c2449c849cd2a8c620f
MonoImporter:
externalObjects: {}
serializedVersion: 2
@@ -1,33 +0,0 @@
using UnityEngine;
namespace AibisDream.Framework
{
public class SpriteButtonKit : IMonoKit
{
private readonly Camera _camera = Camera.main;
private GameObject _curButton;
public void OnUpdate()
{
// 发射射线进行检测
Ray ray = _camera.ScreenPointToRay(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction);
// 射线没有碰撞到东西
if (!hit.collider)
{
_curButton = null;
return;
}
}
}
public interface ISpriteButton
{
public void OnMouseEnter();
public void OnMouseExit();
}
}
@@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 787ecc68b7e444478adfaabb8d7fbe70
timeCreated: 1734775502
+1 -1
View File
@@ -192,7 +192,7 @@ namespace AibisDream
_dialogStorage.TryGetValue("$gameStage", out float gameStage);
gameStageStr = gameStage.ToString(CultureInfo.InvariantCulture);
}
catch (Exception e)
catch (Exception)
{
_dialogStorage.TryGetValue("$gameStage", out string gameStage);
gameStageStr = gameStage;
@@ -1,34 +0,0 @@
using Framework.Core;
using UnityEngine;
namespace AibisDream
{
public class AirDashboard : Dashboard
{
[FindComponent] private SpriteRenderer _pointer;
[FindComponent("Min Pointer")] private Transform _minPointer;
[FindComponent("Max Pointer")] private Transform _maxPointer;
[SerializeField] private float topPosY;
[SerializeField] private float bottomPosY;
private float _pointerMaxHeight;
protected override void OnStart()
{
_pointerMaxHeight = _pointer.size.y;
}
protected override void UpdateDashboard(EngineData data)
{
// 气门
_pointer.size = new Vector2(_pointer.size.x, data.curAir * _pointerMaxHeight);
// 气门上下限
var minPosY = (topPosY - bottomPosY) * data.curAirMin + bottomPosY;
var maxPosY = (topPosY - bottomPosY) * data.curAirMax + bottomPosY;
_minPointer.localPosition = new Vector3(0, minPosY, 0);
_maxPointer.localPosition = new Vector3(0, maxPosY, 0);
}
}
}
-62
View File
@@ -1,62 +0,0 @@
using AibisDream.Framework;
using UnityEngine;
namespace AibisDream
{
public class AirGate : MonoBehaviour, IMoveable
{
private EngineSystem _engineSystem;
[SerializeField] private int curLevel;
[SerializeField] private float heightY;
[SerializeField] private float minY;
public bool IsBlock { get; }
private void Awake()
{
_engineSystem = transform.parent.GetComponent<EngineSystem>();
}
public void StartMove()
{
// Debug.Log("Move");
}
public void Move(Vector2 mousePos)
{
SwitchAirLevel(mousePos.y);
UpdateTransform();
}
private void UpdateTransform()
{
float levelHeight = heightY / (_engineSystem.config.maxLevel - 1);
var curY = levelHeight * curLevel + minY;
transform.localPosition = new Vector3(transform.localPosition.x, curY, transform.localPosition.z);
}
private void SwitchAirLevel(float mouseY)
{
mouseY -= minY + transform.parent.position.y;
float levelHeight = heightY / _engineSystem.config.maxLevel;
curLevel = (int)(mouseY / levelHeight);
if (curLevel >= _engineSystem.config.maxLevel) curLevel = _engineSystem.config.maxLevel - 1;
if (curLevel < 0) curLevel = 0;
}
public void MoveToLevel(int level)
{
curLevel = level - 1;
UpdateTransform();
}
public void StopMove()
{
_engineSystem.UpdateAirLevel(curLevel);
}
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 4cba880bf0a3caf41b1d03057b9c01b1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,29 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace AibisDream
{
public class AirLevelDashboard : Dashboard
{
private Transform _pointer;
[SerializeField] private float topPosY;
[SerializeField] private float bottomPosY;
private int _maxLevel;
protected override void OnStart()
{
_pointer = transform.Find("Pointer");
_maxLevel = engineSystem.config.maxLevel;
}
protected override void UpdateDashboard(EngineData data)
{
var singleLevelHeight = (topPosY - bottomPosY) / (_maxLevel - 1);
var targetPosY = bottomPosY + data.curAirLevel * singleLevelHeight;
_pointer.position = new Vector3(_pointer.position.x, targetPosY, _pointer.position.z);
}
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 7e5ffd762a716d8409d0f37b763e6521
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+124
View File
@@ -0,0 +1,124 @@
using AibisDream.Framework;
using AibisDream.Utility;
using DG.Tweening;
using UnityEngine;
using UnityEngine.EventSystems;
namespace AibisDream
{
public class CordPull : MonoBehaviour, IInteraction
{
private EventTriggerEx _trigger;
private EngineSystem _engineSystem;
private Vector3 _initPos;
public float maxDistance;
private Vector3 _dragPoint;
private bool _isDragging;
private void Awake()
{
// 记录当前位置
InitRefs();
}
private void InitRefs()
{
_initPos = transform.position;
_trigger = GetComponent<EventTriggerEx>();
_engineSystem = transform.parent.GetComponent<EngineSystem>();
_trigger.Register(EventTriggerType.BeginDrag, OnBeginDrag);
_trigger.Register(EventTriggerType.EndDrag, OnEndDrag);
_trigger.Register(EventTriggerType.Drag, OnDrag);
}
public float GetCurOil()
{
return Mathf.Abs((transform.localPosition.y - _initPos.y) / maxDistance);
}
private void Update()
{
if (_isDragging)
{
MoveToDragPos();
}
}
private void MoveToDragPos()
{
float curY;
// 如果拖拽点在上方,直接移动
if (_dragPoint.y > transform.position.y)
{
curY = _dragPoint.y;
}
// 如果拖拽点在下方,限速移动
else
{
if (Mathf.Abs(_dragPoint.y - transform.position.y) / Time.deltaTime >
_engineSystem.engineConfig.pullMaxSpeed)
{
curY = transform.position.y - _engineSystem.engineConfig.pullMaxSpeed * Time.deltaTime;
}
else
{
curY = _dragPoint.y;
}
}
transform.position = new Vector3(transform.position.x, curY, transform.position.y);
}
private void OnDrag(BaseEventData data)
{
// 这里是一些阻碍拖动的情况
// 正常情况下不会出错
if (data is not PointerEventData pointerData) return;
// 设置拖拽目标点
SetDragTarget(pointerData.position);
}
private void OnBeginDrag(BaseEventData data)
{
// 正常情况下不会出错
if (data is not PointerEventData pointerData) return;
// 设置拖拽目标点
SetDragTarget(pointerData.position);
// 开始拖动的时候把原有的动画删掉
transform.DOKill();
_isDragging = true;
}
private void OnEndDrag(BaseEventData data)
{
_isDragging = false;
// 松手后抽回去
var retractTime = (_initPos.y - transform.localPosition.y) / _engineSystem.engineConfig.returnSpeed;
transform.DOMove(_initPos, retractTime);
}
private void SetDragTarget(Vector3 mousePos)
{
var worldPos = CommonUtil.GetMouseWorldPos(mousePos, transform);
var dragY = CommonUtil.Limit(worldPos.y, _initPos.y, _initPos.y - maxDistance);
_dragPoint = new Vector3(transform.position.x, dragY, transform.position.z);
}
public bool IsActive => true;
public bool IsAvailable => _engineSystem.isAvailable;
public GameObject GetGameObject()
{
return gameObject;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7a6d9bb0e6b84b14a9d78479d5462d41
timeCreated: 1737097199
@@ -1,34 +0,0 @@
using Framework.Core;
using UnityEngine;
namespace AibisDream
{
public abstract class Dashboard : MonoBehaviour
{
protected EngineSystem engineSystem;
private void Awake()
{
engineSystem = transform.parent.GetComponent<EngineSystem>();
this.FindComponents();
OnStart();
}
protected virtual void OnStart()
{
// 没有就不重写
}
private void OnEnable()
{
engineSystem.UpdateDashboard += UpdateDashboard;
}
private void OnDisable()
{
engineSystem.UpdateDashboard -= UpdateDashboard;
}
protected abstract void UpdateDashboard(EngineData data);
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 82490bb3746d86e409719d43501d2c5e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+68 -239
View File
@@ -1,41 +1,35 @@
using System;
using System.Linq;
using AibisDream.FixSystem;
using AibisDream.Framework;
using AibisDream.Kit;
using AibisDream.Utility;
using Cinemachine;
using DG.Tweening;
using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.Events;
namespace AibisDream
{
public class EngineSystem : SystemHasData
public class EngineSystem : MonoBehaviour
{
public static string DataPath = Application.streamingAssetsPath + "/LevelData/EngineSystem/";
private CordPull _cordPull;
private StaticGear _centerGear;
private SpriteRenderer _cover;
private AirGate _airGate;
[Header("系统配置")] public EngineConfig engineConfig;
[Header("系统数据")] public EngineData engineData;
[Header("系统配置")] [SerializeField] public EngineConfig config;
[Header("系统数据")] [SerializeField] private EngineData engineData;
public bool isAvailable;
[FormerlySerializedAs("盖板移动时间")] [SerializeField]
private float coverMoveDuration = 5f;
[HideInInspector] public UnityEvent<float> updateSpeedEvent = new();
[FormerlySerializedAs("盖板移动距离")] [SerializeField]
private float coverMoveDistance = 2.8f;
[SerializeField] private float coverMoveDuration = 5f;
private bool IsValid => engineData.isValid.Value;
public event Action<EngineData> UpdateDashboard;
[SerializeField] private float coverMoveDistance = 2.8f;
private void Awake()
{
FixSystemCenter.SystemDic.Register(this);
_cover = transform.Find("Cover").GetComponent<SpriteRenderer>();
_airGate = transform.Find("Air Gate").GetComponent<AirGate>();
_cordPull = transform.Find("拉绳").GetComponent<CordPull>();
_centerGear = transform.Find("中央齿轮").GetComponent<StaticGear>();
_centerGear.initSpeed = engineConfig.gearSpeed;
// 注册相机
var virtualCam = transform.Find("Engine Camera").GetComponentInChildren<ICinemachineCamera>();
@@ -44,17 +38,12 @@ namespace AibisDream
private void Start()
{
OnLoad();
}
private void OnLoad()
{
engineData = new EngineData(config.invalidTime);
// 初始档位置为2
_airGate.MoveToLevel(2);
DialogController.Instance?.SetVariable("$curAirLevel", 2);
engineData.UpdateAirLevel(1, config.maxLevel); // 内部档位从0计数,1就是2
// 初始化数据
engineData = new EngineData
{
config = engineConfig
};
_centerGear.StartRotate();
}
private void OnDestroy()
@@ -62,254 +51,84 @@ namespace AibisDream
CameraKit.Instance.UnRegisterCamera(CameraEnum.Engine);
}
private void Update()
public void Update()
{
// 更新部分按时间自然计算的指标
DataAutoChange();
// 更新看板
UpdateDashboard?.Invoke(engineData);
}
// 收集数据
engineData.curOil = _cordPull.GetCurOil();
// 更新数据
engineData.CalcSpeed();
private void DataAutoChange()
{
// 自然减速
engineData.OilChange(-config.oilDownRatio);
engineData.CalcAir(config.airMaxRatio, config.airMinRatio, config.baseAirMax);
// 推算速度
engineData.CalcSpeed(config.acceleratedSpeed, config.resistance);
// 判断是否成功
if (engineData.CheckSuccess(config.targetSpeed))
// 传递速度
updateSpeedEvent.Invoke(engineData.GetRealSpeed());
if (engineData.CheckSuccess())
{
Debug.Log("引擎成功");
DialogController.Instance?.StartDialogNode("EngineSuccess");
}
}
/// <summary>
/// 加速过程
/// 开启系统交互
/// </summary>
public void AddOil()
public void EnableSystem()
{
if (IsValid)
{
engineData.OilChange(config.oilUpRatio);
}
// 失效期无法加油门
isAvailable = true;
}
/// <summary>
/// 更新引擎气门变化
/// 关闭系统交互
/// </summary>
/// <param name="curLevel">当前气门等级</param>
public void UpdateAirLevel(int curLevel)
public void DisableSystem()
{
engineData.UpdateAirLevel(curLevel, config.maxLevel);
DialogController.Instance?.SetVariable("$curAirLevel", curLevel + 1);
DialogController.Instance?.StartDialogNode("调整进气档位");
isAvailable = false;
}
/// <summary>
/// 打开盖板
/// </summary>
/// <returns>动画序列</returns>
public Tween OpenCover()
{
AudioManager.PlayLoop2Audio("amb_shitou_engine");
var sq = DOTween.Sequence();
// 盖板上移
var moveDis = new Vector3(0, coverMoveDistance, 0);
sq.Join(_cover.transform.DOBlendableMoveBy(moveDis, coverMoveDuration));
// 盖板淡出
sq.Join(_cover.DOFade(0, coverMoveDuration));
// 为引擎系统解锁
sq.OnComplete(Unlock);
return sq;
}
/// <summary>
/// 关闭盖板
/// </summary>
/// <returns>动画序列</returns>
public Tween CloseCover()
{
AudioManager.PauseLoop2Audio();
var sq = DOTween.Sequence();
sq.Join(_cover.DOFade(1, coverMoveDuration));
var moveDis = new Vector3(0, -coverMoveDistance, 0);
sq.Join(_cover.transform.DOBlendableMoveBy(moveDis, coverMoveDuration));
// 锁定引擎系统
sq.OnComplete(Lock);
return sq;
}
public void Lock()
{
// 禁止油门和气门
}
public void Unlock()
{
// 开启油门和气门
}
#region
private string[] _keyOptions;
public override string CurDataKey { get; set; }
public override string GetConfigPath()
{
return DataPath;
}
public override void LoadLevel()
{
if (string.IsNullOrEmpty(CurDataKey))
{
Debug.Log("配置项名称为空");
return;
}
if (!ConfigUtil.Instance.TryLoadConfig<EngineConfig>(DataPath + CurDataKey,
out var data))
{
Debug.Log("没有找到配置项");
return;
}
config = data;
// 重置Data
OnLoad();
}
public override void SaveLevel()
{
if (string.IsNullOrEmpty(CurDataKey))
{
Debug.Log("名称不为空");
return;
}
ConfigUtil.Instance.SaveConfig(config, DataPath + CurDataKey);
if (!_keyOptions.Contains(CurDataKey))
{
// 重新读取key
_keyOptions = ConfigUtil.Instance.GetFileNames(DataPath);
}
}
#endregion
}
[Serializable]
public struct EngineConfig
{
public float oilDownRatio;
public float oilUpRatio;
public float acceleratedSpeed;
public float resistance;
public float airMaxRatio;
public float airMinRatio;
public float baseAirMax;
public int maxLevel;
public float targetSpeed;
public float invalidTime;
[Header("油门倍率")] public float oilRate;
[Header("阻力倍率")] public float resistance;
[Header("齿轮基础速度")] public float gearSpeed;
[Header("齿轮速度倍率")] public float speedRate;
[Header("成功所需时间")] public float targetDuration;
[Header("拉绳最大速度")] public float pullMaxSpeed;
[Header("拉绳回缩速度")] public float returnSpeed;
}
[Serializable]
public struct EngineData
{
private const float SuccessDuration = 1.5f;
public EngineConfig config;
public float curSpeed;
public float curOil;
public float curAir;
public float curAirMin;
public float curAirMax;
public int curAirLevel;
public AutoFlipBool isValid;
public bool inAirRange;
public float reachTargetTime;
public float curAcceleration;
public bool isSuccess;
public float reachTargetTime;
public EngineData(float flipDelayTime)
public void CalcSpeed()
{
isValid = new AutoFlipBool(flipDelayTime, true);
curSpeed = 0;
curOil = 0;
curAir = 0;
curAirMin = 0;
curAirMax = 0;
curAirLevel = 0;
inAirRange = false;
reachTargetTime = 0;
isSuccess = false;
}
public void OilChange(float oilChangeRatio)
{
curOil = CommonUtil.Limit(curOil + oilChangeRatio * Time.deltaTime, 1f, 0f);
}
public void CalcSpeed(float acceleratedSpeed, float resistance)
{
var addNum = inAirRange && isValid.Value
? (curOil * acceleratedSpeed - curSpeed * resistance) * Time.deltaTime
: -curSpeed * resistance * Time.deltaTime;
curSpeed = CommonUtil.Limit(curSpeed + addNum, 1f, 0f);
}
public void CalcAir(float airMaxRatio, float airMinRatio, float baseAirMax)
{
curAirMax = CommonUtil.Limit(curSpeed * (curAirLevel + 1) * airMaxRatio + baseAirMax, 1f, 0f);
curAirMin = CommonUtil.Limit(curSpeed * (curAirLevel + 1) * airMinRatio, 0.8f, 0f);
curAir = curOil;
// 如果离开范围且当前在系统有效期,就进入一段失效期
var curInAirRange = curAir <= curAirMax && curAir >= curAirMin;
if (inAirRange && !curInAirRange && !isSuccess)
if (curOil != 0)
{
// 出界的话
if (curAir > curAirMax) DialogController.Instance?.StartDialogNode("引擎过速");
if (curAir < curAirMin) DialogController.Instance?.StartDialogNode("引擎掉速");
isValid.Value = false;
curAcceleration = curAcceleration < 0 ? 0 : curAcceleration;
curAcceleration = CommonUtil.Limit(curOil * config.oilRate * Time.deltaTime + curAcceleration, 100, 0);
}
else
{
curAcceleration = -config.resistance * (1f + curSpeed);
}
inAirRange = curInAirRange;
curSpeed = CommonUtil.Limit(curSpeed + curAcceleration * Time.deltaTime, 1, 0);
}
public void UpdateAirLevel(int level, int maxLevel)
{
curAirLevel = level;
if (curAirLevel > maxLevel)
{
curAirLevel = maxLevel - 1;
}
if (curAirLevel < 0)
{
curAirLevel = 0;
}
}
public bool CheckSuccess(float targetSpeed)
public bool CheckSuccess()
{
// 已经成功就不用校验了
if (isSuccess) return false;
if (curSpeed >= targetSpeed)
if (curSpeed >= 0.95f)
{
reachTargetTime += Time.deltaTime;
}
@@ -319,10 +138,20 @@ namespace AibisDream
}
// 如果速度达标时间足够就判断成功
if (!(reachTargetTime >= SuccessDuration)) return false;
if (!(reachTargetTime >= config.targetDuration)) return false;
isSuccess = true;
return true;
}
/// <summary>
/// 获取处理后的速度
/// </summary>
/// <returns>速度</returns>
public float GetRealSpeed()
{
return 1 + curSpeed * config.speedRate;
}
}
}
@@ -1,6 +1,5 @@
using System.Collections;
using AibisDream.FixSystem;
using DG.Tweening;
using UnityEngine;
using Yarn.Unity;
namespace AibisDream
@@ -11,16 +10,16 @@ namespace AibisDream
[YarnCommand("open_engine_cover")]
public static IEnumerator OpenEngineCover()
{
var engineSystem = FixSystemCenter.SystemDic.Get<EngineSystem>();
yield return engineSystem.OpenCover().WaitForCompletion();
Debug.LogWarning("打开引擎盖命令已废弃,请尽快删除");
yield break;
}
// 打开引擎盖
[YarnCommand("close_engine_cover")]
public static IEnumerator CloseEngineCover()
{
var engineSystem = FixSystemCenter.SystemDic.Get<EngineSystem>();
yield return engineSystem.CloseCover().WaitForCompletion();
Debug.LogWarning("关闭引擎盖命令已废弃,请尽快删除");
yield break;
}
}
}
@@ -1,21 +0,0 @@
using Framework.Core;
using UnityEngine;
namespace AibisDream
{
public class OilDashBoard : Dashboard
{
[FindComponent] private SpriteRenderer _pointer;
private float _pointerMaxHeight;
protected override void OnStart()
{
_pointerMaxHeight = _pointer.size.y;
}
protected override void UpdateDashboard(EngineData data)
{
_pointer.size = new Vector2(_pointer.size.x, data.curOil * _pointerMaxHeight);
}
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 5f1dc6d4faf506b479900b5b2b534d14
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
-57
View File
@@ -1,57 +0,0 @@
using DG.Tweening;
using UnityEngine;
namespace AibisDream
{
public class OilGate : MonoBehaviour
{
private SpriteButton _spriteButton;
private EngineSystem _engineSystem;
private void Start()
{
_engineSystem = transform.parent.GetComponent<EngineSystem>();
}
private void OnEnable()
{
_spriteButton = new SpriteButton(gameObject);
_spriteButton.OnButtonDown += ButtonClick;
_spriteButton.OnButtonUp += ButtonUp;
_spriteButton.OnButtonHold += ButtonHold;
}
private void OnDisable()
{
_spriteButton = null;
}
private void Update()
{
_spriteButton?.CheckButtonClick();
}
private void ButtonClick()
{
transform.DOPause();
transform.DORotate(new Vector3(0, 0, 45), 5f);
// 播引擎
AudioManager.PlayLoopAudio("engine_on");
AudioManager.StopInteraction();
}
private void ButtonUp()
{
AudioManager.PauseLoopAudio();
AudioManager.PlayInteraction("engine_off");
transform.DOPause();
transform.DORotate(new Vector3(0, 0, 0), 0.2f);
}
private void ButtonHold()
{
_engineSystem.AddOil();
}
}
}
@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 04beec2ebfad5f642bfb4a7a1716a08a
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -2,19 +2,19 @@ using UnityEngine;
namespace AibisDream
{
public class SpeedDashboard : Dashboard
public class SpeedDashboard : MonoBehaviour
{
private Transform _pointer;
[SerializeField] private float leftRot;
[SerializeField] private float rightRot;
protected override void OnStart()
protected void OnStart()
{
_pointer = transform.Find("Pointer");
}
protected override void UpdateDashboard(EngineData data)
protected void UpdateDashboard(EngineData data)
{
var targetRot = (rightRot - leftRot) * data.curSpeed + leftRot;
@@ -0,0 +1,35 @@
using DG.Tweening;
using UnityEngine;
namespace AibisDream
{
public class StaticGear : MonoBehaviour
{
public float initSpeed;
private Tween _rotateTween;
private void Start()
{
transform.parent.GetComponent<EngineSystem>().updateSpeedEvent.AddListener(UpdateSpeedScale);
}
/// <summary>
/// 开始旋转
/// </summary>
public void StartRotate()
{
_rotateTween = transform.DORotate(new Vector3(0, 0, 360), 1 / Mathf.Abs(initSpeed), RotateMode.LocalAxisAdd)
.SetEase(Ease.Linear)
.SetLoops(-1, LoopType.Incremental);
}
/// <summary>
/// 为旋转加速
/// </summary>
/// <param name="speed">速度倍率</param>
private void UpdateSpeedScale(float speed)
{
_rotateTween.timeScale = speed;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 79006d3d747c4b8482204874bbbf6ae3
timeCreated: 1737104031
@@ -61,7 +61,6 @@ namespace AibisDream
private void Start()
{
_shaftGraph?.Clear();
var shafts = transform.Find("Shafts").GetComponentsInChildren<Shaft>();
var panelShafts = _panel.GetComponentsInChildren<Shaft>();
_shaftGraph = new ShaftGraph(shafts, panelShafts);
@@ -277,7 +276,6 @@ namespace AibisDream
#if UNITY_EDITOR
if (!EditorApplication.isPlaying) return;
#endif
_shaftGraph?.Clear();
_shaftGraph = new ShaftGraph(shafts, panelShafts);
}
+3 -13
View File
@@ -1,6 +1,5 @@
using System;
using System.Linq;
using AibisDream.FixSystem;
using UnityEngine;
namespace AibisDream
@@ -42,9 +41,6 @@ namespace AibisDream
GeneEdgeTable();
UpdateSpeed();
var engine = FixSystemCenter.SystemDic.Get<EngineSystem>();
engine.UpdateDashboard += Accelerate;
}
private int FindDriverIdx()
@@ -269,19 +265,13 @@ namespace AibisDream
/// <summary>
/// 通过引擎系统加速
/// </summary>
/// <param name="engineData"></param>
private void Accelerate(EngineData engineData)
/// <param name="curSpeed">当前速度</param>
private void Accelerate(float curSpeed)
{
foreach (var shaft in _vertexArray)
{
if (shaft.HasChildGear()) shaft.UpdateSpeedScale(1 + engineData.curSpeed);
if (shaft.HasChildGear()) shaft.UpdateSpeedScale(1 + curSpeed);
}
}
public void Clear()
{
var engine = FixSystemCenter.SystemDic.Get<EngineSystem>();
engine.UpdateDashboard -= Accelerate;
}
}
}
+104 -27
View File
@@ -1,4 +1,5 @@
using System.Collections;
using System;
using System.Collections;
using System.Collections.Generic;
using AibisDream.Framework;
using UnityEngine;
@@ -8,7 +9,7 @@ namespace AibisDream
{
public class CursorManager : MonoBehaviour
{
private const float DelayTime = 0.2f;
private const float DelayTime = 0.1f;
[Header("指针图片")] public Sprite defaultCursor;
public Sprite nextTalk, talking, option, interactive, holding, disable, eye;
@@ -20,11 +21,12 @@ namespace AibisDream
private Coroutine _switchCoroutine;
private CursorState _curState = CursorState.Default;
private bool _isTalking;
#endregion
// 卸载时注销事件
private List<IUnRegister> _unRegisters = new();
private readonly List<IUnRegister> _unRegisters = new();
public void Awake()
{
@@ -65,17 +67,26 @@ namespace AibisDream
// 此处监听所有可能对鼠标状态产生影响的事件
// 对话相关
_unRegisters.Add(EnumEventSystem.Global.Register<DialogEventEnum, DialogLine>(DialogEventEnum.LineStart,
_ => SwitchCursor(talking)));
OnLineStart));
_unRegisters.Add(EnumEventSystem.Global.Register(DialogEventEnum.LineShowed, () => SwitchCursor(nextTalk)));
_unRegisters.Add(EnumEventSystem.Global.Register(DialogEventEnum.LineEnd,
() => SwitchCursorDelay(defaultCursor)));
_unRegisters.Add(EnumEventSystem.Global.Register(DialogEventEnum.OptionShow, () => SwitchCursor(option)));
_unRegisters.Add(EnumEventSystem.Global.Register(DialogEventEnum.OptionSelected,
() => SwitchCursorDelay(defaultCursor)));
_unRegisters.Add(EnumEventSystem.Global.Register(DialogEventEnum.LineEnd, OnLineEnd));
_unRegisters.Add(EnumEventSystem.Global.Register(DialogEventEnum.OptionShow, OnOptionShow));
_unRegisters.Add(
EnumEventSystem.Global.Register<DialogEventEnum, DialogLine>(DialogEventEnum.OptionSelected,
OnOptionSelect));
// 交互相关
_unRegisters.Add(EnumEventSystem.Global.Register(InteractionEventEnum.Start, OnInteractiveStart));
_unRegisters.Add(EnumEventSystem.Global.Register(InteractionEventEnum.End, OnInteractiveEnd));
_unRegisters.Add(
EnumEventSystem.Global.Register<TriggerEnum, IInteraction>(TriggerEnum.PointerEnter, OnPointerEnter));
_unRegisters.Add(
EnumEventSystem.Global.Register<TriggerEnum, IInteraction>(TriggerEnum.PointerExit, OnPointerExit));
_unRegisters.Add(
EnumEventSystem.Global.Register<TriggerEnum, IInteraction>(TriggerEnum.PointerDown, OnPointerDown));
_unRegisters.Add(
EnumEventSystem.Global.Register<TriggerEnum, IInteraction>(TriggerEnum.PointerUp, OnPointerUp));
}
private void LateUpdate()
@@ -89,16 +100,92 @@ namespace AibisDream
// 在输入状态,要单独处理
}
#region
#region
private void OnLineStart(DialogLine line)
{
_isTalking = true;
SwitchCursor(talking);
}
private void OnLineEnd()
{
StopDelayCursor();
_switchCoroutine = StartCoroutine(DelayAction(() =>
{
_isTalking = false;
_cursor.sprite = defaultCursor;
}));
}
private void OnOptionShow()
{
_isTalking = true;
SwitchCursor(option);
}
private void OnOptionSelect(DialogLine line)
{
StopDelayCursor();
StartCoroutine(DelayAction(() =>
{
_isTalking = false;
_cursor.sprite = defaultCursor;
}));
}
#endregion
#region
private void OnInteractiveStart()
{
_curState = CursorState.Interactive;
if (EventSystemEx.Instance.pointerOverObj)
{
SwitchCursor(interactive);
}
}
private void OnInteractiveEnd()
{
_curState = CursorState.Interactive;
_curState = CursorState.Default;
// 退出时把Cursor置为Default
SwitchCursor(defaultCursor);
}
private void OnPointerEnter(IInteraction target)
{
if (_curState == CursorState.Interactive && !_isTalking)
{
// 如果不可交互,就显示不可交互的指针
SwitchCursor(target.IsActive ? interactive : disable);
}
}
private void OnPointerExit(IInteraction target)
{
if (_curState == CursorState.Interactive && !_isTalking)
{
SwitchCursor(defaultCursor);
}
}
private void OnPointerDown(IInteraction target)
{
if (_curState == CursorState.Interactive && !_isTalking)
{
SwitchCursor(target.IsActive ? holding : defaultCursor);
}
}
private void OnPointerUp(IInteraction target)
{
if (_curState == CursorState.Interactive && !_isTalking)
{
// 如果松手时还在物体之上
SwitchCursor(EventSystemEx.Instance.holdingObj == target.GetGameObject() ? interactive : defaultCursor);
}
}
#endregion
@@ -115,22 +202,6 @@ namespace AibisDream
_cursor.sprite = sprite;
}
/// <summary>
/// 延迟切换指针。如果后面有其他切换状态,就直接打断
/// </summary>
/// <param name="sprite">指针图片</param>
private void SwitchCursorDelay(Sprite sprite)
{
StopDelayCursor();
_switchCoroutine = StartCoroutine(SwitchCursorAsync(sprite));
}
private IEnumerator SwitchCursorAsync(Sprite sprite)
{
yield return new WaitForSeconds(DelayTime);
_cursor.sprite = sprite;
}
private void StopDelayCursor()
{
if (_switchCoroutine != null)
@@ -141,6 +212,12 @@ namespace AibisDream
}
#endregion
private static IEnumerator DelayAction(Action action)
{
yield return new WaitForSeconds(DelayTime);
action.Invoke();
}
}
public enum CursorState
+7 -6
View File
@@ -91,11 +91,11 @@ namespace AibisDream
bool isAutoSkip = false)
{
gameObject.SetActive(true);
// 没有dialogText说明不能显示对话,直接跳过
if (!dialogText)
{
return;
}
// // 没有dialogText说明不能显示对话,直接跳过
// if (!dialogText)
// {
// return;
// }
// 把原有对话清掉
ClearBox();
@@ -126,8 +126,9 @@ namespace AibisDream
if (_nextStep == null) return;
EnumEventSystem.Global.Send(DialogEventEnum.LineEnd);
_nextStep.Invoke();
var next = _nextStep;
_nextStep = null;
next.Invoke();
}
/// <summary>