Compare commits
2534 Commits
v0.1.0_and
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
90af1ffd08 | ||
|
|
405413a212 | ||
|
|
9488ff2513 | ||
|
|
2a42432a18 | ||
|
|
874e4f85fc | ||
|
|
62c2e9cfc3 | ||
|
|
49bafa2fac | ||
|
|
7739b7d291 | ||
|
|
f0f4c639c0 | ||
|
|
b6d20fe9cd | ||
|
|
f7a4d2aa47 | ||
|
|
f3cac19afe | ||
|
|
8538803485 | ||
|
|
be63ed686d | ||
|
|
67e9e2606f | ||
|
|
7a015b49c0 | ||
|
|
8910eb7a9a | ||
|
|
7736db2fd8 | ||
|
|
f7e06bbbb0 | ||
|
|
9c606c912c | ||
|
|
b29592f4ba | ||
|
|
93870ca319 | ||
|
|
10a8fb1bd4 | ||
|
|
f0a42fe98e | ||
|
|
3cb8082e95 | ||
|
|
000bf11a3c | ||
|
|
94bf2f7e8d | ||
|
|
ecb8126410 | ||
|
|
fb5452c195 | ||
|
|
bbba324be0 | ||
|
|
0d8ae2d971 | ||
|
|
10fdfacc3d | ||
|
|
c664cf5dad | ||
|
|
a758dcc6cb | ||
|
|
1868e0240b | ||
|
|
915b2d063d | ||
|
|
0a437537bc | ||
|
|
28e0b2c050 | ||
|
|
aa3289de03 | ||
|
|
7193f5dcbe | ||
|
|
bb32c2d7d7 | ||
|
|
4edac166cb | ||
|
|
9281fa7205 | ||
|
|
5aa8a23495 | ||
| d4be4b43e6 | |||
| fa077c8263 | |||
|
|
ed8226641d | ||
|
|
093f14b332 | ||
|
|
0a47f14639 | ||
|
|
49d3ec38f9 | ||
|
|
d9229a681c | ||
| 3a4eb9b1bb | |||
|
|
5ff0c61668 | ||
|
|
122cc3b38b | ||
|
|
9c9fe3ec54 | ||
|
|
3eb1cf0802 | ||
|
|
56ef059eb8 | ||
|
|
ee98d9f79a | ||
|
|
2f51ae1ae6 | ||
|
|
3930c8fdd7 | ||
|
|
2867004de9 | ||
|
|
b36d71eaf3 | ||
|
|
b8252ea632 | ||
|
|
7a978d23e6 | ||
|
|
ab7b5bc5fc | ||
|
|
f63a371e34 | ||
|
|
0c30b628b5 | ||
|
|
41b3ffa70d | ||
|
|
931b027788 | ||
| 1d7a2b6d8a | |||
| 9f66ce34ac | |||
|
|
6ca3d26981 | ||
|
|
e5c0e0e410 | ||
|
|
956e0fc450 | ||
|
|
6b868e2614 | ||
| 195a4fcb6c | |||
|
|
14753f4ff0 | ||
|
|
9679193809 | ||
|
|
4472be6385 | ||
|
|
83a73f90f2 | ||
|
|
f850de3096 | ||
|
|
0bffde22a1 | ||
|
|
34a91873b6 | ||
|
|
bfe54cca00 | ||
|
|
abfddf5100 | ||
|
|
e66680a204 | ||
|
|
08c82f82bc | ||
|
|
b8f3b9530e | ||
|
|
cdae36a0c5 | ||
|
|
22619de917 | ||
|
|
55f0519824 | ||
|
|
cabbc6f24a | ||
|
|
c9f70b1833 | ||
|
|
e998aa73de | ||
|
|
41eb07e262 | ||
|
|
9e29e2b527 | ||
|
|
78ebbdb287 | ||
|
|
68fe25fc5f | ||
| 0f7a10bd19 | |||
|
|
1777464ea5 | ||
|
|
d38336d49c | ||
|
|
17072fed51 | ||
|
|
6c60435457 | ||
|
|
2b3f91e516 | ||
|
|
4a06d0df69 | ||
|
|
6c37c72e4a | ||
|
|
380bb080da | ||
|
|
f7f9b292c0 | ||
|
|
ab0b38c501 | ||
|
|
928dd46290 | ||
|
|
bf52ed6083 | ||
|
|
2ae155b480 | ||
|
|
16d550aefa | ||
|
|
8304af85ef | ||
|
|
135658321b | ||
|
|
c86b965ee6 | ||
|
|
e2473b1d64 | ||
|
|
a959e8a3a3 | ||
|
|
262f74311e | ||
|
|
09c0fb8c4f | ||
|
|
d4272eb86b | ||
|
|
130d25ec22 | ||
|
|
06cecef8fc | ||
|
|
949da0fdfd | ||
|
|
98cd8bd9c9 | ||
| 5575d26087 | |||
|
|
c6fb5ee0a8 | ||
|
|
9d023efcb6 | ||
|
|
a2b50a8315 | ||
|
|
2c40d73a0e | ||
|
|
2f9f35b98d | ||
|
|
f76dd842fc | ||
|
|
0abc5d6ab5 | ||
|
|
a38f6816e3 | ||
|
|
18d2e5c1fe | ||
|
|
68ca7492e6 | ||
| cc805c09f7 | |||
|
|
77fd785a44 | ||
|
|
962103db4c | ||
|
|
b9393f591d | ||
|
|
1b3c0bc18b | ||
|
|
fcbb2a6c65 | ||
|
|
b71c87b4b8 | ||
|
|
ebb7db4e18 | ||
|
|
d9a9716798 | ||
|
|
3a986f6b7a | ||
|
|
8722d4b433 | ||
|
|
e1a49e73d9 | ||
|
|
738f80d84b | ||
|
|
f4c431f50c | ||
|
|
45ce3c75c4 | ||
|
|
3ff2e9085e | ||
|
|
06d05d2fe8 | ||
|
|
401c2bd48f | ||
|
|
de5805d1dc | ||
|
|
e5a7bad0a9 | ||
|
|
992b6f5f6f | ||
|
|
f0f95f01d7 | ||
|
|
9d5afff839 | ||
|
|
d127666db5 | ||
|
|
00e53beccd | ||
|
|
07c3c5334a | ||
|
|
97cc288db3 | ||
|
|
c83be5ae7f | ||
|
|
4f9e75da7a | ||
|
|
4821b24301 | ||
|
|
ba57353ad0 | ||
|
|
41cfc6c2b9 | ||
|
|
bb625cb8e8 | ||
|
|
59cf73eed0 | ||
|
|
e8447938f9 | ||
|
|
c429cb382b | ||
| b72212aa71 | |||
| f48cd9d74a | |||
|
|
ea95ca7f2c | ||
|
|
91e6c226a5 | ||
|
|
43d34f274e | ||
| cfd7a48e82 | |||
|
|
e65320206a | ||
|
|
f93c89c162 | ||
|
|
16b6f9b4bc | ||
|
|
8a961ae07b | ||
|
|
eeede315a6 | ||
|
|
00e6d5389f | ||
|
|
07fb378809 | ||
| 7e4834769d | |||
|
|
81a5a71a20 | ||
|
|
24dbb7aa0b | ||
|
|
ba70479f0c | ||
|
|
2460664dc9 | ||
|
|
71b7f13375 | ||
|
|
6f3e35243a | ||
|
|
8cf8056ef4 | ||
|
|
da59410f2b | ||
|
|
a071da067a | ||
|
|
22a2bb1a5e | ||
|
|
d72c8beab6 | ||
|
|
930ea28eff | ||
|
|
122043a733 | ||
| 779c698170 | |||
|
|
01d6a4b439 | ||
|
|
55c5ad0741 | ||
|
|
c710842d63 | ||
|
|
4756312d3c | ||
|
|
70c822b986 | ||
|
|
798fb612d3 | ||
|
|
24a0670365 | ||
|
|
f40b937012 | ||
|
|
0d8a07e5fa | ||
|
|
5f5d13a898 | ||
|
|
60cb67ca4d | ||
|
|
a68d772eb3 | ||
|
|
0aa578ce70 | ||
|
|
1d74ee3b77 | ||
|
|
78c5077f5b | ||
|
|
6cfbfbbe50 | ||
|
|
02f32f15df | ||
|
|
d47ae896cd | ||
|
|
267d580dad | ||
|
|
1815903a06 | ||
|
|
33e280187a | ||
|
|
c686640095 | ||
|
|
16da88351d | ||
|
|
d32e88ac01 | ||
|
|
0b59c2d77d | ||
| fb7e273422 | |||
|
|
83016a2aef | ||
|
|
9ca3f79c89 | ||
|
|
641cccf3c0 | ||
|
|
7057163384 | ||
|
|
1ba9f51ff8 | ||
|
|
8ec42e8a10 | ||
| 5ddfb7eb01 | |||
|
|
e003e236ec | ||
|
|
92508925bb | ||
|
|
0942c88d19 | ||
|
|
505a7cb8fb | ||
|
|
edfc1d0b46 | ||
|
|
37979729e0 | ||
|
|
5c3b431d25 | ||
|
|
9a44044fa6 | ||
|
|
1e766a87c7 | ||
|
|
71058ccfee | ||
|
|
6f5f4d94e9 | ||
|
|
299b03213f | ||
|
|
6266224727 | ||
|
|
e4b953c193 | ||
| d1306fbb31 | |||
|
|
1ef890c2b4 | ||
|
|
03956d8ecb | ||
|
|
0c0be394ac | ||
|
|
beb7ae495c | ||
|
|
1b9826fced | ||
|
|
8b235c7e3a | ||
|
|
f07e452b82 | ||
|
|
f4a61a5cbd | ||
|
|
c58757a314 | ||
|
|
9f0867dea5 | ||
|
|
fcf516ac7f | ||
|
|
7d6398835a | ||
|
|
41434625e2 | ||
|
|
f6e906a646 | ||
|
|
6050a42478 | ||
|
|
a2ff24f5a6 | ||
|
|
c30e9d729c | ||
|
|
a5e8643589 | ||
|
|
9a29a4b382 | ||
|
|
37ec3978b5 | ||
|
|
29526815ba | ||
|
|
88632884bc | ||
|
|
56fbcd4a6e | ||
|
|
3d37d44aa7 | ||
|
|
292198793e | ||
|
|
3ea4515098 | ||
|
|
b92f858295 | ||
| 5e7537ebb0 | |||
|
|
442320c2be | ||
|
|
188a85d723 | ||
|
|
9b95508c42 | ||
|
|
bddd14fdd4 | ||
|
|
448aa0659e | ||
|
|
c54a6c48b9 | ||
|
|
b6345dce5a | ||
|
|
b0ca1e6132 | ||
|
|
916c9d9a69 | ||
|
|
94f5ea647f | ||
|
|
b044273afc | ||
|
|
79c4fd7907 | ||
|
|
74681e64c7 | ||
|
|
8a7e4ec47c | ||
|
|
33e84e5cc1 | ||
|
|
c0aeccf71a | ||
|
|
f12896f346 | ||
|
|
b3f490c9ac | ||
|
|
94a532d553 | ||
|
|
6792ac4fd7 | ||
|
|
ae1aeba1c5 | ||
|
|
c8ac729532 | ||
|
|
1cf27e1a54 | ||
|
|
f78213bce1 | ||
|
|
91dc07f589 | ||
|
|
7eed36b812 | ||
|
|
ca342100a2 | ||
|
|
1ecdf0cd14 | ||
|
|
bdcf3f995b | ||
|
|
2a8107ddce | ||
|
|
d924919e22 | ||
|
|
83a5666725 | ||
|
|
a022065ef5 | ||
|
|
78b27b7607 | ||
|
|
53caadd7e5 | ||
|
|
bcb9e60c73 | ||
|
|
0d50692a4f | ||
|
|
35d8383450 | ||
|
|
e528334190 | ||
|
|
e2abf80e5d | ||
|
|
769cfbe34d | ||
|
|
753fba3b0d | ||
|
|
ee5e11f045 | ||
|
|
ab0c8d0559 | ||
|
|
6f784eb8e3 | ||
|
|
cccce0625e | ||
|
|
94fcea9026 | ||
|
|
b42736678e | ||
|
|
d6eb5dfbe9 | ||
|
|
0ba16ffa0c | ||
|
|
1c44759790 | ||
|
|
833a583f97 | ||
|
|
37da32c547 | ||
|
|
bbb5804a24 | ||
|
|
50e9a27318 | ||
|
|
ebf9ec6209 | ||
|
|
565322e62a | ||
|
|
abbde65fff | ||
|
|
1275c6494f | ||
|
|
a86dbc2116 | ||
|
|
575a7a90f7 | ||
|
|
2b78eb4cc0 | ||
|
|
845c800565 | ||
|
|
4117053230 | ||
|
|
d9110872bf | ||
|
|
0679e04395 | ||
|
|
9345d10d6c | ||
|
|
c88edc50e5 | ||
|
|
96f2d2fae8 | ||
|
|
c3a6f1e5b8 | ||
|
|
e0009f528e | ||
|
|
9b1f58562b | ||
|
|
22b2cadb96 | ||
|
|
7f05bf4024 | ||
|
|
f409368faa | ||
|
|
760e3878f4 | ||
|
|
178c761583 | ||
|
|
d84ffd490d | ||
|
|
75abb7d2bb | ||
|
|
ad6e8b1402 | ||
|
|
0a231c3f94 | ||
|
|
00c9bd3bfe | ||
|
|
47d4ccd4a6 | ||
|
|
96a0a976e6 | ||
|
|
771b713f6d | ||
|
|
4ef44130e9 | ||
|
|
00e06273ad | ||
|
|
bcf3982203 | ||
|
|
eaed3e859e | ||
|
|
17a349c66d | ||
|
|
2a8cfe31e9 | ||
|
|
ce6127b71d | ||
|
|
9f0fd56ab4 | ||
|
|
da10987311 | ||
|
|
a6d3bb1803 | ||
|
|
97ce41a1e3 | ||
|
|
862e9200e7 | ||
| 63c531b066 | |||
|
|
6bfab0547f | ||
|
|
f49e729db2 | ||
|
|
27308ff7fd | ||
|
|
1e970493b3 | ||
|
|
6ea9e710b0 | ||
|
|
e0e91933e8 | ||
|
|
f0e3749794 | ||
|
|
dc1b6c9838 | ||
|
|
37bd501110 | ||
|
|
4094f79f7b | ||
|
|
06f81a091a | ||
|
|
bd58628e2d | ||
|
|
34953bab97 | ||
|
|
9ff6dbeee0 | ||
|
|
8638d3f2e2 | ||
|
|
0dcdf0fe9d | ||
|
|
57131fb59b | ||
|
|
8dadc9e37d | ||
|
|
1e1e4835d3 | ||
|
|
b5f498ad7c | ||
|
|
6eeff31530 | ||
|
|
c715f838f8 | ||
|
|
35193331ef | ||
|
|
b8d0930d6c | ||
|
|
b4f2b23cb2 | ||
|
|
29ffd0dc36 | ||
|
|
5b27f2c252 | ||
|
|
1d12b1c1e8 | ||
|
|
0c3788b90d | ||
|
|
026350ff6a | ||
|
|
6bd690e738 | ||
|
|
81d593d09a | ||
|
|
91c0c3b104 | ||
|
|
4da792de57 | ||
|
|
c36cb3f9e5 | ||
|
|
57b1dded5f | ||
|
|
ebbd97f8af | ||
|
|
059c6ca56b | ||
|
|
11283750f3 | ||
|
|
2c07878a4d | ||
|
|
65bbbaa0cc | ||
|
|
a586912584 | ||
|
|
5fe814b753 | ||
|
|
dbb30676a2 | ||
|
|
2dd0c48961 | ||
|
|
d83509fc3f | ||
|
|
d19f63d08a | ||
|
|
c028971870 | ||
|
|
de30482954 | ||
|
|
581c9a8f6e | ||
|
|
980d92839d | ||
|
|
67dfdf94c6 | ||
|
|
5e469d538f | ||
|
|
d3b124c536 | ||
|
|
fd2c59552e | ||
|
|
5587b000e9 | ||
|
|
976a5d0e7c | ||
|
|
82dbf388e5 | ||
|
|
7089eb2821 | ||
|
|
e936d45746 | ||
|
|
eead0cc118 | ||
|
|
1ac93875aa | ||
|
|
58c151899f | ||
|
|
e8b7ee6f1e | ||
|
|
32fd1db301 | ||
|
|
81d9203fed | ||
|
|
20802d3bea | ||
|
|
aa3f69a043 | ||
|
|
3d439234a4 | ||
|
|
ac9253f074 | ||
|
|
27be90073a | ||
|
|
4bc0e14cdf | ||
|
|
ea75430a03 | ||
|
|
4dc5debc7c | ||
|
|
0e962c43ff | ||
|
|
6f0a9720b2 | ||
|
|
0d901aff71 | ||
|
|
68614b6ba8 | ||
|
|
cbf95861d6 | ||
|
|
d1d8b37743 | ||
|
|
45ab702c1c | ||
|
|
1cd3210514 | ||
|
|
df9fb7cabb | ||
|
|
284fbe9bc3 | ||
|
|
5666c71d2b | ||
|
|
29f0e84ee0 | ||
|
|
8089bc6e16 | ||
|
|
8c9945cc63 | ||
|
|
24b7793c44 | ||
|
|
072f845722 | ||
|
|
48c9e677c0 | ||
|
|
ca627fc958 | ||
|
|
2bd4d0aece | ||
|
|
8ec159b939 | ||
|
|
c15bf48f06 | ||
|
|
e4aa6e2edd | ||
|
|
f7fe141786 | ||
|
|
f0889cb678 | ||
|
|
2877a0418f | ||
|
|
b67cd42d94 | ||
|
|
c04ae2e751 | ||
|
|
9d1d98ddd5 | ||
|
|
9d6334e76e | ||
|
|
b9ee339355 | ||
|
|
332789283b | ||
|
|
afc6b61916 | ||
|
|
81d7dc4bd0 | ||
|
|
cc21b09f91 | ||
|
|
0b8306ff1b | ||
|
|
82b8c6a181 | ||
|
|
7d0f23df51 | ||
|
|
1c4236a20f | ||
|
|
667e9dbe11 | ||
|
|
71fe08b57c | ||
|
|
cb1331708c | ||
|
|
d6046b2e7d | ||
|
|
b188be5dd4 | ||
|
|
f08af571e2 | ||
|
|
b3b9e59f4a | ||
|
|
cd1cea12fa | ||
|
|
27d17254a7 | ||
|
|
3a690240f9 | ||
|
|
1dbe2391dc | ||
|
|
79f1369068 | ||
|
|
1daeabac42 | ||
|
|
eb1a197cc0 | ||
|
|
4e0cd6c8d8 | ||
|
|
67a46e7d06 | ||
|
|
f2b6ce6233 | ||
|
|
44d66bb6c2 | ||
|
|
df29ad47ea | ||
|
|
3c50b60ccd | ||
|
|
2ac1249b99 | ||
|
|
a8a49eeb86 | ||
|
|
a6665b8fc3 | ||
|
|
7722e968e3 | ||
|
|
66bf185bd7 | ||
|
|
6533c64892 | ||
|
|
b5c144a98e | ||
|
|
ec67afe68b | ||
|
|
c1af1c8dcf | ||
|
|
eeae9e8382 | ||
|
|
7f99b9d771 | ||
|
|
dccabf26e2 | ||
|
|
ed5e2f1dc7 | ||
|
|
f470bacdbb | ||
|
|
5d690de886 | ||
|
|
8bcf0d01e2 | ||
|
|
c7b4a4a064 | ||
|
|
efd26331b4 | ||
| 7a34de2a39 | |||
| 456deab80a | |||
|
|
b460d9d8c5 | ||
|
|
c180b32e81 | ||
|
|
5bffd844c1 | ||
|
|
0ec05b592c | ||
|
|
ca7f897efe | ||
|
|
2b11c3a6b0 | ||
|
|
be98aa91d8 | ||
|
|
6097fc7c7f | ||
|
|
8cef52f549 | ||
|
|
7b7ee7aa0c | ||
|
|
b3091fbf49 | ||
|
|
d716440747 | ||
|
|
5051d418c8 | ||
|
|
1f6c432163 | ||
|
|
ca460b1b01 | ||
|
|
644a3f5cc3 | ||
|
|
57234a1738 | ||
|
|
5444cab3db | ||
|
|
7837455596 | ||
|
|
bd50d89651 | ||
|
|
5d5606c887 | ||
| 524c4367c2 | |||
|
|
519480c7dd | ||
| 8f2527bb76 | |||
|
|
e4df3deb60 | ||
|
|
ad82aba16d | ||
|
|
20aa364195 | ||
|
|
9b4ab7f785 | ||
|
|
f3b4bbb154 | ||
|
|
713c7b8f87 | ||
|
|
b36941172c | ||
|
|
7134e96cc8 | ||
|
|
0f64030d8e | ||
|
|
72775fbd50 | ||
|
|
deae480ef3 | ||
|
|
6441196517 | ||
|
|
033c2e8d63 | ||
|
|
46e7fbc5de | ||
|
|
02481f50b4 | ||
|
|
17798bf02e | ||
|
|
1c829259d9 | ||
|
|
06f20dfc8e | ||
|
|
06797a20de | ||
|
|
cd3a75c78f | ||
|
|
3ace779c74 | ||
|
|
eb6a23021e | ||
|
|
50a2298e84 | ||
|
|
f8c3dc9bb0 | ||
|
|
01427a9f4c | ||
|
|
4316bca531 | ||
|
|
0a5e37baa3 | ||
|
|
e4446afdec | ||
|
|
81f6b85711 | ||
|
|
60a2c2ee3a | ||
|
|
b2e11a015e | ||
|
|
a6cda907f0 | ||
|
|
3bcb923eda | ||
|
|
30564f7a52 | ||
|
|
a192c8660a | ||
|
|
6170cf21e1 | ||
|
|
c97d9104b4 | ||
|
|
09e5656e83 | ||
|
|
44becf62dd | ||
|
|
6a1403596e | ||
|
|
969e7ec6e2 | ||
|
|
f845d5c1fd | ||
|
|
abf3d6f3aa | ||
|
|
b8f7a7a783 | ||
|
|
f1d34124b7 | ||
| 2ee3df25e9 | |||
| feb63e9933 | |||
|
|
16d8c0e858 | ||
|
|
1e7440d170 | ||
| 16143ea795 | |||
| bb7ceff1e9 | |||
|
|
3f7d7dfb21 | ||
|
|
a645eb5c63 | ||
| fac1160a61 | |||
|
|
6434cc2f8b | ||
|
|
3527846c69 | ||
|
|
c597e71285 | ||
|
|
4b49a99d8f | ||
|
|
b8437cd261 | ||
| bb7af8c9f8 | |||
| 60dc7fdff5 | |||
| 972202a6d1 | |||
|
|
fe2f61985c | ||
|
|
6d480fc8b7 | ||
| e6227ea86f | |||
|
|
db2c20f2f1 | ||
|
|
2ac0456b2f | ||
|
|
a6641a707b | ||
|
|
1769d7a941 | ||
|
|
e51d67d317 | ||
|
|
3b4a03cde8 | ||
| ac46a76f69 | |||
| 037d45092f | |||
|
|
be4c77474e | ||
|
|
acf5e29ae1 | ||
|
|
32a5d23a0c | ||
|
|
4d1635dc3b | ||
|
|
335ab77238 | ||
|
|
c438b6fbd3 | ||
|
|
ceb3cbfdbc | ||
|
|
b7caf1dbf8 | ||
|
|
35e781df19 | ||
|
|
c4d52097e8 | ||
|
|
5e22aa1c23 | ||
|
|
ac475adb24 | ||
|
|
2194495db0 | ||
|
|
b71d37f58b | ||
|
|
ea1d84b065 | ||
| edad5d3459 | |||
| 7255a8648d | |||
| 4fad3e682e | |||
| fa3a1aa9f6 | |||
| ecefac269c | |||
| 1973964d4f | |||
|
|
ea746f2851 | ||
|
|
212c93632b | ||
|
|
afdf13a0a2 | ||
|
|
0912071578 | ||
|
|
9cdeac081d | ||
|
|
1729539f40 | ||
|
|
200ebe808b | ||
|
|
3254fd04d6 | ||
|
|
1290a24e06 | ||
| 3af536d18d | |||
| 40bb269cd4 | |||
|
|
e7a1fd2b0c | ||
|
|
8ddf543092 | ||
| e70c150a77 | |||
|
|
e98a5855f2 | ||
|
|
f8ad085f8b | ||
| c49c53bd29 | |||
| 72d11545e3 | |||
| 186684915b | |||
|
|
b1ecbc74fa | ||
| 961e69e534 | |||
| 3567e19797 | |||
|
|
94520452eb | ||
|
|
82bfdfc9e5 | ||
|
|
72ae396c7c | ||
|
|
5f9930086e | ||
|
|
26bfed993b | ||
|
|
349c36021f | ||
|
|
b37d58fc29 | ||
|
|
957e5ac9ad | ||
|
|
cfac263d3a | ||
|
|
c78cea4045 | ||
|
|
5ab8615d87 | ||
|
|
f788462596 | ||
|
|
7347201f23 | ||
|
|
3feebb0d9d | ||
|
|
662fd60a54 | ||
|
|
566ac2d369 | ||
|
|
835e3a16bd | ||
|
|
ac48fb604e | ||
|
|
67ce4b8a54 | ||
|
|
6613968878 | ||
|
|
9641889e5d | ||
|
|
f8677b9da5 | ||
|
|
3a853e7771 | ||
|
|
6e9b10e7a3 | ||
| 0a26dee331 | |||
| 5427520356 | |||
|
|
3f24e53428 | ||
|
|
cc6508dc20 | ||
|
|
cbce761a98 | ||
|
|
93787e2194 | ||
|
|
e8186b9d29 | ||
|
|
65a23a6f5e | ||
|
|
0531830c75 | ||
|
|
4f66328eee | ||
|
|
505a3bcb79 | ||
|
|
9f476e99e4 | ||
|
|
11327cb481 | ||
|
|
a4c6fb8e38 | ||
|
|
1dacc15828 | ||
|
|
ff9e413fc6 | ||
|
|
f0cae4c6ab | ||
|
|
7dd9c5e88a | ||
|
|
0aba4ec004 | ||
|
|
b6bf5df071 | ||
|
|
399374dc6c | ||
|
|
ad9bb05f62 | ||
|
|
f55b2a3aa7 | ||
| a63efe7ae5 | |||
| 68f8fb28f4 | |||
| c4c6a1eba9 | |||
|
|
5f53448c75 | ||
|
|
353b6186a3 | ||
|
|
80fd0f2e80 | ||
| 77d1060ba4 | |||
| b6ada80d8a | |||
| 28d7ce9184 | |||
|
|
14e182367c | ||
|
|
e0fa39ac70 | ||
| d8c10917b6 | |||
|
|
a814fa6f72 | ||
|
|
4cebf61be2 | ||
| 85ad80c339 | |||
| ca654b45b9 | |||
|
|
d8c5fb61a3 | ||
| 43526eeccb | |||
| a99fce750e | |||
|
|
78fac50fc5 | ||
| 65e820fa50 | |||
|
|
30bf431636 | ||
|
|
302452e76d | ||
| 22baebeab0 | |||
| 44228b01fe | |||
|
|
187eda1f35 | ||
|
|
62907b1a83 | ||
|
|
d88a18d48b | ||
| 287361e39a | |||
| 834d12bda4 | |||
|
|
0fda6326b4 | ||
| e9bd6c070d | |||
| 04d54fe957 | |||
|
|
9ab3370abd | ||
|
|
51b8d22f79 | ||
|
|
51891b4d27 | ||
|
|
bdcfb12f52 | ||
|
|
5f858b5d5b | ||
|
|
d93593b5fb | ||
| 7e235b92ae | |||
| 4c52c1a18d | |||
|
|
c9efe2357e | ||
|
|
f49eaaae84 | ||
|
|
425bfe2fd7 | ||
| 80392308a9 | |||
|
|
8031fd83f8 | ||
|
|
326f35d983 | ||
|
|
b08ab375cc | ||
|
|
196e5d881f | ||
|
|
695a02a56d | ||
|
|
8d7b172b83 | ||
| f381de67ae | |||
|
|
1aef3a423a | ||
|
|
685670afb7 | ||
|
|
7c3699c11d | ||
|
|
4409c91b2b | ||
|
|
4270fd5dde | ||
|
|
77788ca22e | ||
|
|
223e735275 | ||
|
|
53e9da7a4f | ||
| 7f4bed0604 | |||
| ccc6048c4b | |||
|
|
089558c932 | ||
|
|
5c1fa9be63 | ||
|
|
977b3c8c91 | ||
|
|
b0cf3b9798 | ||
|
|
e38ce4e68e | ||
|
|
bc6510f5a9 | ||
|
|
fadd825990 | ||
|
|
591784bef1 | ||
|
|
f0c490b2ca | ||
|
|
30b58e0e39 | ||
|
|
704fc389cb | ||
|
|
7a20bfb816 | ||
|
|
b6acc8beee | ||
|
|
56abe8a87b | ||
|
|
6c75146c10 | ||
|
|
fcb9d940b5 | ||
|
|
9c9cde6a89 | ||
|
|
5706a029be | ||
|
|
a6288069d8 | ||
|
|
bcb726187e | ||
|
|
519bda505a | ||
|
|
d3dbfd0b51 | ||
|
|
6f1d287ee4 | ||
|
|
a1a34631f1 | ||
|
|
43c31f6e12 | ||
| 1a8a58c25c | |||
| f55e845856 | |||
|
|
446a83490d | ||
| 94acba74c4 | |||
|
|
cb2c2669c2 | ||
|
|
4d8561a55f | ||
|
|
373e5c22cc | ||
|
|
f7dcecd348 | ||
|
|
42570059b1 | ||
|
|
ce7ad3cb8c | ||
|
|
d145279d29 | ||
|
|
5caf199eb1 | ||
|
|
433ec88ba1 | ||
|
|
3b61c03934 | ||
|
|
17bd8e40ec | ||
|
|
d49083b507 | ||
|
|
dff0b5b08a | ||
|
|
d43dd92f9e | ||
|
|
ee6e367889 | ||
|
|
bad1e2f2e6 | ||
|
|
387492bd3b | ||
|
|
b92c978aad | ||
|
|
654a94eab9 | ||
|
|
607c8d3eb6 | ||
|
|
f52b02b929 | ||
|
|
dd1a91051a | ||
|
|
51d857b64e | ||
|
|
499b1726e6 | ||
|
|
8e8320a307 | ||
|
|
d26fe6cfa2 | ||
|
|
56882aaa7e | ||
|
|
a8064bb578 | ||
|
|
a108907fe1 | ||
|
|
e79f3ea767 | ||
|
|
5817c99a36 | ||
|
|
3b182e56c5 | ||
|
|
80bb50137a | ||
|
|
22b6a4092a | ||
|
|
e0a51b64ba | ||
|
|
cd5f588a66 | ||
|
|
8be0258270 | ||
|
|
8de4c3340b | ||
|
|
d24f52825e | ||
|
|
d312e42fac | ||
|
|
6fabe5b071 | ||
|
|
856132179a | ||
|
|
93bd2796b6 | ||
|
|
9837b2e0b4 | ||
|
|
0d12f8ccbc | ||
|
|
7b8177d69e | ||
|
|
410cc6b903 | ||
|
|
32e93ec980 | ||
|
|
1bbe630e25 | ||
|
|
a199c25d16 | ||
|
|
936fb7c24e | ||
|
|
46cf427dbd | ||
|
|
1135253224 | ||
|
|
0812b11677 | ||
|
|
ec2b16aff1 | ||
|
|
999d62cdbd | ||
|
|
694f7eb10b | ||
|
|
fa42e29552 | ||
|
|
31a57fddc6 | ||
|
|
f1be034375 | ||
|
|
4749c1a7e4 | ||
|
|
afddb8d8e1 | ||
|
|
e65b4a9e1c | ||
|
|
fcba09b85b | ||
|
|
257a21b81b | ||
|
|
70ab6525f1 | ||
|
|
6f13ff7f87 | ||
|
|
644e83d710 | ||
|
|
495b2ff5b6 | ||
|
|
42d2c1e689 | ||
|
|
d5b26101ff | ||
|
|
30d6ac5a5e | ||
|
|
7359fed73e | ||
|
|
93f00bcbe4 | ||
|
|
dfb2714266 | ||
|
|
5e81a3a03c | ||
|
|
b8d46cbb32 | ||
|
|
0559fd514f | ||
|
|
4f2afb81f4 | ||
|
|
8a39baf5f7 | ||
|
|
23c7b3ed55 | ||
|
|
69b6eaa5b9 | ||
|
|
7e2113df1c | ||
|
|
b5d4f35418 | ||
|
|
8f98a75a89 | ||
|
|
a98611fb88 | ||
|
|
9a3549ad43 | ||
|
|
a8b82718d0 | ||
|
|
85df254653 | ||
|
|
446b417948 | ||
|
|
be4846e7b9 | ||
|
|
54cdb0fb0b | ||
|
|
74dec91e6d | ||
|
|
2035826fce | ||
|
|
e6858a8eee | ||
|
|
fb4140d219 | ||
|
|
f004f4ca4a | ||
|
|
1b0abc14c4 | ||
|
|
a4594e1374 | ||
|
|
5bed0fb78c | ||
|
|
56cf140e85 | ||
|
|
75e63b9685 | ||
|
|
2f1aa1145e | ||
|
|
b74826ee90 | ||
|
|
365a1628ba | ||
|
|
34a4fd6725 | ||
|
|
9bc06371fb | ||
|
|
85d2281b42 | ||
|
|
a43ea6c7d7 | ||
|
|
e31bf25fa3 | ||
|
|
57867145a4 | ||
|
|
a77930ec89 | ||
|
|
1c967bd864 | ||
|
|
5431c724af | ||
|
|
5906b8053b | ||
|
|
9f25ac377e | ||
|
|
5abcbc47e7 | ||
|
|
ccacd36da3 | ||
|
|
2651eafff4 | ||
|
|
654c34d0b6 | ||
|
|
0cbb46e649 | ||
|
|
3bea93894e | ||
|
|
2af5fb2301 | ||
|
|
6586382722 | ||
|
|
2104d20eed | ||
|
|
8a1e124054 | ||
|
|
8f360a86c7 | ||
|
|
728cea36a5 | ||
|
|
251ca6a3a7 | ||
|
|
298a77cb44 | ||
|
|
8506550027 | ||
|
|
aa45c8bbf2 | ||
|
|
5e6093378c | ||
|
|
5b418c4878 | ||
|
|
565b7c9e2e | ||
|
|
698bf8e05c | ||
|
|
c9ffa43d94 | ||
|
|
687f373a2e | ||
|
|
97708c861a | ||
|
|
ab3b086d91 | ||
|
|
abe953ab9e | ||
|
|
282476fbd7 | ||
|
|
8cdcbd5c1f | ||
|
|
5cff8c0e57 | ||
|
|
d829c85777 | ||
|
|
ebeda8b20e | ||
|
|
23ea46e1e2 | ||
|
|
4cc90051a4 | ||
|
|
4d508ec53d | ||
|
|
e7927efe57 | ||
|
|
7752930572 | ||
|
|
e0e6ebfd4b | ||
|
|
a89f9ed725 | ||
|
|
2aaf6afd0c | ||
|
|
f821a6e6d1 | ||
|
|
ae520c3757 | ||
|
|
863446d377 | ||
|
|
60652a2829 | ||
|
|
613e62e3ab | ||
|
|
8b4a69cb90 | ||
|
|
0a7c4c5170 | ||
|
|
8c3abfac91 | ||
| 8d8869e3af | |||
| 5b026d2d96 | |||
|
|
4b93fa1335 | ||
|
|
53af8c65af | ||
|
|
aaf9e7520c | ||
|
|
3cfb991ee9 | ||
|
|
04730d1ad9 | ||
|
|
6ec08499de | ||
|
|
b4ddfb7945 | ||
|
|
f760328136 | ||
|
|
894c979aa9 | ||
|
|
a3ab8f74fa | ||
|
|
79fbc712f3 | ||
|
|
7879d441bd | ||
|
|
704dac4fa7 | ||
|
|
d5c0fb562f | ||
|
|
288379dbc2 | ||
|
|
1dc21c1cbd | ||
|
|
b04a78e2e6 | ||
| f490ca5040 | |||
| e52240330f | |||
|
|
6b52dc9f1d | ||
|
|
c61a2fb229 | ||
|
|
b6116656d7 | ||
|
|
3506bc596f | ||
|
|
fb8aee8370 | ||
|
|
b1bb2f0302 | ||
|
|
a063c83a48 | ||
|
|
4cff3d6cd2 | ||
|
|
b0e1f8a98f | ||
|
|
431fad8874 | ||
|
|
351f6a2712 | ||
|
|
66d69032e6 | ||
|
|
f8e0a914b0 | ||
|
|
7c9356cc91 | ||
|
|
658379acc1 | ||
|
|
f3a6a84fea | ||
|
|
37463a8704 | ||
|
|
18015279da | ||
|
|
2bb3d99058 | ||
| 96102a9e8e | |||
| dff189af22 | |||
|
|
5b804f59f5 | ||
|
|
59ea080c79 | ||
|
|
0d6c9542a1 | ||
|
|
8bf2ff1968 | ||
|
|
5cb6ae349b | ||
|
|
cb4147e794 | ||
|
|
06cee2197a | ||
|
|
b38cc4acca | ||
|
|
70591027b2 | ||
|
|
1824bc2470 | ||
|
|
ef7fed0faa | ||
|
|
59a19800d6 | ||
|
|
c3742f2cb9 | ||
|
|
28f1271fdb | ||
|
|
0d981f611d | ||
|
|
7af5978fad | ||
|
|
16425b276a | ||
|
|
10653fa887 | ||
|
|
3493550391 | ||
|
|
02da483630 | ||
|
|
0c9cf3f6c9 | ||
|
|
dd538a387f | ||
|
|
b3b3a1b192 | ||
|
|
3397f8d017 | ||
|
|
f052906d83 | ||
|
|
7a3cda1a1b | ||
|
|
13754e2505 | ||
|
|
7011bbce34 | ||
|
|
e8e887d987 | ||
|
|
69dfb8ca23 | ||
|
|
69e0ea2db1 | ||
|
|
a58933e708 | ||
|
|
2c7f90f837 | ||
|
|
26f13850c3 | ||
|
|
cdcc498a7e | ||
|
|
2ac3c391a1 | ||
|
|
2e3da36d8f | ||
|
|
c543fd6b70 | ||
|
|
622234139b | ||
|
|
f01c611d72 | ||
|
|
043dbf29c1 | ||
|
|
047f17e6f3 | ||
| 3af6a41577 | |||
| 074d09307f | |||
|
|
b14c7ff9cc | ||
|
|
b151021d36 | ||
|
|
57ca94a32c | ||
|
|
b589275d49 | ||
| d0c6df253f | |||
|
|
1d5e277d77 | ||
|
|
61336e5d6c | ||
|
|
8bc091438b | ||
|
|
ed0e82f254 | ||
| da12cfaa9e | |||
| a670b8ccc0 | |||
|
|
0b3f5e1fe4 | ||
|
|
877fe3f3aa | ||
| b3686cb290 | |||
|
|
0f6ae346b8 | ||
|
|
3dacdc24c3 | ||
|
|
7314b1c0cf | ||
|
|
376f41996a | ||
|
|
417dfd5243 | ||
|
|
78033e031f | ||
|
|
24ca5afc0b | ||
|
|
045ecb7df3 | ||
|
|
e6133fbefb | ||
|
|
4b0fc83484 | ||
|
|
e979f97f20 | ||
|
|
27eb22d51a | ||
|
|
ce485ee2d0 | ||
|
|
519e6bdbbb | ||
|
|
0c47811ea5 | ||
|
|
2f604c9a86 | ||
|
|
15d0002471 | ||
|
|
0d5df08e09 | ||
|
|
0d18dac853 | ||
|
|
32704fc6cc | ||
|
|
133f12e806 | ||
|
|
8978455495 | ||
|
|
5e96f7ec2d | ||
|
|
2d3a8b9085 | ||
|
|
e343016c9f | ||
|
|
86cf2f3a20 | ||
|
|
e9a793401c | ||
|
|
b620281b43 | ||
|
|
798f924f25 | ||
|
|
11ea2e87fc | ||
|
|
342103b9a9 | ||
|
|
0eb34ca23c | ||
|
|
6f8acc2673 | ||
|
|
44e3d21e06 | ||
|
|
56f5506bba | ||
|
|
ce09322f82 | ||
|
|
2101a422bb | ||
|
|
52b5c3a267 | ||
|
|
dd4d99c673 | ||
|
|
580bb37878 | ||
|
|
6ea28967be | ||
|
|
8328738e0f | ||
|
|
641deeedf0 | ||
|
|
6cbbcdfe9a | ||
|
|
663b851c63 | ||
|
|
6973d8d6e5 | ||
|
|
c0e6409eea | ||
|
|
6e3fb79498 | ||
|
|
07bfc6b006 | ||
|
|
a19624ff92 | ||
|
|
bbda3be68f | ||
|
|
05478ef129 | ||
|
|
fc1a1edfef | ||
|
|
1286af0c82 | ||
|
|
fad7069e88 | ||
|
|
2eae3a5817 | ||
|
|
e1120e654b | ||
|
|
364d84ae09 | ||
|
|
03106ca454 | ||
|
|
db01fdc430 | ||
|
|
de6de7f77e | ||
|
|
6576bb731b | ||
|
|
cdf3186a61 | ||
|
|
392134a777 | ||
|
|
054d28b725 | ||
|
|
eb54d58240 | ||
|
|
3ff2ce8651 | ||
|
|
23e7f5f465 | ||
|
|
85c0709552 | ||
|
|
678d368026 | ||
|
|
a2e84ce943 | ||
|
|
4c5c8e1fd7 | ||
|
|
057b8e7a73 | ||
|
|
1f204e3f0f | ||
|
|
36af88f4b5 | ||
|
|
28661c3f03 | ||
|
|
cd0a81c0db | ||
|
|
b113e1b4d5 | ||
|
|
90bc5ac220 | ||
|
|
47a5446628 | ||
|
|
db42f547d4 | ||
|
|
1107b0831d | ||
|
|
aec6bfc13c | ||
|
|
9ffe0ff7cf | ||
|
|
01d8ba6a49 | ||
|
|
5cb76715b5 | ||
|
|
c7d7264156 | ||
|
|
6b151b7f98 | ||
|
|
6e1c66bd22 | ||
|
|
c7a6071937 | ||
|
|
cf68df4e6b | ||
|
|
91e33365b7 | ||
|
|
c8e1980dac | ||
|
|
07c8ef8648 | ||
|
|
10d5a193cc | ||
|
|
3197d7cc7d | ||
|
|
c79d0eebae | ||
|
|
ae12ce4101 | ||
|
|
84ae5c96c6 | ||
|
|
367ca4bd74 | ||
|
|
199ef676ae | ||
|
|
8ea9ba537c | ||
|
|
60c8596211 | ||
|
|
868213e321 | ||
|
|
ab6800b4c2 | ||
|
|
3690362f81 | ||
|
|
82c3dba141 | ||
|
|
4be894d995 | ||
|
|
747b8a27ad | ||
|
|
ceb1e50650 | ||
|
|
18c7c1557d | ||
|
|
698cf14607 | ||
|
|
7e0c87de1a | ||
|
|
1e461a0926 | ||
|
|
145b72b1de | ||
|
|
44ee6c0d52 | ||
|
|
6c5f93b97c | ||
|
|
1dbededa96 | ||
|
|
e7fd259f13 | ||
|
|
fecad6fb58 | ||
|
|
dd47afbfb0 | ||
|
|
4eb7d1e2ca | ||
|
|
90b1e8ed97 | ||
|
|
404575894e | ||
|
|
92b4bb8c23 | ||
|
|
50f4e6c871 | ||
|
|
a8574eef7d | ||
|
|
cce53a40a2 | ||
|
|
951cfb2d92 | ||
|
|
939b0c4651 | ||
|
|
3b67015da8 | ||
|
|
2a64296093 | ||
|
|
f96c9a574a | ||
|
|
8e5b9560ce | ||
|
|
d669300ebf | ||
|
|
3525b85d57 | ||
|
|
f98da34bda | ||
|
|
5dc4ee1b78 | ||
|
|
089dbee9ba | ||
|
|
fe88e60eb4 | ||
|
|
a048f7d2d9 | ||
|
|
c818d2ab44 | ||
|
|
4a76de5b95 | ||
|
|
bcc57b4f11 | ||
|
|
cf45877c91 | ||
|
|
6ac555593c | ||
|
|
02f4f8e828 | ||
|
|
1151facbd4 | ||
|
|
483d505cbd | ||
|
|
3af52969ec | ||
|
|
288370bb15 | ||
|
|
3405a1b1ae | ||
|
|
7bedad109d | ||
|
|
4c45a9db92 | ||
|
|
b8e057fab3 | ||
|
|
1d337ed62f | ||
|
|
6ace7d8845 | ||
|
|
b96a9aca6b | ||
|
|
29c5bb9021 | ||
|
|
000c335396 | ||
|
|
18f5489ddb | ||
|
|
0767c6eae5 | ||
|
|
48293f54c1 | ||
|
|
37c4da852d | ||
|
|
de21e7b5d7 | ||
|
|
9a6ae59dbd | ||
|
|
b267679bcb | ||
|
|
a1e7fcdf7e | ||
|
|
d7a02f0682 | ||
|
|
4d2830317a | ||
|
|
2ce21cba6d | ||
|
|
55793b1177 | ||
|
|
9fe0c26af5 | ||
|
|
7000dff1bb | ||
|
|
2e605fabc0 | ||
|
|
f93981e096 | ||
|
|
270a11cbc1 | ||
|
|
830e5633f4 | ||
|
|
466cbd7a8d | ||
|
|
6f2edceb71 | ||
|
|
6e799005ad | ||
|
|
c5ec2e1853 | ||
|
|
ca456f4bbe | ||
|
|
0320ef81bd | ||
|
|
41e7e66d01 | ||
|
|
4f0174813a | ||
|
|
1acaec8748 | ||
|
|
98a14c54c2 | ||
|
|
91efb4bf35 | ||
|
|
cc0b2c05f8 | ||
|
|
f660bfe4e7 | ||
|
|
3c66b5c3da | ||
|
|
c4b290c735 | ||
|
|
2f01e53cba | ||
|
|
c3789374c6 | ||
|
|
83b8dbe82d | ||
|
|
47fa64a007 | ||
|
|
829a6e65b0 | ||
|
|
c6bd34ace8 | ||
|
|
d2a75b56d1 | ||
|
|
2867cae558 | ||
|
|
efb2fc57ba | ||
|
|
5f4f9df282 | ||
|
|
246783796b | ||
|
|
ca2233e59a | ||
|
|
efe355a0c4 | ||
|
|
007e810cf2 | ||
|
|
680eeac913 | ||
|
|
b7fb8bff59 | ||
|
|
2fe1593610 | ||
|
|
ae9b933f0c | ||
|
|
c4dabad5c5 | ||
|
|
813af1dff1 | ||
|
|
d4828dc537 | ||
|
|
4adea4f216 | ||
|
|
6df7c9294f | ||
|
|
0e7f765ca2 | ||
|
|
f25b6ceb6c | ||
|
|
f7c7f3ad27 | ||
|
|
f8a386d933 | ||
|
|
8e804732b5 | ||
|
|
03cce7d521 | ||
|
|
c2a5538386 | ||
|
|
ad57cef6ea | ||
|
|
826cdd1c32 | ||
|
|
cbca95b111 | ||
|
|
458d03cd53 | ||
|
|
4aaaf714bd | ||
|
|
ce3d98327a | ||
|
|
09b9d170bb | ||
|
|
88bac3ae54 | ||
| 33efc43680 | |||
|
|
5082349375 | ||
| c94028c692 | |||
| fa02f21ee9 | |||
|
|
a914cd7f25 | ||
|
|
b9132c8cd5 | ||
|
|
54d0156a08 | ||
|
|
aae1ec0c8c | ||
|
|
333df2ba7b | ||
|
|
d9e859946e | ||
|
|
bc3150693e | ||
|
|
2033a57a92 | ||
|
|
beeba7c094 | ||
|
|
699a1aaa8f | ||
|
|
f73544b46b | ||
|
|
c55f297bec | ||
|
|
8dab0def97 | ||
|
|
e3af176f17 | ||
|
|
61ffa86b63 | ||
|
|
764645f4d5 | ||
|
|
db4dcef851 | ||
|
|
3010d6023e | ||
|
|
694f8c3f87 | ||
|
|
7057f23dd3 | ||
|
|
80c02c4c82 | ||
|
|
7662d504d3 | ||
|
|
43dde38958 | ||
|
|
4cd6868ac4 | ||
|
|
c444d3bea0 | ||
|
|
0b3ad13751 | ||
|
|
7ba917ed4d | ||
|
|
f042d0a515 | ||
|
|
e3b1361dcd | ||
|
|
8231fc3cc5 | ||
|
|
55d5d06505 | ||
|
|
5a5bb5c19e | ||
|
|
14790f04b8 | ||
|
|
9b053e6392 | ||
|
|
06191c7e8c | ||
|
|
dc9dd8e969 | ||
|
|
3940532114 | ||
|
|
46d7ebb42e | ||
| 3fa445189e | |||
| 6e18d4a997 | |||
|
|
38619144f6 | ||
|
|
0eb672b1e2 | ||
| 946a83eec3 | |||
| ddbebc7677 | |||
|
|
4106e910e0 | ||
| aacabf68e5 | |||
|
|
0d35f0923b | ||
|
|
1db8fc4f28 | ||
|
|
45b92fde2b | ||
|
|
420d627962 | ||
|
|
0bb3ddcf72 | ||
|
|
b97fbbd5e2 | ||
|
|
84e4b9ff5e | ||
|
|
a3bfc439fc | ||
|
|
2f5501281c | ||
|
|
61bc84c827 | ||
|
|
b56dc5fe04 | ||
|
|
5f9898ee06 | ||
|
|
8c7642c41d | ||
|
|
d5fb0e68a0 | ||
|
|
7b00379cc5 | ||
|
|
e61e18c9a0 | ||
|
|
22549903c5 | ||
|
|
f15e3f6c11 | ||
|
|
0c521e961f | ||
|
|
2ca53d8eb7 | ||
|
|
5e0e8d6b1c | ||
|
|
9f9f0a2b1a | ||
| 7098c49f45 | |||
|
|
71c28be410 | ||
|
|
2d47aa5288 | ||
|
|
a6c85e6741 | ||
| 0f2dbd12c3 | |||
| b56400ab69 | |||
|
|
ac3e484094 | ||
|
|
7629cf8bdc | ||
|
|
d4a5b0d867 | ||
|
|
5ae07a4beb | ||
|
|
40fcfc9008 | ||
|
|
59895e47bd | ||
|
|
4f3dc135a2 | ||
|
|
9810b012e0 | ||
|
|
5f8409ad58 | ||
|
|
dfd66067ec | ||
| 44cd2c76b5 | |||
| 9bf036d5d0 | |||
|
|
ceb967f8da | ||
|
|
246ae23ae4 | ||
|
|
2d6e3dd268 | ||
|
|
f702a32add | ||
|
|
81bf681bf5 | ||
|
|
32364f7c4d | ||
|
|
165b3e332e | ||
|
|
86949e1dc5 | ||
|
|
cf3e9051f8 | ||
|
|
8cc2096977 | ||
|
|
00430ce558 | ||
|
|
7c79623e92 | ||
|
|
48be4a8731 | ||
|
|
5a66f35ef1 | ||
|
|
2ab208a361 | ||
|
|
a1970cbbbb | ||
|
|
5938486e5b | ||
|
|
7afa4042e6 | ||
|
|
8fafe83aaf | ||
|
|
bb0b9a6673 | ||
|
|
e8a07e83d6 | ||
|
|
5c2fd67029 | ||
|
|
a2c06f8a11 | ||
|
|
c6103b2945 | ||
|
|
b49c8b61cf | ||
|
|
02cef5907d | ||
|
|
3fc9c15755 | ||
|
|
030bf3f315 | ||
| 131b5cac17 | |||
| 2dc432a8be | |||
|
|
0faf73309a | ||
|
|
626226826a | ||
| 760ecfcc63 | |||
| 33a53921ea | |||
|
|
8a358a1604 | ||
|
|
f62593695a | ||
|
|
d39b50c96a | ||
|
|
cc3c6dcab6 | ||
|
|
f37bd908cd | ||
|
|
b5087d80f1 | ||
|
|
1bded9c6af | ||
|
|
2e49abd093 | ||
|
|
fe9ccf4325 | ||
|
|
622d9918d3 | ||
|
|
6b89a68c12 | ||
|
|
505c25a640 | ||
|
|
9792450158 | ||
|
|
2df3099570 | ||
|
|
578aa74b76 | ||
|
|
0d624772e7 | ||
|
|
5b8ef4bfc4 | ||
|
|
c5053df18a | ||
|
|
ddbe83ef12 | ||
| c6ec1cff1b | |||
|
|
491599bf1a | ||
|
|
9060b445fb | ||
|
|
ec2932edd3 | ||
|
|
9d46f9f4a8 | ||
|
|
3870fe2085 | ||
|
|
ccd4276e6f | ||
|
|
38ce3d5d4c | ||
|
|
bae5fbfb59 | ||
|
|
f8b7c40472 | ||
|
|
7d10ad4261 | ||
|
|
273c5dc11a | ||
|
|
6c102585d9 | ||
|
|
42e830a8f8 | ||
|
|
d9befbff7a | ||
|
|
4ddfafc44c | ||
| 17b2276308 | |||
| 00bf74643c | |||
|
|
ea2eb1778f | ||
|
|
175db26854 | ||
|
|
107758cbf0 | ||
|
|
63499e8373 | ||
|
|
dfc485cab3 | ||
|
|
700b38d1fc | ||
|
|
3432c69fa1 | ||
|
|
8f5e9cb336 | ||
|
|
7939d1630d | ||
|
|
2472a3e679 | ||
|
|
dfa698542b | ||
|
|
9d609fd5c5 | ||
|
|
edf5a40f2b | ||
|
|
e81062f43b | ||
|
|
8c7286c1b8 | ||
| 223f6ea4a8 | |||
|
|
9d0901dc2b | ||
|
|
42eb0b34f6 | ||
|
|
6a709e163a | ||
|
|
90e8f0f3db | ||
| 3671623698 | |||
| 24b4e8efef | |||
|
|
117be033b0 | ||
|
|
84078fb0a2 | ||
|
|
5183a99224 | ||
|
|
8c89598152 | ||
|
|
03eb195453 | ||
|
|
b23040aca6 | ||
|
|
d275c58ad4 | ||
|
|
8e772a8546 | ||
|
|
10640034c3 | ||
|
|
3f800e73de | ||
|
|
116fa0ef75 | ||
|
|
5542ef3c5e | ||
|
|
3791c54170 | ||
|
|
8d9b16604b | ||
|
|
c3fdacbef8 | ||
|
|
7e46295e7f | ||
|
|
f7f90769df | ||
|
|
d2af18cc17 | ||
|
|
da555bd8f3 | ||
|
|
83b90eff16 | ||
|
|
163d131603 | ||
|
|
3f855b2357 | ||
|
|
7a82aff2db | ||
|
|
f976a8ae70 | ||
|
|
0c06bb7b7e | ||
|
|
15161b8db0 | ||
|
|
67c90e8d90 | ||
|
|
bb1458d9f5 | ||
|
|
092ed027e1 | ||
|
|
cca6553178 | ||
|
|
f81d586bca | ||
|
|
da087b9dff | ||
|
|
e0c176b6f0 | ||
|
|
52751cd6f8 | ||
|
|
224e3d2013 | ||
|
|
989a7c63e5 | ||
|
|
7c3676e901 | ||
|
|
e3d7fad227 | ||
| d55a9e038f | |||
| 879861b516 | |||
| fd1a4dbea1 | |||
|
|
c0e16123f8 | ||
|
|
d56b32ad8f | ||
|
|
316dfbb0d8 | ||
| 032c2a92ac | |||
|
|
f3b3a3f117 | ||
|
|
d87512e4b5 | ||
|
|
7257dcbc2f | ||
|
|
e62e198b8e | ||
|
|
3d271de198 | ||
|
|
7f47ebdfd0 | ||
|
|
bde4550385 | ||
|
|
187dab8ee6 | ||
|
|
f04af250ac | ||
|
|
60291616b6 | ||
|
|
869c2bce06 | ||
|
|
fe19b35f7d | ||
|
|
04a55bd537 | ||
|
|
4c476a5188 | ||
|
|
a4b3033473 | ||
|
|
f2f50e2610 | ||
| 6163d72369 | |||
|
|
859f8d24f3 | ||
|
|
d522aaa8bf | ||
|
|
4f7de1fd76 | ||
|
|
daddedf98f | ||
|
|
c647c867d7 | ||
|
|
b5d5419efc | ||
|
|
764f5ee33a | ||
|
|
62f45a0392 | ||
|
|
ef7d1f78cd | ||
|
|
0b5670c7a4 | ||
|
|
2ac2d73e0b | ||
|
|
08287696ff | ||
|
|
569843691f | ||
|
|
9b40cbf37e | ||
|
|
7e76aa871c | ||
|
|
c485c58962 | ||
|
|
fa28d96027 | ||
|
|
402aaa1ad1 | ||
|
|
e42970fcc0 | ||
|
|
2b3f4255a0 | ||
|
|
19084e41f4 | ||
|
|
d33cddfcc1 | ||
|
|
9196979267 | ||
|
|
68ffdffa09 | ||
|
|
a5ca47d201 | ||
|
|
686a5237d6 | ||
|
|
c0a5a33d45 | ||
|
|
175653d91d | ||
|
|
358a41e2ed | ||
|
|
3d4726c922 | ||
|
|
f522757923 | ||
|
|
972a339c4a | ||
|
|
e98b0d2368 | ||
|
|
0dca20958b | ||
|
|
a3a9ac1fb7 | ||
|
|
1cae530fb2 | ||
|
|
b7a592bd51 | ||
|
|
e68ee9e886 | ||
|
|
7a141820b4 | ||
|
|
b51d130b3b | ||
|
|
25534ecacb | ||
|
|
0a41226048 | ||
|
|
ee09969309 | ||
|
|
6ad7ea4135 | ||
|
|
41645150c9 | ||
|
|
238135a95a | ||
|
|
ee97ab1c93 | ||
|
|
523c2e4a7f | ||
|
|
2c10467ffc | ||
|
|
5edd97178e | ||
|
|
0dd3747804 | ||
|
|
481af73ddb | ||
|
|
8e3ebe353d | ||
|
|
1bcd6926bd | ||
|
|
45cb348bfc | ||
|
|
7e8b46effc | ||
|
|
0308d2f57d | ||
|
|
d76eb829c4 | ||
|
|
656f096c03 | ||
|
|
59f0cd755b | ||
|
|
80d3f8cb17 | ||
|
|
04ab254222 | ||
|
|
25c4dcd4bd | ||
|
|
14167e5736 | ||
|
|
de0b2828a7 | ||
|
|
f580bbfde6 | ||
|
|
e86d257330 | ||
|
|
c64dcdf8f9 | ||
|
|
3e92da4286 | ||
|
|
f0ace48b55 | ||
|
|
20aea655a1 | ||
|
|
89a4550582 | ||
|
|
9dc58eea91 | ||
|
|
a33117ce2a | ||
|
|
e81eab8c4f | ||
|
|
5879a62587 | ||
|
|
f1f805feaf | ||
|
|
43f5e32691 | ||
|
|
47ddf4f7c7 | ||
|
|
c5965f2315 | ||
|
|
6aa23549f5 | ||
|
|
f48f17db38 | ||
|
|
dd104eae3f | ||
|
|
8acb3db51d | ||
|
|
0221c6c826 | ||
|
|
2f6f69e513 | ||
|
|
948578d65f | ||
|
|
fb060dff29 | ||
|
|
13e12481e5 | ||
|
|
05ab7ad8e2 | ||
|
|
a79d051903 | ||
|
|
819d3d3a34 | ||
|
|
e6b10d592f | ||
|
|
26f3d09556 | ||
|
|
13c49e1e6c | ||
|
|
73d550ef11 | ||
|
|
f2708125ec | ||
|
|
38d720f49c | ||
|
|
92f0b087c9 | ||
|
|
ba0a25fde5 | ||
|
|
e43a749623 | ||
|
|
a7dda023d9 | ||
|
|
630ff95a07 | ||
|
|
ffb954a1c8 | ||
|
|
78c471a38c | ||
|
|
082c8e1547 | ||
|
|
4efa656afe | ||
|
|
3c90febf45 | ||
|
|
07a1ca566a | ||
|
|
8cdb462b4c | ||
|
|
802508573e | ||
|
|
ef03b8dc84 | ||
|
|
8d4a7e199a | ||
|
|
a43936224b | ||
|
|
52ad339930 | ||
|
|
3c9360e512 | ||
|
|
ae07634a9e | ||
|
|
d483389ab2 | ||
|
|
72be8d92ae | ||
| a13ae659ab | |||
| fdd78904af | |||
|
|
a0f67c414a | ||
|
|
1fcad3fab3 | ||
|
|
36490e20fa | ||
|
|
1996dbf284 | ||
|
|
e44e390e88 | ||
|
|
18fb8a6bd1 | ||
|
|
0f1588059e | ||
|
|
8ccfae34f3 | ||
|
|
de19bdfa8b | ||
|
|
942014ce6e | ||
|
|
ef7d56d981 | ||
|
|
fad9baa5d3 | ||
|
|
3c75dcf7c2 | ||
|
|
c6e4978ff6 | ||
| dbaaf7a5ec | |||
| c8d325e418 | |||
|
|
4e8ba9e38c | ||
| 7b47be3fd9 | |||
| 5b0cdcfd6c | |||
|
|
29832da12e | ||
|
|
88cb8a8538 | ||
|
|
aef3b9834a | ||
|
|
700804df00 | ||
|
|
de983ee4e5 | ||
|
|
4b7294b8ad | ||
|
|
a53e1ec49c | ||
|
|
b88815d16f | ||
|
|
49af10d8a9 | ||
|
|
a7756805cb | ||
|
|
cb667f4e9c | ||
| 859cb32947 | |||
| be9f1b76eb | |||
|
|
3483961cc5 | ||
|
|
f3c87a786f | ||
|
|
8cc37aba08 | ||
|
|
19ebceb54b | ||
|
|
77cd8d33ac | ||
|
|
7d605b1a26 | ||
|
|
641afee2f7 | ||
|
|
ffcfe93299 | ||
|
|
c1b2c1a90e | ||
|
|
29a6483899 | ||
|
|
e03249461c | ||
|
|
85eff9cbec | ||
|
|
c2b8fb84e2 | ||
|
|
f245ce203c | ||
|
|
8a8eb8c14b | ||
|
|
f170e50ed8 | ||
|
|
247f64e371 | ||
|
|
c10a2e6b71 | ||
|
|
f91872672a | ||
|
|
6f2576095e | ||
|
|
e7d278de0c | ||
|
|
9761c6fc83 | ||
|
|
f413a2fadb | ||
|
|
a6f88ab4ad | ||
|
|
e487a6aaba | ||
|
|
77d06b3e1e | ||
|
|
b2f8e11059 | ||
| 801ad5ee4f | |||
| ed3e988e03 | |||
|
|
a320979c7e | ||
|
|
ee90c8082f | ||
|
|
a4e64d1eab | ||
|
|
f867b77aa2 | ||
|
|
bb89a17fc4 | ||
|
|
99880f6a32 | ||
|
|
6a54f6a01b | ||
|
|
a85373b5fb | ||
|
|
d357e0c69b | ||
|
|
d56c7110d7 | ||
|
|
b409ab7e86 | ||
|
|
ade6fd169a | ||
|
|
ee24231070 | ||
|
|
919ffe9427 | ||
|
|
c692089e1f | ||
| a8322a5152 | |||
| d52a21d97d | |||
|
|
163ff77186 | ||
|
|
d00eef7856 | ||
|
|
c1b42c312f | ||
| 5a1b55c6af | |||
| 5e62155002 | |||
| 73914511d9 | |||
| 31851b6305 | |||
|
|
e01e2c0ca5 | ||
|
|
e8fcd5be21 | ||
| 884470d997 | |||
| 0c7981c28b | |||
|
|
fb12281f5f | ||
|
|
9a6732acdd | ||
|
|
1299aa14c6 | ||
|
|
e8cbf8ebc6 | ||
|
|
5bc73b98ab | ||
| b167d932ed | |||
| 7d4dc270cd | |||
|
|
0e93f635ba | ||
|
|
585f501282 | ||
|
|
a1c7b18428 | ||
|
|
6d843a4f12 | ||
|
|
7bb5e7c18d | ||
|
|
12ace817dd | ||
|
|
a9baeccc0e | ||
|
|
9040c5d2ae | ||
|
|
22b2bc9553 | ||
|
|
83363f4694 | ||
|
|
15bc158263 | ||
|
|
7a00b64dcf | ||
|
|
aa77dfd238 | ||
|
|
6e6bbb013b | ||
|
|
6fd6a62469 | ||
|
|
a004ed6065 | ||
|
|
41b8f5fbf1 | ||
|
|
79a84ad701 | ||
|
|
14db9c7e52 | ||
|
|
d1ec620837 | ||
|
|
4af1ee2eda | ||
|
|
312e1d66e9 | ||
|
|
229690f71b | ||
| 7a33756b62 | |||
| b60720abc6 | |||
|
|
818cef2b0f | ||
|
|
7224512691 | ||
|
|
8b7e0dd295 | ||
|
|
3df1cb16dc | ||
|
|
123128ce1f | ||
|
|
f2a67512f8 | ||
| 4b10af756d | |||
| d398094432 | |||
|
|
54919c6898 | ||
|
|
c9af726894 | ||
|
|
ef3600bc81 | ||
| b8cfb4caaf | |||
| 863cbce290 | |||
|
|
7963b91bbd | ||
|
|
70bb61e9b6 | ||
| 320df47859 | |||
| 718c9727ff | |||
|
|
958822d6a2 | ||
| 139b46f675 | |||
| 295b3706f7 | |||
|
|
86b6c1127c | ||
|
|
0216eabf3b | ||
|
|
ddae024e0a | ||
|
|
b022335a8e | ||
|
|
afa6a8f156 | ||
|
|
ed4c1df185 | ||
|
|
e217377b09 | ||
|
|
8a387c0ac9 | ||
| f6f06954c1 | |||
|
|
38a431cedf | ||
| 90fe73510c | |||
|
|
57b4d1064f | ||
| bf1932a19e | |||
| 0539d8e170 | |||
|
|
0a5a4874ed | ||
|
|
b703d32c49 | ||
|
|
8ea8688321 | ||
|
|
9a48380ba2 | ||
|
|
88042cfd50 | ||
|
|
9a169f666e | ||
| a933740783 | |||
| a596d8cd17 | |||
|
|
706cd68517 | ||
|
|
5920ca0d82 | ||
|
|
74bf06ed0b | ||
|
|
eb54251f02 | ||
|
|
40aaeb49c4 | ||
|
|
8f63807099 | ||
| 489b87dd90 | |||
|
|
3739698944 | ||
|
|
dbc4b35bdd | ||
|
|
d49ef8314b | ||
|
|
c89fd760e4 | ||
|
|
92876d1fcd | ||
| c6d1e5c6e0 | |||
| d5db0f4ac6 | |||
|
|
5008ac9a76 | ||
|
|
5d8c4f3736 | ||
|
|
6890295cab | ||
|
|
2f6f2861b8 | ||
|
|
868bae9fed | ||
|
|
e22dcf7a06 | ||
|
|
9c2745302f | ||
|
|
4661996247 | ||
|
|
ab33223ea6 | ||
|
|
18b19f93a4 | ||
|
|
b46065772c | ||
|
|
1f3b0257f7 | ||
|
|
6bb2ec2e85 | ||
|
|
4d914f84b0 | ||
|
|
274046809f | ||
|
|
9fc8ad0a0b | ||
|
|
431fb21513 | ||
|
|
f7a16c8b5c | ||
|
|
aa04bc028b | ||
|
|
4258abd474 | ||
|
|
4d5ad2f87a | ||
|
|
120258758a | ||
|
|
e2e071c73d | ||
|
|
fea1fa2ff9 | ||
|
|
6c637656e5 | ||
|
|
cad2a74311 | ||
|
|
509194f3cb | ||
|
|
59aa0bd83c | ||
|
|
9d25c123c5 | ||
|
|
67a51ed237 | ||
|
|
07613ca215 | ||
|
|
4582299d87 | ||
|
|
cdd9d6183b | ||
|
|
d4b5e843f0 | ||
|
|
a316d5c1cb | ||
|
|
d286327501 | ||
| ef5fc88ad6 | |||
|
|
54916a961e | ||
|
|
33edfece08 | ||
|
|
e879baf47b | ||
|
|
042e8f8f58 | ||
|
|
2fa49ed069 | ||
|
|
e1eedcd3fb | ||
|
|
85d7f77f7c | ||
|
|
8c68dcf57e | ||
|
|
55f324b410 | ||
| cccaa3ebe6 | |||
| 1df7800e97 | |||
|
|
ea994bb2b3 | ||
|
|
c55be49f22 | ||
|
|
03f10ca7c1 | ||
|
|
8e3db7071d | ||
|
|
253fa7f308 | ||
|
|
45312be3df | ||
|
|
759bcedf74 | ||
|
|
900bea3586 | ||
|
|
8e5a4dc5d3 | ||
|
|
6545f1e411 | ||
|
|
43d8b62b4d | ||
|
|
a8eeb96d77 | ||
|
|
8f740dd397 | ||
|
|
88585f29b0 | ||
|
|
8c1e33d0b8 | ||
| 3e8ebb2957 | |||
| 7062f98d05 | |||
| 61555cc6e2 | |||
|
|
86180bf126 | ||
|
|
e6a28c8acd | ||
|
|
f177b9ea94 | ||
|
|
67f41623a2 | ||
|
|
25f9a2eba6 | ||
| 9d9411bf85 | |||
| e843189a47 | |||
|
|
54dc9e8622 | ||
|
|
e2a21e9164 | ||
|
|
80fcc5dbd9 | ||
|
|
1ba57376b7 | ||
|
|
a0ee5ae6f1 | ||
|
|
eecab82367 | ||
| 749ef57854 | |||
| 0778ad36d3 | |||
| 752a36b516 | |||
|
|
d30ed3e216 | ||
|
|
792bcea5f5 | ||
|
|
5d7a7b2ded | ||
|
|
0daec4cbaa | ||
| 12cda5d190 | |||
| d9bdf769eb | |||
| 5d7f87f5b2 | |||
| ce2c70cc05 | |||
|
|
1bf9102d37 | ||
| 95fd4a9f95 | |||
|
|
5852ab4430 | ||
|
|
0b7b756805 | ||
|
|
3e84aebb20 | ||
|
|
b60f9b1ca4 | ||
|
|
787b54df61 | ||
|
|
f022d77433 | ||
|
|
5b92d350e6 | ||
|
|
e571da8f83 | ||
|
|
e4d6c5474b | ||
|
|
c44ef5afba | ||
|
|
e48da49913 | ||
|
|
52949c0c81 | ||
|
|
6b157e671b | ||
|
|
0270759629 | ||
|
|
e399f20043 | ||
|
|
6c7fecc0ce | ||
| 1c92f87fc3 | |||
| d44d237be1 | |||
|
|
a698707102 | ||
|
|
30983ba637 | ||
|
|
254a2cde4f | ||
|
|
b6c4d67c89 | ||
|
|
30388af01b | ||
| 0ebf410c9a | |||
| 00fec789d2 | |||
|
|
ffcd0014c7 | ||
|
|
3b8bf3106a | ||
|
|
3757bf9a9e | ||
|
|
13ade98dec | ||
|
|
27e9317ffa | ||
|
|
efa1e1dd49 | ||
|
|
6b7ef4b443 | ||
|
|
a52fae7a7e | ||
|
|
c9e8d241ec | ||
|
|
598cf34f4f | ||
|
|
c65d52c8de | ||
|
|
03424f4786 | ||
|
|
447ef379e2 | ||
|
|
d2592b6792 | ||
|
|
4114aeb5e9 | ||
|
|
f9426e1d01 | ||
|
|
5356a92634 | ||
|
|
d228fd62dc | ||
|
|
2f036d88af | ||
| 0cbbd72aab | |||
| 682dcd65de | |||
|
|
c475012462 | ||
|
|
e275b67fd8 | ||
|
|
ad926adcb5 | ||
|
|
2a54cbbe2e | ||
|
|
e4d84563f9 | ||
| 792ef4755c | |||
| ad9ed479b4 | |||
|
|
ec7420cfaa | ||
|
|
ecf8d1a8b8 | ||
|
|
def4ec2ca3 | ||
|
|
61496db4cb | ||
|
|
79a5f0d641 | ||
| c9ff7e6563 | |||
| 62e9c9409a | |||
|
|
04527f1153 | ||
| 9863960fbc | |||
| a207fd0cb7 | |||
|
|
7389ba8509 | ||
|
|
0ff9ab14da | ||
|
|
491856d294 | ||
|
|
b0d20ac96d | ||
|
|
6de85c5b98 | ||
|
|
15e4af5d92 | ||
|
|
e8f8ebd985 | ||
|
|
f9d4cd133f | ||
|
|
39002faf89 | ||
|
|
00472c3c92 | ||
|
|
27fef80025 | ||
|
|
012ddff43e | ||
|
|
5781fe9bff | ||
|
|
9a32b0d721 | ||
| bf2f896ee0 | |||
| 5e502fbf7c | |||
|
|
570af5a807 | ||
|
|
bd35cb7a23 | ||
|
|
88008cdf67 | ||
|
|
704f288183 | ||
|
|
a0508d802e | ||
|
|
db7fec55ec | ||
| 2e2d8de11b | |||
| 96e56aea96 | |||
|
|
a68c089aff | ||
|
|
fb38d04282 | ||
|
|
ae21941b99 | ||
|
|
3788bedd43 | ||
|
|
925dc49910 | ||
|
|
aba414d587 | ||
|
|
f369f5f8b5 | ||
|
|
1e49cca4f1 | ||
|
|
a1b9dcbf2e | ||
|
|
9679058a5f | ||
|
|
4e01f37df5 | ||
|
|
706f50f93c | ||
|
|
32b2a1294b | ||
| d6ede6292e | |||
| 3b92b3add0 | |||
|
|
87f205878b | ||
|
|
38d123eb73 | ||
| b035abcb9f | |||
| 3eedb3d496 | |||
|
|
0504944c07 | ||
|
|
8679542231 | ||
|
|
bba75a2806 | ||
| 605948edad | |||
| df7e01c58c | |||
| f3d8f5cb98 | |||
|
|
7ef841921d | ||
|
|
f91efc4533 | ||
|
|
a866069b2d | ||
|
|
81b63c704b | ||
|
|
0f8e6d1cf2 | ||
|
|
79228a1208 | ||
|
|
f2c54a2677 | ||
|
|
d9494aa87b | ||
| f91e3816ce | |||
| 92cbc8a354 | |||
|
|
b6d5ead153 | ||
|
|
0344f33f9e | ||
| dc78de578a | |||
| 34cd04d90a | |||
| 3692027d3c | |||
| 889d710a9e | |||
|
|
8228329bde | ||
|
|
3e3d1670f1 | ||
|
|
0c455c0337 | ||
|
|
f0ab3208ca | ||
|
|
441c8a1b90 | ||
|
|
f47191f6b4 | ||
|
|
f6a509c434 | ||
|
|
5f454f317b | ||
|
|
2ccddd2731 | ||
|
|
49fe3933db | ||
| 9fe600ca9f | |||
| 6a53cb4dd3 | |||
|
|
ecbc9d514c | ||
|
|
18bbe0108f | ||
|
|
5727d67a28 | ||
|
|
e9e5a578aa | ||
|
|
d532073bd2 | ||
| ea02bfc08a | |||
| 39dc8f9106 | |||
|
|
18f248d9d1 | ||
|
|
bff6a626cd | ||
|
|
75114aace7 | ||
|
|
6142cbd292 | ||
|
|
56dc3d8c2f | ||
|
|
a96ec35252 | ||
|
|
791a81438b | ||
| 808974d19f | |||
| b50dcd0113 | |||
| f193e2386f | |||
|
|
9ee96de9fe | ||
|
|
f153b5f34c | ||
|
|
48262bcb48 | ||
|
|
c1e7d170d5 | ||
|
|
6d8fd7bf5e | ||
|
|
7e25cb28cb | ||
|
|
4b805302fc | ||
|
|
c5e4e9e4a9 | ||
|
|
59cfb77e28 | ||
|
|
9942e2ce60 | ||
|
|
9c6703fb62 | ||
|
|
43a9d27782 | ||
|
|
d332d46794 | ||
|
|
e36c841ade | ||
|
|
5d9c1916b2 | ||
|
|
3d9c44e5ac | ||
|
|
0546bb0de9 | ||
|
|
645d23fb74 | ||
|
|
0184cce131 | ||
|
|
d391f68779 | ||
|
|
0fc01c78b6 | ||
|
|
fe7abdde65 | ||
|
|
fdd3963902 | ||
|
|
cd924e2c11 | ||
|
|
3d7e9547ea | ||
|
|
0b8904f47a | ||
|
|
d2737b1eff | ||
|
|
73886f08e4 | ||
|
|
86a321a568 | ||
|
|
129d617360 | ||
|
|
8f85fd61cc | ||
|
|
af2ef4f074 | ||
|
|
8834252c36 | ||
|
|
71c0d6729b | ||
|
|
6f1e049253 | ||
|
|
de67799f89 | ||
|
|
179f1279e4 | ||
|
|
102f77e404 | ||
|
|
6e0ae548e2 | ||
|
|
e6e294b949 | ||
|
|
ede7c502d1 | ||
|
|
075d7a2480 | ||
|
|
b031fe8a9b | ||
|
|
a58c63a617 | ||
|
|
a05dac0974 | ||
|
|
3b85a8f27d | ||
|
|
9a7e0c48f7 | ||
|
|
0b0c229b43 | ||
|
|
4fbdaa31e5 | ||
|
|
d1ab31227b | ||
|
|
42395ab955 | ||
|
|
579515ae74 | ||
|
|
b5ec3d4eff | ||
|
|
ec4c24b366 | ||
|
|
222c19ea40 | ||
|
|
937145b857 | ||
|
|
8a6f2ac884 | ||
|
|
f42fc92736 | ||
|
|
7f9bdc0508 | ||
|
|
c0d8209a37 | ||
|
|
402f688a3b | ||
|
|
29a8e59133 | ||
|
|
f8279e93e4 | ||
|
|
d13af1bd70 | ||
|
|
203c2699e9 | ||
|
|
7232c65937 | ||
|
|
cdbec02808 | ||
|
|
5b5109c5ae | ||
|
|
7db78de72f | ||
|
|
e8a737bec6 | ||
| 2a60a2cbea | |||
| ab28cb0408 | |||
|
|
315d5bf0e8 | ||
|
|
c9431aab3f | ||
|
|
075291e173 | ||
|
|
0ab644f68e | ||
|
|
c764ea65b9 | ||
| d7f823e0b4 | |||
| 9e4816b76c | |||
| 0ac2c06170 | |||
|
|
20151c0db0 | ||
| 4f611f5307 | |||
| bc093e586d | |||
| d72c59ad8d | |||
| 70d975ceb2 | |||
|
|
f299f60b49 | ||
|
|
7af6800ea0 | ||
| e25f79dd83 | |||
|
|
09f4c247c8 | ||
|
|
12135088dd | ||
| c761680469 | |||
|
|
cd99e669cb | ||
|
|
cb84260a15 | ||
|
|
7a786d8729 | ||
|
|
580d184f17 | ||
| 6e6f2c4cb6 | |||
| d7b78e4d56 | |||
|
|
0ca0434498 | ||
|
|
ca8109cd8d | ||
|
|
59dd6a25c8 | ||
|
|
02b776eaf9 | ||
|
|
4ff60e7b0c | ||
|
|
58420e7397 | ||
|
|
12044a354e | ||
|
|
2fbe01e673 | ||
|
|
11b199ad84 | ||
|
|
d62a8edbe0 | ||
|
|
75d132c7c3 | ||
|
|
eeb05be577 | ||
|
|
feb719eab7 | ||
|
|
4ab5ab8364 | ||
|
|
b1d4cc7728 | ||
|
|
b20707cd8c | ||
|
|
b8faa2553d | ||
|
|
994fc2e7a2 | ||
| 5b99d61887 | |||
| 12b3e4507e | |||
|
|
ee2e0152f8 | ||
|
|
b30578771c | ||
|
|
747c85556f | ||
| c7dd2e7925 | |||
| ccbe86f71d | |||
| 91e865aa4c | |||
| f62b961371 | |||
| 832c666514 | |||
|
|
9738d04b4f | ||
|
|
b4b79bc62a | ||
| 484899e70e | |||
| 9aaf00e22d | |||
|
|
f58ef7302e | ||
|
|
9a0d2fc84d | ||
|
|
c5ca672020 | ||
|
|
ba4231ea83 | ||
|
|
47e09a5249 | ||
|
|
2850b01d5b | ||
|
|
1637802fe4 | ||
|
|
fda6a5cb08 | ||
|
|
16c79f867e | ||
|
|
51aff80206 | ||
|
|
f8bc9a6663 | ||
|
|
38d26e32ce | ||
|
|
523649a978 | ||
|
|
7bf8af7f73 | ||
|
|
b25a43efbf | ||
|
|
d00a39b9b0 | ||
|
|
bc1f1f7cb0 | ||
|
|
866e5ff242 | ||
|
|
a47d2ea405 | ||
|
|
13e23d167b | ||
|
|
2dc45895cd | ||
|
|
fa3ac7f1cc | ||
|
|
c3ea73b8fd | ||
|
|
5eaa1f2f73 | ||
|
|
85ca1516ff | ||
|
|
821c1f0365 | ||
|
|
2ffcb82122 | ||
|
|
f72bc2d7c1 | ||
|
|
56f53666b4 | ||
|
|
e363df91a5 | ||
|
|
03aaff5c03 | ||
|
|
fb0c37f6f9 | ||
|
|
819dd83892 | ||
|
|
2b3626b418 | ||
|
|
7df90d4051 | ||
| b34b2234cb | |||
|
|
94bfddff2d | ||
|
|
cd90b01e62 | ||
| 5866513210 | |||
|
|
585bd539c5 | ||
|
|
5f97d6eb53 | ||
|
|
5b3e308748 | ||
|
|
809fda8619 | ||
|
|
d54864ecb5 | ||
| 37216c6b0d | |||
|
|
934e2970b0 | ||
|
|
e6a36043b6 | ||
|
|
19a27cbdc2 | ||
|
|
5fb1d26f18 | ||
|
|
6c59617e8d | ||
|
|
2d14102407 | ||
| 2a9aa64345 | |||
| 09e47f0b22 | |||
| ffd0ed367d | |||
|
|
35af04e42d | ||
| 619f650f03 | |||
|
|
41d946549b | ||
|
|
9a5d50b728 | ||
|
|
706fec62f4 | ||
|
|
bfd463fd88 | ||
|
|
049900685c | ||
|
|
fd15e1f423 | ||
|
|
1dbe6be188 | ||
|
|
7d70d96715 | ||
|
|
58ee5fbd2f | ||
|
|
ce35ecdd27 | ||
| a7cf248535 | |||
| e20224ef80 | |||
|
|
f5a1cf0f31 | ||
|
|
1d27a51c7a | ||
|
|
eb07f98711 | ||
|
|
c3e7ea9272 | ||
|
|
9431af80e2 | ||
|
|
c55ab20a6d | ||
|
|
87ad0eb934 | ||
|
|
0733170660 | ||
|
|
ee234a3efd | ||
|
|
0aaf9d8a92 | ||
|
|
952913d89a | ||
|
|
55268c367e | ||
|
|
d03f02f537 | ||
|
|
e5e9f9d4ea | ||
|
|
ae9ae03618 | ||
|
|
14a560d54e | ||
|
|
922a32a014 | ||
|
|
0f51b3d174 | ||
|
|
7bfc35f9ab | ||
|
|
b8652d1bbc | ||
|
|
0eaae0108e | ||
|
|
cb42d1531b | ||
|
|
42c897cff9 | ||
|
|
ea73e38e2e | ||
|
|
68f7a8f158 | ||
|
|
9f4212c4af | ||
|
|
76d6e3d29f | ||
|
|
209d71733a | ||
|
|
f99e98c794 | ||
|
|
f72c92e5ce | ||
|
|
cf489b3532 | ||
|
|
12b8f607d3 | ||
|
|
a3bf176a48 | ||
|
|
f79e8ebe89 | ||
| 2521a658f2 | |||
| bd64a7b8ed | |||
|
|
5a854dea1d | ||
| d040b269c0 | |||
| fac4e49f63 | |||
|
|
fa15b73050 | ||
|
|
3275f651fa | ||
|
|
aaf131ecbb | ||
|
|
5d648ac6c3 | ||
| 0f82b262e9 | |||
| 539b0a51d0 | |||
|
|
1cc0b387de | ||
|
|
4e5bd76b3e | ||
|
|
edf3b503a4 | ||
|
|
69d39b03d7 | ||
|
|
c1fee8ff75 | ||
|
|
56e27bfd3f | ||
|
|
7b03b79e66 | ||
|
|
7eb30359a3 | ||
|
|
bc18f560d5 | ||
|
|
afc0bb23c4 | ||
| 5db4ac0747 | |||
| 5f7d66b4a6 | |||
|
|
6e544c41d4 | ||
|
|
a889ce6860 | ||
|
|
f40ddbf2ea | ||
|
|
e79fd79b95 | ||
|
|
47b32345d6 | ||
|
|
665e23cf30 | ||
|
|
6200fe5432 | ||
|
|
3b47c0dc1a | ||
|
|
db92c0bb37 | ||
|
|
beb55a1705 | ||
|
|
f8bfac1c35 | ||
|
|
02c4540dc2 | ||
|
|
5a89f0a84f | ||
|
|
b7f1dd92e0 | ||
|
|
165eff0164 | ||
|
|
5fe27f2dce | ||
|
|
0408ee77d0 | ||
|
|
02634ab2b9 | ||
|
|
97953f1958 | ||
|
|
5991c49c26 | ||
|
|
91dd99811c | ||
|
|
ac5a050dc5 | ||
|
|
012dd355ea | ||
|
|
11492fbc32 | ||
|
|
2f491f9b52 | ||
|
|
a4382dc538 | ||
|
|
3894964322 | ||
|
|
320b535e94 | ||
|
|
f34a609721 | ||
|
|
2d65998f52 | ||
|
|
1d657e3128 | ||
|
|
0b02aa9ed7 | ||
|
|
960a71b3a9 | ||
|
|
73f8f62039 | ||
|
|
f4b1d70efa | ||
|
|
abd32989ad | ||
|
|
5e41035606 | ||
|
|
51876cb295 | ||
|
|
422e610d3d | ||
|
|
cf654fe422 | ||
|
|
814997b62b | ||
|
|
99339d3461 | ||
|
|
ec69f49d78 | ||
|
|
1cf4dbaeee | ||
|
|
d9c96c649b | ||
|
|
61ebfcf99f | ||
|
|
54af22fa60 | ||
|
|
2edef87063 | ||
|
|
05f53b03e0 | ||
|
|
430637632b | ||
|
|
8811c4bebe | ||
|
|
e62e42c62a | ||
|
|
14bf5e913d | ||
|
|
ae8da29f23 | ||
|
|
5ace2ecbbd | ||
|
|
f609e0c83c | ||
|
|
860baa56b7 | ||
|
|
27bd9d3b09 | ||
|
|
0df1c5bbc2 | ||
|
|
48f22d6749 | ||
|
|
ae5286166b | ||
|
|
e1d162f918 | ||
|
|
098207b6a4 | ||
|
|
d718880622 | ||
|
|
ee9f6680b9 | ||
|
|
7443442ca1 | ||
|
|
36950a4364 | ||
|
|
8d6d445e71 | ||
|
|
de9ffbb1b8 | ||
|
|
ebb71fdd31 | ||
|
|
d2b296fe95 | ||
|
|
1eae40bf23 | ||
|
|
03342a6b3a | ||
|
|
c0fbf18c6a | ||
|
|
07fe75f380 | ||
|
|
7d72a0fbad | ||
|
|
3614971a7c | ||
|
|
bcdbcec1db | ||
|
|
efaa9ff92a | ||
|
|
2be4a98158 | ||
|
|
dc04ab6f9e | ||
|
|
9a122cf094 | ||
|
|
d04af0c07b | ||
|
|
3b90d16d0c | ||
|
|
fae19ebd8c | ||
|
|
083d260769 | ||
|
|
54fcd748cf | ||
|
|
168c556b6d | ||
|
|
9c2d1e7599 | ||
|
|
b71f9c6327 | ||
|
|
6d19ff3c7c | ||
|
|
348c971575 | ||
|
|
6eff2eda52 | ||
|
|
88aa8c35e3 | ||
|
|
09daa5d978 | ||
|
|
1a5501f761 | ||
|
|
fff1c9260e | ||
|
|
8c62657b03 | ||
|
|
fced065f12 | ||
|
|
f2622a2ae2 | ||
|
|
d880ae0f51 | ||
|
|
f9d361e469 | ||
|
|
82f8030d2f | ||
|
|
fbf45b0eb1 | ||
|
|
4a1a187694 | ||
|
|
3b60a301a4 | ||
|
|
63ad1d641a | ||
|
|
e5c629fba0 | ||
|
|
7501e9c08a | ||
|
|
38577a5ae8 | ||
|
|
7f981ee251 | ||
|
|
ccd4a380d9 | ||
|
|
a297d7f290 | ||
| dacea67cef | |||
| 1f323dc614 | |||
|
|
abd7ea6fc4 | ||
|
|
70c3546768 | ||
|
|
e5cf6e09bf | ||
|
|
5c4d3ecf3d | ||
|
|
54fc7ff7e3 | ||
|
|
4e66a95a57 | ||
|
|
55e4216493 | ||
|
|
be9fdffac8 | ||
|
|
8027eab1c5 | ||
|
|
c3a6dcbf7c | ||
|
|
aff4fe1757 | ||
|
|
d3ed858a5d | ||
|
|
986d7dc9f3 | ||
|
|
805508fd96 | ||
|
|
119deac852 | ||
|
|
67a9da60bf | ||
|
|
9ef8b91821 | ||
|
|
098220b08c | ||
|
|
96addecefc | ||
|
|
192b7ad00b | ||
|
|
67144c086f | ||
|
|
924dd75798 | ||
|
|
4eabd3c088 | ||
|
|
7dcfe8448c | ||
|
|
c1f4013bb9 | ||
|
|
0052dec3f9 | ||
|
|
78748b3798 | ||
|
|
250c8a0827 | ||
|
|
9122032a63 | ||
|
|
22fda5eab4 | ||
|
|
b7b1aa2b54 | ||
|
|
9c5faae2be | ||
|
|
7c03f9d98c | ||
|
|
67e87cbc96 | ||
|
|
2f5f37f546 | ||
|
|
9319231178 | ||
|
|
9a027c3125 | ||
|
|
9fb7063c1e | ||
|
|
74ef9a6069 | ||
|
|
f055493dff | ||
|
|
5ab1e11c6b | ||
|
|
b781f3a483 | ||
|
|
9e218fa88a | ||
|
|
a517dbb7dc | ||
|
|
9fb461888e | ||
|
|
577cb1809f | ||
|
|
95752b42e0 | ||
|
|
cd522b9d20 | ||
|
|
c9cf174e4e | ||
|
|
7104d85f77 | ||
|
|
6f85765392 | ||
|
|
33cad880c9 | ||
|
|
1e6eac90fb | ||
|
|
ac0e788824 | ||
|
|
c26d68e555 | ||
|
|
62b4039351 | ||
|
|
e41df86c09 | ||
|
|
ac9baffa44 | ||
|
|
05854dd1fe | ||
|
|
441828338f | ||
|
|
97aa700c8d | ||
| b5185d8ba6 | |||
|
|
a5492072d6 | ||
|
|
f516eb624b | ||
|
|
88c44de6e1 | ||
|
|
b6c15f641d | ||
|
|
eb9de90fe8 | ||
|
|
625ee62361 | ||
|
|
d60bf3eec9 | ||
|
|
af35eb8118 | ||
|
|
9fb9e32fc8 | ||
|
|
020804e990 | ||
|
|
a8502d7586 | ||
|
|
fb0544d956 | ||
| 33ae67c799 | |||
|
|
a85a685de4 |
8
Assets/Editor/BFBuildProjectTools/AssetBundleWindow.meta
Normal file
8
Assets/Editor/BFBuildProjectTools/AssetBundleWindow.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c41a7273e266a0468c52d3a52652dbd
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,195 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BFEditor.Build
|
||||
{
|
||||
public class CompareAssetBundleWindow : EditorWindow
|
||||
{
|
||||
private string newestABPath = "";
|
||||
private string lastABPath = "";
|
||||
public bool IsAndroid = true;
|
||||
private List<string> ABList = new List<string>();
|
||||
Vector2 resultScrollPos;
|
||||
public CompareAssetBundleWindow()
|
||||
{
|
||||
titleContent = new GUIContent("AssetBundle对比");
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
GetNewestABPath();
|
||||
}
|
||||
|
||||
void OnGUI()
|
||||
{
|
||||
GUILayout.Space(18);
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("当前版本AB路径");
|
||||
GUILayout.TextField(newestABPath, GUILayout.Width(600));
|
||||
if (GUILayout.Button("选择", GUILayout.Width(80)))
|
||||
{
|
||||
string openPath = EditorUtility.OpenFolderPanel("select ab path", newestABPath, "");
|
||||
if (openPath.CompareTo("") != 0){
|
||||
newestABPath = openPath;
|
||||
}
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.Space(10);
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("上个版本AB路径");
|
||||
GUILayout.TextField(lastABPath, GUILayout.Width(600));
|
||||
if (GUILayout.Button("选择", GUILayout.Width(80)))
|
||||
{
|
||||
string openPath = EditorUtility.OpenFolderPanel("select ab path", lastABPath, "");
|
||||
if (openPath.CompareTo("") != 0){
|
||||
lastABPath = openPath;
|
||||
}
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.Space(10);
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Space(150);
|
||||
if (GUILayout.Button("对比", GUILayout.Width(200), GUILayout.Height(40)))
|
||||
{
|
||||
CheckMD5AndAssetHash();
|
||||
}
|
||||
|
||||
GUILayout.Space(100);
|
||||
if (GUILayout.Button("使用上个版本的AB修复", GUILayout.Width(200), GUILayout.Height(40)))
|
||||
{
|
||||
UseLastABFix();
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.Space(30);
|
||||
|
||||
DrawResult();
|
||||
}
|
||||
|
||||
private void DrawResult()
|
||||
{
|
||||
resultScrollPos = GUILayout.BeginScrollView(resultScrollPos, GUILayout.Width(800), GUILayout.Height(620));
|
||||
for (int i = ABList.Count - 1; i >= 0; i--)
|
||||
{
|
||||
var path = ABList[i];
|
||||
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Space(20);
|
||||
EditorGUILayout.TextField(path);
|
||||
|
||||
GUILayout.Space(10);
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
}
|
||||
GUILayout.EndScrollView();
|
||||
}
|
||||
|
||||
private void CheckMD5AndAssetHash()
|
||||
{
|
||||
if (string.IsNullOrEmpty(newestABPath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(lastABPath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
ABList.Clear();
|
||||
var manifestPath = System.IO.Path.Combine(newestABPath, "asset_bundle_manifest.ab");
|
||||
var manifestAB = AssetBundle.LoadFromFile(manifestPath);
|
||||
var Manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
|
||||
manifestAB.Unload(false);
|
||||
|
||||
var lastManifestPath = System.IO.Path.Combine(lastABPath, "asset_bundle_manifest.ab");
|
||||
var lastManifestAB = AssetBundle.LoadFromFile(lastManifestPath);
|
||||
var lastManifest = lastManifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
|
||||
lastManifestAB.Unload(false);
|
||||
|
||||
var allAB = Manifest.GetAllAssetBundles();
|
||||
foreach(var path in allAB)
|
||||
{
|
||||
if (path.Contains("ab_config.bytes") || path.Contains("asset_bundle_manifest.ab"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var fullPathA = Path.Combine(newestABPath, path);
|
||||
var fullPathB = Path.Combine(lastABPath, path);
|
||||
if (File.Exists(fullPathB) && BF.GameLaunchUtils.GetFileMD5(fullPathA).CompareTo(BF.GameLaunchUtils.GetFileMD5(fullPathB)) != 0)
|
||||
{
|
||||
if (Manifest.GetAssetBundleHash(path) == lastManifest.GetAssetBundleHash(path))
|
||||
{
|
||||
// md5 不一致但是AssetHash一致的情况
|
||||
ABList.Add(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void UseLastABFix()
|
||||
{
|
||||
if (string.IsNullOrEmpty(newestABPath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(lastABPath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (ABList.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
foreach(var path in ABList)
|
||||
{
|
||||
var fullPathA = Path.Combine(newestABPath, path);
|
||||
var fullPathB = Path.Combine(lastABPath, path);
|
||||
File.Copy(fullPathB, fullPathA, true);
|
||||
}
|
||||
var version = newestABPath.Substring(newestABPath.Replace("\\", "/").LastIndexOf("/") + 1);
|
||||
AssetBundleUtils.RegenerateABConfigMd5(newestABPath, version);
|
||||
|
||||
ABList.Clear();
|
||||
}
|
||||
|
||||
public static void ShowWindow()
|
||||
{
|
||||
var window = GetWindow<CompareAssetBundleWindow>();
|
||||
window.Show();
|
||||
}
|
||||
|
||||
private void GetNewestABPath()
|
||||
{
|
||||
var bundleCachePath = IsAndroid ? Application.dataPath + "/../HistoryAssetBundles" : Application.dataPath + "/../HistoryAssetBundles/IOS";
|
||||
var dirInfo = new DirectoryInfo(bundleCachePath);
|
||||
var dirs = dirInfo.GetDirectories();
|
||||
if (dirs.Length == 0)
|
||||
{
|
||||
newestABPath = "";
|
||||
lastABPath = "";
|
||||
}
|
||||
if (dirs.Length == 1)
|
||||
{
|
||||
newestABPath = dirs[0].FullName;
|
||||
lastABPath = "";
|
||||
}
|
||||
var hightestIndex = 0;
|
||||
var secondIndex = 0;
|
||||
for (var i = 1; i < dirs.Length; i++)
|
||||
{
|
||||
if (dirs[i].FullName.CompareTo(dirs[hightestIndex].FullName) > 0)
|
||||
{
|
||||
secondIndex = hightestIndex;
|
||||
hightestIndex = i;
|
||||
}
|
||||
}
|
||||
newestABPath = dirs[hightestIndex].FullName;
|
||||
if (hightestIndex > 0)
|
||||
{
|
||||
lastABPath = dirs[secondIndex].FullName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ea05efeb3467b0947b735c8fe281cb8c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -34,12 +34,12 @@ namespace BFEditor.Build
|
||||
|
||||
public bool IsGPChannel()
|
||||
{
|
||||
return bundleName == "com.knight.connect.rpg";
|
||||
return bundleName == "com.combo.heroes.puzzle.rpg";
|
||||
}
|
||||
|
||||
public bool IsGPOfficial()
|
||||
{
|
||||
return bundleName == "com.knight.connect.rpg";
|
||||
return bundleName == "com.combo.heroes.puzzle.rpg";
|
||||
}
|
||||
|
||||
// dev包使用mono编译,不会导出as工程
|
||||
|
||||
@ -192,10 +192,34 @@ namespace BFEditor.Build
|
||||
}
|
||||
}
|
||||
|
||||
[MenuItem("打包工具/AssetBundles/对比上一个版本AB Android", priority = 207)]
|
||||
static void CompareLastVersionABAndroid()
|
||||
{
|
||||
var window = (CompareAssetBundleWindow)EditorWindow.GetWindowWithRect(typeof(CompareAssetBundleWindow),
|
||||
new Rect(Screen.width / 2, Screen.height / 2, 800, 800), true);
|
||||
window.IsAndroid = true;
|
||||
window.Show();
|
||||
}
|
||||
|
||||
[MenuItem("打包工具/AssetBundles/对比上一个版本AB IOS", priority = 208)]
|
||||
static void CompareLastVersionABIOS()
|
||||
{
|
||||
var window = (CompareAssetBundleWindow)EditorWindow.GetWindowWithRect(typeof(CompareAssetBundleWindow),
|
||||
new Rect(Screen.width / 2, Screen.height / 2, 800, 800), true);
|
||||
window.IsAndroid = false;
|
||||
window.Show();
|
||||
}
|
||||
|
||||
[MenuItem("打包工具/打包窗口", priority = 301)]
|
||||
static void ShowBuildWindow()
|
||||
{
|
||||
BuildProjectWindow.ShowWindow();
|
||||
}
|
||||
|
||||
[MenuItem("打包工具/Android转换为AAB工程", priority = 401)]
|
||||
static void ConvertAndroidStudioToAAB()
|
||||
{
|
||||
BuildAndroidUtils.ConvertToAAB();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,10 +13,12 @@ namespace BFEditor.Build
|
||||
|
||||
public class BuildProjectWindow : EditorWindow
|
||||
{
|
||||
private static int versionCode = 18;
|
||||
private static string versionName = "1.6.5";
|
||||
BFPlatformOptions platform = BFPlatformOptions.AndroidDev;
|
||||
const string ANDROID_DEV_PACKAGE_NAME = "com.juzu.b6.dev.android";
|
||||
const string ANDROID_RELEASE_PACKAGE_NAME = "com.juzu.b6.release.android";
|
||||
const string ANDROID_GP_PACKAGE_NAME = "com.knight.connect.rpg";
|
||||
const string ANDROID_GP_PACKAGE_NAME = "com.combo.heroes.puzzle.rpg";
|
||||
const string IOS_PACKAGE_NAME = "com.juzu.b6.dev.ios";
|
||||
|
||||
public BuildProjectWindow()
|
||||
@ -34,7 +36,7 @@ namespace BFEditor.Build
|
||||
platform = (BFPlatformOptions)EditorGUILayout.EnumPopup("", platform);
|
||||
EditorGUILayout.Space();
|
||||
|
||||
EditorGUILayout.LabelField("版本: 0.1.0");
|
||||
EditorGUILayout.LabelField("版本: " + versionName);
|
||||
EditorGUILayout.Space();
|
||||
|
||||
string packageName;
|
||||
@ -70,7 +72,8 @@ namespace BFEditor.Build
|
||||
if (GUILayout.Button("一键打包"))
|
||||
{
|
||||
var buildInfo = new BuildInfo();
|
||||
buildInfo.version = "0.1.0";
|
||||
buildInfo.version = versionName;
|
||||
buildInfo.version_code = versionCode;
|
||||
buildInfo.mode = mode;
|
||||
buildInfo.bundleName = packageName;
|
||||
buildInfo.skipVersion = skipVersion;
|
||||
|
||||
@ -366,7 +366,7 @@ namespace BFEditor.Build
|
||||
SetSpineABName(Path.Combine(Application.dataPath, "arts", "spines"), index++ / total);
|
||||
SetFirstABName(Path.Combine(Application.dataPath, "first"), index++ / total);
|
||||
// SetTimelineABName(Path.Combine(Application.dataPath, "arts", "timeline"), 16f / total);
|
||||
// SetVideoABName(Path.Combine(Application.dataPath, "arts", "video"), 17f / total);
|
||||
SetVideoABName(Path.Combine(Application.dataPath, "arts", "video"), index++ / total);
|
||||
// SetLanguageResABName(Resource.ResourceProcessConfig.LANGUAGE_PATH, 19f / total);
|
||||
// SetBakedatasABName(Path.Combine(Application.dataPath, "arts", "bakedatas"), 21f / total);
|
||||
// SetLightProbesABName(Path.Combine(Application.dataPath, "arts", "lightprobes"), 22f / total);
|
||||
|
||||
@ -3,6 +3,7 @@ using UnityEditor;
|
||||
using System.IO;
|
||||
using UnityEditor.Build.Reporting;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Threading;
|
||||
|
||||
@ -29,8 +30,14 @@ namespace BFEditor.Build
|
||||
static string GoogleCommonProjectPath = Application.dataPath + "/../BFVersions/android/google_common";
|
||||
static string GPAsProjectPath = Application.dataPath + "/../BFVersions/android/ub-gp"; // gp删档测试渠道
|
||||
static string GPOfficialAsProjectPath = Application.dataPath + "/../BFVersions/android/ub-google"; // gp正式渠道
|
||||
static string PublishAsProjectPath = Application.dataPath + "/../BFVersions/android/publish_release";
|
||||
static string SignShellPath = Application.dataPath + "/../BFFiles/androidkey";
|
||||
static string GpAlginShellPath = Application.dataPath + "/../BFFiles/androidkey";
|
||||
static HashSet<string> AABInPackageFileHashSet = new HashSet<string>()
|
||||
{
|
||||
"bin",
|
||||
"UnityServicesProjectConfiguration.json"
|
||||
};
|
||||
|
||||
static BuildAndroidUtils()
|
||||
{
|
||||
@ -131,7 +138,7 @@ namespace BFEditor.Build
|
||||
// 应用名
|
||||
if (buildInfo.IsPublish())
|
||||
{
|
||||
PlayerSettings.productName = "Knight Connect";
|
||||
PlayerSettings.productName = "Knights Combo";
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -269,6 +276,11 @@ namespace BFEditor.Build
|
||||
if(buildInfo.IsDevChannel())
|
||||
{
|
||||
MergeProject(buildInfo, DevAsProjectPath);
|
||||
var dir = Path.Combine(Application.dataPath, "../", AS_PROJECT_PATH, buildInfo.mode);
|
||||
BFEditorUtils.RunCommond("gradle", " assembleDebug", dir, (msg) => {
|
||||
}, (errorMsg) => {
|
||||
Debug.LogError("[bferror] " + errorMsg);
|
||||
});
|
||||
}
|
||||
else if(buildInfo.IsLanRelease())
|
||||
{
|
||||
@ -277,6 +289,7 @@ namespace BFEditor.Build
|
||||
else if(buildInfo.IsGPChannel())
|
||||
{
|
||||
MergeProject(buildInfo, GoogleAsProjectPath);
|
||||
FixGradleVersion(buildInfo.version_code, buildInfo.version);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -386,13 +399,19 @@ namespace BFEditor.Build
|
||||
static void FixGradleVersion(int versionCode, string versionName)
|
||||
{
|
||||
Debug.Log("[bfinfo]修正build.gradle: VersionCode " + versionCode + " VersionName " + versionName);
|
||||
var gradleFilePath = Path.Combine(GradleExcuteProjectPath, "build.gradle");
|
||||
var gradleFilePath = Path.Combine(PublishAsProjectPath, "launcher", "build.gradle");
|
||||
var text = File.ReadAllText(gradleFilePath);
|
||||
var regex = new Regex("versionCode 1");
|
||||
text = regex.Replace(text, string.Format("versionCode {0}", versionCode));
|
||||
regex = new Regex("versionName '0.1'");
|
||||
text = regex.Replace(text, string.Format("versionName '{0}'", versionName));
|
||||
var regex2 = new Regex("versionName '0.1.0'");
|
||||
text = regex2.Replace(text, string.Format("versionName '{0}'", versionName));
|
||||
File.WriteAllText(gradleFilePath, text);
|
||||
|
||||
var gradleFilePath2 = Path.Combine(PublishAsProjectPath, "unityLibrary", "build.gradle");
|
||||
var text2 = File.ReadAllText(gradleFilePath2);
|
||||
text2 = regex.Replace(text2, string.Format("versionCode {0}", versionCode));
|
||||
text2 = regex2.Replace(text2, string.Format("versionName '{0}'", versionName));
|
||||
File.WriteAllText(gradleFilePath2, text2);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -538,5 +557,77 @@ namespace BFEditor.Build
|
||||
tmp.Abort();
|
||||
}
|
||||
}
|
||||
|
||||
public static void ConvertToAAB()
|
||||
{
|
||||
var installTimePackDirPath = Path.Combine(PublishAsProjectPath, "../", "dz_google_abb", "install_time_pack");
|
||||
var targetDirPath = Path.Combine(PublishAsProjectPath, "install_time_pack");
|
||||
if (Directory.Exists(targetDirPath))
|
||||
{
|
||||
Directory.Delete(targetDirPath, true);
|
||||
Directory.CreateDirectory(targetDirPath);
|
||||
}
|
||||
else
|
||||
{
|
||||
Directory.CreateDirectory(targetDirPath);
|
||||
}
|
||||
|
||||
BFEditorUtils.CopyDir(installTimePackDirPath, targetDirPath);
|
||||
|
||||
var abDirPath = Path.Combine(PublishAsProjectPath, "unityLibrary/src/main/assets");
|
||||
var destFolderName = Path.Combine(PublishAsProjectPath, "install_time_pack/src/main/assets");
|
||||
var dirInfo = new DirectoryInfo(abDirPath);
|
||||
var floders = dirInfo.GetDirectories();
|
||||
for (var i = 0; i < floders.Length; i++)
|
||||
{
|
||||
if (AABInPackageFileHashSet.Contains(floders[i].Name))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var newDir = Path.Combine(destFolderName, floders[i].Name);
|
||||
if (!Directory.Exists(newDir))
|
||||
{
|
||||
Directory.CreateDirectory(newDir);
|
||||
}
|
||||
BFEditorUtils.CopyDir(floders[i].FullName, newDir);
|
||||
Directory.Delete(floders[i].FullName, true);
|
||||
}
|
||||
|
||||
var files = dirInfo.GetFiles();
|
||||
for (var i = 0; i < files.Length; i++)
|
||||
{
|
||||
var file = files[i];
|
||||
if (AABInPackageFileHashSet.Contains(file.Name))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var destFile = Path.Combine(destFolderName, file.Name);
|
||||
if (File.Exists(destFile))
|
||||
{
|
||||
File.Delete(destFile);
|
||||
}
|
||||
File.Move(file.FullName, destFile);
|
||||
}
|
||||
|
||||
var settingsGradleFilePath = Path.Combine(PublishAsProjectPath, "settings.gradle");
|
||||
var text = File.ReadAllText(settingsGradleFilePath);
|
||||
var appendText = "include ':install_time_pack'";
|
||||
if (!text.EndsWith(appendText))
|
||||
{
|
||||
text = text + "\n" + appendText;
|
||||
}
|
||||
File.WriteAllText(settingsGradleFilePath, text);
|
||||
|
||||
var buildGradlePath = Path.Combine(PublishAsProjectPath, "launcher/build.gradle");
|
||||
var buildGradleText = File.ReadAllText(buildGradlePath);
|
||||
var regex2 = new Regex("assetPacks = [\":install_time_pack\"]");
|
||||
if (!regex2.IsMatch(buildGradleText))
|
||||
{
|
||||
var regex22 = new Regex("android {");
|
||||
buildGradleText = regex22.Replace(buildGradleText, "android {\n assetPacks = [\":install_time_pack\"]");
|
||||
}
|
||||
File.WriteAllText(buildGradlePath, buildGradleText);
|
||||
Debug.Log("Android转换为AAB工程完成");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,76 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
using UnityEditor;
|
||||
using UnityEditor.Build;
|
||||
using UnityEditor.Build.Reporting;
|
||||
using UnityEngine;
|
||||
|
||||
#if UNITY_IOS
|
||||
using UnityEditor.iOS.Xcode;
|
||||
#endif
|
||||
|
||||
public class IOSLocalizationTool
|
||||
{
|
||||
public static readonly Dictionary<SystemLanguage, string> validLanguageMap = new Dictionary<SystemLanguage, string>()
|
||||
{
|
||||
[SystemLanguage.English] = "en",
|
||||
[SystemLanguage.ChineseSimplified] = "zh-Hans",
|
||||
[SystemLanguage.ChineseTraditional] = "zh-Hant",
|
||||
[SystemLanguage.Japanese] = "ja",
|
||||
[SystemLanguage.Korean] = "ko",
|
||||
[SystemLanguage.Spanish] = "es",
|
||||
[SystemLanguage.Vietnamese] = "vi",
|
||||
[SystemLanguage.Thai] = "th",
|
||||
[SystemLanguage.Indonesian] = "id",
|
||||
[SystemLanguage.Portuguese] = "pt",
|
||||
};
|
||||
|
||||
public static void SetLocalization(string pathToBuiltProject)
|
||||
{
|
||||
#if UNITY_IOS
|
||||
string buildPath = pathToBuiltProject;
|
||||
const string infoPlistName = "Info.plist";
|
||||
|
||||
var plistPath = Path.Combine(buildPath, infoPlistName);
|
||||
PlistDocument plist = new PlistDocument();
|
||||
plist.ReadFromFile(plistPath);
|
||||
|
||||
// url schemes
|
||||
const string bundleLocalizationKey = "CFBundleLocalizations";
|
||||
|
||||
if (!plist.root.values.TryGetValue(bundleLocalizationKey, out var localizations))
|
||||
{
|
||||
localizations = plist.root.CreateArray(bundleLocalizationKey);
|
||||
}
|
||||
|
||||
foreach (string value in validLanguageMap.Values)
|
||||
{
|
||||
localizations.AsArray().AddString(value);
|
||||
}
|
||||
|
||||
plist.WriteToFile(plistPath);
|
||||
|
||||
var projectPath = PBXProject.GetPBXProjectPath(buildPath);
|
||||
var project = new PBXProject();
|
||||
project.ReadFromFile(projectPath);
|
||||
var target = project.GetUnityMainTargetGuid();
|
||||
var resourceTarget = project.GetResourcesBuildPhaseByTarget(target);
|
||||
|
||||
foreach (string value in validLanguageMap.Values)
|
||||
{
|
||||
var path = Path.Combine(Path.Combine(Application.dataPath, "../", "BFVersions/ios/ios_common"), $"{value}.lproj");
|
||||
var inProjectPath = Path.GetFileName(path);
|
||||
project.AddFolderReference(path, inProjectPath);
|
||||
var resGUID = project.FindFileGuidByProjectPath(inProjectPath);
|
||||
project.AddFileToBuildSection(
|
||||
target,
|
||||
resourceTarget,
|
||||
resGUID);
|
||||
}
|
||||
|
||||
project.WriteToFile(projectPath);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4be556fddd0e984428c0410a562496d8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/Editor/BFOthersTools/BoardEditorTools.meta
Normal file
8
Assets/Editor/BFOthersTools/BoardEditorTools.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0db9ae993e0bba941a6bfe7227aff6bd
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,767 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace BFEditor
|
||||
{
|
||||
public class BoardEditorWindow : EditorWindow {
|
||||
|
||||
// private static void ShowWindow() {
|
||||
// var window = GetWindow<BoardEditorWindow>();
|
||||
// window.titleContent = new GUIContent("BoardWindow");
|
||||
// window.Show();
|
||||
// }
|
||||
const string BOARD_EXCEL_KEY = "bf_board_excel_key";
|
||||
const string BOARD_GRID_TYPE_KEY = "bf_board_grid_type_key";
|
||||
const string BOARD_GRID_EDGE_KEY = "bf_board_grid_edge_key";
|
||||
int gridCount = 49;
|
||||
string battleImgDirectory = "Assets/arts/textures/ui/battle/";
|
||||
string boardFilepath;
|
||||
string boardGridTypePath;
|
||||
string boardGridEdgePath;
|
||||
string boardFiledName = "board";
|
||||
string boardEdgeFiledName = "grid_edge";
|
||||
string randomTypeStr = "";
|
||||
string boardEdgeStr = "";
|
||||
int curIndex = 1;
|
||||
int maxRow = 7;
|
||||
Dictionary<int, Dictionary<string, string>> boardGridTypeDict = new Dictionary<int, Dictionary<string, string>>();
|
||||
Dictionary<int, JArray> boardDict = new Dictionary<int, JArray>();
|
||||
Dictionary<int, JArray> outPutBoardDict = new Dictionary<int, JArray>();
|
||||
Dictionary<string, Texture> imgDict = new Dictionary<string, Texture>();
|
||||
Dictionary<int, Dictionary<string, string>> boardGridEdgeDict = new Dictionary<int, Dictionary<string, string>>();
|
||||
Dictionary<int, JArray> edgeDict = new Dictionary<int, JArray>();
|
||||
Dictionary<int, JArray> outPutBoardEdgeDict = new Dictionary<int, JArray>();
|
||||
bool loadExcelOver = false;
|
||||
Dictionary<int, string> elementTypeImgDict = new Dictionary<int, string>(){
|
||||
[1] = "red_1",
|
||||
[2] = "yellow_1",
|
||||
[3] = "green_1",
|
||||
[4] = "blue_1",
|
||||
[5] = "purple_1"
|
||||
};
|
||||
Texture boardImg;
|
||||
private void OnEnable()
|
||||
{
|
||||
loadExcelOver = false;
|
||||
boardFilepath = GetBoardExcelPath();
|
||||
if (boardFilepath.Equals(""))
|
||||
{
|
||||
boardFilepath = "选择配置表路径";
|
||||
}
|
||||
|
||||
boardGridTypePath = GetBoardGridTypePath();
|
||||
if (boardGridTypePath.Equals(""))
|
||||
{
|
||||
boardGridTypePath = "选择grid_type配置表路径";
|
||||
}
|
||||
|
||||
boardGridEdgePath = GetBoardGridEdgePath();
|
||||
if (boardGridEdgePath.Equals(""))
|
||||
{
|
||||
boardGridEdgePath = "选择grid_edge_type配置表路径";
|
||||
}
|
||||
string[] paths = Directory.GetFiles(battleImgDirectory);
|
||||
foreach(var path in paths)
|
||||
{
|
||||
if(!path.EndsWith(".meta"))
|
||||
{
|
||||
string formatPath = Path.GetFileNameWithoutExtension(path);
|
||||
imgDict[formatPath] = AssetDatabase.LoadAssetAtPath<Texture>(path);
|
||||
}
|
||||
}
|
||||
boardImg = AssetDatabase.LoadAssetAtPath<Texture>("Assets/arts/textures/background/battle_common/chessboard_1.png");
|
||||
}
|
||||
string GetBoardExcelPath()
|
||||
{
|
||||
return PlayerPrefs.GetString(BOARD_EXCEL_KEY, "");
|
||||
}
|
||||
|
||||
void SetBoardExcelPath(string path)
|
||||
{
|
||||
PlayerPrefs.SetString(BOARD_EXCEL_KEY, path);
|
||||
}
|
||||
|
||||
string GetBoardGridTypePath()
|
||||
{
|
||||
return PlayerPrefs.GetString(BOARD_GRID_TYPE_KEY, "");
|
||||
}
|
||||
|
||||
void SetBoardGridTypePath(string path)
|
||||
{
|
||||
PlayerPrefs.SetString(BOARD_GRID_TYPE_KEY, path);
|
||||
}
|
||||
|
||||
string GetBoardGridEdgePath()
|
||||
{
|
||||
return PlayerPrefs.GetString(BOARD_GRID_EDGE_KEY, "");
|
||||
}
|
||||
|
||||
void SetBoardGridEdgePath(string path)
|
||||
{
|
||||
PlayerPrefs.SetString(BOARD_GRID_EDGE_KEY, path);
|
||||
}
|
||||
|
||||
BoardEditorWindow()
|
||||
{
|
||||
this.titleContent = new GUIContent("棋盘编辑器");
|
||||
}
|
||||
|
||||
private void OnGUI() {
|
||||
DrawBaseInfo();
|
||||
DragBoard();
|
||||
}
|
||||
|
||||
void DrawBaseInfo()
|
||||
{
|
||||
GUILayout.BeginVertical();
|
||||
GUILayout.Space(10);
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("grid_type 路径", GUILayout.Width(100));
|
||||
GUILayout.Space(10);
|
||||
GUILayout.TextField(boardGridTypePath, GUILayout.Width(300));
|
||||
if (GUILayout.Button("选择", GUILayout.Width(80)))
|
||||
{
|
||||
string openPath = EditorUtility.OpenFilePanel("选择配置表", GetBoardGridTypePath(), "");
|
||||
if (openPath.CompareTo("") != 0)
|
||||
{
|
||||
boardGridTypePath = openPath;
|
||||
SetBoardGridTypePath(openPath);
|
||||
}
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("grid_edge 路径", GUILayout.Width(100));
|
||||
GUILayout.Space(10);
|
||||
GUILayout.TextField(boardGridEdgePath, GUILayout.Width(300));
|
||||
if (GUILayout.Button("选择", GUILayout.Width(80)))
|
||||
{
|
||||
string openPath = EditorUtility.OpenFilePanel("选择配置表", GetBoardGridEdgePath(), "");
|
||||
if (openPath.CompareTo("") != 0)
|
||||
{
|
||||
boardGridEdgePath = openPath;
|
||||
SetBoardGridEdgePath(openPath);
|
||||
}
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.Space(10);
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("配置表路径", GUILayout.Width(100));
|
||||
GUILayout.Space(10);
|
||||
GUILayout.TextField(boardFilepath, GUILayout.Width(300));
|
||||
if (GUILayout.Button("选择", GUILayout.Width(80)))
|
||||
{
|
||||
string openPath = EditorUtility.OpenFilePanel("选择配置表", GetBoardExcelPath(), "");
|
||||
if (openPath.CompareTo("") != 0)
|
||||
{
|
||||
boardFilepath = openPath;
|
||||
SetBoardExcelPath(openPath);
|
||||
}
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.Space(10);
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("字段名称", GUILayout.Width(100));
|
||||
GUILayout.Space(10);
|
||||
boardFiledName = GUILayout.TextField(boardFiledName, GUILayout.Width(200));
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
GUILayout.Space(10);
|
||||
GUILayout.BeginHorizontal();
|
||||
if (GUILayout.Button("加载棋盘", GUILayout.Width(80)))
|
||||
{
|
||||
LoadBoardExcel();
|
||||
}
|
||||
|
||||
GUILayout.Label("棋盘数量", GUILayout.Width(100));
|
||||
gridCount = int.Parse(GUILayout.TextField(gridCount.ToString(), GUILayout.Width(200)));
|
||||
maxRow = (int)(gridCount / 7);
|
||||
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.BeginHorizontal();
|
||||
if (!IsInNewBoard())
|
||||
{
|
||||
if (GUILayout.Button("上一张", GUILayout.Width(80)))
|
||||
{
|
||||
showSwitchBoardSaveDialog(Math.Max(curIndex - 1, 1));
|
||||
}
|
||||
}
|
||||
|
||||
GUILayout.BeginHorizontal(GUILayout.Width(80));
|
||||
GUIStyle style = new GUIStyle(GUI.skin.label);
|
||||
style.alignment = TextAnchor.MiddleCenter;
|
||||
GUILayout.Label("当前编号id = ", style);
|
||||
showSwitchBoardSaveDialog(int.Parse(GUILayout.TextField(curIndex.ToString(), GUILayout.Width(40))));
|
||||
GUILayout.EndHorizontal();
|
||||
if (!IsInNewBoard())
|
||||
{
|
||||
if (GUILayout.Button("下一张", GUILayout.Width(80)))
|
||||
{
|
||||
showSwitchBoardSaveDialog(Math.Min(curIndex + 1, boardDict.Count));
|
||||
}
|
||||
}
|
||||
|
||||
if (GUILayout.Button("复制当前棋盘", GUILayout.Width(80)))
|
||||
{
|
||||
if (!boardDict.ContainsKey(curIndex))
|
||||
{
|
||||
return;
|
||||
}
|
||||
JArray jo = boardDict[curIndex];
|
||||
GUIUtility.systemCopyBuffer = JsonConvert.SerializeObject(jo);
|
||||
}
|
||||
|
||||
if (GUILayout.Button("粘贴棋盘", GUILayout.Width(80)))
|
||||
{
|
||||
JArray jo = (JArray)JsonConvert.DeserializeObject(GUIUtility.systemCopyBuffer);
|
||||
if (jo == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
boardDict[curIndex] = jo;
|
||||
}
|
||||
|
||||
if (!IsInNewBoard())
|
||||
{
|
||||
if (GUILayout.Button("新建棋盘", GUILayout.Width(80)))
|
||||
{
|
||||
curIndex = outPutBoardDict.Count + 1;
|
||||
boardDict[curIndex] = new JArray();
|
||||
for (int i = 0; i < gridCount; i++)
|
||||
{
|
||||
JArray unit = (JArray)JsonConvert.DeserializeObject("[0, 0]");
|
||||
boardDict[curIndex].Add(unit);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GUILayout.Button("退出新建棋盘", GUILayout.Width(80)))
|
||||
{
|
||||
boardDict.Remove(curIndex);
|
||||
curIndex = outPutBoardDict.Count;
|
||||
}
|
||||
if (GUILayout.Button("保存当前棋盘", GUILayout.Width(80)))
|
||||
{
|
||||
SaveBoard(curIndex);
|
||||
}
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.EndVertical();
|
||||
|
||||
GUILayout.BeginArea(new Rect(730, 500, 500, 100));
|
||||
GUILayout.BeginVertical();
|
||||
GUILayout.Label("随机类型和数量[类型,数量] 空格 [类型,数量]");
|
||||
randomTypeStr = GUILayout.TextField(randomTypeStr, GUILayout.Width(500));
|
||||
GUILayout.BeginHorizontal();
|
||||
if(GUILayout.Button("生成随机棋盘", GUILayout.Width(80)))
|
||||
{
|
||||
string[] units = randomTypeStr.Split('[');
|
||||
Dictionary<int, int> dict = new Dictionary<int, int>();
|
||||
for (int i = 0; i < units.Length; i++)
|
||||
{
|
||||
string formatStr = units[i].Replace("[", "").Replace("]", "").Replace(" ", "");
|
||||
string[] unitList = formatStr.Split(',');
|
||||
if (unitList.Length >= 2)
|
||||
{
|
||||
dict[int.Parse(unitList[0])] = int.Parse(unitList[1]);
|
||||
}
|
||||
}
|
||||
List<int> list = new List<int>();
|
||||
for (int i = 0; i < gridCount; i++)
|
||||
{
|
||||
list.Add(i);
|
||||
}
|
||||
JArray ja = new JArray();
|
||||
for (int i = 0; i < gridCount; i++)
|
||||
{
|
||||
JArray unit = (JArray)JsonConvert.DeserializeObject("[0, 0]");
|
||||
ja.Add(unit);
|
||||
}
|
||||
foreach (int gridType in dict.Keys)
|
||||
{
|
||||
for(int i = 0; i < dict[gridType]; i++)
|
||||
{
|
||||
int index = UnityEngine.Random.Range(0, list.Count);
|
||||
ja[list[index]][0] = gridType;
|
||||
list.RemoveAt(index);
|
||||
}
|
||||
}
|
||||
boardDict[curIndex] = ja;
|
||||
}
|
||||
if(GUILayout.Button("生成随机棋盘+元素", GUILayout.Width(110)))
|
||||
{
|
||||
string[] units = randomTypeStr.Split('[');
|
||||
Dictionary<int, int> dict = new Dictionary<int, int>();
|
||||
for (int i = 0; i < units.Length; i++)
|
||||
{
|
||||
string formatStr = units[i].Replace("[", "").Replace("]", "").Replace(" ", "");
|
||||
string[] unitList = formatStr.Split(',');
|
||||
if (unitList.Length >= 2)
|
||||
{
|
||||
dict[int.Parse(unitList[0])] = int.Parse(unitList[1]);
|
||||
}
|
||||
}
|
||||
List<int> list = new List<int>();
|
||||
for (int i = 0; i < gridCount; i++)
|
||||
{
|
||||
list.Add(i);
|
||||
}
|
||||
JArray ja = new JArray();
|
||||
for (int i = 0; i < gridCount; i++)
|
||||
{
|
||||
ja.Add(getNewGridUnitInfo());
|
||||
}
|
||||
foreach (int gridType in dict.Keys)
|
||||
{
|
||||
for(int i = 0; i < dict[gridType]; i++)
|
||||
{
|
||||
int index = UnityEngine.Random.Range(0, list.Count);
|
||||
ja[list[index]][0] = gridType;
|
||||
list.RemoveAt(index);
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < ja.Count; i++)
|
||||
{
|
||||
int gridType = (int)(ja[i][0]);
|
||||
Dictionary<string, string> gridTypeDict = boardGridTypeDict[gridType];
|
||||
if (gridTypeDict.ContainsKey("break_stay_element") || !gridTypeDict.ContainsKey("element_invalid"))
|
||||
{
|
||||
ja[i][1] = UnityEngine.Random.Range(1, 6);
|
||||
}
|
||||
}
|
||||
boardDict[curIndex] = ja;
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.EndVertical();
|
||||
GUILayout.EndArea();
|
||||
GUILayout.BeginArea(new Rect(730, 650, 500, 500));
|
||||
GUILayout.BeginVertical();
|
||||
GUILayout.Label("棋盘边缘元素");
|
||||
boardEdgeStr = GUILayout.TextField(boardEdgeStr, GUILayout.Width(400), GUILayout.Height(100));
|
||||
if(GUILayout.Button("加载边缘元素配置", GUILayout.Width(110)))
|
||||
{
|
||||
JArray edgeJo = edgeDict[curIndex];
|
||||
string str = "[";
|
||||
for (int i = 0; i < edgeJo.Count; i++)
|
||||
{
|
||||
JArray gridInfo = (JArray)edgeJo[i];
|
||||
if (gridInfo.Count < 3)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
string s = "{";
|
||||
for (int j = 0; j < 3; j++)
|
||||
{
|
||||
s = s + gridInfo[j].ToString();
|
||||
if(j != 2)
|
||||
{
|
||||
s = s + ", ";
|
||||
}
|
||||
}
|
||||
s = s + "}";
|
||||
str = str + s;
|
||||
if (i != edgeJo.Count)
|
||||
{
|
||||
str = str + ", ";
|
||||
}
|
||||
}
|
||||
boardEdgeStr = str;
|
||||
}
|
||||
if(GUILayout.Button("重新刷新边缘元素", GUILayout.Width(110)))
|
||||
{
|
||||
string[] units = boardEdgeStr.Split('{');
|
||||
List<string> edgeList = new List<string>();
|
||||
for (int i = 0; i < units.Length; i++)
|
||||
{
|
||||
string formatStr = units[i].Replace("[", "").Replace("]", "").Replace(" ", "").Replace("}", "");
|
||||
string[] unitList = formatStr.Split(',');
|
||||
if (unitList.Length >= 3)
|
||||
{
|
||||
string str = "[";
|
||||
for(int j = 0; j < 3; j++)
|
||||
{
|
||||
str = str + unitList[j];
|
||||
if (j != 2)
|
||||
{
|
||||
str = str + ",";
|
||||
}
|
||||
}
|
||||
str = str + "]";
|
||||
edgeList.Add(str);
|
||||
}
|
||||
}
|
||||
|
||||
JArray ja = new JArray();
|
||||
for (int i = 0; i < edgeList.Count; i++)
|
||||
{
|
||||
JArray unit = (JArray)JsonConvert.DeserializeObject(edgeList[i]);
|
||||
ja.Add(unit);
|
||||
}
|
||||
edgeDict[curIndex] = ja;
|
||||
}
|
||||
GUILayout.EndVertical();
|
||||
GUILayout.EndArea();
|
||||
if(GUI.Button(new Rect(1050, 10, 100, 30), "导出到Excel"))
|
||||
{
|
||||
if (CheckBoardChanged(curIndex))
|
||||
{
|
||||
switch (EditorUtility.DisplayDialogComplex("提示", "当前棋盘已经改变,是否保存", "确定", "放弃", "再次确认"))
|
||||
{
|
||||
case 0:
|
||||
SaveBoard(curIndex);
|
||||
SaveBoardExcel();
|
||||
break;
|
||||
case 1:
|
||||
AbortBoard(curIndex);
|
||||
SaveBoardExcel();
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SaveBoardExcel();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LoadBoardExcel()
|
||||
{
|
||||
var desktopDir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory);
|
||||
var tempPath = System.IO.Path.Combine(desktopDir, "BoardEditorTemp.txt");
|
||||
|
||||
string relitivePath = Application.dataPath;
|
||||
relitivePath = relitivePath.Remove(relitivePath.Length - 6, 6);
|
||||
string pythonToolPath = relitivePath + "Tools/tranexcel_new";
|
||||
|
||||
// 读取grid_type配置表
|
||||
BFEditorUtils.RunCommond("python", "load_board.py " + tempPath + " " + boardGridTypePath, pythonToolPath);
|
||||
string boardGridTypeJson = File.ReadAllText(tempPath);
|
||||
JObject jsonObj = (JObject)JsonConvert.DeserializeObject(boardGridTypeJson);
|
||||
foreach (var item in jsonObj)
|
||||
{
|
||||
int key = int.Parse(item.Key);
|
||||
Dictionary<string, string> dict = new Dictionary<string, string>();
|
||||
foreach (var item2 in (JObject)item.Value)
|
||||
{
|
||||
dict[item2.Key] = item2.Value.ToString();
|
||||
}
|
||||
boardGridTypeDict[key] = dict;
|
||||
}
|
||||
|
||||
// 读取grid_edge_type配置表
|
||||
BFEditorUtils.RunCommond("python", "load_board.py " + tempPath + " " + boardGridEdgePath, pythonToolPath);
|
||||
string boardGridEdgeJson = File.ReadAllText(tempPath);
|
||||
jsonObj = (JObject)JsonConvert.DeserializeObject(boardGridEdgeJson);
|
||||
foreach (var item in jsonObj)
|
||||
{
|
||||
int key = int.Parse(item.Key);
|
||||
Dictionary<string, string> dict = new Dictionary<string, string>();
|
||||
foreach (var item2 in (JObject)item.Value)
|
||||
{
|
||||
dict[item2.Key] = item2.Value.ToString();
|
||||
}
|
||||
boardGridEdgeDict[key] = dict;
|
||||
}
|
||||
|
||||
// 读取boardFile配置表
|
||||
BFEditorUtils.RunCommond("python", "load_board.py " + tempPath + " " + boardFilepath, pythonToolPath);
|
||||
string boardFileJson = File.ReadAllText(tempPath);
|
||||
|
||||
jsonObj = (JObject)JsonConvert.DeserializeObject(boardFileJson);
|
||||
foreach (var item in jsonObj){
|
||||
if (item.Value[boardFiledName] != null)
|
||||
{
|
||||
int key = int.Parse(item.Key);
|
||||
boardDict[key] = copyBoard((JArray)item.Value[boardFiledName]);
|
||||
outPutBoardDict[key] = copyBoard((JArray)item.Value[boardFiledName]);
|
||||
}
|
||||
if (item.Value[boardEdgeFiledName] != null)
|
||||
{
|
||||
int key = int.Parse(item.Key);
|
||||
edgeDict[key] = copyBoard((JArray)item.Value[boardEdgeFiledName]);
|
||||
outPutBoardEdgeDict[key] = copyBoard((JArray)item.Value[boardEdgeFiledName]);
|
||||
}
|
||||
}
|
||||
|
||||
loadExcelOver = true;
|
||||
}
|
||||
|
||||
void SaveBoardExcel()
|
||||
{
|
||||
var desktopDir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory);
|
||||
var tempPath = System.IO.Path.Combine(desktopDir, "BoardEditorTemp.txt");
|
||||
Dictionary<int, Dictionary<string, JArray>> output = new Dictionary<int, Dictionary<string, JArray>>();
|
||||
foreach(int key in outPutBoardDict.Keys)
|
||||
{
|
||||
output[key] = new Dictionary<string, JArray>();
|
||||
output[key][boardFiledName] = copyBoard(outPutBoardDict[key]);
|
||||
}
|
||||
string relitivePath = Application.dataPath;
|
||||
relitivePath = relitivePath.Remove(relitivePath.Length - 6, 6);
|
||||
string pythonToolPath = relitivePath + "Tools/tranexcel_new";
|
||||
File.WriteAllText(tempPath, JsonConvert.SerializeObject(output));
|
||||
BFEditorUtils.RunCommond("python", "save_board.py " + tempPath + " " + boardFilepath, pythonToolPath);
|
||||
}
|
||||
|
||||
void DragBoard()
|
||||
{
|
||||
Texture img;
|
||||
GUI.DrawTexture(new Rect(0, 200, 702, 702), boardImg);
|
||||
if(!loadExcelOver)
|
||||
{
|
||||
return;
|
||||
}
|
||||
int startOffset = 22 * 7 / maxRow;
|
||||
int textureWidth = 94 * 7 / maxRow;
|
||||
if (!boardDict.ContainsKey(curIndex))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
GUILayout.BeginArea(new Rect(0, 200, 702, 702));
|
||||
GUILayout.BeginVertical();
|
||||
JArray jo = boardDict[curIndex];
|
||||
int posIndex = 0;
|
||||
for (int row = 1; row <= maxRow; row++) {
|
||||
GUILayout.BeginHorizontal();
|
||||
for (int col = 1; col <= 7; col++) {
|
||||
if (jo.Count == posIndex)
|
||||
{
|
||||
jo.Add(getNewGridUnitInfo());
|
||||
}
|
||||
JArray gridInfo = (JArray)jo[posIndex];
|
||||
if(gridInfo.Count < 2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
int gridType = (int)gridInfo[0];
|
||||
int gridElementType = (int)gridInfo[1];
|
||||
if(!boardGridTypeDict.ContainsKey(gridType))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// 绘制元素
|
||||
if (elementTypeImgDict.ContainsKey(gridElementType))
|
||||
{
|
||||
img = imgDict[elementTypeImgDict[gridElementType]];
|
||||
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth, startOffset + (row - 1) * textureWidth, textureWidth, textureWidth), img);
|
||||
}
|
||||
|
||||
// 绘制类型
|
||||
if(boardGridTypeDict[gridType].ContainsKey("icon"))
|
||||
{
|
||||
string icon = boardGridTypeDict[gridType]["icon"];
|
||||
if (imgDict.ContainsKey(icon))
|
||||
{
|
||||
img = imgDict[icon];
|
||||
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth, startOffset + (row - 1) * textureWidth, textureWidth, textureWidth), img);
|
||||
}
|
||||
}
|
||||
|
||||
posIndex++;
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
}
|
||||
GUILayout.EndVertical();
|
||||
if (edgeDict.ContainsKey(curIndex))
|
||||
{
|
||||
JArray edgeJo = edgeDict[curIndex];
|
||||
for (int i = 0; i < edgeJo.Count; i++)
|
||||
{
|
||||
JArray gridInfo = (JArray)edgeJo[i];
|
||||
if(gridInfo.Count < 3)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
int posId = (int)gridInfo[0];
|
||||
int edgeType = (int)gridInfo[1];
|
||||
int dir = (int)gridInfo[2];
|
||||
// 绘制类型
|
||||
if(boardGridEdgeDict[edgeType].ContainsKey("icon"))
|
||||
{
|
||||
string icon = boardGridEdgeDict[edgeType]["icon"];
|
||||
if (imgDict.ContainsKey(icon))
|
||||
{
|
||||
int row = posId / 10;
|
||||
int col = posId % 10;
|
||||
img = imgDict[icon];
|
||||
if (dir == 1)
|
||||
{
|
||||
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth, startOffset + (row - 1) * textureWidth - 16, 92, 32), img);
|
||||
}
|
||||
else if (dir == 2)
|
||||
{
|
||||
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth, startOffset + (row - 1) * textureWidth - 16 + textureWidth, 92, 32), img);
|
||||
}
|
||||
else if (dir == 3)
|
||||
{
|
||||
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth - 16, startOffset + (row - 1) * textureWidth - 16, 32, 92), img);
|
||||
}
|
||||
else if (dir == 4)
|
||||
{
|
||||
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth - 16 + textureWidth, startOffset + (row - 1) * textureWidth - 16, 32, 92), img);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GUILayout.EndArea();
|
||||
|
||||
GUILayout.BeginArea(new Rect(730, 200, 510 * 7, 550 / 7 * maxRow));
|
||||
GUILayout.BeginVertical();
|
||||
GUILayout.BeginHorizontal();
|
||||
GUILayout.Label("棋盘配置信息", GUILayout.Width(100), GUILayout.Height(30));
|
||||
GUILayout.EndHorizontal();
|
||||
|
||||
posIndex = 0;
|
||||
for (int row = 1; row <= maxRow; row++) {
|
||||
GUILayout.BeginHorizontal();
|
||||
for (int col = 1; col <= 7; col++) {
|
||||
JArray gridInfo = (JArray)jo[posIndex];
|
||||
if(gridInfo.Count < 2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
gridInfo[0] = int.Parse(GUILayout.TextField(gridInfo[0].ToString(), GUILayout.Width(25)));
|
||||
gridInfo[1] = int.Parse(GUILayout.TextField(gridInfo[1].ToString(), GUILayout.Width(25)));
|
||||
GUILayout.Space(10);
|
||||
posIndex++;
|
||||
}
|
||||
GUILayout.EndHorizontal();
|
||||
GUILayout.Space(10);
|
||||
}
|
||||
GUILayout.EndVertical();
|
||||
GUILayout.EndArea();
|
||||
}
|
||||
|
||||
bool CheckBoardChanged(int index)
|
||||
{
|
||||
if(boardDict.ContainsKey(index) && outPutBoardDict.ContainsKey(index))
|
||||
{
|
||||
if(outPutBoardDict[index].Count != boardDict[index].Count)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
for (int i = 0; i < boardDict[index].Count; i++)
|
||||
{
|
||||
JArray tArray = (JArray)boardDict[index][i];
|
||||
JArray tArray2 = (JArray)outPutBoardDict[index][i];
|
||||
if (tArray.Count != tArray2.Count)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
for (int j = 0; j < tArray.Count; j++)
|
||||
{
|
||||
if (tArray[j].ToString() != tArray2[j].ToString())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void SaveBoard(int index)
|
||||
{
|
||||
if(!boardDict.ContainsKey(index))
|
||||
{
|
||||
return;
|
||||
}
|
||||
outPutBoardDict[index] = copyBoard(boardDict[index]);
|
||||
}
|
||||
|
||||
void AbortBoard(int index)
|
||||
{
|
||||
if(!outPutBoardDict.ContainsKey(index))
|
||||
{
|
||||
boardDict.Remove(index);
|
||||
return;
|
||||
}
|
||||
boardDict[index] = copyBoard(outPutBoardDict[index]);
|
||||
}
|
||||
|
||||
void showSwitchBoardSaveDialog(int targetIndex)
|
||||
{
|
||||
if (IsInNewBoard())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (targetIndex == curIndex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (CheckBoardChanged(curIndex))
|
||||
{
|
||||
switch (EditorUtility.DisplayDialogComplex("提示", "当前棋盘已经改变,是否保存", "确定", "放弃", "再次确认"))
|
||||
{
|
||||
case 0:
|
||||
SaveBoard(curIndex);
|
||||
curIndex = targetIndex;
|
||||
break;
|
||||
case 1:
|
||||
AbortBoard(curIndex);
|
||||
curIndex = targetIndex;
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
curIndex = targetIndex;
|
||||
}
|
||||
}
|
||||
|
||||
JArray copyBoard(JArray targetArray)
|
||||
{
|
||||
JArray resultArray = new JArray();
|
||||
for (int i = 0; i < targetArray.Count; i++)
|
||||
{
|
||||
JArray unit = new JArray();
|
||||
resultArray.Add(unit);
|
||||
JArray temp = (JArray)targetArray[i];
|
||||
for (int j = 0; j < temp.Count; j++)
|
||||
{
|
||||
unit.Add(int.Parse(temp[j].ToString()));
|
||||
}
|
||||
}
|
||||
return resultArray;
|
||||
}
|
||||
|
||||
bool IsInNewBoard()
|
||||
{
|
||||
if(!boardDict.ContainsKey(curIndex) && !outPutBoardDict.ContainsKey(curIndex))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return !outPutBoardDict.ContainsKey(curIndex);
|
||||
}
|
||||
|
||||
JArray getNewGridUnitInfo()
|
||||
{
|
||||
return (JArray)JsonConvert.DeserializeObject("[0, 0]");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 339fc40f64b402d4bb60e77d94902487
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -123,7 +123,6 @@ namespace BFEditor
|
||||
}
|
||||
}
|
||||
|
||||
// 检查monster
|
||||
String luaConfigPath = null;
|
||||
if(isDeveloper)
|
||||
{
|
||||
@ -135,6 +134,21 @@ namespace BFEditor
|
||||
}
|
||||
var configDirInfo = new DirectoryInfo(luaConfigPath);
|
||||
var configFileInfos = configDirInfo.GetFiles(suffix, SearchOption.TopDirectoryOnly);
|
||||
|
||||
// 检查棋盘文件格式
|
||||
checkBoard("chapter_board", env, sb);
|
||||
checkBoard("chapter_board_bossrush", env, sb);
|
||||
checkBoard("chapter_board_daily_challenge", env, sb);
|
||||
checkBoard("chapter_board_dungeon_armor", env, sb);
|
||||
checkBoard("chapter_board_dungeon_equip", env, sb);
|
||||
checkBoard("chapter_board_dungeon_gold", env, sb);
|
||||
checkBoard("chapter_board_dungeon_shards", env, sb);
|
||||
checkBoard("chapter_board_rune", env, sb);
|
||||
checkBoard("activity_pvp_board", env, sb);
|
||||
checkBoard("arena_board", env, sb);
|
||||
|
||||
|
||||
// 检查monster
|
||||
string monsterConfigListLua = "{";
|
||||
foreach (var file in configFileInfos)
|
||||
{
|
||||
@ -175,50 +189,122 @@ namespace BFEditor
|
||||
}
|
||||
}
|
||||
// 检查怪物的坐标信息
|
||||
var luaScriptString2 = @"local MONSTER_POSITION_KEY = { 'monster_1','monster_2','monster_3','monster_4','monster_5','monster_6','monster_7','monster_8','monster_9','monster_10','monster_11','monster_12'}
|
||||
local list = {'enemy_id_1', 'enemy_id_2', 'enemy_id_3'}
|
||||
local list2 = {'enemy_position_1', 'enemy_position_2', 'enemy_position_3'}
|
||||
local positionConf = require('app/config/monster_position_base').data
|
||||
local monsterPositionConf = require('app/config/monster_position').data
|
||||
local stage = require('app/config/story_stage').data
|
||||
local str = {}
|
||||
for k, v in pairs(stage) do
|
||||
for k2, v2 in ipairs(list) do
|
||||
if v[v2] then
|
||||
local monsterPosition = v[list2[k2]]
|
||||
for i, monsterId in ipairs(v[v2]) do
|
||||
local monsterPositionInfo = monsterPositionConf[monsterPosition]
|
||||
local positionInfo = positionConf[monsterPositionInfo[MONSTER_POSITION_KEY[i]]]
|
||||
if positionInfo == nil then
|
||||
table.insert(str, 'stage表的id为' .. k .. '的第' .. k2 .. '波怪的坐标有问题')
|
||||
// var luaScriptString2 = @"local MONSTER_POSITION_KEY = { 'monster_1','monster_2','monster_3','monster_4','monster_5','monster_6','monster_7','monster_8','monster_9','monster_10','monster_11','monster_12'}
|
||||
// local list = {'enemy_id_1', 'enemy_id_2', 'enemy_id_3'}
|
||||
// local list2 = {'enemy_position_1', 'enemy_position_2', 'enemy_position_3'}
|
||||
// local positionConf = require('app/config/monster_position_base').data
|
||||
// local monsterPositionConf = require('app/config/monster_position').data
|
||||
// local stage = require('app/config/story_stage').data
|
||||
// local str = {}
|
||||
// for k, v in pairs(stage) do
|
||||
// for k2, v2 in ipairs(list) do
|
||||
// if v[v2] then
|
||||
// local monsterPosition = v[list2[k2]]
|
||||
// for i, monsterId in ipairs(v[v2]) do
|
||||
// local monsterPositionInfo = monsterPositionConf[monsterPosition]
|
||||
// local positionInfo = positionConf[monsterPositionInfo[MONSTER_POSITION_KEY[i]]]
|
||||
// if positionInfo == nil then
|
||||
// table.insert(str, 'stage表的id为' .. k .. '的第' .. k2 .. '波怪的坐标有问题')
|
||||
// end
|
||||
// end
|
||||
// end
|
||||
// end
|
||||
// end
|
||||
// local stage2 = require('app/config/adventure_stage').data
|
||||
// for k, v in pairs(stage2) do
|
||||
// for k2, v2 in ipairs(list) do
|
||||
// if v[v2] then
|
||||
// local monsterPosition = v[list2[k2]]
|
||||
// for i, monsterId in ipairs(v[v2]) do
|
||||
// local monsterPositionInfo = monsterPositionConf[monsterPosition]
|
||||
// local positionInfo = positionConf[monsterPositionInfo[MONSTER_POSITION_KEY[i]]]
|
||||
// if positionInfo == nil then
|
||||
// table.insert(str, 'adventure_stage表的id为' .. k .. '的第' .. k2 .. '波怪的坐标有问题')
|
||||
// end
|
||||
// end
|
||||
// end
|
||||
// end
|
||||
// end
|
||||
// if #str > 0 then
|
||||
// return table.concat(str, '\n');
|
||||
// end
|
||||
// return ''";
|
||||
// var resultStr2 = env.DoString(luaScriptString2);
|
||||
// if (resultStr2.Length > 0)
|
||||
// {
|
||||
// foreach(var strObj in resultStr2)
|
||||
// {
|
||||
// var str = Convert.ToString(strObj);
|
||||
// if(!String.IsNullOrEmpty(str))
|
||||
// {
|
||||
// sb.Append(str + "\n");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
env.Dispose();
|
||||
return sb;
|
||||
}
|
||||
|
||||
public static void checkBoard(string configName, LuaEnv env, in StringBuilder sb)
|
||||
{
|
||||
var luaScriptString = @"
|
||||
if not cfg or not cfg.data then
|
||||
return ''
|
||||
end
|
||||
cfg = cfg.data
|
||||
local tempMap = {}
|
||||
local addErrorInfo = function(errorInfo, cfgId, errorStr)
|
||||
if not tempMap[cfgId] then
|
||||
tempMap[cfgId] = true
|
||||
table.insert(errorInfo, 'cfgId = ' .. cfgId)
|
||||
end
|
||||
|
||||
table.insert(errorInfo, ' ' .. errorStr)
|
||||
end
|
||||
|
||||
local errorInfo = {}
|
||||
for k, info in pairs(cfg) do
|
||||
local board = info.board or info.board_daily_challenge
|
||||
if not board then
|
||||
addErrorInfo(errorInfo, k, configName .. ' 没有board字段,请检查')
|
||||
else
|
||||
if #board < 49 then
|
||||
addErrorInfo(errorInfo, k, configName .. ' 没有board长度不足,请检查,当前长度为' .. #board)
|
||||
end
|
||||
|
||||
for index, v in ipairs(board) do
|
||||
if not v[1] then
|
||||
addErrorInfo(errorInfo, k, configName .. ' board字段中' .. index .. '索引没有格子类型')
|
||||
end
|
||||
if not v[2] then
|
||||
addErrorInfo(errorInfo, k, configName .. ' board字段中' .. index .. '索引没有元素类型')
|
||||
elseif v[2] > 5 or v[2] < 0 then
|
||||
addErrorInfo(errorInfo, k, configName .. ' board字段中' .. index .. '元素类型不合法,当前为' .. v[2])
|
||||
end
|
||||
end
|
||||
|
||||
local mystery_box_board = info.mystery_box_board
|
||||
if mystery_box_board then
|
||||
for index, v in ipairs(mystery_box_board) do
|
||||
if not v[1] then
|
||||
addErrorInfo(errorInfo, k, configName .. ' mystery_box_board字段中' .. index .. '索引没有格子类型')
|
||||
end
|
||||
if not v[2] then
|
||||
addErrorInfo(errorInfo, k, configName .. ' mystery_box_board字段中' .. index .. '索引没有元素类型')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
local stage2 = require('app/config/adventure_stage').data
|
||||
for k, v in pairs(stage2) do
|
||||
for k2, v2 in ipairs(list) do
|
||||
if v[v2] then
|
||||
local monsterPosition = v[list2[k2]]
|
||||
for i, monsterId in ipairs(v[v2]) do
|
||||
local monsterPositionInfo = monsterPositionConf[monsterPosition]
|
||||
local positionInfo = positionConf[monsterPositionInfo[MONSTER_POSITION_KEY[i]]]
|
||||
if positionInfo == nil then
|
||||
table.insert(str, 'adventure_stage表的id为' .. k .. '的第' .. k2 .. '波怪的坐标有问题')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if #str > 0 then
|
||||
return table.concat(str, '\n');
|
||||
if #errorInfo > 0 then
|
||||
return table.concat(errorInfo, '\n');
|
||||
end
|
||||
|
||||
return ''";
|
||||
var resultStr2 = env.DoString(luaScriptString2);
|
||||
if (resultStr2.Length > 0)
|
||||
var resultStr = env.DoString(" local cfg = require('app/config/" + configName + "')\n" + "local configName = '" + configName + "'\n" + luaScriptString);
|
||||
if (resultStr.Length > 0)
|
||||
{
|
||||
foreach(var strObj in resultStr2)
|
||||
foreach(var strObj in resultStr)
|
||||
{
|
||||
var str = Convert.ToString(strObj);
|
||||
if(!String.IsNullOrEmpty(str))
|
||||
@ -227,8 +313,6 @@ namespace BFEditor
|
||||
}
|
||||
}
|
||||
}
|
||||
env.Dispose();
|
||||
return sb;
|
||||
}
|
||||
|
||||
public static bool FastExportExcelToLua(bool isDeveloper, string designExcelPath)
|
||||
@ -274,19 +358,19 @@ namespace BFEditor
|
||||
|
||||
// ExportExcelTools.SpecialProcessSkill(isDeveloper, SkillSpecialOnOutput);
|
||||
// ExportExcelTools.dealMonsterConfig(isDeveloper);
|
||||
// var sb = ExportExcelTools.CheckLuaConfig(isDeveloper);
|
||||
// if (sb.ToString().Length > 0)
|
||||
// {
|
||||
// failFlag = true;
|
||||
// designSuccFlag = false;
|
||||
// Debug.Log("导表规范检查异常!!!");
|
||||
// Debug.Log(sb.ToString());
|
||||
// EditorUtility.DisplayDialog("导入失败配置", sb.ToString(), "ok");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Debug.Log("配置规范检查通过.");
|
||||
// }
|
||||
var sb = ExportExcelTools.CheckLuaConfig(isDeveloper);
|
||||
if (sb.ToString().Length > 0)
|
||||
{
|
||||
failFlag = true;
|
||||
designSuccFlag = false;
|
||||
Debug.Log("导表规范检查异常!!!");
|
||||
Debug.Log(sb.ToString());
|
||||
EditorUtility.DisplayDialog("导入失败配置", sb.ToString(), "ok");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Log("配置规范检查通过.");
|
||||
}
|
||||
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
|
||||
@ -100,5 +100,12 @@ namespace BFEditor
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
[MenuItem("其他工具/棋盘编辑器", false, 9)]
|
||||
public static void CreateBoardEditorWindow()
|
||||
{
|
||||
var window = (BoardEditorWindow)EditorWindow.GetWindowWithRect(typeof(BoardEditorWindow), new Rect(Screen.width / 2, Screen.height / 2, 1200, 1000), true);
|
||||
window.Show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ using System;
|
||||
using UnityEngine.TextCore.LowLevel;
|
||||
using TMPro.EditorUtilities;
|
||||
using Object = UnityEngine.Object;
|
||||
using System.Reflection;
|
||||
|
||||
namespace BFEditor.Resource
|
||||
{
|
||||
@ -27,6 +28,8 @@ namespace BFEditor.Resource
|
||||
private const string AssetDefaultName = "font_sdf.asset";
|
||||
private const string AssetNumberName = "font_number_sdf.asset";
|
||||
private const string AssetBattleName = "font_battle_sdf.asset";
|
||||
private const string AssetThaiName = "font_thai_sdf.asset";
|
||||
private const string AssetJaName = "font_ja_sdf.asset";
|
||||
|
||||
private const string DevStrPath = "Assets/Editor/BFResourceTools/FontTools/cn_3900.txt";
|
||||
private const string CommonCNWordsPath = "Assets/Editor/BFResourceTools/FontTools/cn_1200.txt";
|
||||
@ -153,6 +156,14 @@ namespace BFEditor.Resource
|
||||
var defaultNumberFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/default/tmpfont/font_number.TTF");
|
||||
GenTMPFontAsset(defaultNumberFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/default/tmpfont", "Assets/arts/fonts/tmpfonts/default/tmpfont", 256, new List<string>()), AssetNumberName, isdevelop);
|
||||
|
||||
// 泰语
|
||||
var thaiFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/default/tmpfont/font_thai.ttf");
|
||||
GenTMPFontAsset(thaiFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/default/tmpfont", "Assets/arts/fonts/tmpfonts/default/tmpfont", 512, new List<string>()), AssetThaiName, isdevelop);
|
||||
|
||||
// 日语
|
||||
// var jaFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/default/tmpfont/font_ja.ttf");
|
||||
// GenTMPFontAsset(jaFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/default/tmpfont", "Assets/arts/fonts/tmpfonts/default/tmpfont", 512, new List<string>()), AssetJaName, isdevelop);
|
||||
|
||||
// 战斗用
|
||||
// var battleFont = AssetDatabase.LoadAssetAtPath<Font>("Assets/arts/fonts/tmpfonts/battle/font_battle.ttf");
|
||||
// GenTMPFontAsset(battleFont, new TTFInfo("cn", "Assets/arts/fonts/tmpfonts/battle", "Assets/arts/fonts/tmpfonts/battle", 1024, new List<string>()), AssetBattleName, isdevelop);
|
||||
@ -232,6 +243,16 @@ namespace BFEditor.Resource
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static private void GetThaiWords(List<string> luaFolderPaths, out uint[] words)
|
||||
{
|
||||
words = new uint[128];
|
||||
uint begin = 3584; //0E00-0E7F
|
||||
for (uint i = 0; i < 128; i++)
|
||||
{
|
||||
words[i] = begin + i;
|
||||
}
|
||||
}
|
||||
|
||||
static private void GenTMPFontAsset(Font font, TTFInfo ttfInfo, string assetName, bool isdevelop)
|
||||
{
|
||||
@ -285,6 +306,20 @@ namespace BFEditor.Resource
|
||||
EditorUtility.SetDirty(fontAsset);
|
||||
}
|
||||
|
||||
// 泰语使用静态并特殊处理
|
||||
if (assetName == AssetThaiName)
|
||||
{
|
||||
var luaFolderPaths = new List<string>();
|
||||
luaFolderPaths.Add(Application.dataPath + "/Developer/lua/app/config/strings/th");
|
||||
var words = new uint[128];//泰语
|
||||
GetThaiWords(luaFolderPaths, out words);
|
||||
Debug.Log("泰语字符集:" + words);
|
||||
fontAsset.TryAddCharacters(words);
|
||||
fontAsset.atlasPopulationMode = AtlasPopulationMode.Static;
|
||||
// 修订部分重音位置
|
||||
_Adjust(fontAsset);
|
||||
}
|
||||
|
||||
if (null != fontAsset)
|
||||
{
|
||||
// DealWithMetric(fontAsset);
|
||||
@ -294,14 +329,19 @@ namespace BFEditor.Resource
|
||||
|
||||
// DeleteSourceFontRef(fontssetPath);
|
||||
fontAsset.fallbackFontAssetTable.Clear();
|
||||
// if(assetName == AssetDefaultName)
|
||||
// {
|
||||
// var fallbackAsset = AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(Path.Combine(assetDirPath, AssetCNName));
|
||||
// if (fallbackAsset != null)
|
||||
// {
|
||||
// fontAsset.fallbackFontAssetTable.Add(fallbackAsset);
|
||||
// }
|
||||
// }
|
||||
if(assetName == AssetDefaultName)
|
||||
{
|
||||
var fallbackAsset = AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(Path.Combine(assetDirPath, AssetThaiName));
|
||||
if (fallbackAsset != null)
|
||||
{
|
||||
fontAsset.fallbackFontAssetTable.Add(fallbackAsset);
|
||||
}
|
||||
// fallbackAsset = AssetDatabase.LoadAssetAtPath<TMP_FontAsset>(Path.Combine(assetDirPath, AssetJaName));
|
||||
// if (fallbackAsset != null)
|
||||
// {
|
||||
// fontAsset.fallbackFontAssetTable.Add(fallbackAsset);
|
||||
// }
|
||||
}
|
||||
}
|
||||
EditorUtility.ClearProgressBar();
|
||||
}
|
||||
@ -557,6 +597,147 @@ namespace BFEditor.Resource
|
||||
|
||||
#endregion
|
||||
|
||||
// 针对泰语处理
|
||||
static bool overrideAll = true;
|
||||
static float wannayukHeight = 10f;
|
||||
static float aumXPlacementAfter = -35f;
|
||||
static float aumXPlacementBefore = 10f;
|
||||
static void _Adjust(TMP_FontAsset fontAsset)
|
||||
{
|
||||
if (fontAsset == null)
|
||||
{
|
||||
Debug.Log("No FontAsset selected");
|
||||
return;
|
||||
}
|
||||
|
||||
var glyphPairAdjustmentRecords = new List<TMP_GlyphPairAdjustmentRecord>(fontAsset.fontFeatureTable.glyphPairAdjustmentRecords);
|
||||
var lookupTable = fontAsset.characterLookupTable;
|
||||
|
||||
var glyphPairAdjustmentRecordLookupDictionary =
|
||||
(Dictionary<uint, TMP_GlyphPairAdjustmentRecord>) fontAsset.fontFeatureTable
|
||||
.GetType()
|
||||
.GetField("m_GlyphPairAdjustmentRecordLookupDictionary", BindingFlags.NonPublic | BindingFlags.Instance)?
|
||||
.GetValue(fontAsset.fontFeatureTable);
|
||||
|
||||
int[] saras = new int[7];
|
||||
int[] wannayuks = new int[4];
|
||||
|
||||
//get sara
|
||||
saras[0] = (int) lookupTable[GetUnicodeCharacter("ิ")].glyphIndex; // อิ
|
||||
saras[1] = (int) lookupTable[GetUnicodeCharacter("ี")].glyphIndex; // อี
|
||||
saras[2] = (int) lookupTable[GetUnicodeCharacter("ึ")].glyphIndex; // อึ
|
||||
saras[3] = (int) lookupTable[GetUnicodeCharacter("ื")].glyphIndex; // อื
|
||||
saras[4] = (int) lookupTable[GetUnicodeCharacter("ำ")].glyphIndex; // ำ
|
||||
saras[5] = (int) lookupTable[GetUnicodeCharacter("ั")].glyphIndex; // ั
|
||||
saras[6] = (int) lookupTable[GetUnicodeCharacter("ํ")].glyphIndex; // ํ
|
||||
//get wanna yuk
|
||||
wannayuks[0] = (int) lookupTable[GetUnicodeCharacter("่")].glyphIndex; //เอก
|
||||
wannayuks[1] = (int) lookupTable[GetUnicodeCharacter("้")].glyphIndex; //โท
|
||||
wannayuks[2] = (int) lookupTable[GetUnicodeCharacter("๊")].glyphIndex; //ตรี
|
||||
wannayuks[3] = (int) lookupTable[GetUnicodeCharacter("๋")].glyphIndex; //จัตวา
|
||||
int recordAdd = 0;
|
||||
foreach (var sara in saras)
|
||||
{
|
||||
foreach (var wannayuk in wannayuks)
|
||||
{
|
||||
float xPlacement = sara == saras[4] || sara == saras[6] ? aumXPlacementAfter : 0;
|
||||
|
||||
TMP_GlyphValueRecord saraPosition = new TMP_GlyphValueRecord(0, 0, 0, 0);
|
||||
TMP_GlyphAdjustmentRecord saraGlyph = new TMP_GlyphAdjustmentRecord((uint) sara, saraPosition);
|
||||
|
||||
TMP_GlyphValueRecord wannayukPosition = new TMP_GlyphValueRecord(xPlacement, wannayukHeight, 0, 0);
|
||||
TMP_GlyphAdjustmentRecord wannayukGlyph = new TMP_GlyphAdjustmentRecord((uint) wannayuk, wannayukPosition);
|
||||
|
||||
var saraThenWannayukGlyphPair = new TMP_GlyphPairAdjustmentRecord(saraGlyph, wannayukGlyph);
|
||||
|
||||
if (sara == saras[4] || sara == saras[6])
|
||||
{
|
||||
xPlacement = aumXPlacementBefore;
|
||||
wannayukPosition = new TMP_GlyphValueRecord(xPlacement, wannayukHeight, 0, 0);
|
||||
wannayukGlyph = new TMP_GlyphAdjustmentRecord((uint) wannayuk, wannayukPosition);
|
||||
}
|
||||
|
||||
var wannayukThenSaraGlyphPair = new TMP_GlyphPairAdjustmentRecord(wannayukGlyph, saraGlyph);
|
||||
|
||||
uint firstPairKey = saraThenWannayukGlyphPair.firstAdjustmentRecord.glyphIndex << 16 | saraThenWannayukGlyphPair.secondAdjustmentRecord.glyphIndex;
|
||||
uint secondPairKey = wannayukThenSaraGlyphPair.firstAdjustmentRecord.glyphIndex << 16 | wannayukThenSaraGlyphPair.secondAdjustmentRecord.glyphIndex;
|
||||
|
||||
if (overrideAll)
|
||||
{
|
||||
glyphPairAdjustmentRecords.RemoveAll(record => IsGlyphPairEqual(record, saraThenWannayukGlyphPair) ||
|
||||
IsGlyphPairEqual(record, wannayukThenSaraGlyphPair));
|
||||
|
||||
glyphPairAdjustmentRecords.Add(saraThenWannayukGlyphPair);
|
||||
glyphPairAdjustmentRecords.Add(wannayukThenSaraGlyphPair);
|
||||
|
||||
if (glyphPairAdjustmentRecordLookupDictionary != null && !glyphPairAdjustmentRecordLookupDictionary.ContainsKey(firstPairKey))
|
||||
{
|
||||
glyphPairAdjustmentRecordLookupDictionary.Add(firstPairKey, saraThenWannayukGlyphPair);
|
||||
}
|
||||
|
||||
recordAdd += 2;
|
||||
}
|
||||
else if (glyphPairAdjustmentRecordLookupDictionary != null)
|
||||
{
|
||||
if (!glyphPairAdjustmentRecordLookupDictionary.ContainsKey(firstPairKey))
|
||||
{
|
||||
glyphPairAdjustmentRecords.Add(saraThenWannayukGlyphPair);
|
||||
recordAdd++;
|
||||
}
|
||||
|
||||
if (!glyphPairAdjustmentRecordLookupDictionary.ContainsKey(secondPairKey))
|
||||
{
|
||||
glyphPairAdjustmentRecords.Add(wannayukThenSaraGlyphPair);
|
||||
recordAdd++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (recordAdd > 0)
|
||||
{
|
||||
fontAsset.fontFeatureTable.glyphPairAdjustmentRecords = glyphPairAdjustmentRecords;
|
||||
fontAsset.fontFeatureTable.SortGlyphPairAdjustmentRecords();
|
||||
EditorUtility.SetDirty(fontAsset);
|
||||
AssetDatabase.SaveAssets();
|
||||
Canvas.ForceUpdateCanvases();
|
||||
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
|
||||
}
|
||||
|
||||
Debug.Log("Adjust font : <color=#2bcaff>" + fontAsset.name + "</color>" +
|
||||
" Height offset : <color=#d8ff2b>" + wannayukHeight + "</color>" +
|
||||
" Number of adjustment add : <color=#5dfa41>" + recordAdd + "</color>");
|
||||
}
|
||||
|
||||
static void _Clear(TMP_FontAsset fontAsset)
|
||||
{
|
||||
fontAsset.fontFeatureTable.glyphPairAdjustmentRecords = new List<TMP_GlyphPairAdjustmentRecord>();
|
||||
EditorUtility.SetDirty(fontAsset);
|
||||
AssetDatabase.SaveAssets();
|
||||
Canvas.ForceUpdateCanvases();
|
||||
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
|
||||
}
|
||||
|
||||
static uint GetUnicodeCharacter (string source)
|
||||
{
|
||||
uint unicode;
|
||||
|
||||
if (source.Length == 1)
|
||||
unicode = source[0];
|
||||
else if (source.Length == 6)
|
||||
unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\u", ""));
|
||||
else
|
||||
unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\U", ""));
|
||||
|
||||
return unicode;
|
||||
}
|
||||
|
||||
static bool IsGlyphPairEqual(TMP_GlyphPairAdjustmentRecord a, TMP_GlyphPairAdjustmentRecord b)
|
||||
{
|
||||
return a.firstAdjustmentRecord.glyphIndex == b.firstAdjustmentRecord.glyphIndex &&
|
||||
a.secondAdjustmentRecord.glyphIndex == b.secondAdjustmentRecord.glyphIndex;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -14,18 +14,19 @@ namespace BFEditor.Resource
|
||||
public string path;
|
||||
public string line;
|
||||
}
|
||||
|
||||
|
||||
public static class LuaCheckController
|
||||
{
|
||||
private static string luaDir = Application.dataPath + "/Developer/lua";
|
||||
private static string excludeDir = Application.dataPath + "/Developer/lua/app/config";
|
||||
private const char DOUBLE_QUOTES = '"';
|
||||
private const char SINGLE_QUOTE = '\'';
|
||||
|
||||
public static List<LuaCheckResult> ResultList = new List<LuaCheckResult>();
|
||||
// private static Regex reg = new Regex(@".*[\u4e00-\u9fa5]+"); // 汉字
|
||||
private static Regex reg = new Regex(@".*[\u0391-\uffe5]+"); //双字节字符(汉字+符号)
|
||||
|
||||
private static HashSet<string> ExcludeFileName = new HashSet<string> {
|
||||
"first_text.lua", "gm_const.lua", "dev_tool_list_ui.lua", "gm_tool_ui.lua"
|
||||
};
|
||||
public static void CheckAll(Action<bool> checkOverAction)
|
||||
{
|
||||
Clear();
|
||||
@ -39,7 +40,11 @@ namespace BFEditor.Resource
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (fileInfo.DirectoryName.Contains(excludeDir))
|
||||
if (fileInfo.DirectoryName.Replace("\\", "/").Contains(excludeDir))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (ExcludeFileName.Contains(fileInfo.Name))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -75,11 +80,15 @@ namespace BFEditor.Resource
|
||||
}
|
||||
if (match != Match.Empty)
|
||||
{
|
||||
LuaCheckResult checkResult;
|
||||
checkResult.content = content;
|
||||
checkResult.line = string.Format("第{0}行:", lineNum);
|
||||
checkResult.path = fileInfo.FullName;
|
||||
ResultList.Add(checkResult);
|
||||
index = content.IndexOf("Logger.log");
|
||||
if (index < 0)
|
||||
{
|
||||
LuaCheckResult checkResult;
|
||||
checkResult.content = content;
|
||||
checkResult.line = string.Format("第{0}行:", lineNum);
|
||||
checkResult.path = fileInfo.FullName;
|
||||
ResultList.Add(checkResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,8 +14,8 @@ namespace BFEditor.Resource
|
||||
{
|
||||
return new List<BFSubChecker>()
|
||||
{
|
||||
new CharacterFbxChecker(),
|
||||
new SceneFbxChecker(),
|
||||
// new CharacterFbxChecker(),
|
||||
// new SceneFbxChecker(),
|
||||
new EffectFbxChecker(),
|
||||
};
|
||||
}
|
||||
|
||||
@ -15,8 +15,8 @@ namespace BFEditor.Resource
|
||||
return new List<BFSubChecker>()
|
||||
{
|
||||
new UIPrefabChecker(),
|
||||
new CharacterPrefabChecker(),
|
||||
new ScenePrefabChecker(),
|
||||
// new CharacterPrefabChecker(),
|
||||
// new ScenePrefabChecker(),
|
||||
new EffectPrefabChecker(),
|
||||
// new AutoCreatedEffectPrefabChecker(),
|
||||
};
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BFEditor.Resource
|
||||
{
|
||||
public class BFSpineChecker : BFMainChecker
|
||||
{
|
||||
protected override GUIContent InitGUIContent()
|
||||
{
|
||||
return new GUIContent("spine", BFEditorUtils.GetSystemIcon(typeof(Spine.Unity.SkeletonDataAsset)));
|
||||
}
|
||||
|
||||
protected override List<BFSubChecker> InitSubCheckers()
|
||||
{
|
||||
return new List<BFSubChecker>()
|
||||
{
|
||||
new SpineSubChecker(),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9c0f8968ad84174b9bc2d446ec36e7b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Rendering;
|
||||
using BF;
|
||||
|
||||
namespace BFEditor.Resource
|
||||
{
|
||||
@ -58,6 +59,27 @@ namespace BFEditor.Resource
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
|
||||
var effectHelper = gameObject.GetComponent<EffectHelper>();
|
||||
if (effectHelper == null)
|
||||
{
|
||||
currentBadRes.AddBadLog(gameObject.name + "没有挂载EffectHelper");
|
||||
result = false;
|
||||
}
|
||||
|
||||
var ParticleSystem = gameObject.GetComponent<ParticleSystem>();
|
||||
if (ParticleSystem != null)
|
||||
{
|
||||
currentBadRes.AddBadLog(gameObject.name + "根节点挂载了ParticleSystem");
|
||||
result = false;
|
||||
}
|
||||
|
||||
var layer = gameObject.layer;
|
||||
if(layer != LayerMask.NameToLayer("UI")) //UI层
|
||||
{
|
||||
currentBadRes.AddBadLog(gameObject.name + "layer不是UI");
|
||||
result = false;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e339cd1033ed11b4f9e49a9760fef963
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,109 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
using System.IO;
|
||||
|
||||
namespace BFEditor.Resource
|
||||
{
|
||||
public class SpineSubChecker : BFSubChecker
|
||||
{
|
||||
Dictionary<string, bool> mustNeedAni = new Dictionary<string, bool>(){
|
||||
{"born", true},
|
||||
{"death", true},
|
||||
{"idle", true},
|
||||
{"suffer", true},
|
||||
{"vertigo", true},
|
||||
{"frozen", true},
|
||||
{"move", true},
|
||||
};
|
||||
|
||||
Dictionary<string, bool> heroMustNeedAni = new Dictionary<string, bool>(){
|
||||
{"attack01", true},
|
||||
{"attack02", true},
|
||||
{"attack03", true},
|
||||
{"attack04", true},
|
||||
};
|
||||
|
||||
Dictionary<string, bool> monsterMustNeedAni = new Dictionary<string, bool>(){
|
||||
{"attack01", true},
|
||||
{"attack02", true},
|
||||
{"attack03", true},
|
||||
};
|
||||
|
||||
public override string InitName()
|
||||
{
|
||||
return "Spine";
|
||||
}
|
||||
|
||||
public override bool DoCheck(string assetPath, AssetImporter assetImporter, Object assetObj)
|
||||
{
|
||||
bool passed = true;
|
||||
if (assetPath.Contains("characters"))
|
||||
{
|
||||
var skeletonDataAsset = AssetDatabase.LoadAssetAtPath<Spine.Unity.SkeletonDataAsset>(assetPath);
|
||||
var animationState = skeletonDataAsset.GetAnimationStateData();
|
||||
Dictionary<string, bool> haveAni = new Dictionary<string, bool>();
|
||||
foreach (var animation in animationState.SkeletonData.Animations)
|
||||
{
|
||||
haveAni[animation.Name] = true;
|
||||
}
|
||||
foreach (var key in mustNeedAni.Keys)
|
||||
{
|
||||
if (!haveAni.ContainsKey(key))
|
||||
{
|
||||
currentBadRes.AddBadLog("没有动画" + key);
|
||||
passed = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (assetPath.Contains("characters/p"))
|
||||
{
|
||||
foreach (var key in heroMustNeedAni.Keys)
|
||||
{
|
||||
if (!haveAni.ContainsKey(key))
|
||||
{
|
||||
currentBadRes.AddBadLog("没有动画" + key);
|
||||
passed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (assetPath.Contains("characters/m"))
|
||||
{
|
||||
foreach (var key in monsterMustNeedAni.Keys)
|
||||
{
|
||||
if (!haveAni.ContainsKey(key))
|
||||
{
|
||||
currentBadRes.AddBadLog("没有动画" + key);
|
||||
passed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
string floderPath = Path.GetDirectoryName(assetPath);
|
||||
string[] paths = Directory.GetFiles(floderPath);
|
||||
int fileCount = 0;
|
||||
foreach (string unitPath in paths)
|
||||
{
|
||||
if (Path.GetExtension(unitPath) != ".meta")
|
||||
{
|
||||
fileCount++;
|
||||
}
|
||||
}
|
||||
if (fileCount > 6) // 只能有六个文件
|
||||
{
|
||||
currentBadRes.AddBadLog("文件夹文件数量异常");
|
||||
passed = false;
|
||||
}
|
||||
|
||||
return passed;
|
||||
}
|
||||
|
||||
protected override List<string> GetAssetPathList()
|
||||
{
|
||||
return BFEditorUtils.GetAssetPathsWithSuffix(ResourceProcessConfig.SPINE_TEXTURE_PATH, ".asset", "skeletondata");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 45556e9bea3af1b4b96c6e7a1fec9552
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,25 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using System.IO;
|
||||
|
||||
namespace BFEditor.Resource
|
||||
{
|
||||
public class BFSpineImporter : BFMainImporter
|
||||
{
|
||||
protected override List<BFSubImporter> InitSubImporters()
|
||||
{
|
||||
return new List<BFSubImporter>()
|
||||
{
|
||||
new BFSpineSubImporter(),
|
||||
};
|
||||
}
|
||||
|
||||
public override bool NeedDeal(string assetPath)
|
||||
{
|
||||
var suffix = Path.GetExtension(assetPath);
|
||||
return suffix == ".asset";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: aec487ce03f96b141b9363cbb898e894
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEngine.Rendering;
|
||||
using BF;
|
||||
|
||||
namespace BFEditor.Resource
|
||||
{
|
||||
@ -31,6 +32,20 @@ namespace BFEditor.Resource
|
||||
SetDirty();
|
||||
}
|
||||
}
|
||||
var effectHelper = prefabObj.GetComponent<EffectHelper>();
|
||||
if (effectHelper == null)
|
||||
{
|
||||
prefabObj.AddComponent<EffectHelper>();
|
||||
SetDirty();
|
||||
}
|
||||
EffectHelperInspector.OnPrefabSaved(prefabObj);
|
||||
|
||||
var layer = prefabObj.layer;
|
||||
if(layer != LayerMask.NameToLayer("UI")) //UI层
|
||||
{
|
||||
prefabObj.layer = LayerMask.NameToLayer("UI");
|
||||
SetDirty();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f5bc4bc411f27624fa3eb792290cbd09
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -0,0 +1,21 @@
|
||||
using System.IO;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace BFEditor.Resource
|
||||
{
|
||||
public class BFSpineSubImporter : BFSubImporter
|
||||
{
|
||||
public override bool NeedDeal(string assetPath)
|
||||
{
|
||||
return assetPath.Contains(ResourceProcessConfig.SPINE_TEXTURE_PATH);
|
||||
}
|
||||
|
||||
protected override void DoImport(string assetPath, AssetImporter assetImporter, bool isFix)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 95690334d8b9a8b4b82d428441cc2095
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -9,7 +9,7 @@ namespace BFEditor.Resource
|
||||
{
|
||||
public override bool NeedDeal(string assetPath)
|
||||
{
|
||||
return assetPath.Contains(ResourceProcessConfig.BG_TEXTURE_FOLDER_PATH);
|
||||
return assetPath.Contains(ResourceProcessConfig.BG_BATTLE_TEXTURE_FOLDER_PATH);
|
||||
}
|
||||
|
||||
protected override void DoImport(string assetPath, TextureImporter textureImporter, bool isFix)
|
||||
|
||||
@ -133,6 +133,7 @@ namespace BFEditor.Resource
|
||||
new BFPrefabImporter(),
|
||||
new BFMaterialImporter(),
|
||||
new BFShaderImporter(),
|
||||
new BFSpineImporter(),
|
||||
};
|
||||
|
||||
//资源白名单 检查时过滤
|
||||
@ -201,6 +202,7 @@ namespace BFEditor.Resource
|
||||
new BFAudioChecker(),
|
||||
new BFMaterialChecker(),
|
||||
new BFShaderChecker(),
|
||||
new BFSpineChecker(),
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ namespace BFEditor
|
||||
PrefabStage.prefabSaving += OnPrefabSaved;
|
||||
}
|
||||
|
||||
private static void OnPrefabSaved(GameObject go)
|
||||
public static void OnPrefabSaved(GameObject go)
|
||||
{
|
||||
var effectHelper = go.GetComponent<EffectHelper>();
|
||||
if (effectHelper != null)
|
||||
|
||||
@ -11,72 +11,40 @@ public class JenkinsAdapter {
|
||||
/// 构建版本号
|
||||
/// </summary>
|
||||
private static string BuildVersion = (int.Parse(DateTime.Now.ToString("yyMMddHH"))).ToString();
|
||||
private static bool _oldShowSplash = false;
|
||||
|
||||
/// <summary>
|
||||
/// 通用设置
|
||||
/// </summary>
|
||||
private static bool CommonSetting(BuildTargetGroup target) {
|
||||
|
||||
_oldShowSplash = PlayerSettings.SplashScreen.show;
|
||||
//去掉Unity的SplashScreen
|
||||
PlayerSettings.SplashScreen.show = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
private static void BuildAddressable(BuildTargetGroup target, BuildTarget buildTarget) {
|
||||
// EditorUserBuildSettings.SwitchActiveBuildTarget(target, buildTarget);
|
||||
// AddressableEditor.BuildContent();
|
||||
}
|
||||
|
||||
//设置还原
|
||||
private static void recover(BuildTargetGroup target) {
|
||||
PlayerSettings.SplashScreen.show = _oldShowSplash;
|
||||
|
||||
AssetDatabase.SaveAssets();
|
||||
AssetDatabase.Refresh();
|
||||
}
|
||||
|
||||
//打包 app bundle
|
||||
private static int versionCode = 10;
|
||||
private static string versionName = "1.4.0";
|
||||
|
||||
[MenuItem("Jenkins/JenkinsBuildIos")]
|
||||
public static void CommandLineBuildIos() {
|
||||
//打包
|
||||
if(!CommonSetting(BuildTargetGroup.iOS)){
|
||||
return;
|
||||
};
|
||||
BuildAddressable(BuildTargetGroup.iOS, BuildTarget.iOS);
|
||||
|
||||
var buildInfo = new BuildInfo();
|
||||
buildInfo.version = "0.1.0";
|
||||
buildInfo.version = versionName;
|
||||
buildInfo.mode = "publish_release";
|
||||
buildInfo.bundleName = "com.juzu.b6";
|
||||
buildInfo.bundleName = "com.combo.heroes.puzzle.rpg";
|
||||
buildInfo.skipVersion = false;
|
||||
BuildProjectTools.BuildResources(buildInfo, Application.streamingAssetsPath, true);
|
||||
|
||||
// 重新生成XLua
|
||||
CompileScriptsUtils.RegenerateXLuaCode(true);
|
||||
|
||||
// 设置版本号
|
||||
PlayerSettings.bundleVersion = buildInfo.version;
|
||||
//Jenkins要求自动构建最低ios8.0
|
||||
PlayerSettings.iOS.targetOSVersionString = "10.0";
|
||||
//设置Build为日期格式
|
||||
PlayerSettings.iOS.buildNumber = BuildVersion;
|
||||
|
||||
//SDK要求
|
||||
PlayerSettings.iOS.targetOSVersionString = "12.0";
|
||||
//设置Build,每次需要增加
|
||||
PlayerSettings.iOS.buildNumber = versionCode.ToString();
|
||||
// 隐藏ios的横条
|
||||
PlayerSettings.iOS.hideHomeButton = false;
|
||||
// 禁止在所有边缘上延迟手势
|
||||
PlayerSettings.iOS.deferSystemGesturesMode = UnityEngine.iOS.SystemGestureDeferMode.All;
|
||||
// 设置竖屏
|
||||
PlayerSettings.defaultInterfaceOrientation = UIOrientation.Portrait;
|
||||
PlayerSettings.allowedAutorotateToPortrait = false;
|
||||
PlayerSettings.allowedAutorotateToPortraitUpsideDown = false;
|
||||
PlayerSettings.allowedAutorotateToLandscapeLeft = false;
|
||||
PlayerSettings.allowedAutorotateToLandscapeRight = false;
|
||||
|
||||
// 关闭启动动画
|
||||
PlayerSettings.SplashScreen.show = false;
|
||||
|
||||
// 设置包名
|
||||
PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, buildInfo.bundleName);
|
||||
|
||||
// 是否跳过版本控制
|
||||
var symbols = "THREAD_SAFE;USE_AB";
|
||||
if (buildInfo.skipVersion)
|
||||
@ -85,20 +53,19 @@ public class JenkinsAdapter {
|
||||
}
|
||||
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS, symbols);
|
||||
// 商品名称
|
||||
PlayerSettings.productName = "Lonely Survivor";
|
||||
PlayerSettings.productName = "Knights Combo";
|
||||
// BuildType设置dev/release
|
||||
EditorUserBuildSettings.iOSBuildConfigType = iOSBuildType.Release;
|
||||
EditorUserBuildSettings.development = false;
|
||||
// 使用IL2CPP
|
||||
var scriptImp = ScriptingImplementation.IL2CPP;
|
||||
PlayerSettings.SetScriptingBackend(BuildTargetGroup.iOS, scriptImp);
|
||||
// 目标平台架构,目前支持ARM64
|
||||
PlayerSettings.SetArchitecture(BuildTargetGroup.iOS, 1);
|
||||
EditorUserBuildSettings.development = false;
|
||||
|
||||
// 开始打包
|
||||
BuildPipeline.BuildPlayer(GetBuildScenes(), GetIosBuildPath(), BuildTarget.iOS, BuildOptions.None);
|
||||
Console.WriteLine("Build Complete Path:" + GetIosBuildPath());
|
||||
|
||||
recover(BuildTargetGroup.iOS);
|
||||
}
|
||||
|
||||
|
||||
@ -116,7 +83,7 @@ public class JenkinsAdapter {
|
||||
return names.ToArray();
|
||||
}
|
||||
|
||||
#region Get Build Path
|
||||
#region Get Build Path
|
||||
private static string GetIosBuildPath() {
|
||||
return "build/iOS";
|
||||
}
|
||||
|
||||
@ -68,7 +68,8 @@ namespace BFEditor
|
||||
"TMPro.SortingLayerHelper",
|
||||
"UnityEngine.CloudStreaming",
|
||||
"BFEditor.EditorBattleRoleAttackOperate",
|
||||
"IronSourceBannerEvents", "IronSourceEvents", "IronSourceInterstitialEvents", "IronSourceRewardedVideoEvents"
|
||||
"IronSourceBannerEvents", "IronSourceEvents", "IronSourceInterstitialEvents", "IronSourceRewardedVideoEvents",
|
||||
"IronSourceAdQualityManifestTools"
|
||||
};
|
||||
|
||||
static bool isExcluded(Type type)
|
||||
@ -346,6 +347,7 @@ namespace BFEditor
|
||||
typeof(UnityEngine.UI.GridLayoutGroup.Constraint),
|
||||
typeof(UnityEngine.UI.VerticalLayoutGroup),
|
||||
typeof(UnityEngine.UI.LayoutGroup),
|
||||
typeof(UnityEngine.GUIUtility),
|
||||
|
||||
// spine
|
||||
typeof(Spine.TrackEntry),
|
||||
@ -451,6 +453,8 @@ namespace BFEditor
|
||||
typeof(BF.ScrollRectBaseOld.ScrollbarVisibility),
|
||||
typeof(BF.NetServiceType),
|
||||
typeof(BF.NetIncomingMessageType),
|
||||
typeof(BF.BFGridLayout.Corner),
|
||||
typeof(BF.BFGridLayout.Constraint),
|
||||
};
|
||||
return unityTypes.Concat(customTypes).Concat(otherTypes);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -285,7 +285,7 @@ namespace BFEditor
|
||||
return string.Format("{0}分{1}秒", minus, second);
|
||||
}
|
||||
|
||||
public static List<string> GetAssetPathsWithSuffix(string path, string suffix)
|
||||
public static List<string> GetAssetPathsWithSuffix(string path, string suffix, string containsStr = "")
|
||||
{
|
||||
var result = new List<string>();
|
||||
var fileInfos = new List<FileInfo>();
|
||||
@ -295,7 +295,17 @@ namespace BFEditor
|
||||
{
|
||||
var resourcePath = "Assets" + fileInfos[i].FullName.Replace("\\", "/").Remove(0, Application.dataPath.Length);
|
||||
resourcePath = resourcePath.Replace('\\', '/');
|
||||
result.Add(resourcePath);
|
||||
if (containsStr == "")
|
||||
{
|
||||
result.Add(resourcePath);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (fileInfos[i].FullName.Contains(containsStr))
|
||||
{
|
||||
result.Add(resourcePath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
</array> -->
|
||||
<key>com.apple.developer.associated-domains</key>
|
||||
<array>
|
||||
<string>applinks:b2-cdn.bigfoot-studio.link</string>
|
||||
<string>applinks:b6-cdn.bigfoot-studio.link</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@ -25,11 +25,11 @@
|
||||
<activity android:name="com.facebook.unity.FBUnityGameRequestActivity" />
|
||||
<activity android:name="com.facebook.unity.FBUnityCreateGameGroupActivity" />
|
||||
<activity android:name="com.facebook.unity.FBUnityJoinGameGroupActivity" />
|
||||
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="fb222326627097275" />
|
||||
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="7ec364275c7766833d2ebace0c5a806e" />
|
||||
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="fb277827051329111" />
|
||||
<meta-data android:name="com.facebook.sdk.ClientToken" android:value="cd6be8cc57dff789f3476ee1b25e2410" />
|
||||
<meta-data android:name="com.facebook.sdk.AutoLogAppEventsEnabled" android:value="true" />
|
||||
<meta-data android:name="com.facebook.sdk.AdvertiserIDCollectionEnabled" android:value="true" />
|
||||
<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider222326627097275" android:exported="true" />
|
||||
<provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider277827051329111" android:exported="true" />
|
||||
<!-- <uses-permission android:name="com.google.android.gms.permission.AD_ID" /> -->
|
||||
<receiver android:name="com.adjust.sdk.AdjustReferrerReceiver" android:permission="android.permission.INSTALL_PACKAGES" android:exported="true">
|
||||
<intent-filter>
|
||||
|
||||
Binary file not shown.
@ -1,32 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cbe75846a2b4da1459371181319ce8e3
|
||||
PluginImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
defineConstraints: []
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
isExplicitlyReferenced: 0
|
||||
validateReferences: 1
|
||||
platformData:
|
||||
- first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
- first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
- first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -8,19 +8,28 @@
|
||||
url "https://maven.google.com"
|
||||
}
|
||||
maven {
|
||||
url "https://android-sdk.is.com/" // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:9, Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16, Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:16, Assets/IronSource/Editor/ISAppLovinAdapterDependencies.xml:8, Assets/IronSource/Editor/ISChartboostAdapterDependencies.xml:8, Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:16, Assets/IronSource/Editor/ISFyberAdapterDependencies.xml:16, Assets/IronSource/Editor/ISLiftoffAdapterDependencies.xml:16, Assets/IronSource/Editor/ISPangleAdapterDependencies.xml:8, Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8, Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:8
|
||||
url "https://android-sdk.is.com/" // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:9, Assets/ThirdParty/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISAdMobAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISAppLovinAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISChartboostAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISFacebookAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISFyberAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:48, Assets/ThirdParty/IronSource/Editor/ISPangleAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISVungleAdapterDependencies.xml:16
|
||||
}
|
||||
maven {
|
||||
url "https://maven.google.com/" // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:17, Assets/IronSource/Editor/IronSourceSDKDependencies.xml:25, Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8, Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:8, Assets/IronSource/Editor/ISAppLovinAdapterDependencies.xml:15, Assets/IronSource/Editor/ISChartboostAdapterDependencies.xml:15, Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:8, Assets/IronSource/Editor/ISLiftoffAdapterDependencies.xml:8, Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:15
|
||||
url "https://maven.google.com/" // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:17, Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:25, Assets/ThirdParty/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISAdMobAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISFacebookAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:40, Assets/ThirdParty/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:15
|
||||
}
|
||||
maven {
|
||||
url "https://repo.maven.apache.org/maven2/" // Assets/IronSource/Editor/ISFyberAdapterDependencies.xml:8
|
||||
url "https://cboost.jfrog.io/artifactory/chartboost-ads/" // Assets/ThirdParty/IronSource/Editor/ISChartboostAdapterDependencies.xml:15
|
||||
}
|
||||
maven {
|
||||
url "https://artifact.bytedance.com/repository/pangle/" // Assets/IronSource/Editor/ISPangleAdapterDependencies.xml:15
|
||||
url "https://repo.maven.apache.org/maven2/" // Assets/ThirdParty/IronSource/Editor/ISFyberAdapterDependencies.xml:8
|
||||
}
|
||||
maven {
|
||||
url "https://sdk.tapjoy.com/" // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
|
||||
url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea/" // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:24, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:32
|
||||
}
|
||||
maven {
|
||||
url "https://artifact.bytedance.com/repository/pangle/" // Assets/ThirdParty/IronSource/Editor/ISPangleAdapterDependencies.xml:15
|
||||
}
|
||||
maven {
|
||||
url "https://sdk.tapjoy.com/" // Assets/ThirdParty/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
|
||||
}
|
||||
maven {
|
||||
url "https://jitpack.io/" // Assets/ThirdParty/IronSource/Editor/ISVungleAdapterDependencies.xml:8
|
||||
}
|
||||
mavenLocal()
|
||||
jcenter()
|
||||
@ -34,42 +43,50 @@ apply plugin: 'com.android.library'
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
// Android Resolver Dependencies Start
|
||||
implementation 'com.adcolony:sdk:4.8.0' // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8
|
||||
implementation 'androidx.recyclerview:recyclerview:1.2.1' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:40
|
||||
implementation 'com.adcolony:sdk:4.8.0' // Assets/ThirdParty/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8
|
||||
implementation 'com.android.installreferrer:installreferrer:2.1' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml:10
|
||||
implementation 'com.android.support:appcompat-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
|
||||
implementation 'com.android.support:cardview-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
|
||||
implementation 'com.android.support:customtabs:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
|
||||
implementation 'com.android.support:support-v4:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
|
||||
implementation 'com.applovin:applovin-sdk:11.7.1' // Assets/IronSource/Editor/ISAppLovinAdapterDependencies.xml:15
|
||||
implementation 'com.applovin:applovin-sdk:11.10.1' // Assets/ThirdParty/MaxSdk/AppLovin/Editor/Dependencies.xml:4
|
||||
implementation 'com.appsflyer:adrevenue:6.5.4' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml:4
|
||||
implementation 'com.appsflyer:af-android-sdk:6.4.1' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml:6
|
||||
implementation 'com.appsflyer:unity-adrevenue-generic-wrapper:6.5.4' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml:5
|
||||
implementation 'com.appsflyer:unity-wrapper:6.4.1' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml:8
|
||||
implementation 'com.chartboost:chartboost-sdk:9.2.0' // Assets/IronSource/Editor/ISChartboostAdapterDependencies.xml:15
|
||||
implementation 'com.facebook.android:audience-network-sdk:6.12.0' // Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:8
|
||||
implementation 'com.chartboost:chartboost-sdk:9.3.1' // Assets/ThirdParty/IronSource/Editor/ISChartboostAdapterDependencies.xml:15
|
||||
implementation 'com.facebook.android:audience-network-sdk:6.16.0' // Assets/ThirdParty/IronSource/Editor/ISFacebookAdapterDependencies.xml:8
|
||||
implementation 'com.facebook.android:facebook-applinks:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:6
|
||||
implementation 'com.facebook.android:facebook-core:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:5
|
||||
implementation 'com.facebook.android:facebook-gamingservices:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:9
|
||||
implementation 'com.facebook.android:facebook-login:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:7
|
||||
implementation 'com.facebook.android:facebook-share:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:8
|
||||
implementation 'com.fyber:marketplace-sdk:8.2.2' // Assets/IronSource/Editor/ISFyberAdapterDependencies.xml:8
|
||||
implementation 'com.google.android.gms:play-services-ads:21.5.0' // Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:8
|
||||
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:17
|
||||
implementation 'com.google.android.gms:play-services-basement:18.1.0' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:25
|
||||
implementation 'com.ironsource.adapters:adcolonyadapter:4.3.14' // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:admobadapter:4.3.35' // Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:applovinadapter:4.3.37' // Assets/IronSource/Editor/ISAppLovinAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:chartboostadapter:4.3.11' // Assets/IronSource/Editor/ISChartboostAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:facebookadapter:4.3.39' // Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:fyberadapter:4.3.24' // Assets/IronSource/Editor/ISFyberAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:liftoffadapter:4.3.5' // Assets/IronSource/Editor/ISLiftoffAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:pangleadapter:4.3.17' // Assets/IronSource/Editor/ISPangleAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:tapjoyadapter:4.1.24' // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:unityadsadapter:4.3.27' // Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.sdk:mediationsdk:7.3.0.1' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:9
|
||||
implementation 'com.pangle.global:ads-sdk:5.0.0.8' // Assets/IronSource/Editor/ISPangleAdapterDependencies.xml:15
|
||||
implementation 'com.fyber:marketplace-sdk:8.2.4' // Assets/ThirdParty/IronSource/Editor/ISFyberAdapterDependencies.xml:8
|
||||
implementation 'com.google.android.gms:play-services-ads:22.2.0' // Assets/ThirdParty/IronSource/Editor/ISAdMobAdapterDependencies.xml:8
|
||||
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:17
|
||||
implementation 'com.google.android.gms:play-services-basement:18.1.0' // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:25
|
||||
implementation 'com.ironsource.adapters:adcolonyadapter:4.3.15' // Assets/ThirdParty/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:admobadapter:4.3.39' // Assets/ThirdParty/IronSource/Editor/ISAdMobAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:applovinadapter:4.3.39' // Assets/ThirdParty/IronSource/Editor/ISAppLovinAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:chartboostadapter:4.3.12' // Assets/ThirdParty/IronSource/Editor/ISChartboostAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:facebookadapter:4.3.45' // Assets/ThirdParty/IronSource/Editor/ISFacebookAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:fyberadapter:4.3.28' // Assets/ThirdParty/IronSource/Editor/ISFyberAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.adapters:mintegraladapter:4.3.19' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:48
|
||||
implementation 'com.ironsource.adapters:pangleadapter:4.3.22' // Assets/ThirdParty/IronSource/Editor/ISPangleAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:tapjoyadapter:4.1.25' // Assets/ThirdParty/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:unityadsadapter:4.3.33' // Assets/ThirdParty/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:8
|
||||
implementation 'com.ironsource.adapters:vungleadapter:4.3.22' // Assets/ThirdParty/IronSource/Editor/ISVungleAdapterDependencies.xml:16
|
||||
implementation 'com.ironsource.sdk:mediationsdk:7.5.1' // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:9
|
||||
implementation 'com.mbridge.msdk.oversea:mbbanner:16.5.21' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:24
|
||||
implementation 'com.mbridge.msdk.oversea:mbbid:16.5.21' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:32
|
||||
implementation 'com.mbridge.msdk.oversea:newinterstitial:16.5.21' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:8
|
||||
implementation 'com.mbridge.msdk.oversea:reward:16.5.21' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:16
|
||||
implementation 'com.pangle.global:ads-sdk:5.5.0.5' // Assets/ThirdParty/IronSource/Editor/ISPangleAdapterDependencies.xml:15
|
||||
implementation 'com.parse.bolts:bolts-android:1.4.0' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:4
|
||||
implementation 'com.tapjoy:tapjoy-android-sdk:12.11.1' // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
|
||||
implementation 'com.unity3d.ads:unity-ads:4.6.1' // Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:15
|
||||
implementation 'io.liftoff:liftoffads:1.9.1' // Assets/IronSource/Editor/ISLiftoffAdapterDependencies.xml:8
|
||||
implementation 'com.tapjoy:tapjoy-android-sdk:13.0.1' // Assets/ThirdParty/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
|
||||
implementation 'com.unity3d.ads:unity-ads:4.9.1' // Assets/ThirdParty/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:15
|
||||
implementation 'com.vungle:vungle-ads:7.0.0' // Assets/ThirdParty/IronSource/Editor/ISVungleAdapterDependencies.xml:8
|
||||
// Android Resolver Dependencies End
|
||||
**DEPS**}
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ IMPL_APP_CONTROLLER_SUBCLASS (CustomAppController)
|
||||
// [START set_messaging_delegate]
|
||||
[FIRMessaging messaging].delegate = self;
|
||||
// [END set_messaging_delegate]
|
||||
|
||||
|
||||
if ([UNUserNotificationCenter class] != nil) {
|
||||
// iOS 10 or later
|
||||
// For iOS 10 display notification (sent via APNS)
|
||||
|
||||
@ -1,31 +1,50 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
#import "FirebaseSDK.h"
|
||||
#import "FirebaseMessaging/FIRMessaging.h"
|
||||
#import "NativeUtils.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef void (*GetFirebaseTokenCallback)(const char* token);
|
||||
GetFirebaseTokenCallback firebaseTokenCallback;
|
||||
|
||||
// 初始化SDK
|
||||
void FIRInitialize() {
|
||||
[[FirebaseSDK getInstance] initialize];
|
||||
}
|
||||
|
||||
|
||||
// 设置公共事件属性
|
||||
void FIRSetUserProperty(const char* key, const char* property) {
|
||||
[[FirebaseSDK getInstance] setUserPropertyString:[NSString stringWithFormat:@"%s", property] forName:[NSString stringWithFormat:@"%s", key]];
|
||||
}
|
||||
|
||||
|
||||
void FIRLogEvent(const char* eventName, const char* properties) {
|
||||
[[FirebaseSDK getInstance] logEventWithName:[NSString stringWithFormat:@"%s", eventName] parameters:[NativeUtils convertJsonToDictionary:properties]];
|
||||
}
|
||||
|
||||
|
||||
// log crash
|
||||
void FIRLogCrashCustomKey(const char* key, const char* stack) {
|
||||
[[FirebaseSDK getInstance] logCrash:[NSString stringWithFormat:@"%s", key] stack:[NSString stringWithFormat:@"%s", stack]];
|
||||
}
|
||||
|
||||
|
||||
void FIRGetToken(GetFirebaseTokenCallback callback) {
|
||||
firebaseTokenCallback = callback;
|
||||
[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
|
||||
if (error != nil) {
|
||||
NSLog(@"Error getting FCM registration token: %@", error);
|
||||
} else {
|
||||
NSLog(@"FCM registration token: %@", token);
|
||||
if (firebaseTokenCallback){
|
||||
const char *pConstToken = [token UTF8String];
|
||||
firebaseTokenCallback(pConstToken);
|
||||
}
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -3,21 +3,23 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CLIENT_ID</key>
|
||||
<string>133454098911-v67k58fn1e3ru8b4shuvs2gbpagi9t0d.apps.googleusercontent.com</string>
|
||||
<string>1008416471093-78jluae6d1tdl8l4qkul3hut7lckd1kc.apps.googleusercontent.com</string>
|
||||
<key>REVERSED_CLIENT_ID</key>
|
||||
<string>com.googleusercontent.apps.133454098911-v67k58fn1e3ru8b4shuvs2gbpagi9t0d</string>
|
||||
<string>com.googleusercontent.apps.1008416471093-78jluae6d1tdl8l4qkul3hut7lckd1kc</string>
|
||||
<key>ANDROID_CLIENT_ID</key>
|
||||
<string>1008416471093-e1a8gso0q6mpangmi7lltjilfmqeqp6u.apps.googleusercontent.com</string>
|
||||
<key>API_KEY</key>
|
||||
<string>AIzaSyBA0SFUeUZ5Y5ksznpMaskf5VOsO4rSrRc</string>
|
||||
<string>AIzaSyD7MGAPWg5qU0RwpoHL-0Z89U5pFGrPXx4</string>
|
||||
<key>GCM_SENDER_ID</key>
|
||||
<string>133454098911</string>
|
||||
<string>1008416471093</string>
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>com.cobby.lonelysurvivor</string>
|
||||
<string>com.combo.heroes.puzzle.rpg</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>lonely-survivor</string>
|
||||
<string>knights-combo</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
<string>lonely-survivor.appspot.com</string>
|
||||
<string>knights-combo.appspot.com</string>
|
||||
<key>IS_ADS_ENABLED</key>
|
||||
<false></false>
|
||||
<key>IS_ANALYTICS_ENABLED</key>
|
||||
@ -29,6 +31,6 @@
|
||||
<key>IS_SIGNIN_ENABLED</key>
|
||||
<true></true>
|
||||
<key>GOOGLE_APP_ID</key>
|
||||
<string>1:133454098911:ios:15659a02894a675ca2546a</string>
|
||||
<string>1:1008416471093:ios:7bbb6d271c173ccd99d97c</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@ -17,6 +17,7 @@ namespace BF
|
||||
// 是否是单机版
|
||||
public static bool IsStandAlone = false;
|
||||
public static bool IsShenhe = false;
|
||||
public static bool IsWhite = false;
|
||||
public static bool IsGotServerTime = false;
|
||||
public const string FILE_HEAD = "for_file_head";
|
||||
public const string FILE_HEAD_BASE64 = "Zm9yX2ZpbGVfaGVhZ";
|
||||
@ -273,21 +274,6 @@ namespace BF
|
||||
}
|
||||
}
|
||||
|
||||
TimeLineManager timeLineManager;
|
||||
public TimeLineManager TimeLineManager
|
||||
{
|
||||
get
|
||||
{
|
||||
if (timeLineManager == null)
|
||||
{
|
||||
timeLineManager = TimeLineManager.Create();
|
||||
timeLineManager.Init();
|
||||
managerList.Add(timeLineManager);
|
||||
}
|
||||
return timeLineManager;
|
||||
}
|
||||
}
|
||||
|
||||
TaskManager taskMgr;
|
||||
public TaskManager TaskMgr
|
||||
{
|
||||
@ -334,22 +320,6 @@ namespace BF
|
||||
}
|
||||
}
|
||||
|
||||
BattleManager battleMgr;
|
||||
public BattleManager BattleMgr
|
||||
{
|
||||
get
|
||||
{
|
||||
if (battleMgr == null)
|
||||
{
|
||||
battleMgr = BattleManager.Create();
|
||||
battleMgr.SetMono(this);
|
||||
battleMgr.Init();
|
||||
managerList.Add(battleMgr);
|
||||
}
|
||||
return battleMgr;
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetServerTime(long serverTime)
|
||||
{
|
||||
ServerTime = serverTime;
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b39b5b3d98bd0da4392706cf96cedd54
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,48 +0,0 @@
|
||||
|
||||
namespace BF
|
||||
{
|
||||
// 由Lua层读配置更新
|
||||
public static class BattleConfigure
|
||||
{
|
||||
// 战斗加速比例
|
||||
public static float TimeScale = 1.0f;
|
||||
// 普攻移动时间
|
||||
public static float NormalMoveTime = 0.1f;
|
||||
// 后撤移动时间
|
||||
public static float NormalBackTime = 0.1f;
|
||||
// 场景相机坐标x的范围
|
||||
public static float CameraMinX = -16.0f;
|
||||
public static float CameraMaxX = 16.0f;
|
||||
// 场景范围
|
||||
public static float SceneMinX = -24.0f;
|
||||
public static float SceneMaxX = 24.0f;
|
||||
public static float SceneMinZ = -10.0f;
|
||||
public static float SceneMaxZ = 3.2f;
|
||||
// 普攻位移距离
|
||||
public static float DistanceAttack = 0.0f;
|
||||
// 冲锋攻击的距离
|
||||
public static float DistanceDash = 0.0f;
|
||||
// 后撤的距离
|
||||
public static float DistanceBack = 0.0f;
|
||||
public static float BattleCenterPosX = 0.0f;
|
||||
public static float WorldToScreenWidth = 0.0f;
|
||||
public static float CheckMonsterTowardInterval = 0.1f;
|
||||
public static float CheckAITargetPositionInterval = 0.1f;
|
||||
public static float MonsterScaleFactorXZ = 3.0f;
|
||||
public static float SceneMidX = 0.0f;
|
||||
public static float SceneMidZ = -3.4f;
|
||||
// 普攻往后飞的距离
|
||||
public static float DistanceHitBack = 1.5f;
|
||||
// 击飞往后飞的距离
|
||||
public static float DistanceHitFly = 6.25f;
|
||||
// 击飞的高度
|
||||
public static float HeightHitFly = 8.0f;
|
||||
// 击飞的从起飞到落地的时间
|
||||
public static float TimeHitFly = 1.5f;
|
||||
// 击飞后躺在地上的时间
|
||||
public static float TimeLie = 1.5f;
|
||||
// 击退的时间
|
||||
public static float HitBackTime = 0.1f;
|
||||
public static float HitBackSpeed = BattleConst.UNIT_MOVE_DISTANCE / HitBackTime;
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d6c43abc555a31948b2c2c768c39c7e7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,203 +0,0 @@
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
// MonsterData的monsterType,0,1,2分别对应小怪,精英和boss,这里就加一个4:英雄
|
||||
public static class BattleUnitType
|
||||
{
|
||||
// 小怪
|
||||
public const int NORMAL = 0;
|
||||
// 精英
|
||||
public const int ELITE = 1;
|
||||
// BOSS
|
||||
public const int BOSS = 2;
|
||||
// 英雄
|
||||
public const int HERO = 4;
|
||||
}
|
||||
|
||||
public static class BattleConst
|
||||
{
|
||||
public const int SIDE_ATK = 1;
|
||||
public const int SIDE_DEF = 2;
|
||||
public const int DOTWEEN_ID_BATTLE = 2;
|
||||
public const string BATTLE_POOL_NAME = "battle_pool";
|
||||
public const string BATTLE_ROOT_NAME = "battle_root";
|
||||
public const string BATTLE_BOX_COLLIDER_NAME = "box_collider";
|
||||
public const string BATTLE_SPHERE_COLLIDER_NAME = "sphere_collider";
|
||||
public const string BATTLE_SPHERE_BULLET_NAME = "sphere_bullet";
|
||||
public const string BATTLE_BOX_BULLET_NAME = "box_bullet";
|
||||
public const string BATTLE_AIM_NAME = "aim";
|
||||
public static int LAYER_DEFAULT = LayerMask.NameToLayer("Default");
|
||||
public static int LAYER_HERO = LayerMask.NameToLayer("Hero");
|
||||
public static int LAYER_MONSTER = LayerMask.NameToLayer("Monster");
|
||||
public static int LAYER_ATK_BULLET = LayerMask.NameToLayer("AtkBullet");
|
||||
public static int LAYER_DEF_BULLET = LayerMask.NameToLayer("DefBullet");
|
||||
public const int DEFAULT_FACTOR = 10000;
|
||||
public const float DEFAULT_FACTOR_FLOAT = 10000.0f;
|
||||
public const double DEFAULT_FACTOR_DOUBLE = 10000.0;
|
||||
// 360°对应的弧度值
|
||||
public const float CircleRadians = 360.0f*Mathf.Deg2Rad;
|
||||
public const float NegativeCircleRadians = -360.0f*Mathf.Deg2Rad;
|
||||
public static MaterialPropertyBlock UnitMaterialPropertyBlock = new MaterialPropertyBlock();
|
||||
public static int UNIT_GLOW_COLOR_ID = Shader.PropertyToID("_glow_color");
|
||||
public static int UNIT_GLOW_COLOR_ENABLE_ID = Shader.PropertyToID("_glow_color_enable");
|
||||
public const float DelayRecycle = 0.35f;
|
||||
public const float DeadMoveSpeed = 5.0f;
|
||||
public const float DeadMoveDistance = 3.0f;
|
||||
public const string SPRITE_CHARACTER_SHADER_NAME = "BF/Sprites/Character";
|
||||
public const string MODEL_CHARACTER_SHADER_NAME = "BF/Models/Character";
|
||||
public const float UNIT_MOVE_DISTANCE = 1000.0f;
|
||||
public const float UNIT_MOVE_DISTANCE_OPPOSITE = -1000.0f;
|
||||
public const float ITEM_QUICK_MOVE_SPEED = 10.0f;
|
||||
public const float ITEM_QUICK_MOVE_TIME = 2.0f;
|
||||
public const float EXP_ITEM_MOVE_SPEED = 10.0f;
|
||||
public const float EXP_ITEM_MOVE_TIME = 0.2f;
|
||||
public const float CHECK_DIRECTION_TIME = 0.1f;
|
||||
public const float RADIANS_10 = 10.0f*Mathf.Deg2Rad;
|
||||
public const float RADIANS_180 = 180.0f*Mathf.Deg2Rad;
|
||||
public const float RADIANS_NEGATIVE_180 = -180.0f*Mathf.Deg2Rad;
|
||||
public const float RADIANS_360 = 360.0f*Mathf.Deg2Rad;
|
||||
public const int EFFECT_TYPE_MOVE_L = 1;
|
||||
public const int EFFECT_TYPE_MOVE_R = 2;
|
||||
public const int EFFECT_TYPE_MOVE_L_2 = 3;
|
||||
public const int EFFECT_TYPE_MOVE_R_2 = 4;
|
||||
public const int EFFECT_TYPE_CRIT = 5;
|
||||
public const int EFFECT_TYPE_BUFF = 6;
|
||||
public static Color COLOR_ICE = new Color(0.647f, 0.752f, 0.933f);
|
||||
public static Color COLOR_STAGNATE = new Color(0.7f, 0.7f, 0.1f);
|
||||
public static Color COLOR_FEAR = new Color(0.1359f, 0.4222f, 0.6132f, 0.0f);
|
||||
// 无限地图类型
|
||||
public static int MAP_TYPE_UNLIMITED = 1;
|
||||
// 竖向无限地图类型
|
||||
public static int MAP_TYPE_PORTRAIT = 2;
|
||||
// 方块地图类型
|
||||
public static int MAP_TYPE_SQUARE = 3;
|
||||
// 竖向无限地图类型2,比1小一点
|
||||
public static int MAP_TYPE_SMALL_PORTRAIT = 4;
|
||||
// 方块地图类型2,比1要小一些
|
||||
public static int MAP_TYPE_SMALL_SQUARE = 5;
|
||||
public static int ANIMATION_NAME_HASH_RUN = UnityEngine.Animator.StringToHash("run");
|
||||
public static int ANIMATION_NAME_HASH_CHARGE = UnityEngine.Animator.StringToHash("charge");
|
||||
public static int ANIMATION_NAME_HASH_CHARGE_LOOP = UnityEngine.Animator.StringToHash("charge_loop");
|
||||
public const string SFX_DJGX_01 = "assets/prefabs/effects/battle/sfx_djgx_01.prefab";
|
||||
public const string SFX_BXGZ_01 = "assets/prefabs/effects/battle/sfx_bxgz_01.prefab";
|
||||
// CS.UnityEngine.Animator.StringToHash("battle_number_move_l")结果是-526518883
|
||||
public const int ANIMATOR_HASH_NAME_NUMBER_MOVE_L = -526518883;
|
||||
// CS.UnityEngine.Animator.StringToHash("battle_number_move_r")结果是445827326
|
||||
public const int ANIMATOR_HASH_NAME_NUMBER_MOVE_R = 445827326;
|
||||
// CS.UnityEngine.Animator.StringToHash("battle_number_buff")结果是1364146828
|
||||
public const int ANIMATOR_HASH_NAME_NUMBER_BUFF = 1364146828;
|
||||
// CS.UnityEngine.Animator.StringToHash("battle_number_crit")结果是-1734531349
|
||||
public const int ANIMATOR_HASH_NAME_NUMBER_CRIT = -1734531349;
|
||||
// CS.UnityEngine.Animator.StringToHash("battle_number_move_2_l")结果是1474588660
|
||||
public const int ANIMATOR_HASH_NAME_NUMBER_MOVE_L_2 = 1474588660;
|
||||
// CS.UnityEngine.Animator.StringToHash("battle_number_move_2_r")结果是-1377086825
|
||||
public const int ANIMATOR_HASH_NAME_NUMBER_MOVE_R_2 = -1377086825;
|
||||
public const int ANIMATOR_HAS_NAME_SKILL_TOAST = -253867994;
|
||||
public const RigidbodyConstraints RIGIDBODY_CONSTRAINTS = RigidbodyConstraints.FreezePositionY | RigidbodyConstraints.FreezeRotation;
|
||||
}
|
||||
|
||||
public static class BattlePosition
|
||||
{
|
||||
// 预处理
|
||||
// 9 2 3
|
||||
// 8 1 4
|
||||
// 7 6 5
|
||||
public static int[] RectPositionX = new int[121] {
|
||||
0, 0, 1, 1, 1, 0, -1, -1, -1,
|
||||
-1, 0, 1, 2, 2, 2, 2, 2, 1, 0, -1, -2, -2, -2, -2, -2,
|
||||
-2, -1, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, -1, -2, -3, -3, -3, -3, -3, -3, -3,
|
||||
-3, -2, -1, 0, 1, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 1, 0, -1, -2, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4,
|
||||
-4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5
|
||||
};
|
||||
|
||||
public static int[] RectPositionZ = new int[121] {
|
||||
0, 1, 1, 0, -1, -1, -1, 0, 1,
|
||||
2, 2, 2, 2, 1, 0, -1, -2, -2, -2, -2, -2, -1, 0, 1, 2,
|
||||
3, 3, 3, 3, 3, 3, 2, 1, 0, -1, -2, -3, -3, -3, -3, -3, -3, -3, -2, -1, 0, 1, 2, 3,
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 3, 2, 1, 0, -1, -2, -3, -4, -4, -4, -4, -4, -4, -4, -4, -4, -3, -2, -1, 0, 1, 2, 3, 4,
|
||||
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
|
||||
};
|
||||
}
|
||||
|
||||
public static class BattleTMPNumber
|
||||
{
|
||||
public const float PUT_BACK_TIME = 1.367f;
|
||||
//dmg number
|
||||
public static readonly Dictionary<int, char[]> dmgNumber2StrDic = new Dictionary<int, char[]>()
|
||||
{
|
||||
{0 , new char[]{'<','s','p','r','i','t','e','=','1','6','>'}},
|
||||
{1 , new char[]{'<','s','p','r','i','t','e','=','1','7','>'}},
|
||||
{2 , new char[]{'<','s','p','r', 'i','t','e','=','1','8','>'}},
|
||||
{3 , new char[]{'<','s','p','r', 'i','t','e','=','1','9','>'}},
|
||||
{4 , new char[]{'<','s','p','r', 'i','t','e','=','2','0','>'}},
|
||||
{5 , new char[]{'<','s','p','r', 'i','t','e','=','2','1','>'}},
|
||||
{6 , new char[]{'<','s','p', 'r', 'i','t','e','=','2','2','>'}},
|
||||
{7 , new char[]{'<','s','p', 'r', 'i','t','e','=','2','3','>'}},
|
||||
{8 , new char[]{'<','s','p', 'r', 'i','t','e','=','2','4','>'}},
|
||||
{9 , new char[]{'<','s','p','r', 'i','t','e','=','2','5','>'}},
|
||||
};
|
||||
public static readonly char[] dmgAdd = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '2', '7', '>' };
|
||||
public static readonly char[] dmgSub = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '1', '4', '>' };
|
||||
// public static readonly char[] dmgK = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '2', '6', '>' };
|
||||
// public static readonly char[] dmgM = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '1', '5', '>' };
|
||||
|
||||
//crit number
|
||||
public static readonly Dictionary<int, char[]> critNumber2StrDic = new Dictionary<int, char[]>()
|
||||
{
|
||||
{0 , new char[]{'<','s','p', 'r', 'i','t','e','=','7','>'}},
|
||||
{1 , new char[]{'<','s','p', 'r', 'i','t','e','=','2','>'}},
|
||||
{2 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','>'}},
|
||||
{3 , new char[]{'<','s','p', 'r', 'i','t','e','=','8','>'}},
|
||||
{4 , new char[]{'<','s','p', 'r', 'i','t','e','=','4','>'}},
|
||||
{5 , new char[]{'<','s','p', 'r', 'i','t','e','=','9','>'}},
|
||||
{6 , new char[]{'<','s','p', 'r', 'i','t','e','=','1','0','>'}},
|
||||
{7 , new char[]{'<','s','p', 'r', 'i','t','e','=','5','>'}},
|
||||
{8 , new char[]{'<','s','p', 'r', 'i','t','e','=','1','1','>'}},
|
||||
{9 , new char[]{'<','s','p', 'r', 'i','t','e','=','1','2','>'}},
|
||||
};
|
||||
public static readonly char[] critFlag = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '1', '3', '>' };
|
||||
public static readonly char[] critAdd = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '1', '>' };
|
||||
public static readonly char[] critSub = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '0', '>' };
|
||||
// public static readonly char[] critK = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '6', '>' };
|
||||
// public static readonly char[] critM = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '2', '8', '>' };
|
||||
|
||||
//heal number
|
||||
public static readonly Dictionary<int, char[]> healNumber2StrDic = new Dictionary<int, char[]>()
|
||||
{
|
||||
{0 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','1','>'}},
|
||||
{1 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','2','>'}},
|
||||
{2 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','3','>'}},
|
||||
{3 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','4','>'}},
|
||||
{4 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','5','>'}},
|
||||
{5 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','6','>'}},
|
||||
{6 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','7','>'}},
|
||||
{7 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','8','>'}},
|
||||
{8 , new char[]{'<','s','p', 'r', 'i','t','e','=','3','9','>'}},
|
||||
{9 , new char[]{'<','s','p', 'r', 'i','t','e','=','4','0','>'}},
|
||||
};
|
||||
public static readonly char[] healAdd = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '4', '3', '>' };
|
||||
public static readonly char[] healSub = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '4', '2', '>' };
|
||||
// public static readonly char[] healK = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '4', '1', '>' };
|
||||
// public static readonly char[] healM = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '4', '1', '>' };
|
||||
|
||||
//red number
|
||||
public static readonly Dictionary<int, char[]> redNumber2StrDic = new Dictionary<int, char[]>()
|
||||
{
|
||||
{0 , new char[]{'<','s','p', 'r', 'i','t','e','=','5','6','>'}},
|
||||
{1 , new char[]{'<','s','p', 'r', 'i','t','e','=','4','5','>'}},
|
||||
{2 , new char[]{'<','s','p', 'r', 'i','t','e','=','4','6','>'}},
|
||||
{3 , new char[]{'<','s','p', 'r', 'i','t','e','=','4','7','>'}},
|
||||
{4 , new char[]{'<','s','p', 'r', 'i','t','e','=','4','8','>'}},
|
||||
{5 , new char[]{'<','s','p', 'r', 'i','t','e','=','5','1','>'}},
|
||||
{6 , new char[]{'<','s','p', 'r', 'i','t','e','=','5','2','>'}},
|
||||
{7 , new char[]{'<','s','p', 'r', 'i','t','e','=','4','9','>'}},
|
||||
{8 , new char[]{'<','s','p', 'r', 'i','t','e','=','5','3','>'}},
|
||||
{9 , new char[]{'<','s','p', 'r', 'i','t','e','=','5','4','>'}},
|
||||
};
|
||||
public static readonly char[] redAdd = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '2', '9', '>' };
|
||||
public static readonly char[] redSub = new char[] { '<', 's', 'p', 'r', 'i', 't', 'e', '=', '5', '5', '>' };
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fd30dfddee1ea7d4cb02a404da4cd797
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,40 +0,0 @@
|
||||
|
||||
using DG.Tweening;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public static class BattleHelper
|
||||
{
|
||||
public static bool pause = false;
|
||||
public static void Init()
|
||||
{
|
||||
pause = false;
|
||||
}
|
||||
|
||||
public static void Pause()
|
||||
{
|
||||
pause = true;
|
||||
}
|
||||
|
||||
public static void Resume()
|
||||
{
|
||||
pause = false;
|
||||
}
|
||||
|
||||
public static Sequence CreateSequence()
|
||||
{
|
||||
var seq = DG.Tweening.DOTween.Sequence();
|
||||
seq.intId = BattleConst.DOTWEEN_ID_BATTLE;
|
||||
if (pause)
|
||||
{
|
||||
seq.timeScale = 0;
|
||||
}
|
||||
return seq;
|
||||
}
|
||||
|
||||
public static void Clear()
|
||||
{
|
||||
pause = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f8e96bdc549a1b749b69c3c93f10a1af
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,479 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using DG.Tweening;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleManager : ManagerBase
|
||||
{
|
||||
public BattlePool PoolHelper { get; private set; }
|
||||
private bool battleStart = false;
|
||||
public bool UpdateEnabled { get; private set; }
|
||||
public GameObject BattleRoot { get; private set; }
|
||||
private Vector2 vector2A = Vector2.zero;
|
||||
private Vector2 vector2B = Vector2.zero;
|
||||
private BattleControlHero MainHero;
|
||||
private Camera uiCamera;
|
||||
private Camera battleCamera;
|
||||
private GameObject numberRoot;
|
||||
private RectTransform hpBarRootTransform;
|
||||
private RectTransform skillToastRootTransform;
|
||||
public List<BattleControlUnit> AtkUnitsList = new List<BattleControlUnit>();
|
||||
public List<BattleControlUnit> DefUnitsList = new List<BattleControlUnit>();
|
||||
public bool IsAutoUpdateNumberRootPosition = false;
|
||||
private Action<int, int, float, float> luaOnPlayFxFunc;
|
||||
private Action<int, int> luaOnWarningHeroNumChangedFunc;
|
||||
private Action<int, int> luaOnWarningNumChangedFunc;
|
||||
private HashSet<int> effectHeroWarningSet = new HashSet<int>(); // 包含了玩家的所有预警
|
||||
private HashSet<int> effectWarningSet = new HashSet<int>(); // 场上显示的预警
|
||||
private HashSet<BattleSkillToast> skillToastSet = new HashSet<BattleSkillToast>();
|
||||
|
||||
#region override
|
||||
static BattleManager instance;
|
||||
public static BattleManager Create()
|
||||
{
|
||||
BFLog.LogAssert(instance == null, "This method only allows BFMain to call once");
|
||||
instance = new BattleManager();
|
||||
return instance;
|
||||
}
|
||||
BattleManager() { }
|
||||
|
||||
public override void Init()
|
||||
{
|
||||
base.Init();
|
||||
|
||||
PoolHelper = new BattlePool();
|
||||
}
|
||||
|
||||
public override void Destroy()
|
||||
{
|
||||
base.Destroy();
|
||||
instance = null;
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
base.Update();
|
||||
if(!UpdateEnabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public override void SetMono(MonoBehaviour mono)
|
||||
{
|
||||
base.SetMono(mono);
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void InitBattle(Transform sceneNode, Camera uiCamera, Camera battleCamera)
|
||||
{
|
||||
if (ReferenceEquals(BattleRoot, null))
|
||||
{
|
||||
BattleRoot = new GameObject(BattleConst.BATTLE_ROOT_NAME);
|
||||
}
|
||||
BattleRoot.transform.SetParent(sceneNode, false);
|
||||
PoolHelper.SetSceneNode(BattleRoot.transform);
|
||||
PoolHelper.Init();
|
||||
this.uiCamera = uiCamera;
|
||||
this.battleCamera = battleCamera;
|
||||
BattleConfigure.BattleCenterPosX = 0.0f;
|
||||
}
|
||||
|
||||
public void SetMainHero(BattleControlHero mainHero)
|
||||
{
|
||||
MainHero = mainHero;
|
||||
}
|
||||
|
||||
public void StartFight()
|
||||
{
|
||||
battleStart = true;
|
||||
UpdateEnabled = true;
|
||||
}
|
||||
|
||||
public void EndFight()
|
||||
{
|
||||
battleStart = false;
|
||||
UpdateEnabled = false;
|
||||
}
|
||||
|
||||
public void PauseFight()
|
||||
{
|
||||
UpdateEnabled = false;
|
||||
PoolHelper.Pause();
|
||||
BattleHelper.Pause();
|
||||
}
|
||||
|
||||
public void ResumeFight()
|
||||
{
|
||||
UpdateEnabled = true;
|
||||
PoolHelper.Resume();
|
||||
BattleHelper.Resume();
|
||||
}
|
||||
|
||||
public void SetShadow(GameObject shadow)
|
||||
{
|
||||
PoolHelper.SetShadow(shadow);
|
||||
}
|
||||
|
||||
public void SetHpBar(GameObject hpBarRoot, GameObject hpAtk, GameObject hpDef)
|
||||
{
|
||||
hpBarRootTransform = hpBarRoot.transform as RectTransform;
|
||||
PoolHelper.SetHpBar(hpAtk, hpDef, hpBarRoot.transform);
|
||||
}
|
||||
|
||||
public void SetSkillToast(GameObject skillToastRoot, GameObject skillToast)
|
||||
{
|
||||
skillToastRootTransform = skillToastRoot.transform as RectTransform;
|
||||
PoolHelper.SetSkillToast(skillToast, skillToastRoot.transform);
|
||||
}
|
||||
|
||||
public void ShowNormalSkillToast(string iconName, string str, float x, float y, float z, float addY)
|
||||
{
|
||||
var skillToast = PoolHelper.GetSkillToast();
|
||||
skillToast.transform.SetAsLastSibling();
|
||||
skillToast.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
|
||||
skillToast.ShowNormalSkillToast(iconName, str);
|
||||
var screenPosition = battleCamera.WorldToScreenPoint(new Vector3(x, y, z));
|
||||
Vector2 lp;
|
||||
RectTransformUtility.ScreenPointToLocalPointInRectangle(this.skillToastRootTransform.transform as RectTransform, new Vector2(screenPosition.x, screenPosition.y), uiCamera, out lp);
|
||||
var rectTransform = skillToast.transform as RectTransform;
|
||||
rectTransform.anchoredPosition = new Vector2(lp.x, lp.y + addY);
|
||||
|
||||
skillToastSet.Add(skillToast);
|
||||
}
|
||||
|
||||
public void ShowLegacySkillToast(string qltName, string iconName, string str, float x, float y, float z, float addY)
|
||||
{
|
||||
var skillToast = PoolHelper.GetSkillToast();
|
||||
skillToast.transform.SetAsLastSibling();
|
||||
skillToast.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
|
||||
skillToast.ShowLegacySkillToast(qltName, iconName, str);
|
||||
var screenPosition = battleCamera.WorldToScreenPoint(new Vector3(x, y, z));
|
||||
Vector2 lp;
|
||||
RectTransformUtility.ScreenPointToLocalPointInRectangle(this.skillToastRootTransform.transform as RectTransform, new Vector2(screenPosition.x, screenPosition.y), uiCamera, out lp);
|
||||
var rectTransform = skillToast.transform as RectTransform;
|
||||
rectTransform.anchoredPosition = new Vector2(lp.x, lp.y + addY);
|
||||
|
||||
skillToastSet.Add(skillToast);
|
||||
}
|
||||
|
||||
public void RemoveSkillToastSet(BattleSkillToast skillToast)
|
||||
{
|
||||
skillToastSet.Remove(skillToast);
|
||||
}
|
||||
|
||||
public void SetEffectTextParent(GameObject numberRoot, GameObject effectText, GameObject effectTextRed, GameObject effectTextGreen, GameObject effectTextYellow)
|
||||
{
|
||||
this.numberRoot = numberRoot;
|
||||
PoolHelper.SetEffectText(effectText, effectTextRed, effectTextGreen, effectTextYellow, numberRoot.transform);
|
||||
IsAutoUpdateNumberRootPosition = true;
|
||||
}
|
||||
|
||||
public void ShowEffectNumber(int colorType, int effectType, string effectNumber, float x, float y, float z, float addY)
|
||||
{
|
||||
var effectText = PoolHelper.GetEffectText(colorType);
|
||||
effectText.transform.localScale = new Vector3(1.0f, 1.0f, 1.0f);
|
||||
effectText.ShowEffectNumber(effectType, effectNumber);
|
||||
var screenPosition = battleCamera.WorldToScreenPoint(new Vector3(x, y, z));
|
||||
Vector2 lp;
|
||||
RectTransformUtility.ScreenPointToLocalPointInRectangle(this.numberRoot.transform as RectTransform, new Vector2(screenPosition.x, screenPosition.y), uiCamera, out lp);
|
||||
var rectTransform = effectText.transform as RectTransform;
|
||||
rectTransform.anchoredPosition = new Vector2(lp.x, lp.y + addY);
|
||||
}
|
||||
|
||||
public void UpdateEffectTextRootNode()
|
||||
{
|
||||
if (IsAutoUpdateNumberRootPosition)
|
||||
{
|
||||
numberRoot.transform.localPosition = new Vector3(-BattleConfigure.BattleCenterPosX * BattleConfigure.WorldToScreenWidth, 0.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateUIPosition(Vector3 worldPosition, float addY, RectTransform uiTransform)
|
||||
{
|
||||
var screenPosition = battleCamera.WorldToScreenPoint(worldPosition);
|
||||
Vector2 lp;
|
||||
RectTransformUtility.ScreenPointToLocalPointInRectangle(hpBarRootTransform, new Vector2(screenPosition.x, screenPosition.y), uiCamera, out lp);
|
||||
uiTransform.anchoredPosition = new Vector2(lp.x, lp.y + addY);
|
||||
}
|
||||
|
||||
public void AddLuaOnPlayFxFunc(Action<int, int, float, float> luaFunc)
|
||||
{
|
||||
luaOnPlayFxFunc = luaFunc;
|
||||
}
|
||||
|
||||
public void PlayFx(int fxId, int direction, float x, float z)
|
||||
{
|
||||
luaOnPlayFxFunc?.Invoke(fxId, direction, x, z);
|
||||
}
|
||||
|
||||
public void AddLuaOnWarningHeroNumChangedFunc(Action<int, int> luaFunc)
|
||||
{
|
||||
luaOnWarningHeroNumChangedFunc = luaFunc;
|
||||
}
|
||||
|
||||
public void WarningHeroNumChanged(int changedNum, int totalNum)
|
||||
{
|
||||
luaOnWarningHeroNumChangedFunc?.Invoke(changedNum, totalNum);
|
||||
}
|
||||
|
||||
public void AddEffectHeroWarning(int uniqueId)
|
||||
{
|
||||
var success = effectHeroWarningSet.Add(uniqueId);
|
||||
if (success)
|
||||
{
|
||||
WarningHeroNumChanged(1, GetEffectHeroWarningCount());
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveEffectHeroWarning(int uniqueId)
|
||||
{
|
||||
var success = effectHeroWarningSet.Remove(uniqueId);
|
||||
if (success)
|
||||
{
|
||||
WarningHeroNumChanged(-1, GetEffectHeroWarningCount());
|
||||
}
|
||||
}
|
||||
|
||||
public int GetEffectHeroWarningCount()
|
||||
{
|
||||
return effectHeroWarningSet.Count;
|
||||
}
|
||||
|
||||
public void AddLuaOnWarningNumChangedFunc(Action<int, int> luaFunc)
|
||||
{
|
||||
luaOnWarningNumChangedFunc = luaFunc;
|
||||
}
|
||||
|
||||
public void WarningNumChanged(int changedNum, int totalNum)
|
||||
{
|
||||
luaOnWarningNumChangedFunc?.Invoke(changedNum, totalNum);
|
||||
}
|
||||
|
||||
public void AddEffectWarning(int uniqueId)
|
||||
{
|
||||
var success = effectWarningSet.Add(uniqueId);
|
||||
if (success)
|
||||
{
|
||||
WarningNumChanged(1, GetEffectWarningCount());
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveEffectWarning(int uniqueId)
|
||||
{
|
||||
var success = effectWarningSet.Remove(uniqueId);
|
||||
if (success)
|
||||
{
|
||||
WarningNumChanged(-1, GetEffectWarningCount());
|
||||
}
|
||||
}
|
||||
|
||||
public int GetEffectWarningCount()
|
||||
{
|
||||
return effectWarningSet.Count;
|
||||
}
|
||||
|
||||
public void AddToAtkUnitsList(BattleControlUnit unit)
|
||||
{
|
||||
AtkUnitsList.Add(unit);
|
||||
}
|
||||
|
||||
public void RemoveFromAtkUnitsList(BattleControlUnit unit)
|
||||
{
|
||||
AtkUnitsList.Remove(unit);
|
||||
}
|
||||
|
||||
|
||||
public void AddToDefUnitsList(BattleControlUnit unit)
|
||||
{
|
||||
DefUnitsList.Add(unit);
|
||||
}
|
||||
|
||||
public void RemoveFromDefUnitsList(BattleControlUnit unit)
|
||||
{
|
||||
DefUnitsList.Remove(unit);
|
||||
}
|
||||
|
||||
public List<BattleControlUnit> GetUnitsList(int side)
|
||||
{
|
||||
if (side == BattleConst.SIDE_ATK)
|
||||
{
|
||||
return DefUnitsList;
|
||||
}
|
||||
else
|
||||
{
|
||||
return AtkUnitsList;
|
||||
}
|
||||
}
|
||||
|
||||
public int GetDefUnitsCount()
|
||||
{
|
||||
return DefUnitsList.Count;
|
||||
}
|
||||
|
||||
public BattleControlUnit GetNearestUnit(int side)
|
||||
{
|
||||
BattleControlUnit unit = null;
|
||||
if (side == BattleConst.SIDE_ATK)
|
||||
{
|
||||
var countDef = DefUnitsList.Count;
|
||||
if(countDef <= 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var position = MainHero.transform.position;
|
||||
vector2A.Set(position.x, position.z);
|
||||
float minDis = float.MaxValue;
|
||||
for(int j = 0; j < countDef; j++)
|
||||
{
|
||||
var objB = DefUnitsList[j];
|
||||
if (!objB.IsCollisionEnabled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
vector2B.Set(objB.transform.position.x, objB.transform.position.z);
|
||||
var dis = (vector2B - vector2A).sqrMagnitude;
|
||||
if (dis < minDis)
|
||||
{
|
||||
minDis = dis;
|
||||
unit = objB;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return MainHero;
|
||||
}
|
||||
return unit;
|
||||
}
|
||||
|
||||
public void GetNearestDefUnit(float x, float z, out BattleControlUnit leftUnit, out BattleControlUnit rightUnit)
|
||||
{
|
||||
leftUnit = null;
|
||||
rightUnit = null;
|
||||
var count = DefUnitsList.Count;
|
||||
if (count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
float leftMinX = float.MaxValue;
|
||||
float rightMinX = float.MaxValue;
|
||||
float leftDisZ = 0.0f;
|
||||
float rightDisZ = 0.0f;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var defUnit = DefUnitsList[i];
|
||||
var defX = defUnit.transform.position.x;
|
||||
if (defX >= x)
|
||||
{
|
||||
var diffX = defX - x;
|
||||
if (Mathf.Abs(diffX - rightMinX) < 0.000001f)
|
||||
{
|
||||
var newDisZ = Mathf.Abs(defUnit.transform.position.z - z);
|
||||
if (newDisZ < rightDisZ)
|
||||
{
|
||||
rightMinX = diffX;
|
||||
rightDisZ = newDisZ;
|
||||
rightUnit = defUnit;
|
||||
}
|
||||
}
|
||||
else if (diffX < rightMinX)
|
||||
{
|
||||
rightMinX = diffX;
|
||||
rightDisZ = Mathf.Abs(defUnit.transform.position.z - z);
|
||||
rightUnit = defUnit;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var diffX = x - defX;
|
||||
if (Mathf.Abs(diffX - leftMinX) < 0.000001f)
|
||||
{
|
||||
var newDisZ = Mathf.Abs(defUnit.transform.position.z - z);
|
||||
if (newDisZ < leftDisZ)
|
||||
{
|
||||
leftMinX = diffX;
|
||||
leftDisZ = newDisZ;
|
||||
leftUnit = defUnit;
|
||||
}
|
||||
}
|
||||
else if (diffX < leftMinX)
|
||||
{
|
||||
leftMinX = diffX;
|
||||
leftDisZ = Mathf.Abs(defUnit.transform.position.z - z);
|
||||
leftUnit = defUnit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public BattleControlUnit GetNearestDefUnitOnCurrDirection(float x, float z, int direction)
|
||||
{
|
||||
BattleControlUnit unit = null;
|
||||
var countDef = DefUnitsList.Count;
|
||||
if(countDef <= 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
vector2A.Set(x, z);
|
||||
float minDis = float.MaxValue;
|
||||
if (direction == 1) // 找右边的
|
||||
{
|
||||
for(int j = 0; j < countDef; j++)
|
||||
{
|
||||
var objB = DefUnitsList[j];
|
||||
if (objB.transform.position.x >= x)
|
||||
{
|
||||
vector2B.Set(objB.transform.position.x, objB.transform.position.z);
|
||||
var dis = (vector2B - vector2A).sqrMagnitude;
|
||||
if (dis < minDis)
|
||||
{
|
||||
minDis = dis;
|
||||
unit = objB;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else // 找左边的
|
||||
{
|
||||
for(int j = 0; j < countDef; j++)
|
||||
{
|
||||
var objB = DefUnitsList[j];
|
||||
if (objB.transform.position.x <= x)
|
||||
{
|
||||
vector2B.Set(objB.transform.position.x, objB.transform.position.z);
|
||||
var dis = (vector2B - vector2A).sqrMagnitude;
|
||||
if (dis < minDis)
|
||||
{
|
||||
minDis = dis;
|
||||
unit = objB;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return unit;
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
battleStart = false;
|
||||
UpdateEnabled = false;
|
||||
AtkUnitsList.Clear();
|
||||
DefUnitsList.Clear();
|
||||
PoolHelper.Clear();
|
||||
MainHero = null;
|
||||
luaOnPlayFxFunc = null;
|
||||
luaOnWarningHeroNumChangedFunc = null;
|
||||
effectHeroWarningSet.Clear();
|
||||
effectWarningSet.Clear();
|
||||
skillToastSet.Clear();
|
||||
if (!ReferenceEquals(BattleRoot, null))
|
||||
{
|
||||
GameObject.Destroy(BattleRoot);
|
||||
BattleRoot = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 13af7ece17b38f3468a5b7af927be14a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,81 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
namespace BF
|
||||
{
|
||||
public class BattleMonsterData
|
||||
{
|
||||
public bool IsInit = false;
|
||||
public string Res = string.Empty;
|
||||
// 碰撞半径
|
||||
public float CollisionRadius = 0.0f;
|
||||
// 血量
|
||||
public long Hp = 0;
|
||||
// 攻击力
|
||||
public long Atk = 0;
|
||||
public float Spd = 0;
|
||||
public float CD = 0;
|
||||
// 击退抗性
|
||||
public int HitBackResist = 0;
|
||||
// 模型缩放比例
|
||||
public float ModelScale = 1.0f;
|
||||
// 怪物掉落的经验的id
|
||||
public int ExpId = 0;
|
||||
// 怪物掉落的经验的值
|
||||
public int ExpValue = 0;
|
||||
// 怪物掉落的经验的概率
|
||||
public int ExpProbability = 0;
|
||||
// 怪物类型0:普通,1:精英,2:BOSS
|
||||
public int MonsterType = 0;
|
||||
// 是否能被技能击退
|
||||
public bool IsHitBack = true;
|
||||
// 行为逻辑
|
||||
public int ActionType = 0;
|
||||
// 行为逻辑参数1
|
||||
public int ActionValue1 = 0;
|
||||
// 行为逻辑参数2
|
||||
public int ActionValue2 = 0;
|
||||
// 主动技能
|
||||
public int ActiveSkillId = 0;
|
||||
// 主动技能cd
|
||||
public float ActiveSkillCD = 0.0f;
|
||||
// 主动技能是否有开场cd
|
||||
public float ActiveSkillCDStart = 0.0f;
|
||||
// 特殊怪物标识
|
||||
public int SpecialMonster = 0;
|
||||
// 攻击公式
|
||||
public int AttackFormula = 0;
|
||||
// 受到攻击的公式
|
||||
public int BeAttackedFormula = 0;
|
||||
// 免疫减速
|
||||
public bool IgnoreSlow = false;
|
||||
// 免疫冰冻
|
||||
public bool IgnoreIce = false;
|
||||
// 免疫击飞
|
||||
public bool IgnoreAirborne = false;
|
||||
// 免疫吸附
|
||||
public bool IgnoreAdsorb = false;
|
||||
// 免疫停滞
|
||||
public bool IgnoreStagnate = false;
|
||||
// 免疫恐惧
|
||||
public bool IgnoreFear = false;
|
||||
// 免疫掉血
|
||||
public bool IgnoreReduceHp = false;
|
||||
// 死亡时释放的技能id
|
||||
public int TriggerDeadSkillId = 0;
|
||||
// 死亡时有一定概率掉落爱心,炸弹,吸铁石
|
||||
public int DropItemProbability = 0;
|
||||
// 死亡掉落列表
|
||||
public List<int> DropList;
|
||||
public List<int> TryGetEmptyDropList()
|
||||
{
|
||||
if (ReferenceEquals(DropList, null))
|
||||
{
|
||||
DropList = new List<int>();
|
||||
}
|
||||
else
|
||||
{
|
||||
DropList.Clear();
|
||||
}
|
||||
return DropList;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8d611bf2197928c4eb06c1b638496727
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,10 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
namespace BF
|
||||
{
|
||||
public class BattlePetData
|
||||
{
|
||||
public bool IsInit = false;
|
||||
public string Res = string.Empty;
|
||||
public int Follow = 0;
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0a9ebe41d982fa5478156b39e5f16606
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,668 +0,0 @@
|
||||
|
||||
using System.Net.Security;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.CodeDom;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattlePool
|
||||
{
|
||||
private bool isClear = false;
|
||||
private List<BattleControlBoxCollider> boxColliderList;
|
||||
private List<BattleControlSphereCollider> sphereColliderList;
|
||||
private List<BattleControlBoxBullet> boxBulletList;
|
||||
private List<BattleControlSphereBullet> sphereBulletList;
|
||||
private List<BattleContinuousTarget> continuousTargeList;
|
||||
private List<BattleControlColliderContainer> colliderContainerList;
|
||||
private List<BattleEffectNumber> allEffectNumberList;
|
||||
private List<BattleSkillToast> allSkillToastList;
|
||||
private List<BattleEffectNumber> effectNumberList;
|
||||
private List<BattleEffectNumber> effectNumberRedList;
|
||||
private List<BattleEffectNumber> effectNumberGreenList;
|
||||
private List<BattleEffectNumber> effectNumberYellowList;
|
||||
private List<BattleHpBar> hpBarAtkList;
|
||||
private List<BattleHpBar> hpBarDefList;
|
||||
private List<BattleSkillToast> skillToastList;
|
||||
private GameObject poolNode;
|
||||
private Transform sceneNode;
|
||||
private GameObject cacheEffectText;
|
||||
private GameObject cacheEffectTextRed;
|
||||
private GameObject cacheEffectTextGreen;
|
||||
private GameObject cacheEffectTextYellow;
|
||||
private GameObject cacheShadow;
|
||||
private Transform numberRoot;
|
||||
private GameObject cacheHpAtk;
|
||||
private GameObject cacheHpDef;
|
||||
private Transform hpRoot;
|
||||
private GameObject cacheSkillToast;
|
||||
private Transform skillToastRoot;
|
||||
private static int colliderUniqueId;
|
||||
|
||||
public void Init()
|
||||
{
|
||||
isClear = false;
|
||||
if (poolNode == null)
|
||||
{
|
||||
poolNode = new GameObject(BattleConst.BATTLE_POOL_NAME);
|
||||
poolNode.SetActive(false);
|
||||
GameObject.DontDestroyOnLoad(poolNode);
|
||||
}
|
||||
if (ReferenceEquals(boxColliderList, null))
|
||||
{
|
||||
boxColliderList = new List<BattleControlBoxCollider>();
|
||||
}
|
||||
if (ReferenceEquals(sphereColliderList, null))
|
||||
{
|
||||
sphereColliderList = new List<BattleControlSphereCollider>();
|
||||
}
|
||||
if (ReferenceEquals(boxBulletList, null))
|
||||
{
|
||||
boxBulletList = new List<BattleControlBoxBullet>();
|
||||
}
|
||||
if (ReferenceEquals(sphereBulletList, null))
|
||||
{
|
||||
sphereBulletList = new List<BattleControlSphereBullet>();
|
||||
}
|
||||
if (ReferenceEquals(continuousTargeList, null))
|
||||
{
|
||||
continuousTargeList = new List<BattleContinuousTarget>();
|
||||
}
|
||||
if (ReferenceEquals(colliderContainerList, null))
|
||||
{
|
||||
colliderContainerList = new List<BattleControlColliderContainer>();
|
||||
}
|
||||
if (ReferenceEquals(effectNumberList, null))
|
||||
{
|
||||
effectNumberList = new List<BattleEffectNumber>();
|
||||
}
|
||||
if (ReferenceEquals(effectNumberYellowList, null))
|
||||
{
|
||||
effectNumberYellowList = new List<BattleEffectNumber>();
|
||||
}
|
||||
if (ReferenceEquals(effectNumberGreenList, null))
|
||||
{
|
||||
effectNumberGreenList = new List<BattleEffectNumber>();
|
||||
}
|
||||
if (ReferenceEquals(effectNumberRedList, null))
|
||||
{
|
||||
effectNumberRedList = new List<BattleEffectNumber>();
|
||||
}
|
||||
if (ReferenceEquals(allEffectNumberList, null))
|
||||
{
|
||||
allEffectNumberList = new List<BattleEffectNumber>();
|
||||
}
|
||||
if (ReferenceEquals(allSkillToastList, null))
|
||||
{
|
||||
allSkillToastList = new List<BattleSkillToast>();
|
||||
}
|
||||
if (ReferenceEquals(hpBarAtkList, null))
|
||||
{
|
||||
hpBarAtkList = new List<BattleHpBar>();
|
||||
}
|
||||
if (ReferenceEquals(hpBarDefList, null))
|
||||
{
|
||||
hpBarDefList = new List<BattleHpBar>();
|
||||
}
|
||||
if (ReferenceEquals(skillToastList, null))
|
||||
{
|
||||
skillToastList = new List<BattleSkillToast>();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetSceneNode(Transform sceneNode)
|
||||
{
|
||||
this.sceneNode = sceneNode;
|
||||
}
|
||||
|
||||
public void SetShadow(GameObject shadow)
|
||||
{
|
||||
this.cacheShadow = shadow;
|
||||
}
|
||||
|
||||
public GameObject GetShadow()
|
||||
{
|
||||
return GameObject.Instantiate(this.cacheShadow);
|
||||
}
|
||||
|
||||
public void SetEffectText(GameObject effectText, GameObject effectTextRed, GameObject effectTextGreen, GameObject effectTextYellow, Transform numberRoot)
|
||||
{
|
||||
this.cacheEffectText = effectText;
|
||||
this.cacheEffectTextRed = effectTextRed;
|
||||
this.cacheEffectTextGreen = effectTextGreen;
|
||||
this.cacheEffectTextYellow = effectTextYellow;
|
||||
this.numberRoot = numberRoot;
|
||||
}
|
||||
|
||||
public void SetHpBar(GameObject hpAtk, GameObject hpDef, Transform numberRoot)
|
||||
{
|
||||
this.cacheHpAtk = hpAtk;
|
||||
this.cacheHpDef = hpDef;
|
||||
this.hpRoot = numberRoot;
|
||||
}
|
||||
|
||||
public void SetSkillToast(GameObject skillToast, Transform skillToastRoot)
|
||||
{
|
||||
this.cacheSkillToast = skillToast;
|
||||
this.skillToastRoot = skillToastRoot;
|
||||
}
|
||||
|
||||
public BattleControlBoxCollider GetSkillBoxCollider()
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (boxColliderList.Count > 0)
|
||||
{
|
||||
var box = boxColliderList[boxColliderList.Count - 1];
|
||||
boxColliderList.RemoveAt(boxColliderList.Count - 1);
|
||||
box.gameObject.SetActive(true);
|
||||
box.IsRecycle = false;
|
||||
return box;
|
||||
}
|
||||
else
|
||||
{
|
||||
var gameObject = new GameObject(BattleConst.BATTLE_BOX_COLLIDER_NAME);
|
||||
gameObject.transform.SetParent(sceneNode);
|
||||
var box = gameObject.AddComponent<BattleControlBoxCollider>();
|
||||
box.IsRecycle = false;
|
||||
box.SetColliderEnabled(false);
|
||||
return box;
|
||||
}
|
||||
}
|
||||
|
||||
public void RecycleSkillBoxCollider(BattleControlBoxCollider box)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
GameObject.Destroy(box.gameObject);
|
||||
return;
|
||||
}
|
||||
box.uniqueId = GetColliderUniqueId();
|
||||
box.IsRecycle = true;
|
||||
boxColliderList.Add(box);
|
||||
box.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public BattleControlSphereCollider GetSkillSphereCollider()
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (sphereColliderList.Count > 0)
|
||||
{
|
||||
var sphere = sphereColliderList[sphereColliderList.Count - 1];
|
||||
sphereColliderList.RemoveAt(sphereColliderList.Count - 1);
|
||||
sphere.gameObject.SetActive(true);
|
||||
sphere.IsRecycle = false;
|
||||
return sphere;
|
||||
}
|
||||
else
|
||||
{
|
||||
var gameObject = new GameObject(BattleConst.BATTLE_SPHERE_COLLIDER_NAME);
|
||||
gameObject.transform.SetParent(sceneNode);
|
||||
var sphere = gameObject.AddComponent<BattleControlSphereCollider>();
|
||||
sphere.IsRecycle = false;
|
||||
sphere.SetColliderEnabled(false);
|
||||
return sphere;
|
||||
}
|
||||
}
|
||||
|
||||
public void RecycleSkillSphereCollider(BattleControlSphereCollider sphere)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
GameObject.Destroy(sphere.gameObject);
|
||||
return;
|
||||
}
|
||||
sphere.uniqueId = GetColliderUniqueId();
|
||||
sphere.IsRecycle = true;
|
||||
sphereColliderList.Add(sphere);
|
||||
sphere.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public BattleContinuousTarget GetContinuousTarge()
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (continuousTargeList.Count > 0)
|
||||
{
|
||||
var target = continuousTargeList[continuousTargeList.Count - 1];
|
||||
continuousTargeList.RemoveAt(continuousTargeList.Count - 1);
|
||||
return target;
|
||||
}
|
||||
else
|
||||
{
|
||||
var target = new BattleContinuousTarget();
|
||||
return target;
|
||||
}
|
||||
}
|
||||
|
||||
public void RecycleContinuousTarge(BattleContinuousTarget target)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
target.Unit = null;
|
||||
return;
|
||||
}
|
||||
continuousTargeList.Add(target);
|
||||
}
|
||||
|
||||
public BattleControlColliderContainer GetColliderContainer()
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (colliderContainerList.Count > 0)
|
||||
{
|
||||
var container = colliderContainerList[colliderContainerList.Count - 1];
|
||||
colliderContainerList.RemoveAt(colliderContainerList.Count - 1);
|
||||
container.IsRecycle = false;
|
||||
return container;
|
||||
}
|
||||
else
|
||||
{
|
||||
var container = new BattleControlColliderContainer();
|
||||
container.IsRecycle = false;
|
||||
return container;
|
||||
}
|
||||
}
|
||||
|
||||
public void RecycleColliderContainer(BattleControlColliderContainer container)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return;
|
||||
}
|
||||
container.IsRecycle = true;
|
||||
colliderContainerList.Add(container);
|
||||
}
|
||||
|
||||
public BattleControlSphereBullet GetSphereBullet()
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (sphereBulletList.Count > 0)
|
||||
{
|
||||
var bullet = sphereBulletList[sphereBulletList.Count - 1];
|
||||
sphereBulletList.RemoveAt(sphereBulletList.Count - 1);
|
||||
bullet.gameObject.SetActive(true);
|
||||
bullet.IsRecycle = false;
|
||||
return bullet;
|
||||
}
|
||||
else
|
||||
{
|
||||
var gameObject = new GameObject(BattleConst.BATTLE_SPHERE_BULLET_NAME);
|
||||
gameObject.transform.SetParent(sceneNode);
|
||||
var bullet = gameObject.AddComponent<BattleControlSphereBullet>();
|
||||
bullet.IsRecycle = false;
|
||||
bullet.SetColliderEnabled(false);
|
||||
return bullet;
|
||||
}
|
||||
}
|
||||
|
||||
public void RecycleSphereBullet(BattleControlSphereBullet bullet)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
GameObject.Destroy(bullet.gameObject);
|
||||
return;
|
||||
}
|
||||
bullet.IsRecycle = true;
|
||||
sphereBulletList.Add(bullet);
|
||||
bullet.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public BattleControlBoxBullet GetBoxBullet()
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (boxBulletList.Count > 0)
|
||||
{
|
||||
var bullet = boxBulletList[boxBulletList.Count - 1];
|
||||
boxBulletList.RemoveAt(boxBulletList.Count - 1);
|
||||
bullet.gameObject.SetActive(true);
|
||||
bullet.IsRecycle = false;
|
||||
return bullet;
|
||||
}
|
||||
else
|
||||
{
|
||||
var gameObject = new GameObject(BattleConst.BATTLE_BOX_BULLET_NAME);
|
||||
gameObject.transform.SetParent(sceneNode);
|
||||
var bullet = gameObject.AddComponent<BattleControlBoxBullet>();
|
||||
bullet.IsRecycle = false;
|
||||
bullet.SetColliderEnabled(false);
|
||||
return bullet;
|
||||
}
|
||||
}
|
||||
|
||||
public void RecycleBoxBullet(BattleControlBoxBullet bullet)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
GameObject.Destroy(bullet.gameObject);
|
||||
return;
|
||||
}
|
||||
bullet.IsRecycle = true;
|
||||
boxBulletList.Add(bullet);
|
||||
bullet.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public BattleEffectNumber GetEffectText(int colorType)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (colorType == 1)
|
||||
{
|
||||
if (effectNumberRedList.Count > 0)
|
||||
{
|
||||
var cachedComp = effectNumberRedList[effectNumberRedList.Count - 1];
|
||||
effectNumberRedList.RemoveAt(effectNumberRedList.Count - 1);
|
||||
cachedComp.SetEnabled(true);
|
||||
return cachedComp;
|
||||
}
|
||||
var obj = GameObject.Instantiate(cacheEffectTextRed, numberRoot, false);
|
||||
var comp = obj.GetComponent<BattleEffectNumber>();
|
||||
comp.ColorType = colorType;
|
||||
allEffectNumberList.Add(comp);
|
||||
return comp;
|
||||
}
|
||||
else if (colorType == 2)
|
||||
{
|
||||
if (effectNumberYellowList.Count > 0)
|
||||
{
|
||||
var cachedComp = effectNumberYellowList[effectNumberYellowList.Count - 1];
|
||||
effectNumberYellowList.RemoveAt(effectNumberYellowList.Count - 1);
|
||||
cachedComp.SetEnabled(true);
|
||||
return cachedComp;
|
||||
}
|
||||
var obj = GameObject.Instantiate(cacheEffectTextYellow, numberRoot, false);
|
||||
var comp = obj.GetComponent<BattleEffectNumber>();
|
||||
comp.ColorType = colorType;
|
||||
allEffectNumberList.Add(comp);
|
||||
return comp;
|
||||
}
|
||||
else if (colorType == 3)
|
||||
{
|
||||
if (effectNumberGreenList.Count > 0)
|
||||
{
|
||||
var cachedComp = effectNumberGreenList[effectNumberGreenList.Count - 1];
|
||||
effectNumberGreenList.RemoveAt(effectNumberGreenList.Count - 1);
|
||||
cachedComp.SetEnabled(true);
|
||||
return cachedComp;
|
||||
}
|
||||
var obj = GameObject.Instantiate(cacheEffectTextGreen, numberRoot, false);
|
||||
var comp = obj.GetComponent<BattleEffectNumber>();
|
||||
comp.ColorType = colorType;
|
||||
allEffectNumberList.Add(comp);
|
||||
return comp;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (effectNumberList.Count > 0)
|
||||
{
|
||||
var cachedComp = effectNumberList[effectNumberList.Count - 1];
|
||||
effectNumberList.RemoveAt(effectNumberList.Count - 1);
|
||||
cachedComp.SetEnabled(true);
|
||||
return cachedComp;
|
||||
}
|
||||
var obj = GameObject.Instantiate(cacheEffectText, numberRoot, false);
|
||||
var comp = obj.GetComponent<BattleEffectNumber>();
|
||||
comp.ColorType = 0;
|
||||
allEffectNumberList.Add(comp);
|
||||
return comp;
|
||||
}
|
||||
}
|
||||
|
||||
public void PutBackEffectText(BattleEffectNumber comp, int colorType)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
GameObject.Destroy(comp.gameObject);
|
||||
return;
|
||||
}
|
||||
comp.transform.localScale = Vector3.zero;
|
||||
comp.SetEnabled(false);
|
||||
if (colorType == 1)
|
||||
{
|
||||
effectNumberRedList.Add(comp);
|
||||
}
|
||||
else if (colorType == 2)
|
||||
{
|
||||
effectNumberYellowList.Add(comp);
|
||||
}
|
||||
else if (colorType == 3)
|
||||
{
|
||||
effectNumberGreenList.Add(comp);
|
||||
}
|
||||
else
|
||||
{
|
||||
effectNumberList.Add(comp);
|
||||
}
|
||||
}
|
||||
|
||||
public BattleHpBar GetHpBar(int side)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (side == 2)
|
||||
{
|
||||
if (hpBarDefList.Count > 0)
|
||||
{
|
||||
var cachedComp = hpBarDefList[hpBarDefList.Count - 1];
|
||||
hpBarDefList.RemoveAt(hpBarDefList.Count - 1);
|
||||
cachedComp.enabled = true;
|
||||
return cachedComp;
|
||||
}
|
||||
var obj = GameObject.Instantiate(cacheHpDef, hpRoot, false);
|
||||
var comp = obj.GetComponent<BattleHpBar>();
|
||||
return comp;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hpBarAtkList.Count > 0)
|
||||
{
|
||||
var cachedComp = hpBarAtkList[hpBarAtkList.Count - 1];
|
||||
hpBarAtkList.RemoveAt(hpBarAtkList.Count - 1);
|
||||
cachedComp.enabled = true;
|
||||
return cachedComp;
|
||||
}
|
||||
var obj = GameObject.Instantiate(cacheHpAtk, hpRoot, false);
|
||||
var comp = obj.GetComponent<BattleHpBar>();
|
||||
return comp;
|
||||
}
|
||||
}
|
||||
|
||||
public void PutBackHpBar(BattleHpBar comp, int side)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
GameObject.Destroy(comp.gameObject);
|
||||
return;
|
||||
}
|
||||
comp.transform.localScale = Vector3.zero;
|
||||
comp.enabled = false;
|
||||
if (side == 2)
|
||||
{
|
||||
hpBarDefList.Add(comp);
|
||||
}
|
||||
else
|
||||
{
|
||||
hpBarAtkList.Add(comp);
|
||||
}
|
||||
}
|
||||
|
||||
public BattleSkillToast GetSkillToast()
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (skillToastList.Count > 0)
|
||||
{
|
||||
var cachedComp = skillToastList[skillToastList.Count - 1];
|
||||
skillToastList.RemoveAt(skillToastList.Count - 1);
|
||||
cachedComp.enabled = true;
|
||||
return cachedComp;
|
||||
}
|
||||
var obj = GameObject.Instantiate(cacheSkillToast, skillToastRoot, false);
|
||||
var comp = obj.GetComponent<BattleSkillToast>();
|
||||
allSkillToastList.Add(comp);
|
||||
return comp;
|
||||
}
|
||||
|
||||
public void PutBackSkillToast(BattleSkillToast comp)
|
||||
{
|
||||
if(isClear)
|
||||
{
|
||||
GameObject.Destroy(comp.gameObject);
|
||||
return;
|
||||
}
|
||||
comp.transform.localScale = Vector3.zero;
|
||||
comp.SetEnabled(false);
|
||||
skillToastList.Add(comp);
|
||||
|
||||
BFMain.Instance.BattleMgr.RemoveSkillToastSet(comp);
|
||||
}
|
||||
|
||||
public static int GetColliderUniqueId()
|
||||
{
|
||||
return colliderUniqueId ++;
|
||||
}
|
||||
|
||||
public void Pause()
|
||||
{
|
||||
if (!ReferenceEquals(allEffectNumberList, null))
|
||||
{
|
||||
int count = allEffectNumberList.Count;
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
allEffectNumberList[i].SetPause();
|
||||
}
|
||||
}
|
||||
if (!ReferenceEquals(allSkillToastList, null))
|
||||
{
|
||||
int count = allSkillToastList.Count;
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
allSkillToastList[i].SetPause();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Resume()
|
||||
{
|
||||
if (!ReferenceEquals(allEffectNumberList, null))
|
||||
{
|
||||
int count = allEffectNumberList.Count;
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
allEffectNumberList[i].SetResume();
|
||||
}
|
||||
}
|
||||
if (!ReferenceEquals(allSkillToastList, null))
|
||||
{
|
||||
int count = allSkillToastList.Count;
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
allSkillToastList[i].SetResume();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
isClear = true;
|
||||
if (!ReferenceEquals(boxColliderList, null))
|
||||
{
|
||||
boxColliderList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(sphereColliderList, null))
|
||||
{
|
||||
sphereColliderList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(boxBulletList, null))
|
||||
{
|
||||
boxBulletList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(sphereBulletList, null))
|
||||
{
|
||||
sphereBulletList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(continuousTargeList, null))
|
||||
{
|
||||
continuousTargeList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(colliderContainerList, null))
|
||||
{
|
||||
colliderContainerList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(effectNumberList, null))
|
||||
{
|
||||
effectNumberList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(effectNumberGreenList, null))
|
||||
{
|
||||
effectNumberGreenList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(effectNumberRedList, null))
|
||||
{
|
||||
effectNumberRedList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(effectNumberYellowList, null))
|
||||
{
|
||||
effectNumberYellowList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(allEffectNumberList, null))
|
||||
{
|
||||
int count = allEffectNumberList.Count;
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
GameObject.Destroy(allEffectNumberList[i].gameObject);
|
||||
}
|
||||
allEffectNumberList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(allSkillToastList, null))
|
||||
{
|
||||
int count = allSkillToastList.Count;
|
||||
for(int i = 0; i < count; i++)
|
||||
{
|
||||
GameObject.Destroy(allSkillToastList[i].gameObject);
|
||||
}
|
||||
allSkillToastList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(hpBarAtkList, null))
|
||||
{
|
||||
hpBarAtkList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(hpBarDefList, null))
|
||||
{
|
||||
hpBarDefList.Clear();
|
||||
}
|
||||
if (!ReferenceEquals(skillToastList, null))
|
||||
{
|
||||
skillToastList.Clear();
|
||||
}
|
||||
if (poolNode != null)
|
||||
{
|
||||
GameObject.Destroy(poolNode);
|
||||
poolNode = null;
|
||||
}
|
||||
sceneNode = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d7a4ede0d91b42f41b6d8f8cdad9764a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,126 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleSkillData
|
||||
{
|
||||
public bool IsInit = false;
|
||||
public int SkillId = 0;
|
||||
// 子弹资源路径
|
||||
public string Res = string.Empty;
|
||||
public int DirectionType = 0;
|
||||
// 子弹数量
|
||||
public int BulletCount = 0;
|
||||
// 是否享受英雄的子弹数量加成
|
||||
public bool WithUnitBulletCount = false;
|
||||
// 扩散角度
|
||||
public int Diffusion = 0;
|
||||
public int Kind = 0;
|
||||
// 子弹飞行速度
|
||||
public float BulletSpeed = 0.0f;
|
||||
// 是否享受英雄的子弹飞行速度加成
|
||||
public bool WithUnitBulletSpeed = false;
|
||||
// 穿透数量
|
||||
public int MaxHitCount = 0;
|
||||
// 是否享受英雄的子弹穿透数量加成
|
||||
public bool WithUnitBulletHitCount = false;
|
||||
// 无限的穿透次数
|
||||
public bool UnlimitedHitCount = false;
|
||||
// 碰撞类型
|
||||
public int CollisionType = 0;
|
||||
// 基础碰撞半径
|
||||
public float BaseCollisionRadius = 0.0f;
|
||||
// 碰撞半径
|
||||
public float CollisionRadius = 0.0f;
|
||||
// 基础碰撞宽
|
||||
public float BaseCollisionWidth = 0.0f;
|
||||
// 碰撞宽
|
||||
public float CollisionWidth = 0.0f;
|
||||
// 基础碰撞宽
|
||||
public float BaseCollisionHeight = 0.0f;
|
||||
// 碰撞高
|
||||
public float CollisionHeight = 0.0f;
|
||||
// 持续时间
|
||||
public float Lifetime = 0.0f;
|
||||
// 是否永久存在
|
||||
public bool Forever = false;
|
||||
// 是否享受英雄的子弹持续时间加成
|
||||
public bool WithUnitBulletLifetime = false;
|
||||
// 圆型技能的攻击半径
|
||||
public float Range = 0.0f;
|
||||
// 攻击距离
|
||||
public float AtkDistance = 0.0f;
|
||||
// 是否享受英雄的攻击距离加成
|
||||
public bool WithUnitBulletRange = false;
|
||||
// 是否享受英雄减CD效果
|
||||
public bool WithUnitSkillCD = false;
|
||||
// 是否是地面技能
|
||||
public bool IsFloor = false;
|
||||
// 生效间隔
|
||||
public float EffectInterval = 0.0f;
|
||||
// 延迟生效
|
||||
public float EffectDelay = 0.0f;
|
||||
// 技能倍率
|
||||
public double HurtFactor = 0.0f;
|
||||
// 子弹发射间隔
|
||||
public float BulletSendInterval = 0.0f;
|
||||
// 子弹音效ID
|
||||
public int BulletSoundID = 0;
|
||||
// 子弹音效延迟播放时间
|
||||
public float BulletSoundDelay = 0.0f;
|
||||
// 子弹特效延迟播放
|
||||
public float BulletFxDelay = 0.0f;
|
||||
// 击退距离
|
||||
public float HitBack = 0.0f;
|
||||
// 生效次数
|
||||
public int WorkTime = 0;
|
||||
// 控制类型
|
||||
public int ControlType = 0;
|
||||
// 控制参数
|
||||
public int ControlParam = 0;
|
||||
// 控制持续时间
|
||||
public float ControlDuration = 0.0f;
|
||||
// 目标效果
|
||||
public int TargetEffect = 0;
|
||||
// 目标效果值
|
||||
public long TargetEffectValue = 0;
|
||||
// 目标效果时间
|
||||
public float TargetEffectTime = 0.0f;
|
||||
// 子技能id
|
||||
public int SkillSub = 0;
|
||||
// 子技能触发条件
|
||||
public int SkillSubTrigger = 0;
|
||||
// 子技能触发参数
|
||||
public int SkillSubTriggerValue = 0;
|
||||
// 子弹高度
|
||||
public float BulletShootHeight = -1.0f;
|
||||
// 额外伤害类型
|
||||
public int HurtExtraType = 0;
|
||||
// 额外伤害参数
|
||||
public long HurtExtraValue = 0;
|
||||
// 特殊伤害值
|
||||
public long HurtSpecial = 0;
|
||||
// 坐标偏移
|
||||
public float OffsetX = 0.0f;
|
||||
public float OffsetY = 0.0f;
|
||||
public float OffsetZ = 0.0f;
|
||||
// 特殊表现的特效
|
||||
public string SpecialFx = string.Empty;
|
||||
// 特殊表现的特效是否是地面特效
|
||||
public bool IsSpecialFxFloor = false;
|
||||
// 特殊表现的参数
|
||||
public List<int> SpecialFxParams;
|
||||
public List<int> TryGetEmptySpecialFxParams()
|
||||
{
|
||||
if (ReferenceEquals(SpecialFxParams, null))
|
||||
{
|
||||
SpecialFxParams = new List<int>();
|
||||
}
|
||||
else
|
||||
{
|
||||
SpecialFxParams.Clear();
|
||||
}
|
||||
return SpecialFxParams;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f1ddab01af970d448b974c3c147d413f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,72 +0,0 @@
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleUnitData
|
||||
{
|
||||
// 血量
|
||||
public long Hp = 0;
|
||||
// 最大血量
|
||||
public long MaxHp = 0;
|
||||
// 生命恢复
|
||||
public int Recover = 0;
|
||||
// 攻击力
|
||||
public long Atk = 0;
|
||||
// 移动速度
|
||||
public float MoveSpeed = 0;
|
||||
// 暴击率
|
||||
public int Crit = 0;
|
||||
// 暴击伤害加成
|
||||
public double CritDmgAddition = 0;
|
||||
// 子弹数量
|
||||
public int BulletCount = 0;
|
||||
// 子弹额外穿透数量
|
||||
public int HitCount = 0;
|
||||
// 子弹飞行速度加成
|
||||
public int BulletSpeed = 0;
|
||||
// 技能持续时间加成
|
||||
public float Lifetime = 0.0f;
|
||||
// 冷却加成
|
||||
public float Cooldown = 0.0f;
|
||||
// 攻击范围加成
|
||||
public float AtkRange = 0.0f;
|
||||
// 道具拾取范围加成
|
||||
public float PickupRange = 0.0f;
|
||||
// 经验获取倍率增加
|
||||
public float ExpAddition = 0.0f;
|
||||
// 金币获取加成
|
||||
public float CoinAddition = 0.0f;
|
||||
// 受到普通怪伤害减少
|
||||
public int DmgDec1 = 0;
|
||||
// 受到精英怪伤害减少
|
||||
public int DmgDec2 = 0;
|
||||
// 受到BOSS伤减少
|
||||
public int DmgDec3 = 0;
|
||||
// 伤害减免,在伤害计算的最后按百分比减少
|
||||
public double DmgDecAll = 0.0f;
|
||||
// 治疗效果(捡爱心和技能回血,不包括自动回血)
|
||||
public double Cured = 0.0f;
|
||||
// 对boss和精英怪的伤害提升
|
||||
public double HurtBossTime = 0.0f;
|
||||
// 自身伤害加成
|
||||
public double DmgAddition = 0.0f;
|
||||
// 对精英和首领伤害提高(固定值)
|
||||
public long HurtBoss = 0;
|
||||
// 对小怪伤害提高(固定值)
|
||||
public long HurtMonster = 0;
|
||||
// 所有伤害提高(固定值)
|
||||
public long HurtAll = 0;
|
||||
// 子弹伤害减免(固定值)
|
||||
public long BulletDecValue = 0;
|
||||
// 碰撞伤害减免(固定值)
|
||||
public long TouchDecValue = 0;
|
||||
// 所有伤害减免(固定值)
|
||||
public long AllDecValue = 0;
|
||||
// 对目标异常状态下的伤害加成
|
||||
public double DmgAdditionControl = 0.0;
|
||||
// 爱心道具的恢复比例提升
|
||||
public double HeartCure = 0.0;
|
||||
// 特殊伤害值
|
||||
public long AtkSpecial = 0;
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4f87530f348764a49aa6df5fefd6e8ce
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -17,6 +17,8 @@ namespace BF
|
||||
public string env;
|
||||
public string cdn_url;
|
||||
public List<Dictionary<string, string>> game_urls = new List<Dictionary<string, string>>();
|
||||
public long open_time;
|
||||
public long open_at;
|
||||
public long now;
|
||||
public string notice;
|
||||
}
|
||||
}
|
||||
@ -111,7 +111,7 @@ namespace BF
|
||||
if (sendHeartBeatCount > ownerConnection.configuration.MaxHeartBeatMissCount)
|
||||
{
|
||||
LogDebug("Miss heart beat max count, try reconnect.");
|
||||
// StartSmartReconnectCountdown();
|
||||
StartSmartReconnectCountdown();
|
||||
ResetHeartBeatStatus();
|
||||
return;
|
||||
}
|
||||
@ -121,7 +121,7 @@ namespace BF
|
||||
if (waitHeartBeatInterval > maxHeartBeatMissTime)
|
||||
{
|
||||
LogDebug("Miss heart beat max time, try reconnect.");
|
||||
// StartSmartReconnectCountdown();
|
||||
StartSmartReconnectCountdown();
|
||||
ResetHeartBeatStatus();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ public partial class AdManager : BF.MonoSingleton<AdManager>
|
||||
private const string Key = "9uHgeBwag3NXva9MC23ToO3q11Ve59bF1uwg4qGltdGmCQ7OSByFZ_3b1ZF7krMlkHQo5gXzIokVDsvg1rwbr-";
|
||||
string bannerAdUnitId = "YOUR_BANNER_AD_UNIT_ID"; // Retrieve the ID from your account
|
||||
string adInterstitialUnitId = "YOUR_AD_UNIT_ID";
|
||||
string adRewardUnitId = "e0fc2e3efef362de";
|
||||
string adRewardUnitId = "e54f27e345da90df";
|
||||
|
||||
// Start is called before the first frame update
|
||||
public void Init(string init = "")
|
||||
|
||||
@ -2,6 +2,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
public partial class AdManager
|
||||
{
|
||||
@ -9,6 +10,7 @@ public partial class AdManager
|
||||
|
||||
private Action<int> _rewardCallback;
|
||||
private bool _rewardOK = false;
|
||||
public Action<string> luaAdRevenuePaidEventCallback;
|
||||
|
||||
public void InitializeRewardedAds()
|
||||
{
|
||||
@ -26,6 +28,11 @@ public partial class AdManager
|
||||
LoadRewardedAd();
|
||||
}
|
||||
|
||||
public void SetAdRevenuePaidEventCallback(Action<string> callback)
|
||||
{
|
||||
luaAdRevenuePaidEventCallback = callback;
|
||||
}
|
||||
|
||||
private void LoadRewardedAd()
|
||||
{
|
||||
MaxSdk.LoadRewardedAd(adRewardUnitId);
|
||||
@ -91,6 +98,29 @@ public partial class AdManager
|
||||
|
||||
private void OnRewardedAdRevenuePaidEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
|
||||
{
|
||||
// Ad revenue paid. Use this callback to track user revenue.
|
||||
if (luaAdRevenuePaidEventCallback == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
double revenue = adInfo.Revenue;
|
||||
// Miscellaneous data
|
||||
string countryCode = MaxSdk.GetSdkConfiguration().CountryCode; // "US" for the United States, etc - Note: Do not confuse this with currency code which is "USD" in most cases!
|
||||
string networkName = adInfo.NetworkName; // Display name of the network that showed the ad (e.g. "AdColony")
|
||||
string adUnitIdentifier = adInfo.AdUnitIdentifier; // The MAX Ad Unit ID
|
||||
string placement = adInfo.Placement; // The placement this ad's postbacks are tied to
|
||||
string networkPlacement = adInfo.NetworkPlacement; // The placement ID from the network that showed the ad
|
||||
string adFormat = adInfo.AdFormat;
|
||||
|
||||
var dict = new Dictionary<string, System.Object>();
|
||||
dict.Add("revenue", revenue);
|
||||
dict.Add("country_code", countryCode);
|
||||
dict.Add("network_name", networkName);
|
||||
dict.Add("ad_unit_Id", adUnitId);
|
||||
dict.Add("ad_unit_identifier", adUnitIdentifier);
|
||||
dict.Add("placement", placement);
|
||||
dict.Add("network_placement", networkPlacement);
|
||||
dict.Add("ad_format", adFormat);
|
||||
var result = JsonConvert.SerializeObject(dict);
|
||||
luaAdRevenuePaidEventCallback(result);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using com.adjust.sdk;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
@ -12,6 +13,7 @@ namespace BF
|
||||
public Action<int> luaShowCallback;
|
||||
public Action<int> luaLoadedCallback;
|
||||
public Action<int, string> luaEarnedRewardCallback;
|
||||
public Action<string> luaAdRevenuePaidEventCallback;
|
||||
public bool AdLoaded = false;
|
||||
public bool AdInitialized = false;
|
||||
|
||||
@ -20,7 +22,7 @@ namespace BF
|
||||
|
||||
#if UNITY_ANDROID
|
||||
// string appKey = "85460dcd";
|
||||
string appKey = "19b1b4f1d";
|
||||
string appKey = "1a6aacc25";
|
||||
|
||||
BFLog.Log("unity-script: IronSource.Agent.validateIntegration");
|
||||
IronSource.Agent.validateIntegration();
|
||||
@ -29,10 +31,22 @@ namespace BF
|
||||
|
||||
// SDK init
|
||||
BFLog.Log("unity-script: IronSource.Agent.init");
|
||||
// IronSource.Agent.setMetaData("is_test_suite", "enable");
|
||||
IronSource.Agent.init(appKey);
|
||||
IronSource.Agent.setManualLoadRewardedVideo(true);
|
||||
|
||||
// 初始化之前先设置一下用户id
|
||||
// ISAdQualityConfig adQualityConfig = new ISAdQualityConfig();
|
||||
// adQualityConfig.UserId = SystemInfo.deviceUniqueIdentifier;
|
||||
// // adQualityConfig.TestMode = true;
|
||||
// // adQualityConfig.LogLevel = ISAdQualityLogLevel.INFO;
|
||||
// IronSourceAdQuality.Initialize(appKey, adQualityConfig);
|
||||
#elif UNITY_IPHONE
|
||||
// string appKey = "8545d445";
|
||||
// 初始化之前先设置一下用户id
|
||||
// ISAdQualityConfig adQualityConfig = new ISAdQualityConfig();
|
||||
// adQualityConfig.UserId = SystemInfo.deviceUniqueIdentifier;
|
||||
// IronSourceAdQuality.Initialize(appKey, adQualityConfig);
|
||||
#else
|
||||
// string appKey = "unexpected_platform";
|
||||
#endif
|
||||
@ -78,6 +92,11 @@ namespace BF
|
||||
IronSourceRewardedVideoEvents.onAdClickedEvent += ReardedVideoOnAdClickedEvent;
|
||||
}
|
||||
|
||||
public void SetAdRevenuePaidEventCallback(Action<string> callback)
|
||||
{
|
||||
luaAdRevenuePaidEventCallback = callback;
|
||||
}
|
||||
|
||||
void OnApplicationPause(bool isPaused)
|
||||
{
|
||||
#if UNITY_ANDROID
|
||||
@ -137,6 +156,8 @@ namespace BF
|
||||
void SdkInitializationCompletedEvent()
|
||||
{
|
||||
BFLog.Log("unity-script: I got SdkInitializationCompletedEvent");
|
||||
//Launch test suite
|
||||
// IronSource.Agent.launchTestSuite();
|
||||
}
|
||||
|
||||
#endregion
|
||||
@ -237,16 +258,21 @@ namespace BF
|
||||
|
||||
void ImpressionSuccessEvent(IronSourceImpressionData impressionData)
|
||||
{
|
||||
BFLog.Log("unity - script: I got ImpressionSuccessEvent ToString(): " + impressionData.ToString());
|
||||
BFLog.Log("unity - script: I got ImpressionSuccessEvent allData: " + impressionData.allData);
|
||||
// BFLog.Log("unity - script: I got ImpressionSuccessEvent ToString(): " + impressionData.ToString());
|
||||
// BFLog.Log("unity - script: I got ImpressionSuccessEvent allData: " + impressionData.allData);
|
||||
}
|
||||
|
||||
void ImpressionDataReadyEvent(IronSourceImpressionData impressionData)
|
||||
{
|
||||
if (impressionData == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (ReferenceEquals(impressionData.revenue, null))
|
||||
{
|
||||
return;
|
||||
}
|
||||
double revenue = (double)impressionData.revenue;
|
||||
BFLog.Log("unity - script: I got ImpressionDataReadyEvent ToString(): " + impressionData.ToString());
|
||||
BFLog.Log("unity - script: I got ImpressionDataReadyEvent revenue.ToString(): " + revenue.ToString());
|
||||
BFLog.Log("unity - script: I got ImpressionDataReadyEvent allData: " + impressionData.allData);
|
||||
AdjustAdRevenue adjustAdRevenue = new AdjustAdRevenue(AdjustConfig.AdjustAdRevenueSourceIronSource);
|
||||
adjustAdRevenue.setRevenue(revenue, "USD");
|
||||
// optional fields
|
||||
@ -255,6 +281,36 @@ namespace BF
|
||||
adjustAdRevenue.setAdRevenuePlacement(impressionData.placement);
|
||||
// track Adjust ad revenue
|
||||
Adjust.trackAdRevenue(adjustAdRevenue);
|
||||
|
||||
if (luaAdRevenuePaidEventCallback == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var dict = new Dictionary<string, System.Object>();
|
||||
dict.Add("revenue", revenue);
|
||||
dict.Add("auction_id", impressionData.auctionId);
|
||||
dict.Add("country_code", impressionData.country);
|
||||
dict.Add("network_name", impressionData.adNetwork);
|
||||
dict.Add("ad_unit_Id", impressionData.adUnit);
|
||||
dict.Add("placement", impressionData.placement);
|
||||
dict.Add("ad_format_name", impressionData.instanceName);
|
||||
dict.Add("ad_format_id", impressionData.instanceId);
|
||||
if (!string.IsNullOrEmpty(impressionData.segmentName))
|
||||
{
|
||||
dict.Add("segment_name", impressionData.segmentName);
|
||||
}
|
||||
if (!ReferenceEquals(impressionData.lifetimeRevenue, null))
|
||||
{
|
||||
dict.Add("lifetime_revenue", impressionData.lifetimeRevenue);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(impressionData.encryptedCPM))
|
||||
{
|
||||
dict.Add("encrypted_cpm", impressionData.encryptedCPM);
|
||||
}
|
||||
dict.Add("currency", "USD");
|
||||
dict.Add("precision", impressionData.precision);
|
||||
var result = JsonConvert.SerializeObject(dict);
|
||||
luaAdRevenuePaidEventCallback(result);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@ -89,17 +89,6 @@ namespace BF
|
||||
|
||||
public void InitListener()
|
||||
{
|
||||
// string url = BFPlatform.GetLoginCenterURL();
|
||||
// BFLog.Log("初始化登陆SDK URL:" + url);
|
||||
|
||||
// Dictionary<string, string> gameInfo = new Dictionary<string, string>();
|
||||
// gameInfo["channel"] = CHANNEL;//预留字段 暂无用
|
||||
// gameInfo["language"] = LANGUAGE;//预留字段 暂无用
|
||||
// gameInfo["game_cd"] = GAME_CD;//game_cd 地址 AOD约定为1004
|
||||
// ULogin.Initialize(url, gameInfo);
|
||||
// ULogin.UseOnceBFIdForInstall(USE_ONCE_BFID_FOR_INSTALL);
|
||||
// ULogin.SetULoginListener(this);
|
||||
|
||||
// google
|
||||
BFMain.Instance.SDKMgr.BFNativeSDKMgr.InitGoogleLogin();
|
||||
}
|
||||
@ -146,7 +135,6 @@ namespace BF
|
||||
/// <param name="type"></param>
|
||||
public void Login(LoginType type)
|
||||
{
|
||||
BFLog.Log("新版 登陆中心 Login:" + type);
|
||||
if (type == LoginType.Facebook)
|
||||
{
|
||||
FBSdk.Login();
|
||||
|
||||
@ -2,6 +2,7 @@ using System.Collections.Generic;
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using UnityEngine;
|
||||
using AOT;
|
||||
|
||||
#if UNITY_IOS
|
||||
using System.Runtime.InteropServices;
|
||||
@ -49,10 +50,14 @@ namespace BF
|
||||
#endif
|
||||
|
||||
#if UNITY_IOS && !UNITY_EDITOR
|
||||
private delegate void GetFirebaseTokenCompleted(string token);
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void FIRLogEvent(string eventName, string properties);
|
||||
#endif
|
||||
|
||||
[DllImport("__Internal")]
|
||||
private static extern void FIRGetToken(IntPtr callback);
|
||||
#endif
|
||||
[Serializable]
|
||||
public class NativeResultMsg
|
||||
{
|
||||
@ -138,11 +143,29 @@ namespace BF
|
||||
#endif
|
||||
}
|
||||
|
||||
#if UNITY_IOS && !UNITY_EDITOR
|
||||
[MonoPInvokeCallback(typeof(GetFirebaseTokenCompleted))]
|
||||
private static void GetFirebaseTokenCallback(string token)
|
||||
{
|
||||
BFMain.Instance.LoomMgr.QueueOnMainThread(() =>
|
||||
{
|
||||
BFMain.Instance.SDKMgr.BFLoginSDKMgr.SetFirebaseToken(token);
|
||||
});
|
||||
}
|
||||
#endif
|
||||
|
||||
public void GetFirebaseToken()
|
||||
{
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
androidJavaClass.CallStatic("getFirebaseToken");
|
||||
#endif
|
||||
|
||||
#if UNITY_IOS && !UNITY_EDITOR
|
||||
IntPtr cback = IntPtr.Zero;
|
||||
GetFirebaseTokenCompleted d = GetFirebaseTokenCallback;
|
||||
cback = Marshal.GetFunctionPointerForDelegate(d);
|
||||
FIRGetToken(cback);
|
||||
#endif
|
||||
}
|
||||
|
||||
public void ShowFullScreenAds()
|
||||
@ -188,7 +211,7 @@ namespace BF
|
||||
{
|
||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||
androidJavaClass.CallStatic("logCrash", key, stack);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
public void MsgFromAndroidOrIOS(string content)
|
||||
|
||||
@ -3,6 +3,7 @@ using UnityEngine;
|
||||
using BF.NativeCore.ThirdPlatform;
|
||||
using Newtonsoft.Json;
|
||||
using com.adjust.sdk;
|
||||
using AppsFlyerSDK;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
@ -10,6 +11,7 @@ namespace BF
|
||||
{
|
||||
private ThinkingAnalyticsSdk TASdk = new ThinkingAnalyticsSdk();
|
||||
private AppsFlyerSdk AFSdk = new AppsFlyerSdk();
|
||||
private bool isInitAFAdRevenue = false;
|
||||
|
||||
void Start()
|
||||
{
|
||||
@ -27,6 +29,17 @@ namespace BF
|
||||
public void SetThinkingAnalyticsAccountId(string id)
|
||||
{
|
||||
TASdk.SetAccountId(id);
|
||||
AFSdk.SetTaAccountId(id);
|
||||
}
|
||||
|
||||
public void InitAppsFlyerAdRevenue()
|
||||
{
|
||||
if (isInitAFAdRevenue)
|
||||
{
|
||||
return;
|
||||
}
|
||||
isInitAFAdRevenue = true;
|
||||
AppsFlyerAdRevenue.start();
|
||||
}
|
||||
|
||||
// 清除账户id
|
||||
@ -128,5 +141,27 @@ namespace BF
|
||||
// BFLog.Log("PostAdjustPartnerTrackEvent");
|
||||
Adjust.trackEvent(adjustEvent);
|
||||
}
|
||||
|
||||
public void PostAdjustAdRevenueAppLovinMAX(double revenue, string networkName, string adUnitIdentifier, string placement)
|
||||
{
|
||||
var adRevenue = new AdjustAdRevenue(AdjustConfig.AdjustAdRevenueSourceAppLovinMAX);
|
||||
adRevenue.setRevenue(revenue, "USD");
|
||||
adRevenue.setAdRevenueNetwork(networkName);
|
||||
adRevenue.setAdRevenueUnit(adUnitIdentifier);
|
||||
adRevenue.setAdRevenuePlacement(placement);
|
||||
Adjust.trackAdRevenue(adRevenue);
|
||||
}
|
||||
|
||||
public void AdjustSetDeviceToken(string token)
|
||||
{
|
||||
Adjust.setDeviceToken(token);
|
||||
}
|
||||
|
||||
public void LogAppsFlyerAdRevenue(int mediationNetwork, string monetizationNetwork, double eventRevenue, string data)
|
||||
{
|
||||
var properties = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
|
||||
var mediationNetworkType = (AppsFlyerAdRevenueMediationNetworkType)mediationNetwork;
|
||||
AppsFlyerAdRevenue.logAdRevenue(monetizationNetwork, mediationNetworkType, eventRevenue, "USD", properties);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
116
Assets/Scripts/Common/SDK/DZSDKManager.cs
Normal file
116
Assets/Scripts/Common/SDK/DZSDKManager.cs
Normal file
@ -0,0 +1,116 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System;
|
||||
// using BF.NativeCore.Platform;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
//copy from sdk
|
||||
public enum NotchType
|
||||
{
|
||||
NONE,
|
||||
ANDROID,
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
public class NotchScreenInfo
|
||||
{
|
||||
public NotchType notchType = NotchType.NONE;
|
||||
public bool enabled = false;
|
||||
public int width = 0;
|
||||
public int height = 0;
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("notchType:{0} showNotch:{1} width:{2} height:{3}", notchType, enabled, width, height);
|
||||
}
|
||||
}
|
||||
public class DZSDKManager : MonoBehaviour
|
||||
{
|
||||
|
||||
#if UNITY_ANDROID
|
||||
/// <summary>
|
||||
/// android原生代码对象
|
||||
/// </summary>
|
||||
AndroidJavaObject ajc;
|
||||
#endif
|
||||
//解析的数据
|
||||
private NotchScreenInfo notchScreenInfo = new NotchScreenInfo();
|
||||
private bool initNotchScreen = false;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
#if UNITY_ANDROID
|
||||
//通过该API来实例化导入的arr中对应的类
|
||||
ajc = new AndroidJavaObject("com.droidhang.aod.AODHelper");
|
||||
#endif
|
||||
}
|
||||
|
||||
public void CSGetNotchScreenInfo()
|
||||
{
|
||||
if (initNotchScreen) return;
|
||||
BFLog.Log("尝试获取适配信息 CSGetNotchScreenInfo");
|
||||
#if UNITY_ANDROID
|
||||
//通过API来调用原生代码的方法
|
||||
bool success = ajc.Call<bool>("getNotchScreen");
|
||||
if (success)
|
||||
{
|
||||
initNotchScreen = true;
|
||||
//请求成功
|
||||
BFLog.Log("获取安卓刘海屏成功");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 原生层通过该方法传回信息
|
||||
/// </summary>
|
||||
/// <param name="content"></param>
|
||||
public void GetNotchScreen(string content)
|
||||
{
|
||||
#if UNITY_ANDROID
|
||||
BFLog.Log("获取NotchInfo:" + content);
|
||||
|
||||
if (!string.IsNullOrEmpty(content))
|
||||
{
|
||||
//解析刘海屏数据
|
||||
notchScreenInfo = JsonUtility.FromJson<NotchScreenInfo>(content);
|
||||
|
||||
BFLog.Log("解析 NotchScreen:" + notchScreenInfo.ToString());
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 对外接口 获取刘海屏信息
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public NotchScreenInfo GetNotchScreenInfo()
|
||||
{
|
||||
return notchScreenInfo;
|
||||
}
|
||||
|
||||
// 刘海屏信息 ***************************************************************************************************
|
||||
|
||||
public NotchType GetNotchScreenType()
|
||||
{
|
||||
return notchScreenInfo.notchType;
|
||||
}
|
||||
|
||||
public bool GetNotchScreenEnable()
|
||||
{
|
||||
return notchScreenInfo.enabled;
|
||||
}
|
||||
|
||||
public int GetNotchScreenWidth()
|
||||
{
|
||||
return notchScreenInfo.width;
|
||||
}
|
||||
|
||||
public int GetNotchScreenHeight()
|
||||
{
|
||||
return notchScreenInfo.height;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/Common/SDK/DZSDKManager.cs.meta
Normal file
11
Assets/Scripts/Common/SDK/DZSDKManager.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ced1766fcb78b314db1ae240a0e27a9f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -5,6 +5,7 @@ using AppsFlyerSDK;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Purchasing;
|
||||
using UnityEngine.Purchasing.Security;
|
||||
using UnityEngine.Purchasing.Extension;
|
||||
|
||||
|
||||
public struct ProductInfo {
|
||||
@ -12,7 +13,7 @@ public struct ProductInfo {
|
||||
public ProductType type;
|
||||
}
|
||||
|
||||
public class IAPManager : /* MonoBehaviour, */ IStoreListener {
|
||||
public class IAPManager : /* MonoBehaviour, */ IDetailedStoreListener {
|
||||
public Action<bool, Product[], string> initCallback;
|
||||
public Action<bool, Product, string> buyCallback;
|
||||
public static IAPManager instance;
|
||||
@ -77,6 +78,12 @@ public class IAPManager : /* MonoBehaviour, */ IStoreListener {
|
||||
IAPDebug($"init fail: {er}");
|
||||
initCallback?.Invoke(false, null, er);
|
||||
}
|
||||
|
||||
public void OnInitializeFailed(InitializationFailureReason error, string message) {
|
||||
string er = error.ToString("G");
|
||||
IAPDebug($"init fail2: {er}");
|
||||
initCallback?.Invoke(false, null, er);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ================================================== 购买 ==================================================
|
||||
@ -92,7 +99,6 @@ public class IAPManager : /* MonoBehaviour, */ IStoreListener {
|
||||
IAPDebug($"ID:{productId}.Not found or is not available for purchase");
|
||||
return false;
|
||||
}
|
||||
|
||||
_storeC.InitiatePurchase(productId, payload);
|
||||
return true;
|
||||
}
|
||||
@ -104,6 +110,11 @@ public class IAPManager : /* MonoBehaviour, */ IStoreListener {
|
||||
buyCallback?.Invoke(false, pro, er);
|
||||
}
|
||||
|
||||
public void OnPurchaseFailed(Product pro, PurchaseFailureDescription p) {
|
||||
IAPDebug($"ID:{pro.definition.id}. purchase fail: {p.message}");
|
||||
buyCallback?.Invoke(false, pro, p.message);
|
||||
}
|
||||
|
||||
//购买成功
|
||||
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e) {
|
||||
#if UNITY_EDITOR
|
||||
@ -195,7 +206,6 @@ public class IAPManager : /* MonoBehaviour, */ IStoreListener {
|
||||
private void _appsFlyerChecking(Product product) {
|
||||
|
||||
IAPDebug($"CURRENCY:{product.metadata.isoCurrencyCode} REVENUE:{product.metadata.localizedPrice.ToString()} CONTENT_TYPE:{product.transactionID} CONTENT_ID:{product.definition.id}");
|
||||
|
||||
// Dictionary<string, string> da = new Dictionary<string, string> {
|
||||
// { AFInAppEventParameterName.CURRENCY, product.metadata.isoCurrencyCode },
|
||||
// { AFInAppEventParameterName.REVENUE, product.metadata.localizedPrice.ToString() },
|
||||
@ -208,7 +218,6 @@ public class IAPManager : /* MonoBehaviour, */ IStoreListener {
|
||||
// #endif
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region ================================================== 订阅 ==================================================
|
||||
|
||||
|
||||
@ -9,7 +9,10 @@ namespace BF.NativeCore.ThirdPlatform
|
||||
{
|
||||
public void Init()
|
||||
{
|
||||
// Debug.Log("AppsFlyerSdk Init version = " + AppsFlyer.getSdkVersion());
|
||||
// 打通TA和AF的设置,要在AF初始化之前执行
|
||||
var customData = new Dictionary<string, string>();
|
||||
customData.Add("ta_distinct_id", ThinkingAnalyticsAPI.GetDistinctId());
|
||||
AppsFlyer.setAdditionalData(customData);
|
||||
AppsFlyer.setCustomerIdAndStartSDK(ThinkingAnalyticsAPI.GetDeviceId());
|
||||
}
|
||||
|
||||
@ -17,5 +20,13 @@ namespace BF.NativeCore.ThirdPlatform
|
||||
{
|
||||
AppsFlyer.sendEvent(eventName, properties);
|
||||
}
|
||||
|
||||
public void SetTaAccountId(string accountId)
|
||||
{
|
||||
var customData = new Dictionary<string, string>();
|
||||
customData.Add("ta_distinct_id", ThinkingAnalyticsAPI.GetDistinctId());
|
||||
customData.Add("ta_account_id", accountId);
|
||||
AppsFlyer.setAdditionalData(customData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -40,5 +40,10 @@ namespace BF.NativeCore.ThirdPlatform
|
||||
{
|
||||
ThinkingAnalyticsAPI.Track(eventName, properties, date, appId);
|
||||
}
|
||||
|
||||
public string GetDistinctId()
|
||||
{
|
||||
return ThinkingAnalyticsAPI.GetDistinctId();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,36 +0,0 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public enum BattleControlType {
|
||||
Default = 0,
|
||||
Hero,
|
||||
Monster,
|
||||
Bullet,
|
||||
Item,
|
||||
HalloweenSkillItem,
|
||||
HalloweenEventItem
|
||||
}
|
||||
public class BattleControlBase : MonoBehaviour
|
||||
{
|
||||
[System.NonSerialized]
|
||||
public bool IsCollisionEnabled = true;
|
||||
[System.NonSerialized]
|
||||
public bool WaitRemove = false;
|
||||
[System.NonSerialized]
|
||||
public int Side = 0;
|
||||
[System.NonSerialized]
|
||||
public string Res = string.Empty;
|
||||
[System.NonSerialized]
|
||||
public bool IsInCollision = false;
|
||||
private Vector2 vector2A = Vector2.zero;
|
||||
private Vector2 vector2B = Vector2.zero;
|
||||
public virtual BattleControlType ControlType { get {return BattleControlType.Default;} }
|
||||
public virtual void AddExp(int exp) { }
|
||||
public virtual void AddHpPercent(double percent) { }
|
||||
public virtual void AddGold(int count) { }
|
||||
public virtual void OnHitBack(float distance, Vector3 atkerPos) {}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8a383ef95b1042844b2d6de77db05cb7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,35 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlBoxBullet : BattleControlBullet
|
||||
{
|
||||
private BoxCollider boxCollider;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
boxCollider = gameObject.AddComponent<BoxCollider>();
|
||||
}
|
||||
|
||||
public override void SetupBoxCollisionBody(float collisionWidth, float collisionHeight)
|
||||
{
|
||||
boxCollider.center = new Vector3(collisionWidth/2.0f, 0.0f, 0.0f);
|
||||
boxCollider.size = new Vector3(collisionWidth, 1.0f, collisionHeight);
|
||||
}
|
||||
|
||||
public override void SetColliderEnabled(bool enabled)
|
||||
{
|
||||
boxCollider.enabled = enabled;
|
||||
}
|
||||
|
||||
public override void Recycle()
|
||||
{
|
||||
if (IsRecycle)
|
||||
{
|
||||
return;
|
||||
}
|
||||
boxCollider.enabled = false;
|
||||
BFMain.Instance.BattleMgr.PoolHelper.RecycleBoxBullet(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9dbfb1c0f5da60d43a230becd5e02348
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,50 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlBoxCollider : BattleControlCollider
|
||||
{
|
||||
private BoxCollider boxCollider;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
boxCollider = gameObject.AddComponent<BoxCollider>();
|
||||
}
|
||||
|
||||
public void SetupCollisionBody(float collisionWidth, float collisionHeight, float x, float z)
|
||||
{
|
||||
boxCollider.center = new Vector3(collisionWidth/2.0f, 0.0f, 0.0f);
|
||||
boxCollider.size = new Vector3(collisionWidth, 1.0f, collisionHeight);
|
||||
offset = new Vector3(x, 0.0f, z);
|
||||
}
|
||||
|
||||
public override void SetColliderEnabled(bool enabled)
|
||||
{
|
||||
boxCollider.enabled = enabled;
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (!isActive)
|
||||
{
|
||||
return;
|
||||
}
|
||||
CheckCollider();
|
||||
}
|
||||
|
||||
public override void Recycle()
|
||||
{
|
||||
if (IsRecycle)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!ReferenceEquals(container, null))
|
||||
{
|
||||
container.Remove(this);
|
||||
}
|
||||
boxCollider.enabled = false;
|
||||
isActive = false;
|
||||
BFMain.Instance.BattleMgr.PoolHelper.RecycleSkillBoxCollider(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3d5e7fd63c962eb4abb773fe87d22418
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,399 +0,0 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlBullet : MonoBehaviour
|
||||
{
|
||||
protected BattleControlUnit admin;
|
||||
protected int bulletType = 0;
|
||||
protected int bulletFinishType = 0;
|
||||
protected int bulletOriginType = 0;
|
||||
protected int searchType = 0;
|
||||
protected float radius = 0.0f;
|
||||
protected float duration = 0.0f;
|
||||
protected float width = 0.0f;
|
||||
protected float height = 0.0f;
|
||||
protected float speed = 0.0f;
|
||||
protected float offsetX = 0.0f;
|
||||
protected float offsetZ = 0.0f;
|
||||
protected float checkInterval = 0.0f;
|
||||
protected float checkDuration = 0.0f;
|
||||
protected int skillId = 0;
|
||||
protected int cloneIndex = 0;
|
||||
protected int skillEffectIndex = 0;
|
||||
protected Vector3 offset = Vector3.zero;
|
||||
protected Vector3 targetPosition = Vector3.zero;
|
||||
protected BattleControlUnit targetUnit;
|
||||
protected HashSet<int> CheckTargetDict = new HashSet<int>();
|
||||
protected List<GameObject> CheckTargetList = new List<GameObject>();
|
||||
protected List<BattleContinuousTarget> ContinuousTargetsList = new List<BattleContinuousTarget>();
|
||||
[System.NonSerialized]
|
||||
public float CacheX = 0.0f;
|
||||
[System.NonSerialized]
|
||||
public float CacheY = 0.0f;
|
||||
[System.NonSerialized]
|
||||
public float CacheZ = 0.0f;
|
||||
[System.NonSerialized]
|
||||
public bool IsRecycle = false;
|
||||
private bool endWithTime = false;
|
||||
private bool endWithArrive = false;
|
||||
private bool waitNextFixedFrame = false;
|
||||
private bool nextFixedFrameTakeEffect = false;
|
||||
private bool isOver = false;
|
||||
private bool lockTarget = false;
|
||||
private int fxId = 0;
|
||||
private float fxDelayTime = 0.0f;
|
||||
private bool checkFx = false;
|
||||
public virtual void SetColliderEnabled(bool enabled) {}
|
||||
public virtual void Recycle() {}
|
||||
public virtual void SetupBoxCollisionBody(float collisionWidth, float collisionHeight) {}
|
||||
public virtual void SetupSphereCollisionBody(float collisionRadius) {}
|
||||
public void SetAdmin(BattleControlUnit unit)
|
||||
{
|
||||
admin = unit;
|
||||
if (admin.Side == 1)
|
||||
{
|
||||
gameObject.layer = BattleConst.LAYER_ATK_BULLET;
|
||||
}
|
||||
else
|
||||
{
|
||||
gameObject.layer = BattleConst.LAYER_DEF_BULLET;
|
||||
}
|
||||
}
|
||||
|
||||
public void CachePosition()
|
||||
{
|
||||
var position = transform.position;
|
||||
CacheX = position.x;
|
||||
CacheY = position.y;
|
||||
CacheZ = position.z;
|
||||
}
|
||||
|
||||
public void CacheTargetPosition()
|
||||
{
|
||||
CacheX = targetPosition.x;
|
||||
CacheZ = targetPosition.z;
|
||||
}
|
||||
|
||||
public void InitSphereBullet(int skillId, int cloneIndex, int skillEffectIndex, int bulletType, int bulletFinishType, int bulletOriginType, int searchType, float radius, float duration, float speed, float offsetX, float offsetZ)
|
||||
{
|
||||
this.skillId = skillId;
|
||||
this.cloneIndex = cloneIndex;
|
||||
this.skillEffectIndex = skillEffectIndex;
|
||||
this.bulletType = bulletType;
|
||||
this.bulletFinishType = bulletFinishType;
|
||||
this.bulletOriginType = bulletOriginType;
|
||||
this.searchType = searchType;
|
||||
this.radius = radius;
|
||||
this.duration = duration;
|
||||
this.speed = speed;
|
||||
this.offsetX = offsetX;
|
||||
this.offsetZ = offsetZ;
|
||||
offset = new Vector3(offsetX, 0.0f, offsetZ);
|
||||
if (bulletFinishType == 1) // 飞到目标点才算完成,此时有速度和时间互斥
|
||||
{
|
||||
if (speed < 0.000001f)
|
||||
{
|
||||
endWithTime = true;
|
||||
endWithArrive = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
endWithTime = false;
|
||||
endWithArrive = true;
|
||||
}
|
||||
}
|
||||
else // 按时间算结束
|
||||
{
|
||||
endWithTime = true;
|
||||
endWithArrive = false;
|
||||
}
|
||||
SetupSphereCollisionBody(radius);
|
||||
InitBase();
|
||||
StartSearch();
|
||||
}
|
||||
|
||||
public void InitBoxBullet(int skillId, int cloneIndex, int skillEffectIndex, int bulletType, int bulletFinishType, int bulletOriginType, int searchType, float w, float h, float duration, float speed, float offsetX, float offsetZ)
|
||||
{
|
||||
this.skillId = skillId;
|
||||
this.skillEffectIndex = skillEffectIndex;
|
||||
this.bulletType = bulletType;
|
||||
this.bulletFinishType = bulletFinishType;
|
||||
this.bulletOriginType = bulletOriginType;
|
||||
this.searchType = searchType;
|
||||
this.width = w;
|
||||
this.height = h;
|
||||
this.duration = duration;
|
||||
this.speed = speed;
|
||||
this.offsetX = offsetX;
|
||||
this.offsetZ = offsetZ;
|
||||
offset = new Vector3(offsetX, 0.0f, offsetZ);
|
||||
if (bulletFinishType == 1) // 飞到目标点才算完成,此时有速度和时间互斥
|
||||
{
|
||||
if (speed < 0.000001f)
|
||||
{
|
||||
endWithTime = true;
|
||||
endWithArrive = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
endWithTime = false;
|
||||
endWithArrive = true;
|
||||
}
|
||||
}
|
||||
else // 按时间算结束
|
||||
{
|
||||
endWithTime = true;
|
||||
endWithArrive = false;
|
||||
}
|
||||
SetupBoxCollisionBody(w, h);
|
||||
InitBase();
|
||||
StartSearch();
|
||||
}
|
||||
|
||||
private void InitBase()
|
||||
{
|
||||
CheckTargetDict.Clear();
|
||||
CheckTargetList.Clear();
|
||||
ContinuousTargetsList.Clear();
|
||||
waitNextFixedFrame = false;
|
||||
nextFixedFrameTakeEffect = false;
|
||||
isOver = false;
|
||||
targetUnit = null;
|
||||
lockTarget = false;
|
||||
checkFx = false;
|
||||
}
|
||||
|
||||
private void StartSearch()
|
||||
{
|
||||
if (bulletOriginType == 2)
|
||||
{
|
||||
transform.position = admin.transform.position;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!ReferenceEquals(admin.Target, null))
|
||||
{
|
||||
transform.position = admin.Target.transform.position;
|
||||
}
|
||||
}
|
||||
switch (searchType)
|
||||
{
|
||||
case 1: // 以目标为目标点
|
||||
SearchWithTarget();
|
||||
break;
|
||||
case 2: // 以自身为目标点
|
||||
SearchWitchSelf();
|
||||
break;
|
||||
case 3: // 以目标为目标
|
||||
lockTarget = true;
|
||||
targetUnit = admin.Target;
|
||||
targetPosition = targetUnit.transform.position;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (endWithTime && speed < 0.000001f)
|
||||
{
|
||||
speed = (targetPosition - transform.position).magnitude / duration;
|
||||
}
|
||||
if (bulletType == 1) // 立即开始检测碰撞
|
||||
{
|
||||
SetColliderEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void SearchWithTarget()
|
||||
{
|
||||
if (admin.Direction == 1)
|
||||
{
|
||||
targetPosition = admin.Target.transform.position + new Vector3(offsetX, 0.0f, offsetZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetPosition = admin.Target.transform.position + new Vector3(-offsetX, 0.0f, offsetZ);
|
||||
}
|
||||
}
|
||||
|
||||
private void SearchWitchSelf()
|
||||
{
|
||||
if (admin.Direction == 1)
|
||||
{
|
||||
targetPosition = admin.transform.position + new Vector3(offsetX, 0.0f, offsetZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetPosition = admin.transform.position + new Vector3(-offsetX, 0.0f, offsetZ);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
var id = other.gameObject.GetInstanceID();
|
||||
if (!CheckTargetDict.TryAdd(id))
|
||||
{
|
||||
return;
|
||||
}
|
||||
admin.OnHitTarget(other.gameObject, skillId, cloneIndex, skillEffectIndex);
|
||||
CheckTargetList.Add(other.gameObject);
|
||||
if (checkInterval > 0.000001f) // 持续型范围技能,进入范围的时候立即生效一次
|
||||
{
|
||||
var target = BF.BFMain.Instance.BattleMgr.PoolHelper.GetContinuousTarge();
|
||||
target.Unit = other.gameObject;
|
||||
target.Time = checkInterval;
|
||||
ContinuousTargetsList.Add(target);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerExit(Collider other)
|
||||
{
|
||||
var gameObject = other.gameObject;
|
||||
var id = gameObject.GetInstanceID();
|
||||
if (CheckTargetDict.Contains(id))
|
||||
{
|
||||
CheckTargetList.Remove(gameObject);
|
||||
if (checkInterval > 0.000001f) // 持续型范围技能,进入范围的时候立即生效一次
|
||||
{
|
||||
var count = ContinuousTargetsList.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (gameObject == ContinuousTargetsList[i].Unit)
|
||||
{
|
||||
ContinuousTargetsList.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int GetSearchTargetsCount()
|
||||
{
|
||||
return CheckTargetList.Count;
|
||||
}
|
||||
|
||||
public int GetTargetId(int index)
|
||||
{
|
||||
if (index >= 0 && index < CheckTargetList.Count)
|
||||
{
|
||||
return CheckTargetList[index].GetInstanceID();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (checkFx)
|
||||
{
|
||||
fxDelayTime -= Time.deltaTime*BattleConfigure.TimeScale;
|
||||
if (fxDelayTime < 0.0f)
|
||||
{
|
||||
checkFx = false;
|
||||
BF.BFMain.Instance.BattleMgr.PlayFx(fxId, admin.Direction, transform.position.x, transform.position.z);
|
||||
}
|
||||
}
|
||||
|
||||
if (endWithTime) // 按时间结束
|
||||
{
|
||||
duration -= Time.deltaTime*BattleConfigure.TimeScale;
|
||||
if (duration < 0.0f)
|
||||
{
|
||||
if (bulletType == 1)
|
||||
{
|
||||
Recycle();
|
||||
}
|
||||
else if(bulletType == 2)
|
||||
{
|
||||
if (waitNextFixedFrame)
|
||||
{
|
||||
if (nextFixedFrameTakeEffect)
|
||||
{
|
||||
Recycle();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
waitNextFixedFrame = true;
|
||||
SetColliderEnabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else // 按飞行速度到达目标点后结束
|
||||
{
|
||||
if (!isOver)
|
||||
{
|
||||
if ((transform.position - targetPosition).sqrMagnitude < 0.0001f)
|
||||
{
|
||||
isOver = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bulletType == 1)
|
||||
{
|
||||
Recycle();
|
||||
}
|
||||
else if(bulletType == 2)
|
||||
{
|
||||
if (waitNextFixedFrame)
|
||||
{
|
||||
if (nextFixedFrameTakeEffect)
|
||||
{
|
||||
Recycle();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
waitNextFixedFrame = true;
|
||||
SetColliderEnabled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (waitNextFixedFrame)
|
||||
{
|
||||
nextFixedFrameTakeEffect = true;
|
||||
}
|
||||
Vector3 moveToPosition;
|
||||
if (lockTarget)
|
||||
{
|
||||
targetPosition = admin.Target.transform.position;
|
||||
moveToPosition = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.fixedDeltaTime * BattleConfigure.TimeScale);
|
||||
}
|
||||
else
|
||||
{
|
||||
moveToPosition = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.fixedDeltaTime * BattleConfigure.TimeScale);
|
||||
}
|
||||
if (moveToPosition.x < BattleConfigure.SceneMinX) // 撞左边墙了
|
||||
{
|
||||
moveToPosition.x = BattleConfigure.SceneMinX;
|
||||
}
|
||||
else if (moveToPosition.x > BattleConfigure.SceneMaxX) // 撞右边墙了
|
||||
{
|
||||
moveToPosition.x = BattleConfigure.SceneMaxX;
|
||||
}
|
||||
if (moveToPosition.z < BattleConfigure.SceneMinZ) // 撞下面墙了
|
||||
{
|
||||
moveToPosition.z = BattleConfigure.SceneMinZ;
|
||||
}
|
||||
else if (moveToPosition.z > BattleConfigure.SceneMaxZ) // 撞上面墙了
|
||||
{
|
||||
moveToPosition.z = BattleConfigure.SceneMaxZ;
|
||||
}
|
||||
transform.position = moveToPosition;
|
||||
}
|
||||
|
||||
public void PlayTargetPointFx(int id, float delay)
|
||||
{
|
||||
checkFx = true;
|
||||
fxId = id;
|
||||
fxDelayTime = delay;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 33df849147f3f1e40985f1151c997135
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,488 +0,0 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleContinuousTarget
|
||||
{
|
||||
public GameObject Unit;
|
||||
public float Time;
|
||||
}
|
||||
|
||||
public class BattleControlCollider : MonoBehaviour
|
||||
{
|
||||
protected BattleControlUnit admin;
|
||||
public int uniqueId = 0;
|
||||
protected bool isActive = false;
|
||||
protected int checkType = 0;
|
||||
protected float checkInterval = 0.0f;
|
||||
protected float checkDuration = 0.0f;
|
||||
protected int skillId = 0;
|
||||
protected int cloneIndex = 0;
|
||||
protected int skillEffectIndex = 0;
|
||||
protected bool unlimitCount = false;
|
||||
protected float delayAimTime = 0.0f;
|
||||
protected float aimFollowTime = 0.0f;
|
||||
protected float aimFollowSpeed = 0.0f;
|
||||
protected bool aimFollow = false;
|
||||
protected bool delayAim = false;
|
||||
protected bool effectOver = false;
|
||||
protected bool waitRecycle = false;
|
||||
protected Vector3 offset = Vector3.zero;
|
||||
protected Vector3 targetPosition = Vector3.zero;
|
||||
protected BattleControlUnit lockTarget;
|
||||
protected bool isLockTarget = false;
|
||||
protected HashSet<int> CheckTargetDict = new HashSet<int>();
|
||||
protected List<GameObject> CheckTargetList = new List<GameObject>();
|
||||
protected bool IsSearchByCollider = false;
|
||||
protected List<BattleContinuousTarget> ContinuousTargetsList = new List<BattleContinuousTarget>();
|
||||
protected BattleControlColliderContainer container;
|
||||
private bool updatePositionWithLockTarget = false;
|
||||
[System.NonSerialized]
|
||||
public float CacheX = 0.0f;
|
||||
[System.NonSerialized]
|
||||
public float CacheY = 0.0f;
|
||||
[System.NonSerialized]
|
||||
public float CacheZ = 0.0f;
|
||||
[System.NonSerialized]
|
||||
private static Vector2 Vector2A = Vector2.zero;
|
||||
private static Vector2 Vector2B = Vector2.zero;
|
||||
[System.NonSerialized]
|
||||
public bool IsRecycle = false;
|
||||
public virtual void SetColliderEnabled(bool enabled) {}
|
||||
public virtual void Recycle() {}
|
||||
|
||||
public void SetContainer(BattleControlColliderContainer container)
|
||||
{
|
||||
this.container = container;
|
||||
}
|
||||
|
||||
public void RemoveFromContainer()
|
||||
{
|
||||
this.container = null;
|
||||
}
|
||||
|
||||
public void SetIsSearchByCollider(bool isSearchByCollider)
|
||||
{
|
||||
IsSearchByCollider = isSearchByCollider;
|
||||
}
|
||||
|
||||
public void SetAdmin(BattleControlUnit unit)
|
||||
{
|
||||
admin = unit;
|
||||
if (admin.Side == 1)
|
||||
{
|
||||
gameObject.layer = BattleConst.LAYER_ATK_BULLET;
|
||||
}
|
||||
else
|
||||
{
|
||||
gameObject.layer = BattleConst.LAYER_DEF_BULLET;
|
||||
}
|
||||
}
|
||||
|
||||
public int GetUniqueId()
|
||||
{
|
||||
return uniqueId;
|
||||
}
|
||||
|
||||
public void SetTargetPosition(Vector3 position)
|
||||
{
|
||||
targetPosition = position;
|
||||
}
|
||||
|
||||
public void SetLockTarget(BattleControlUnit unit)
|
||||
{
|
||||
lockTarget = unit;
|
||||
isLockTarget = true;
|
||||
}
|
||||
|
||||
public void SetUpdatePositionWithLockTarget(bool updatePositionWithLockTarget)
|
||||
{
|
||||
this.updatePositionWithLockTarget = updatePositionWithLockTarget;
|
||||
}
|
||||
|
||||
public void InitPosition(float x, float y, float z)
|
||||
{
|
||||
if (admin.Direction == 1)
|
||||
{
|
||||
transform.position = new Vector3(x, y, z) + offset;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
transform.position = new Vector3(x, y, z) - offset;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
private void MoveToLockTargetPosition(float deltaTime)
|
||||
{
|
||||
if (admin.Direction == 1)
|
||||
{
|
||||
var position = lockTarget.transform.position + offset;
|
||||
var moveToPosition = Vector3.MoveTowards(transform.position, position, aimFollowSpeed * deltaTime);
|
||||
transform.position = moveToPosition;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
var position = lockTarget.transform.position - offset;
|
||||
var moveToPosition = Vector3.MoveTowards(transform.position, position, aimFollowSpeed * deltaTime);
|
||||
transform.position = moveToPosition;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
private void MoveToTargetPosition(float deltaTime)
|
||||
{
|
||||
if (admin.Direction == 1)
|
||||
{
|
||||
var position = targetPosition + offset;
|
||||
var moveToPosition = Vector3.MoveTowards(transform.position, position, aimFollowSpeed * deltaTime);
|
||||
transform.position = moveToPosition;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
var position = targetPosition - offset;
|
||||
var moveToPosition = Vector3.MoveTowards(transform.position, position, aimFollowSpeed * deltaTime);
|
||||
transform.position = moveToPosition;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdatePositionByTargetPosition()
|
||||
{
|
||||
if (admin.Direction == 1)
|
||||
{
|
||||
transform.position = targetPosition + offset;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
transform.position = targetPosition - offset;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdatePositionByLockTargetPosition()
|
||||
{
|
||||
if (admin.Direction == 1)
|
||||
{
|
||||
transform.position = lockTarget.transform.position + offset;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
transform.position = lockTarget.transform.position - offset;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdatePositionByAdminPosition()
|
||||
{
|
||||
if (admin.Direction == 1)
|
||||
{
|
||||
transform.position = admin.transform.position + offset;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 0.0f, 0.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
transform.position = admin.transform.position - offset;
|
||||
transform.localEulerAngles = new Vector3(0.0f, 180.0f, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
public void CachePosition()
|
||||
{
|
||||
var position = transform.position;
|
||||
CacheX = position.x;
|
||||
CacheY = position.y;
|
||||
CacheZ = position.z;
|
||||
}
|
||||
|
||||
private void FollowTarget(float deltaTime)
|
||||
{
|
||||
if (isLockTarget)
|
||||
{
|
||||
MoveToLockTargetPosition(deltaTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
MoveToTargetPosition(deltaTime);
|
||||
}
|
||||
}
|
||||
|
||||
public void InitBase()
|
||||
{
|
||||
CheckTargetDict.Clear();
|
||||
CheckTargetList.Clear();
|
||||
ContinuousTargetsList.Clear();
|
||||
effectOver = false;
|
||||
waitRecycle = false;
|
||||
lockTarget = null;
|
||||
isLockTarget = false;
|
||||
updatePositionWithLockTarget = false;
|
||||
}
|
||||
|
||||
public void Search(int checkType, float interval, float duration, int skillId, int cloneIndex, int skillEffectIndex, bool unlimitCount, float delayAimTime, float aimFollowTime, float aimFollowSpeed, bool disposable)
|
||||
{
|
||||
this.checkType = checkType;
|
||||
this.checkInterval = interval;
|
||||
this.checkDuration = duration;
|
||||
this.skillId = skillId;
|
||||
this.cloneIndex = cloneIndex;
|
||||
this.skillEffectIndex = skillEffectIndex;
|
||||
this.unlimitCount = unlimitCount;
|
||||
this.delayAimTime = delayAimTime;
|
||||
this.aimFollowTime = aimFollowTime;
|
||||
this.aimFollowSpeed = aimFollowSpeed;
|
||||
if (aimFollowTime > 0.0f)
|
||||
{
|
||||
aimFollow = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
aimFollow = false;
|
||||
}
|
||||
if (isLockTarget)
|
||||
{
|
||||
UpdatePositionByLockTargetPosition();
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdatePositionByTargetPosition();
|
||||
}
|
||||
if (disposable)
|
||||
{
|
||||
delayAim = false;
|
||||
StartSearch();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (delayAimTime > 0.0f) // 延迟
|
||||
{
|
||||
delayAim = true;
|
||||
}
|
||||
else // 立即
|
||||
{
|
||||
delayAim = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void StartSearch()
|
||||
{
|
||||
if (IsSearchByCollider)
|
||||
{
|
||||
isActive = true;
|
||||
effectOver = false;
|
||||
waitRecycle = false;
|
||||
SetColliderEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerEnter(Collider other)
|
||||
{
|
||||
var id = other.gameObject.GetInstanceID();
|
||||
if (!CheckTargetDict.TryAdd(id))
|
||||
{
|
||||
return;
|
||||
}
|
||||
CheckTargetList.Add(other.gameObject);
|
||||
if (checkInterval > 0.000001f) // 持续型范围技能,进入范围的时候立即生效一次
|
||||
{
|
||||
admin.OnHitTarget(other.gameObject, skillId, cloneIndex, skillEffectIndex);
|
||||
var target = BF.BFMain.Instance.BattleMgr.PoolHelper.GetContinuousTarge();
|
||||
target.Unit = other.gameObject;
|
||||
target.Time = checkInterval;
|
||||
ContinuousTargetsList.Add(target);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnTriggerExit(Collider other)
|
||||
{
|
||||
var gameObject = other.gameObject;
|
||||
var id = gameObject.GetInstanceID();
|
||||
if (CheckTargetDict.Contains(id))
|
||||
{
|
||||
CheckTargetList.Remove(gameObject);
|
||||
if (checkInterval > 0.000001f) // 持续型范围技能,进入范围的时候立即生效一次
|
||||
{
|
||||
var count = ContinuousTargetsList.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
if (gameObject == ContinuousTargetsList[i].Unit)
|
||||
{
|
||||
ContinuousTargetsList.RemoveAt(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void AddCheckTargetList(GameObject gameObject)
|
||||
{
|
||||
CheckTargetList.Add(gameObject);
|
||||
}
|
||||
|
||||
private void SearchNearestTarget()
|
||||
{
|
||||
var control = BF.BFMain.Instance.BattleMgr.GetNearestUnit(admin.Side);
|
||||
if(ReferenceEquals(control, null))
|
||||
{
|
||||
Recycle();
|
||||
return;
|
||||
}
|
||||
CheckTargetList.Add(control.gameObject);
|
||||
}
|
||||
|
||||
private void SearchAllTargets()
|
||||
{
|
||||
var unitsList = BF.BFMain.Instance.BattleMgr.GetUnitsList(admin.Side);
|
||||
for (int i = 0; i < unitsList.Count; i++)
|
||||
{
|
||||
CheckTargetList.Add(unitsList[i].gameObject);
|
||||
}
|
||||
}
|
||||
|
||||
protected void CheckCollider()
|
||||
{
|
||||
CheckSurroundingTargets();
|
||||
}
|
||||
|
||||
private void CheckSurroundingTargets()
|
||||
{
|
||||
if (checkInterval <= 0.000001f)
|
||||
{
|
||||
if (effectOver)
|
||||
{
|
||||
if (waitRecycle)
|
||||
{
|
||||
if (!unlimitCount)
|
||||
{
|
||||
FindNearestAndHit();
|
||||
}
|
||||
else
|
||||
{
|
||||
HitTargets();
|
||||
}
|
||||
Recycle();
|
||||
}
|
||||
else
|
||||
{
|
||||
waitRecycle = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
effectOver = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void FindNearestAndHit()
|
||||
{
|
||||
var count = CheckTargetList.Count;
|
||||
if (count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
GameObject unit = null;
|
||||
var position = admin.transform.position;
|
||||
Vector2A.Set(position.x, position.z);
|
||||
float minDis = float.MaxValue;
|
||||
for(int j = 0; j < count; j++)
|
||||
{
|
||||
var objB = CheckTargetList[j];
|
||||
Vector2B.Set(objB.transform.position.x, objB.transform.position.z);
|
||||
var dis = (Vector2B - Vector2A).sqrMagnitude;
|
||||
if (dis < minDis)
|
||||
{
|
||||
minDis = dis;
|
||||
unit = objB;
|
||||
}
|
||||
}
|
||||
if (!ReferenceEquals(unit, null))
|
||||
{
|
||||
admin.OnHitTarget(unit, skillId, cloneIndex, skillEffectIndex);
|
||||
}
|
||||
}
|
||||
|
||||
private void HitTargets()
|
||||
{
|
||||
var count = CheckTargetList.Count;
|
||||
if (count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
for (int i = count - 1; i >= 0; i--)
|
||||
{
|
||||
admin.OnHitTarget(CheckTargetList[i], skillId, cloneIndex, skillEffectIndex);
|
||||
}
|
||||
}
|
||||
|
||||
public int GetSearchTargetsCount()
|
||||
{
|
||||
return CheckTargetList.Count;
|
||||
}
|
||||
|
||||
public int GetTargetId(int index)
|
||||
{
|
||||
if (index >= 0 && index < CheckTargetList.Count)
|
||||
{
|
||||
return CheckTargetList[index].GetInstanceID();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (delayAim)
|
||||
{
|
||||
delayAimTime -= Time.deltaTime*BattleConfigure.TimeScale;
|
||||
if (delayAimTime < 0.0f)
|
||||
{
|
||||
delayAim = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (aimFollow)
|
||||
{
|
||||
var deltaTime = Time.deltaTime*BattleConfigure.TimeScale;
|
||||
aimFollowTime -= deltaTime;
|
||||
if (aimFollowTime < 0.0f)
|
||||
{
|
||||
aimFollow = false;
|
||||
}
|
||||
FollowTarget(deltaTime);
|
||||
}
|
||||
if (!isActive)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (updatePositionWithLockTarget)
|
||||
{
|
||||
UpdatePositionByLockTargetPosition();
|
||||
}
|
||||
var count = ContinuousTargetsList.Count;
|
||||
if (count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
BattleContinuousTarget target = null;
|
||||
var deltaTime2 = Time.deltaTime*BattleConfigure.TimeScale;
|
||||
for (int i = count - 1; i >= 0; i--)
|
||||
{
|
||||
target = ContinuousTargetsList[i];
|
||||
target.Time -= deltaTime2;
|
||||
if (target.Time <= 0.0f)
|
||||
{
|
||||
target.Time = checkInterval;
|
||||
admin.OnHitTarget(target.Unit, skillId, cloneIndex, skillEffectIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d4fb90d05a9d73b438f7fa1e4d7baf32
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,103 +0,0 @@
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlColliderContainer
|
||||
{
|
||||
[System.NonSerialized]
|
||||
public bool IsRecycle = false;
|
||||
[System.NonSerialized]
|
||||
public bool IsSearchByCollider = false;
|
||||
private List<BattleControlCollider> colliderList = new List<BattleControlCollider>();
|
||||
|
||||
public void InitBase()
|
||||
{
|
||||
colliderList.Clear();
|
||||
}
|
||||
|
||||
public void SetIsSearchByCollider(bool isSearchByCollider)
|
||||
{
|
||||
IsSearchByCollider = isSearchByCollider;
|
||||
}
|
||||
|
||||
public void Add(BattleControlCollider collider)
|
||||
{
|
||||
colliderList.Add(collider);
|
||||
collider.SetContainer(this);
|
||||
}
|
||||
|
||||
public void Remove(BattleControlCollider collider)
|
||||
{
|
||||
colliderList.Remove(collider);
|
||||
}
|
||||
|
||||
public int GetSearchTargetsCount()
|
||||
{
|
||||
var count = 0;
|
||||
for (int i = 0; i < colliderList.Count; i++)
|
||||
{
|
||||
count += colliderList[i].GetSearchTargetsCount();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
public int GetCollidersCount()
|
||||
{
|
||||
return colliderList.Count;
|
||||
}
|
||||
|
||||
public BattleControlCollider GetCollider(int colliderIndex)
|
||||
{
|
||||
return colliderList[colliderIndex];
|
||||
}
|
||||
|
||||
public int GetTargetId(int colliderIndex, int index)
|
||||
{
|
||||
return colliderList[colliderIndex].GetTargetId(index);
|
||||
}
|
||||
|
||||
public void CachePosition(int index)
|
||||
{
|
||||
colliderList[index].CachePosition();
|
||||
}
|
||||
|
||||
public float FastGetColliderX(int index)
|
||||
{
|
||||
return colliderList[index].CacheX;
|
||||
}
|
||||
|
||||
public float FastGetColliderZ(int index)
|
||||
{
|
||||
return colliderList[index].CacheZ;
|
||||
}
|
||||
|
||||
public void StartSearch()
|
||||
{
|
||||
for (int i = 0; i < colliderList.Count; i++)
|
||||
{
|
||||
colliderList[i].StartSearch();
|
||||
}
|
||||
}
|
||||
|
||||
public bool GetIsFinished()
|
||||
{
|
||||
if (IsSearchByCollider && colliderList.Count > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Recycle()
|
||||
{
|
||||
for (int i = 0; i < colliderList.Count; i++)
|
||||
{
|
||||
colliderList[i].RemoveFromContainer();
|
||||
colliderList[i].Recycle();
|
||||
}
|
||||
colliderList.Clear();
|
||||
BFMain.Instance.BattleMgr.PoolHelper.RecycleColliderContainer(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d5a2f8c0b2efbbf4ca08b2f87f287b92
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,344 +0,0 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlHero : BattleControlUnit
|
||||
{
|
||||
private Camera mainCamera;
|
||||
private Rigidbody unitRigidbody;
|
||||
private bool isMoving = false;
|
||||
private float TargetX = 0.0f;
|
||||
private float TargetZ = 0.0f;
|
||||
private float moveSpeed = 1.0f;
|
||||
private Vector3 targetPosition = Vector3.zero;
|
||||
// 摄像机相关
|
||||
public bool IsCameraFollowWithHero = true;
|
||||
private Vector3 cameraOriginPosition = Vector3.zero;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
mainCamera = Camera.main;
|
||||
InitRigidbody();
|
||||
}
|
||||
|
||||
private void InitRigidbody()
|
||||
{
|
||||
if (!gameObject.TryGetComponent<Rigidbody>(out unitRigidbody))
|
||||
{
|
||||
unitRigidbody = gameObject.AddComponent<Rigidbody>();
|
||||
}
|
||||
unitRigidbody.angularDrag = 0;
|
||||
unitRigidbody.useGravity = false;
|
||||
unitRigidbody.isKinematic = true;
|
||||
unitRigidbody.constraints = BattleConst.RIGIDBODY_CONSTRAINTS;
|
||||
bodyCollider = gameObject.AddComponent<SphereCollider>();
|
||||
bodyCollider.isTrigger = true;
|
||||
}
|
||||
|
||||
public void InitHero(int side, CharacterSpineHelper helper)
|
||||
{
|
||||
Side = side;
|
||||
BattleMgr = BF.BFMain.Instance.BattleMgr;
|
||||
Direction = 1;
|
||||
gameObject.layer = BattleConst.LAYER_HERO;
|
||||
ReuseFlag++;
|
||||
IsDead = false;
|
||||
IsInGroundState = false;
|
||||
IsDisappear = false;
|
||||
BattleMgr.AddToAtkUnitsList(this);
|
||||
}
|
||||
|
||||
public override void InitHpBar()
|
||||
{
|
||||
if (isHaveHpBar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
hpBar = BattleMgr.PoolHelper.GetHpBar(Side);
|
||||
hpBar.transform.localScale = Vector3.one;
|
||||
hpBar.RefreshHpBar(1.0f);
|
||||
hpBar.SetShieldVisible(false);
|
||||
BattleMgr.UpdateUIPosition(transform.position, HpBarAddY, hpBar.transform as RectTransform);
|
||||
isHaveHpBar = true;
|
||||
}
|
||||
|
||||
public override void RefreshHpBar(float percent)
|
||||
{
|
||||
if (!isHaveHpBar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
hpBar.RefreshHpBar(percent);
|
||||
}
|
||||
|
||||
public override void RefreshShieldBar(float percent, bool visible)
|
||||
{
|
||||
if (!isHaveHpBar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (visible)
|
||||
{
|
||||
hpBar.RefreshShieldBar(percent);
|
||||
}
|
||||
hpBar.SetShieldVisible(visible);
|
||||
}
|
||||
|
||||
public void SetCameraStartPosition(Vector3 originPosition)
|
||||
{
|
||||
cameraOriginPosition = originPosition;
|
||||
}
|
||||
|
||||
public bool MoveAndAttack(int direction)
|
||||
{
|
||||
isMoving = true;
|
||||
bool isAttack = true;
|
||||
var x = transform.position.x;
|
||||
var z = transform.position.z;
|
||||
if (direction == 1) // 朝向右边
|
||||
{
|
||||
BattleControlUnit leftTarget = null;
|
||||
BattleControlUnit rightTarget = null;
|
||||
BattleMgr.GetNearestDefUnit(x, z, out leftTarget, out rightTarget);
|
||||
if (ReferenceEquals(rightTarget, null)) // 右边没有敌人
|
||||
{
|
||||
if (ReferenceEquals(leftTarget, null)) // 左边也没有敌人则向该方向进行常规攻击,同时推进
|
||||
{
|
||||
if (BattleMgr.GetEffectWarningCount() <= 0)
|
||||
{
|
||||
TargetX = x + BattleConfigure.DistanceAttack;
|
||||
TargetZ = z;
|
||||
Direction = direction;
|
||||
}
|
||||
else // 找不到人,但是有预警的话就往该方向后撤
|
||||
{
|
||||
TargetX = x + BattleConfigure.DistanceBack;
|
||||
TargetZ = z;
|
||||
isAttack = false;
|
||||
}
|
||||
}
|
||||
else // 左边有敌人,则向该方向进行后撤,并且当前朝向不变
|
||||
{
|
||||
TargetX = x + BattleConfigure.DistanceBack;
|
||||
TargetZ = z;
|
||||
isAttack = false;
|
||||
}
|
||||
}
|
||||
else // 右边有敌人,向目标进行冲锋推进攻击
|
||||
{
|
||||
TargetX = rightTarget.transform.position.x - rightTarget.BodyRadius - BodyRadius;
|
||||
if (TargetX - x > BattleConfigure.DistanceDash)
|
||||
{
|
||||
TargetX = x + BattleConfigure.DistanceDash;
|
||||
}
|
||||
TargetZ = rightTarget.transform.position.z;
|
||||
Direction = direction;
|
||||
}
|
||||
targetPosition = new Vector3(TargetX, 0.0f, TargetZ);
|
||||
var distance = (targetPosition - transform.position).magnitude;
|
||||
if (isAttack)
|
||||
{
|
||||
moveSpeed = Math.Abs(distance / BattleConfigure.NormalMoveTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
moveSpeed = Math.Abs(distance / BattleConfigure.NormalBackTime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
BattleControlUnit leftTarget = null;
|
||||
BattleControlUnit rightTarget = null;
|
||||
BattleMgr.GetNearestDefUnit(x, z, out leftTarget, out rightTarget);
|
||||
if (ReferenceEquals(leftTarget, null)) // 左边没有敌人
|
||||
{
|
||||
if (ReferenceEquals(rightTarget, null)) // 右边也没有敌人则向该方向进行常规攻击,同时推进
|
||||
{
|
||||
if (BattleMgr.GetEffectWarningCount() <= 0)
|
||||
{
|
||||
TargetX = x - BattleConfigure.DistanceAttack;
|
||||
TargetZ = transform.position.z;
|
||||
Direction = direction;
|
||||
}
|
||||
else
|
||||
{
|
||||
TargetX = x - BattleConfigure.DistanceBack;
|
||||
TargetZ = transform.position.z;
|
||||
isAttack = false;
|
||||
}
|
||||
}
|
||||
else // 右边有敌人,则向该方向进行后撤,并且当前朝向不变
|
||||
{
|
||||
TargetX = x - BattleConfigure.DistanceBack;
|
||||
TargetZ = transform.position.z;
|
||||
isAttack = false;
|
||||
}
|
||||
}
|
||||
else // 左边有敌人,向目标进行冲锋推进攻击
|
||||
{
|
||||
TargetX = leftTarget.transform.position.x + leftTarget.BodyRadius + BodyRadius;
|
||||
if (x - TargetX > BattleConfigure.DistanceDash)
|
||||
{
|
||||
TargetX = x - BattleConfigure.DistanceDash;
|
||||
}
|
||||
TargetZ = leftTarget.transform.position.z;
|
||||
Direction = direction;
|
||||
}
|
||||
targetPosition = new Vector3(TargetX, 0.0f, TargetZ);
|
||||
var distance = (targetPosition - transform.position).magnitude;
|
||||
if (isAttack)
|
||||
{
|
||||
moveSpeed = Math.Abs(distance / BattleConfigure.NormalMoveTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
moveSpeed = Math.Abs(distance / BattleConfigure.NormalBackTime);
|
||||
}
|
||||
}
|
||||
return isAttack;
|
||||
}
|
||||
|
||||
public int GetNearestLeftRightUnit()
|
||||
{
|
||||
BattleControlUnit leftTarget = null;
|
||||
BattleControlUnit rightTarget = null;
|
||||
BattleMgr.GetNearestDefUnit(transform.position.x, transform.position.z, out leftTarget, out rightTarget);
|
||||
if (ReferenceEquals(leftTarget, null))
|
||||
{
|
||||
if (ReferenceEquals(rightTarget, null))
|
||||
{
|
||||
return 0; // 两边都没有敌人
|
||||
}
|
||||
else
|
||||
{
|
||||
return 2; // 只有右边有敌人
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ReferenceEquals(rightTarget, null))
|
||||
{
|
||||
return 1; // 只有左边有敌人
|
||||
}
|
||||
else
|
||||
{
|
||||
var leftDistance = Mathf.Abs(transform.position.x - leftTarget.transform.position.x);
|
||||
var rightDistance = Mathf.Abs(transform.position.x - rightTarget.transform.position.x);
|
||||
if (leftDistance < rightDistance)
|
||||
{
|
||||
return 1; // 左边的敌人离得更近
|
||||
}
|
||||
else
|
||||
{
|
||||
return 2; // 右边的敌人离得更近
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool GetWhetherUseGroundSkill()
|
||||
{
|
||||
var unit = BattleMgr.GetNearestDefUnitOnCurrDirection(transform.position.x, transform.position.z, Direction);
|
||||
if (ReferenceEquals(unit, null))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return unit.IsInGroundState;
|
||||
}
|
||||
|
||||
public void StopMove()
|
||||
{
|
||||
isMoving = false;
|
||||
}
|
||||
|
||||
public void StartMove()
|
||||
{
|
||||
isMoving = true;
|
||||
}
|
||||
|
||||
private float GetMoveSpeed()
|
||||
{
|
||||
return moveSpeed;
|
||||
}
|
||||
|
||||
public override void OnDead()
|
||||
{
|
||||
IsDead = true;
|
||||
IsInGroundState = false;
|
||||
}
|
||||
|
||||
public override void Reborn()
|
||||
{
|
||||
IsDead = false;
|
||||
}
|
||||
|
||||
public override void Revive()
|
||||
{
|
||||
IsDead = false;
|
||||
}
|
||||
|
||||
public override void Clear()
|
||||
{
|
||||
luaOnHitTargetFunc = null;
|
||||
if (isHaveHpBar)
|
||||
{
|
||||
BattleMgr.PoolHelper.PutBackHpBar(hpBar, Side);
|
||||
hpBar = null;
|
||||
isHaveHpBar = false;
|
||||
}
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ((transform.position - targetPosition).sqrMagnitude < 0.0001)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var moveToPosition = Vector3.MoveTowards(transform.position, targetPosition, GetMoveSpeed() * Time.deltaTime*BattleConfigure.TimeScale);
|
||||
if (moveToPosition.x < BattleConfigure.SceneMinX)
|
||||
{
|
||||
moveToPosition.x = BattleConfigure.SceneMinX;
|
||||
}
|
||||
else if (moveToPosition.x > BattleConfigure.SceneMaxX)
|
||||
{
|
||||
moveToPosition.x = BattleConfigure.SceneMaxX;
|
||||
}
|
||||
transform.position = moveToPosition;
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
if (IsCameraFollowWithHero)
|
||||
{
|
||||
var position = cameraOriginPosition + new Vector3(transform.localPosition.x, 0.0f, 0.0f);
|
||||
if (position.x < BattleConfigure.CameraMinX)
|
||||
{
|
||||
position.x = BattleConfigure.CameraMinX;
|
||||
}
|
||||
else if (position.x > BattleConfigure.CameraMaxX)
|
||||
{
|
||||
position.x = BattleConfigure.CameraMaxX;
|
||||
}
|
||||
mainCamera.transform.position = position;
|
||||
BattleConfigure.BattleCenterPosX = position.x;
|
||||
BattleMgr.UpdateEffectTextRootNode();
|
||||
}
|
||||
if (isHaveHpBar && isMoving)
|
||||
{
|
||||
BattleMgr.UpdateUIPosition(transform.position, HpBarAddY, hpBar.transform as RectTransform);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
luaOnHitTargetFunc = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c2f0a4037a9edf24dab741e7424bf814
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,581 +0,0 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using DG.Tweening;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlMonster : BattleControlUnit
|
||||
{
|
||||
private CharacterSpineHelper spineHelper;
|
||||
private Rigidbody unitRigidbody;
|
||||
private Transform mainBody;
|
||||
private bool isMoving = false;
|
||||
private float checkTowardTime = 0.1f;
|
||||
private float checkAITargetPositionTime = 0.1f;
|
||||
private int horizontalTypeAI = 0;
|
||||
private float offsetXAI = 0.0f;
|
||||
private float offsetZAI = 0.0f;
|
||||
private Sequence airborneSeq;
|
||||
private bool isHitBack = true;
|
||||
private float hitBackTime = 0.0f;
|
||||
private float hitBackSpeed = 0.0f;
|
||||
void Awake()
|
||||
{
|
||||
InitRigidbody();
|
||||
}
|
||||
|
||||
private void InitRigidbody()
|
||||
{
|
||||
if (!gameObject.TryGetComponent<Rigidbody>(out unitRigidbody))
|
||||
{
|
||||
unitRigidbody = gameObject.AddComponent<Rigidbody>();
|
||||
}
|
||||
unitRigidbody.angularDrag = 0;
|
||||
unitRigidbody.useGravity = false;
|
||||
unitRigidbody.isKinematic = true;
|
||||
unitRigidbody.constraints = BattleConst.RIGIDBODY_CONSTRAINTS;
|
||||
bodyCollider = gameObject.AddComponent<SphereCollider>();
|
||||
bodyCollider.isTrigger = true;
|
||||
}
|
||||
|
||||
public void InitMonster(int side, CharacterSpineHelper helper, Transform body)
|
||||
{
|
||||
Side = side;
|
||||
BattleMgr = BF.BFMain.Instance.BattleMgr;
|
||||
spineHelper = helper;
|
||||
mainBody = body;
|
||||
if (ReferenceEquals(mainBody, null))
|
||||
{
|
||||
mainBody = transform.GetChild(0);
|
||||
}
|
||||
Direction = 1;
|
||||
isMoving = false;
|
||||
IsDead = false;
|
||||
IsInGroundState = false;
|
||||
Target = null;
|
||||
IsDisappear = false;
|
||||
BattleMgr.AddToDefUnitsList(this);
|
||||
gameObject.layer = BattleConst.LAYER_MONSTER;
|
||||
}
|
||||
|
||||
public override void InitHpBar()
|
||||
{
|
||||
if (isHaveHpBar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
hpBar = BattleMgr.PoolHelper.GetHpBar(Side);
|
||||
hpBar.transform.localScale = Vector3.one;
|
||||
hpBar.RefreshHpBar(1.0f);
|
||||
BattleMgr.UpdateUIPosition(transform.position, HpBarAddY, hpBar.transform as RectTransform);
|
||||
isHaveHpBar = true;
|
||||
}
|
||||
|
||||
public override void RefreshHpBar(float percent)
|
||||
{
|
||||
if (!isHaveHpBar)
|
||||
{
|
||||
return;
|
||||
}
|
||||
hpBar.RefreshHpBar(percent);
|
||||
}
|
||||
|
||||
public void InitPosition(float x, float y, float z)
|
||||
{
|
||||
transform.position = new Vector3(x, y, z);
|
||||
}
|
||||
|
||||
public override void EnterDisappear()
|
||||
{
|
||||
gameObject.layer = BattleConst.LAYER_DEFAULT;
|
||||
BattleMgr.RemoveFromDefUnitsList(this);
|
||||
if (isHaveHpBar)
|
||||
{
|
||||
hpBar.transform.localScale = Vector3.zero;
|
||||
}
|
||||
if (IsHaveShadow)
|
||||
{
|
||||
shadow.transform.localScale = Vector3.zero;
|
||||
}
|
||||
}
|
||||
|
||||
public override void ExitDisappear()
|
||||
{
|
||||
gameObject.layer = BattleConst.LAYER_MONSTER;
|
||||
BattleMgr.AddToDefUnitsList(this);
|
||||
if (isHaveHpBar)
|
||||
{
|
||||
hpBar.transform.localScale = Vector3.one;
|
||||
}
|
||||
if (IsHaveShadow)
|
||||
{
|
||||
shadow.transform.localScale = Vector3.one*BodyRadius*2.0f;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTarget(BattleControlUnit target)
|
||||
{
|
||||
Target = target;
|
||||
}
|
||||
|
||||
public bool GetIsNormalMonster()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool GetIsBOSS()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void StopMove()
|
||||
{
|
||||
isMoving = false;
|
||||
}
|
||||
|
||||
public void StartMove()
|
||||
{
|
||||
isMoving = true;
|
||||
}
|
||||
|
||||
// 秒杀
|
||||
public void InstantKill()
|
||||
{
|
||||
OnDead();
|
||||
}
|
||||
|
||||
public override void PlayAirborne()
|
||||
{
|
||||
if (ReferenceEquals(airborneSeq, null))
|
||||
{
|
||||
airborneSeq = BattleHelper.CreateSequence();
|
||||
var time = BattleConfigure.TimeHitFly;
|
||||
var tween1 = mainBody.DOLocalMoveY(BattleConfigure.HeightHitFly, time*3.0f/5.0f).SetEase(Ease.OutQuart);
|
||||
tween1.intId = BattleConst.DOTWEEN_ID_BATTLE;
|
||||
var tween2 = mainBody.DOLocalMoveY(0.0f, time*2.0f/5.0f);
|
||||
tween2.intId = BattleConst.DOTWEEN_ID_BATTLE;
|
||||
airborneSeq.Append(tween1);
|
||||
airborneSeq.Append(tween2);
|
||||
airborneSeq.SetAutoKill(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
airborneSeq.Restart();
|
||||
}
|
||||
isHitBack = true;
|
||||
hitBackTime = BattleConfigure.TimeHitFly;
|
||||
hitBackSpeed = BattleConfigure.DistanceHitFly / hitBackTime;
|
||||
}
|
||||
|
||||
public override void StopAirborne()
|
||||
{
|
||||
if (!ReferenceEquals(airborneSeq, null))
|
||||
{
|
||||
airborneSeq.Pause();
|
||||
}
|
||||
mainBody.localPosition = Vector3.zero;
|
||||
}
|
||||
|
||||
public override void MoveWithSkillAI(int target, int horizontal, float x, float z, int refresh, int across, float speed, int endType, float endValue, int collisionType)
|
||||
{
|
||||
StartMove();
|
||||
targetTypeAI = target;
|
||||
horizontalTypeAI = horizontal;
|
||||
offsetXAI = x;
|
||||
offsetZAI = z;
|
||||
keepUpdateTargetPositionAI = refresh == 1;
|
||||
isCanAcrossTarget = across == 1;
|
||||
moveSpeedAI = speed;
|
||||
isTeleport = moveSpeedAI < 0.000001f;
|
||||
endTypeAI = endType;
|
||||
if (endTypeAI == 1)
|
||||
{
|
||||
endValueAI = endValue*endValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
endValueAI = endValue;
|
||||
}
|
||||
collisionTypeAI = collisionType;
|
||||
FindTargetPosition();
|
||||
}
|
||||
|
||||
private void FindTargetPosition()
|
||||
{
|
||||
if (targetTypeAI == 1) // 自身
|
||||
{
|
||||
FindTargetPositionAISelf();
|
||||
CheckTargetPositionAIOutWall();
|
||||
}
|
||||
else if(targetTypeAI == 2) // 目标
|
||||
{
|
||||
FindTargetPositionAITarget();
|
||||
CheckTargetPositionAIOutWall();
|
||||
}
|
||||
else if(targetTypeAI == 3) // 场地中央
|
||||
{
|
||||
FindTargetPositionAIMiddle();
|
||||
CheckTargetPositionAIOutWall();
|
||||
}
|
||||
else
|
||||
{
|
||||
StopMove();
|
||||
}
|
||||
}
|
||||
|
||||
private void FindTargetPositionAITarget()
|
||||
{
|
||||
if (horizontalTypeAI == 1)
|
||||
{
|
||||
if (Target.transform.position.x < transform.position.x) // 目标在自己的左边
|
||||
{
|
||||
targetPositionAI = Target.transform.position + new Vector3(-offsetXAI, 0.0f, offsetZAI);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetPositionAI = Target.transform.position + new Vector3(offsetXAI, 0.0f, offsetZAI);
|
||||
}
|
||||
}
|
||||
else if(horizontalTypeAI == 2)
|
||||
{
|
||||
var deltaX = transform.position.x - Target.transform.position.x;
|
||||
var deltaZ = transform.position.z - Target.transform.position.z;
|
||||
var radian = Mathf.Atan2(deltaZ, deltaX);
|
||||
var x = -offsetXAI*Mathf.Cos(radian);
|
||||
var z = -offsetXAI*Mathf.Sin(radian);
|
||||
targetPositionAI = new Vector3(Target.transform.position.x + x, 0.0f, Target.transform.position.z + z);
|
||||
}
|
||||
}
|
||||
|
||||
private void FindTargetPositionAISelf()
|
||||
{
|
||||
if (Direction == 1)
|
||||
{
|
||||
targetPositionAI = transform.position + new Vector3(offsetXAI, 0.0f, offsetZAI);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetPositionAI = transform.position + new Vector3(-offsetXAI, 0.0f, offsetZAI);
|
||||
}
|
||||
}
|
||||
|
||||
private void FindTargetPositionAIMiddle()
|
||||
{
|
||||
if (horizontalTypeAI == 1)
|
||||
{
|
||||
if (BattleConfigure.SceneMidX < transform.position.x) // 自己在场景右边
|
||||
{
|
||||
targetPositionAI = new Vector3(-offsetXAI + BattleConfigure.SceneMidX, 0.0f, offsetZAI + BattleConfigure.SceneMidZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
targetPositionAI = transform.position + new Vector3(offsetXAI + BattleConfigure.SceneMidX, 0.0f, offsetZAI + BattleConfigure.SceneMidZ);
|
||||
}
|
||||
}
|
||||
else if(horizontalTypeAI == 2)
|
||||
{
|
||||
var deltaX = transform.position.x - BattleConfigure.SceneMidX;
|
||||
var deltaZ = transform.position.z - BattleConfigure.SceneMidZ;
|
||||
var radian = Mathf.Atan2(deltaZ, deltaX);
|
||||
var x = -offsetXAI*Mathf.Cos(radian);
|
||||
var z = -offsetXAI*Mathf.Sin(radian);
|
||||
targetPositionAI = new Vector3(Target.transform.position.x + x, 0.0f, Target.transform.position.z + z);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckTargetPositionAIOutWall()
|
||||
{
|
||||
if (targetPositionAI.x < BattleConfigure.SceneMinX) // 撞左边墙了
|
||||
{
|
||||
targetPositionAI.x = BattleConfigure.SceneMinX;
|
||||
}
|
||||
else if (targetPositionAI.x > BattleConfigure.SceneMaxX) // 撞右边墙了
|
||||
{
|
||||
targetPositionAI.x = BattleConfigure.SceneMaxX;
|
||||
}
|
||||
if (targetPositionAI.z < BattleConfigure.SceneMinZ) // 撞左边墙了
|
||||
{
|
||||
targetPositionAI.z = BattleConfigure.SceneMinZ;
|
||||
}
|
||||
else if (targetPositionAI.z > BattleConfigure.SceneMaxZ) // 撞右边墙了
|
||||
{
|
||||
targetPositionAI.z = BattleConfigure.SceneMaxZ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Update()
|
||||
{
|
||||
var deltaTime = Time.deltaTime*BattleConfigure.TimeScale;
|
||||
if (!isMoving)
|
||||
{
|
||||
if (isHitBack)
|
||||
{
|
||||
UpdateHitBackMove(deltaTime);
|
||||
}
|
||||
CheckToward(deltaTime);
|
||||
return;
|
||||
}
|
||||
UpdateAIMoveing(deltaTime);
|
||||
}
|
||||
|
||||
void LateUpdate()
|
||||
{
|
||||
// TODO 后续可以优化成怪物移动或者相机移动的时候更新
|
||||
if (isHaveHpBar)
|
||||
{
|
||||
BattleMgr.UpdateUIPosition(transform.position, HpBarAddY, hpBar.transform as RectTransform);
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckToward(float deltaTime)
|
||||
{
|
||||
if (IsDead)
|
||||
{
|
||||
return;
|
||||
}
|
||||
checkTowardTime -= deltaTime;
|
||||
if (checkTowardTime < 0.0f)
|
||||
{
|
||||
checkTowardTime = BattleConfigure.CheckMonsterTowardInterval;
|
||||
TowardToTarget();
|
||||
}
|
||||
}
|
||||
|
||||
public override void TowardToTarget()
|
||||
{
|
||||
if (Target.transform.position.x <= transform.position.x)
|
||||
{
|
||||
if (Direction != -1)
|
||||
{
|
||||
Direction = -1;
|
||||
var bodyTransform = spineHelper.GetSpineObject().transform.parent;
|
||||
bodyTransform.localScale = new Vector3(BattleConfigure.MonsterScaleFactorXZ*Direction, bodyTransform.localScale.y, bodyTransform.localScale.z);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Direction != 1)
|
||||
{
|
||||
Direction = 1;
|
||||
var bodyTransform = spineHelper.GetSpineObject().transform.parent;
|
||||
bodyTransform.localScale = new Vector3(BattleConfigure.MonsterScaleFactorXZ*Direction, bodyTransform.localScale.y, bodyTransform.localScale.z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void ForceTowardToTarget()
|
||||
{
|
||||
if (Target.transform.position.x <= transform.position.x)
|
||||
{
|
||||
Direction = -1;
|
||||
var bodyTransform = spineHelper.GetSpineObject().transform.parent;
|
||||
bodyTransform.localScale = new Vector3(BattleConfigure.MonsterScaleFactorXZ*Direction, bodyTransform.localScale.y, bodyTransform.localScale.z);
|
||||
}
|
||||
else
|
||||
{
|
||||
Direction = 1;
|
||||
var bodyTransform = spineHelper.GetSpineObject().transform.parent;
|
||||
bodyTransform.localScale = new Vector3(BattleConfigure.MonsterScaleFactorXZ*Direction, bodyTransform.localScale.y, bodyTransform.localScale.z);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateAIMoveing(float deltaTime)
|
||||
{
|
||||
if (endTypeAI == 1) // 按距离结束
|
||||
{
|
||||
if ((transform.position - targetPositionAI).sqrMagnitude < endValueAI)
|
||||
{
|
||||
FinishAIMove();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if(endTypeAI == 2) // 按时间结束
|
||||
{
|
||||
endValueAI -= deltaTime;
|
||||
if (endValueAI < 0.0f)
|
||||
{
|
||||
FinishAIMove();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((transform.position - targetPositionAI).sqrMagnitude < 0.0001)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
MoveToTarget(deltaTime);
|
||||
if (keepUpdateTargetPositionAI)
|
||||
{
|
||||
checkAITargetPositionTime -= deltaTime;
|
||||
if (checkAITargetPositionTime < 0.0f)
|
||||
{
|
||||
checkAITargetPositionTime = BattleConfigure.CheckAITargetPositionInterval;
|
||||
FindTargetPosition();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void MoveToTarget(float deltaTime)
|
||||
{
|
||||
Vector3 moveToPosition;
|
||||
if (isTeleport)
|
||||
{
|
||||
if (isHitBack)
|
||||
{
|
||||
hitBackTime -= deltaTime;
|
||||
if (hitBackTime < 0.0f)
|
||||
{
|
||||
isHitBack = false;
|
||||
}
|
||||
}
|
||||
moveToPosition = targetPositionAI;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isHitBack)
|
||||
{
|
||||
hitBackTime -= deltaTime;
|
||||
if (hitBackTime < 0.0f)
|
||||
{
|
||||
isHitBack = false;
|
||||
}
|
||||
moveToPosition = Vector3.MoveTowards(transform.position, transform.position + new Vector3(BattleConst.UNIT_MOVE_DISTANCE_OPPOSITE*Direction, 0.0f, 0.0f), hitBackSpeed * deltaTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
moveToPosition = Vector3.MoveTowards(transform.position, targetPositionAI, moveSpeedAI * deltaTime);
|
||||
}
|
||||
}
|
||||
if (!isCanAcrossTarget) // 不能穿过目标
|
||||
{
|
||||
if (Target.transform.position.x <= transform.position.x) // 在目标左边
|
||||
{
|
||||
var limitX = Target.transform.position.x + Target.BodyRadius + BodyRadius;
|
||||
if (moveToPosition.x < limitX)
|
||||
{
|
||||
moveToPosition.x = limitX;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var limitX = Target.transform.position.x - Target.BodyRadius - BodyRadius;
|
||||
if (moveToPosition.x > limitX)
|
||||
{
|
||||
moveToPosition.x = limitX;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (moveToPosition.x < BattleConfigure.SceneMinX) // 撞左边墙了
|
||||
{
|
||||
moveToPosition.x = BattleConfigure.SceneMinX;
|
||||
}
|
||||
else if (moveToPosition.x > BattleConfigure.SceneMaxX) // 撞右边墙了
|
||||
{
|
||||
moveToPosition.x = BattleConfigure.SceneMaxX;
|
||||
}
|
||||
if (moveToPosition.z < BattleConfigure.SceneMinZ) // 撞左边墙了
|
||||
{
|
||||
moveToPosition.z = BattleConfigure.SceneMinZ;
|
||||
}
|
||||
else if (moveToPosition.z > BattleConfigure.SceneMaxZ) // 撞右边墙了
|
||||
{
|
||||
moveToPosition.z = BattleConfigure.SceneMaxZ;
|
||||
}
|
||||
transform.position = moveToPosition;
|
||||
}
|
||||
|
||||
private void UpdateHitBackMove(float deltaTime)
|
||||
{
|
||||
hitBackTime -= deltaTime;
|
||||
if (hitBackTime < 0.0f)
|
||||
{
|
||||
isHitBack = false;
|
||||
}
|
||||
var moveToPosition = Vector3.MoveTowards(transform.position, transform.position + new Vector3(BattleConst.UNIT_MOVE_DISTANCE_OPPOSITE*Direction, 0.0f, 0.0f), hitBackSpeed * deltaTime);
|
||||
if (Target.transform.position.x <= transform.position.x) // 在目标左边
|
||||
{
|
||||
var limitX = Target.transform.position.x + Target.BodyRadius + BodyRadius;
|
||||
if (moveToPosition.x < limitX)
|
||||
{
|
||||
moveToPosition.x = limitX;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var limitX = Target.transform.position.x - Target.BodyRadius - BodyRadius;
|
||||
if (moveToPosition.x > limitX)
|
||||
{
|
||||
moveToPosition.x = limitX;
|
||||
}
|
||||
}
|
||||
if (moveToPosition.x < BattleConfigure.SceneMinX) // 撞左边墙了
|
||||
{
|
||||
moveToPosition.x = BattleConfigure.SceneMinX;
|
||||
}
|
||||
else if (moveToPosition.x > BattleConfigure.SceneMaxX) // 撞右边墙了
|
||||
{
|
||||
moveToPosition.x = BattleConfigure.SceneMaxX;
|
||||
}
|
||||
if (moveToPosition.z < BattleConfigure.SceneMinZ) // 撞左边墙了
|
||||
{
|
||||
moveToPosition.z = BattleConfigure.SceneMinZ;
|
||||
}
|
||||
else if (moveToPosition.z > BattleConfigure.SceneMaxZ) // 撞右边墙了
|
||||
{
|
||||
moveToPosition.z = BattleConfigure.SceneMaxZ;
|
||||
}
|
||||
transform.position = moveToPosition;
|
||||
}
|
||||
|
||||
public override void BeHitBack()
|
||||
{
|
||||
if (isHitBack)
|
||||
{
|
||||
return;
|
||||
}
|
||||
isHitBack = true;
|
||||
hitBackTime = BattleConfigure.HitBackTime;
|
||||
hitBackSpeed = BattleConfigure.DistanceHitBack / hitBackTime;
|
||||
}
|
||||
|
||||
private void FinishAIMove()
|
||||
{
|
||||
StopMove();
|
||||
luaOnFinishAIMoveFunc?.Invoke();
|
||||
}
|
||||
|
||||
public override void OnDead()
|
||||
{
|
||||
IsDead = true;
|
||||
IsInGroundState = false;
|
||||
BattleMgr.RemoveFromDefUnitsList(this);
|
||||
}
|
||||
|
||||
public override void Clear()
|
||||
{
|
||||
luaOnHitTargetFunc = null;
|
||||
luaOnFinishAIMoveFunc = null;
|
||||
if (isHaveHpBar)
|
||||
{
|
||||
BattleMgr.PoolHelper.PutBackHpBar(hpBar, Side);
|
||||
hpBar = null;
|
||||
isHaveHpBar = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
luaOnHitTargetFunc = null;
|
||||
luaOnFinishAIMoveFunc = null;
|
||||
if (!ReferenceEquals(airborneSeq, null))
|
||||
{
|
||||
airborneSeq.Kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f8b7c8b3bf2a99041abe55b41965f017
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,20 +0,0 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlMonsterExtend : MonoBehaviour
|
||||
{
|
||||
protected BattleControlMonster mainControl;
|
||||
public void SetControl(BattleControlMonster control)
|
||||
{
|
||||
mainControl = control;
|
||||
}
|
||||
|
||||
public virtual void Init(long id) {}
|
||||
|
||||
public virtual void OnRecycle() {}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 418c7fd8773d75544906e43496dd4481
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,34 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlSphereBullet : BattleControlBullet
|
||||
{
|
||||
private SphereCollider sphereCollider;
|
||||
private void Awake()
|
||||
{
|
||||
sphereCollider = gameObject.AddComponent<SphereCollider>();
|
||||
}
|
||||
|
||||
public override void SetupSphereCollisionBody(float collisionRadius)
|
||||
{
|
||||
sphereCollider.center = Vector3.zero;
|
||||
sphereCollider.radius = collisionRadius;
|
||||
}
|
||||
|
||||
public override void SetColliderEnabled(bool enabled)
|
||||
{
|
||||
sphereCollider.enabled = enabled;
|
||||
}
|
||||
|
||||
public override void Recycle()
|
||||
{
|
||||
if (IsRecycle)
|
||||
{
|
||||
return;
|
||||
}
|
||||
sphereCollider.enabled = false;
|
||||
BFMain.Instance.BattleMgr.PoolHelper.RecycleSphereBullet(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 886b166ecb4cc23459744e47400ee1b9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,49 +0,0 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace BF
|
||||
{
|
||||
public class BattleControlSphereCollider : BattleControlCollider
|
||||
{
|
||||
private SphereCollider sphereCollider;
|
||||
private void Awake()
|
||||
{
|
||||
sphereCollider = gameObject.AddComponent<SphereCollider>();
|
||||
}
|
||||
|
||||
public void SetupCollisionBody(float collisionRadius, float x, float z)
|
||||
{
|
||||
sphereCollider.center = Vector3.zero;
|
||||
sphereCollider.radius = collisionRadius;
|
||||
offset = new Vector3(x, 0.0f, z);
|
||||
}
|
||||
|
||||
public override void SetColliderEnabled(bool enabled)
|
||||
{
|
||||
sphereCollider.enabled = enabled;
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (!isActive)
|
||||
{
|
||||
return;
|
||||
}
|
||||
CheckCollider();
|
||||
}
|
||||
|
||||
public override void Recycle()
|
||||
{
|
||||
if (IsRecycle)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (!ReferenceEquals(container, null))
|
||||
{
|
||||
container.Remove(this);
|
||||
}
|
||||
sphereCollider.enabled = false;
|
||||
isActive = false;
|
||||
BFMain.Instance.BattleMgr.PoolHelper.RecycleSkillSphereCollider(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user