Compare commits

..

No commits in common. "master" and "multiPlayerPerCell" have entirely different histories.

269 changed files with 6492 additions and 14084 deletions

View file

@ -10,7 +10,7 @@ steps:
auto_tag: true
- name: frontend
image: privateregistry.michelescandura.com/michele/basecompileimage:1.1
image: privateregistry.michelescandura.com/michele/basecompileimage
pull: true
volumes:
- name: cache
@ -50,7 +50,7 @@ steps:
- name: cache
path: /release
settings:
api_key: 5eb87a0a7d55fbf8fb64e678781a5ddcc1a27e09
api_key: 96d2ba3da7491bd7760e2681f8882cf41f82e609
base_url: https://git.michelescandura.com
files: /release/zip/*
title: ${DRONE_TAG}

4
.gitignore vendored
View file

@ -362,6 +362,4 @@ MigrationBackup/
# Fody - auto-generated XML schema
FodyWeavers.xsd
/db
*.db
*.db*
/db

View file

@ -1,52 +0,0 @@
select * from MapLog where SessionId=2 --Ruined Maze D0823E78-15E4-45EE-A396-0A2E891961DC
select * from MapLog where SessionId=4 --test 6351309A-EFA5-4721-A4BE-AC63995ADB7F
select * from MapLog where SessionId=5 --daniele 7EB1D6F5-12E2-4A8F-98CD-3351D40F1D26
select * from MapLog where SessionId=6 --Psyruque BED7EF13-5823-427A-8C40-8BE94A563638
select * from Sessions
select * from Snapshots
select * from Snapshot where SessionId=2
select * from Sessions
select * from MapLogs
select * from MapLog
INSERT INTO Snapshots (Object, SessionId, Timestamp)
SELECT Object, "BED7EF13-5823-427A-8C40-8BE94A563638",Timestamp
FROM Snapshot
WHERE SessionId=6
order by SnapshotId
INSERT INTO MapLogs (Object, Operation, SessionId, Timestamp, Type, UserId)
SELECT Object, Operation, "6351309A-EFA5-4721-A4BE-AC63995ADB7F", Timestamp, Type, "cd85a137-a5e8-4e4a-81d2-3e1c94ac9470"
FROM MapLog
WHERE SessionId =2
ORDER BY MapLogId
INSERT INTO MapLogs (Object, Operation, SessionId, Timestamp, Type, UserId)
SELECT Object, Operation, "D0823E78-15E4-45EE-A396-0A2E891961DC", Timestamp, Type, "cd85a137-a5e8-4e4a-81d2-3e1c94ac9470"
FROM MapLog
WHERE SessionId =4
ORDER BY MapLogId
INSERT INTO MapLogs (Object, Operation, SessionId, Timestamp, Type, UserId)
SELECT Object, Operation, "7EB1D6F5-12E2-4A8F-98CD-3351D40F1D26", Timestamp, Type, "cd85a137-a5e8-4e4a-81d2-3e1c94ac9470"
FROM MapLog
WHERE SessionId =5
ORDER BY MapLogId
INSERT INTO MapLogs (Object, Operation, SessionId, Timestamp, Type, UserId)
SELECT Object, Operation, "BED7EF13-5823-427A-8C40-8BE94A563638", Timestamp, Type, "cd85a137-a5e8-4e4a-81d2-3e1c94ac9470"
FROM MapLog
WHERE SessionId =6
ORDER BY MapLogId
--delete from Snapshots where SessionId="A306DFEE-82A9-4964-942A-1B923B970951"
insert into Snapshots (
select * from Snapshot where SessionId=2

View file

@ -1 +0,0 @@
<mxfile host="app.diagrams.net" modified="2021-02-12T11:47:08.026Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63" etag="N1L05Rh-iNcs-Q1Nc1cU" version="14.3.1" type="device"><diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">7Vvbdto4FP0aHpPlC7c8gnNpO2mGljSZV4EFaJAtRhYh9OvnyJZvKICd4DohrMUDOpZlS3vraGvbbtiO93zD0WL2nbmYNizDfW7Ylw3LMpuW1ZA/w11HkU5bBaacuKpSGhiS31gFDRVdEhcHuYqCMSrIIh8cM9/HY5GLIc7ZKl9twmj+qgs0xVpgOEZUjz4SV8yiaNfqpPEvmExn8ZXN9kV0xENxZdWTYIZctsqE7KuG7XDGRPTPe3YwlYMXj8vj1/UjvZ23b779CP5Dv/p/3d89nEWNXZc5JekCx754ddO/55PrLw/Nf/9ZDK5/rIyb3ujbmTrFeEJ0qcbLQd4Ckamv+izW8UAGK+JR5EOpP2G+GKojMAx9ROUJ9uUY7g9zCDxhLghg0FMHBFtAdDwj1L1Fa7aUvQgEGs/jUn/GOPkNzSIKh0wIwGEuFJ2sdq7GUJ4JYQOiHAdQZxAPjZmEblEgVJ0xoxQtAjIKb1hW8RCfEr/PhGBe3BBb+i52VSnBOiwIzuYJe+T5BQFRwMnRwM8ZOiqAbjDzsOBrqKKOJlxTk82My6uUumZbxWZZ2tpdNWXUdJkmbSeX+wnTC/lTGIT0evbG9ZoFrweI5C6HKADvI4H7chiDLBHhT6araSikZwmqmhpV75CHNZrCSIsMJSmeiK2EDBZoTPzpbVjnsplGfqqeyhCDcyc0JMOMuC72Q7IIJFDEJ8mQBSO+CIei1YcfDJhjnLcaLbghB8pmWoafrM6Fw3zgFSIhgTCQdYUlYV+g1s6Ju59a6zxiZZHNEikHaVn8LD3VcAyMcfvrXwFkjWMDckdCmQmPqr9Vwd2yaobb1uC+8hCRp/VcF1J0cAL8oIB3ujUD3tQA1xCmJJQPajTMF5fWPfB7AKRsLsb7XtLh8szUOGHrnLBfwJ+iEaYDFhBBmGyfR3U3eFFX0jaNZjFUd6z+bwK1pYE6WPLxDAVSRIDqmsPwhv+OcD5XBqpZd25ua6gOxdKV3Swo+o2T6D+c6Dc3RL/drlb0mxui3+6+X9Hf2c5U427pjY5QNxZMO+3CNHsvG4CuhmUP7l7aN5bxHZaSo0PyoIKwNN617wAuToLw4KAWVflV6UFTNwy/QuI3rgANMkLhMnPPZMDnTDZ3ZFM6K4KaVYHcrTtTm7rXdoPlkjvEHvERl4jfoznWTeKPjm9VkNav+eMb2JWOse/25CMXKI0ok3K7DyGlx00jKl4TGi9dewRzfv3D7hTHUwfTEVtdpYF+GIADMVNKy+2Awb4U74cMNhhTXGA7J+92J7AvAckxRYI85Z887RDnA0ncVJhbRl6YW4adbyLqpDor+6inbEPRKGgNHcyq182/AWcTHARM1+unLWb1W0x7c8tXdIvZMfaS+IUdpt0ssMPsvI8dpqn7lkNEkcq4n3BtSybvx9lZmrpNqaH32bca5WEtuoGsbK+h25SfSrHEiL1ryWJuZPrOKyWLvdGQ1dm4l6oli+40bntOeRIs1QuWltHN0aHwizCWuWOR2a5YWq0P9CKMbqQOBcdYf3rzWRRLpzC93o1i0c1Rh4jj05wHtcDL41y7B27pfikkbXF8r63VDHTtb79YumUKyl6u4pbhMPcE+IEBL/xmTHWI64aqA2MijtA5qBtr+5Vi7HBY64amBvKnNxjK49oqKMOqchgs3ft7AIjcY1ygq0OxXXsm1u2/v5disZT2Qk8+q7yV8+CEaGFEL2rPt+WsP7YIx7qcuZf4gmb9Vp8a271OX4zlXqtP4SyplLU1muqG3uj6Jc9zEsJY+SaKun6t5p6Gtrh+WkNnm0+cNtphk0mAKzEOLd04NM7PY+BTuoZmXCYR7Ek7I2XJRWt4H43n05C/DqOMw3GfpQakcrut4jkhnl/qo0t1W43k87PiRt3ZGxkVE/OPwaWbZ8WxivXTRwXrMLM/fin3j0One2YUeiEXeLTV+8zI8U1UdRVcxMFPNPpurEu56G8khkaAbVwpvk5cHIYpdt7Fj5P0W7gCxfST66h6+uG6ffU/</diagram></mxfile>

Binary file not shown.

View file

@ -0,0 +1,288 @@
info face="Arial" size=64 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
common lineHeight=63 base=51 scaleW=512 scaleH=512 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="arial64_0.png"
chars count=191
char id=32 x=508 y=2 width=3 height=1 xoffset=-1 yoffset=62 xadvance=15 page=0 chnl=15
char id=33 x=497 y=270 width=7 height=40 xoffset=5 yoffset=11 xadvance=17 page=0 chnl=15
char id=34 x=445 y=382 width=16 height=14 xoffset=2 yoffset=11 xadvance=20 page=0 chnl=15
char id=35 x=453 y=229 width=31 height=40 xoffset=0 yoffset=11 xadvance=31 page=0 chnl=15
char id=36 x=188 y=105 width=28 height=46 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=37 x=346 y=190 width=44 height=40 xoffset=2 yoffset=11 xadvance=49 page=0 chnl=15
char id=38 x=147 y=238 width=34 height=40 xoffset=2 yoffset=11 xadvance=37 page=0 chnl=15
char id=39 x=462 y=382 width=7 height=14 xoffset=2 yoffset=11 xadvance=11 page=0 chnl=15
char id=40 x=287 y=53 width=14 height=51 xoffset=3 yoffset=11 xadvance=18 page=0 chnl=15
char id=41 x=272 y=53 width=14 height=51 xoffset=3 yoffset=11 xadvance=18 page=0 chnl=15
char id=42 x=379 y=384 width=19 height=17 xoffset=1 yoffset=11 xadvance=21 page=0 chnl=15
char id=43 x=26 y=400 width=28 height=27 xoffset=2 yoffset=19 xadvance=32 page=0 chnl=15
char id=44 x=470 y=380 width=7 height=13 xoffset=4 yoffset=46 xadvance=15 page=0 chnl=15
char id=45 x=128 y=419 width=16 height=5 xoffset=1 yoffset=34 xadvance=18 page=0 chnl=15
char id=46 x=162 y=419 width=7 height=5 xoffset=4 yoffset=46 xadvance=15 page=0 chnl=15
char id=47 x=62 y=321 width=17 height=40 xoffset=-1 yoffset=11 xadvance=15 page=0 chnl=15
char id=48 x=341 y=314 width=27 height=39 xoffset=2 yoffset=12 xadvance=31 page=0 chnl=15
char id=49 x=369 y=313 width=16 height=39 xoffset=5 yoffset=12 xadvance=31 page=0 chnl=15
char id=50 x=200 y=320 width=28 height=39 xoffset=1 yoffset=12 xadvance=31 page=0 chnl=15
char id=51 x=229 y=320 width=27 height=39 xoffset=2 yoffset=12 xadvance=31 page=0 chnl=15
char id=52 x=112 y=321 width=29 height=39 xoffset=0 yoffset=12 xadvance=31 page=0 chnl=15
char id=53 x=171 y=320 width=28 height=39 xoffset=2 yoffset=12 xadvance=31 page=0 chnl=15
char id=54 x=142 y=320 width=28 height=39 xoffset=1 yoffset=12 xadvance=31 page=0 chnl=15
char id=55 x=313 y=315 width=27 height=39 xoffset=2 yoffset=12 xadvance=31 page=0 chnl=15
char id=56 x=257 y=320 width=27 height=39 xoffset=2 yoffset=12 xadvance=31 page=0 chnl=15
char id=57 x=285 y=315 width=27 height=39 xoffset=2 yoffset=12 xadvance=31 page=0 chnl=15
char id=58 x=491 y=350 width=7 height=29 xoffset=4 yoffset=22 xadvance=15 page=0 chnl=15
char id=59 x=26 y=362 width=7 height=37 xoffset=4 yoffset=22 xadvance=15 page=0 chnl=15
char id=60 x=84 y=395 width=28 height=27 xoffset=2 yoffset=18 xadvance=32 page=0 chnl=15
char id=61 x=350 y=385 width=28 height=17 xoffset=2 yoffset=23 xadvance=32 page=0 chnl=15
char id=62 x=55 y=396 width=28 height=27 xoffset=2 yoffset=18 xadvance=32 page=0 chnl=15
char id=63 x=333 y=273 width=27 height=40 xoffset=2 yoffset=11 xadvance=31 page=0 chnl=15
char id=64 x=0 y=0 width=52 height=52 xoffset=2 yoffset=11 xadvance=56 page=0 chnl=15
char id=65 x=471 y=188 width=38 height=40 xoffset=-1 yoffset=11 xadvance=37 page=0 chnl=15
char id=66 x=387 y=231 width=32 height=40 xoffset=3 yoffset=11 xadvance=37 page=0 chnl=15
char id=67 x=406 y=103 width=36 height=42 xoffset=2 yoffset=10 xadvance=40 page=0 chnl=15
char id=68 x=182 y=238 width=34 height=40 xoffset=4 yoffset=11 xadvance=40 page=0 chnl=15
char id=69 x=0 y=280 width=31 height=40 xoffset=4 yoffset=11 xadvance=37 page=0 chnl=15
char id=70 x=247 y=279 width=28 height=40 xoffset=4 yoffset=11 xadvance=34 page=0 chnl=15
char id=71 x=367 y=103 width=38 height=42 xoffset=2 yoffset=10 xadvance=43 page=0 chnl=15
char id=72 x=420 y=229 width=32 height=40 xoffset=4 yoffset=11 xadvance=40 page=0 chnl=15
char id=73 x=88 y=321 width=7 height=40 xoffset=4 yoffset=11 xadvance=15 page=0 chnl=15
char id=74 x=189 y=196 width=23 height=41 xoffset=1 yoffset=11 xadvance=28 page=0 chnl=15
char id=75 x=217 y=238 width=34 height=40 xoffset=3 yoffset=11 xadvance=37 page=0 chnl=15
char id=76 x=417 y=272 width=27 height=40 xoffset=3 yoffset=11 xadvance=31 page=0 chnl=15
char id=77 x=391 y=188 width=39 height=40 xoffset=3 yoffset=11 xadvance=45 page=0 chnl=15
char id=78 x=252 y=233 width=33 height=40 xoffset=3 yoffset=11 xadvance=40 page=0 chnl=15
char id=79 x=327 y=105 width=39 height=42 xoffset=2 yoffset=10 xadvance=43 page=0 chnl=15
char id=80 x=32 y=280 width=31 height=40 xoffset=4 yoffset=11 xadvance=37 page=0 chnl=15
char id=81 x=217 y=105 width=39 height=44 xoffset=2 yoffset=10 xadvance=43 page=0 chnl=15
char id=82 x=38 y=239 width=36 height=40 xoffset=4 yoffset=11 xadvance=40 page=0 chnl=15
char id=83 x=443 y=103 width=33 height=42 xoffset=2 yoffset=10 xadvance=37 page=0 chnl=15
char id=84 x=286 y=233 width=33 height=40 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=15
char id=85 x=477 y=102 width=32 height=41 xoffset=4 yoffset=11 xadvance=40 page=0 chnl=15
char id=86 x=0 y=239 width=37 height=40 xoffset=0 yoffset=11 xadvance=37 page=0 chnl=15
char id=87 x=291 y=191 width=54 height=40 xoffset=0 yoffset=11 xadvance=54 page=0 chnl=15
char id=88 x=111 y=238 width=35 height=40 xoffset=0 yoffset=11 xadvance=35 page=0 chnl=15
char id=89 x=75 y=239 width=35 height=40 xoffset=0 yoffset=11 xadvance=35 page=0 chnl=15
char id=90 x=320 y=232 width=33 height=40 xoffset=0 yoffset=11 xadvance=34 page=0 chnl=15
char id=91 x=329 y=53 width=12 height=51 xoffset=3 yoffset=11 xadvance=15 page=0 chnl=15
char id=92 x=44 y=321 width=17 height=40 xoffset=-1 yoffset=11 xadvance=15 page=0 chnl=15
char id=93 x=316 y=53 width=12 height=51 xoffset=0 yoffset=11 xadvance=15 page=0 chnl=15
char id=94 x=248 y=391 width=22 height=21 xoffset=1 yoffset=11 xadvance=24 page=0 chnl=15
char id=95 x=76 y=424 width=34 height=5 xoffset=-2 yoffset=57 xadvance=31 page=0 chnl=15
char id=96 x=29 y=428 width=11 height=8 xoffset=2 yoffset=11 xadvance=18 page=0 chnl=15
char id=97 x=241 y=360 width=28 height=30 xoffset=1 yoffset=21 xadvance=31 page=0 chnl=15
char id=98 x=389 y=272 width=27 height=40 xoffset=3 yoffset=11 xadvance=31 page=0 chnl=15
char id=99 x=297 y=355 width=26 height=30 xoffset=2 yoffset=21 xadvance=28 page=0 chnl=15
char id=100 x=305 y=274 width=27 height=40 xoffset=1 yoffset=11 xadvance=31 page=0 chnl=15
char id=101 x=212 y=360 width=28 height=30 xoffset=1 yoffset=21 xadvance=31 page=0 chnl=15
char id=102 x=25 y=321 width=18 height=40 xoffset=0 yoffset=11 xadvance=15 page=0 chnl=15
char id=103 x=56 y=197 width=27 height=41 xoffset=1 yoffset=21 xadvance=31 page=0 chnl=15
char id=104 x=471 y=270 width=25 height=40 xoffset=3 yoffset=11 xadvance=31 page=0 chnl=15
char id=105 x=96 y=321 width=7 height=40 xoffset=2 yoffset=11 xadvance=11 page=0 chnl=15
char id=106 x=302 y=53 width=13 height=51 xoffset=-3 yoffset=11 xadvance=13 page=0 chnl=15
char id=107 x=485 y=229 width=25 height=40 xoffset=3 yoffset=11 xadvance=28 page=0 chnl=15
char id=108 x=80 y=321 width=7 height=40 xoffset=2 yoffset=11 xadvance=11 page=0 chnl=15
char id=109 x=140 y=361 width=41 height=30 xoffset=3 yoffset=21 xadvance=47 page=0 chnl=15
char id=110 x=324 y=355 width=25 height=30 xoffset=3 yoffset=21 xadvance=31 page=0 chnl=15
char id=111 x=182 y=360 width=29 height=30 xoffset=1 yoffset=21 xadvance=31 page=0 chnl=15
char id=112 x=0 y=197 width=27 height=41 xoffset=3 yoffset=21 xadvance=31 page=0 chnl=15
char id=113 x=28 y=197 width=27 height=41 xoffset=1 yoffset=21 xadvance=31 page=0 chnl=15
char id=114 x=350 y=354 width=16 height=30 xoffset=3 yoffset=21 xadvance=18 page=0 chnl=15
char id=115 x=270 y=360 width=26 height=30 xoffset=1 yoffset=21 xadvance=28 page=0 chnl=15
char id=116 x=386 y=313 width=15 height=39 xoffset=0 yoffset=12 xadvance=15 page=0 chnl=15
char id=117 x=0 y=401 width=25 height=29 xoffset=3 yoffset=22 xadvance=31 page=0 chnl=15
char id=118 x=435 y=352 width=27 height=29 xoffset=1 yoffset=22 xadvance=29 page=0 chnl=15
char id=119 x=367 y=354 width=39 height=29 xoffset=0 yoffset=22 xadvance=39 page=0 chnl=15
char id=120 x=463 y=350 width=27 height=29 xoffset=0 yoffset=22 xadvance=27 page=0 chnl=15
char id=121 x=361 y=272 width=27 height=40 xoffset=0 yoffset=22 xadvance=27 page=0 chnl=15
char id=122 x=407 y=352 width=27 height=29 xoffset=0 yoffset=22 xadvance=27 page=0 chnl=15
char id=123 x=254 y=53 width=17 height=51 xoffset=1 yoffset=11 xadvance=18 page=0 chnl=15
char id=124 x=337 y=0 width=6 height=52 xoffset=4 yoffset=11 xadvance=14 page=0 chnl=15
char id=125 x=236 y=53 width=17 height=51 xoffset=0 yoffset=11 xadvance=18 page=0 chnl=15
char id=126 x=0 y=431 width=28 height=10 xoffset=2 yoffset=27 xadvance=32 page=0 chnl=15
char id=160 x=508 y=0 width=3 height=1 xoffset=-1 yoffset=62 xadvance=15 page=0 chnl=15
char id=161 x=104 y=321 width=7 height=40 xoffset=5 yoffset=22 xadvance=17 page=0 chnl=15
char id=162 x=161 y=53 width=27 height=51 xoffset=2 yoffset=11 xadvance=31 page=0 chnl=15
char id=163 x=127 y=279 width=30 height=40 xoffset=0 yoffset=11 xadvance=31 page=0 chnl=15
char id=164 x=165 y=392 width=28 height=24 xoffset=1 yoffset=20 xadvance=31 page=0 chnl=15
char id=165 x=354 y=231 width=32 height=40 xoffset=-1 yoffset=11 xadvance=31 page=0 chnl=15
char id=166 x=344 y=0 width=6 height=52 xoffset=4 yoffset=11 xadvance=14 page=0 chnl=15
char id=167 x=189 y=53 width=27 height=51 xoffset=2 yoffset=11 xadvance=31 page=0 chnl=15
char id=168 x=111 y=423 width=16 height=5 xoffset=1 yoffset=11 xadvance=18 page=0 chnl=15
char id=169 x=137 y=154 width=43 height=41 xoffset=-1 yoffset=10 xadvance=41 page=0 chnl=15
char id=170 x=292 y=391 width=19 height=20 xoffset=0 yoffset=11 xadvance=20 page=0 chnl=15
char id=171 x=113 y=393 width=25 height=25 xoffset=3 yoffset=24 xadvance=31 page=0 chnl=15
char id=172 x=399 y=384 width=28 height=16 xoffset=2 yoffset=24 xadvance=32 page=0 chnl=15
char id=173 x=145 y=419 width=16 height=5 xoffset=1 yoffset=34 xadvance=18 page=0 chnl=15
char id=174 x=181 y=154 width=43 height=41 xoffset=-1 yoffset=10 xadvance=41 page=0 chnl=15
char id=175 x=41 y=428 width=34 height=5 xoffset=-2 yoffset=4 xadvance=30 page=0 chnl=15
char id=176 x=428 y=382 width=16 height=15 xoffset=3 yoffset=11 xadvance=22 page=0 chnl=15
char id=177 x=34 y=362 width=28 height=33 xoffset=1 yoffset=18 xadvance=30 page=0 chnl=15
char id=178 x=312 y=386 width=18 height=20 xoffset=0 yoffset=11 xadvance=18 page=0 chnl=15
char id=179 x=331 y=386 width=18 height=20 xoffset=0 yoffset=11 xadvance=18 page=0 chnl=15
char id=180 x=492 y=380 width=11 height=8 xoffset=5 yoffset=12 xadvance=18 page=0 chnl=15
char id=181 x=0 y=321 width=24 height=40 xoffset=4 yoffset=22 xadvance=32 page=0 chnl=15
char id=182 x=439 y=52 width=32 height=50 xoffset=-1 yoffset=11 xadvance=30 page=0 chnl=15
char id=183 x=504 y=371 width=7 height=5 xoffset=5 yoffset=29 xadvance=18 page=0 chnl=15
char id=184 x=478 y=380 width=13 height=11 xoffset=2 yoffset=51 xadvance=18 page=0 chnl=15
char id=185 x=499 y=350 width=12 height=20 xoffset=2 yoffset=11 xadvance=18 page=0 chnl=15
char id=186 x=271 y=391 width=20 height=20 xoffset=0 yoffset=11 xadvance=20 page=0 chnl=15
char id=187 x=139 y=393 width=25 height=25 xoffset=3 yoffset=24 xadvance=31 page=0 chnl=15
char id=188 x=47 y=155 width=44 height=41 xoffset=2 yoffset=11 xadvance=46 page=0 chnl=15
char id=189 x=92 y=154 width=44 height=41 xoffset=2 yoffset=11 xadvance=46 page=0 chnl=15
char id=190 x=0 y=155 width=46 height=41 xoffset=0 yoffset=11 xadvance=46 page=0 chnl=15
char id=191 x=276 y=274 width=28 height=40 xoffset=3 yoffset=22 xadvance=34 page=0 chnl=15
char id=192 x=469 y=0 width=38 height=51 xoffset=-1 yoffset=0 xadvance=37 page=0 chnl=15
char id=193 x=430 y=0 width=38 height=51 xoffset=-1 yoffset=0 xadvance=37 page=0 chnl=15
char id=194 x=391 y=0 width=38 height=51 xoffset=-1 yoffset=0 xadvance=37 page=0 chnl=15
char id=195 x=366 y=52 width=38 height=50 xoffset=-1 yoffset=1 xadvance=37 page=0 chnl=15
char id=196 x=61 y=105 width=38 height=48 xoffset=-1 yoffset=3 xadvance=37 page=0 chnl=15
char id=197 x=100 y=105 width=38 height=48 xoffset=-1 yoffset=3 xadvance=37 page=0 chnl=15
char id=198 x=236 y=192 width=54 height=40 xoffset=-1 yoffset=11 xadvance=55 page=0 chnl=15
char id=199 x=173 y=0 width=36 height=52 xoffset=2 yoffset=10 xadvance=40 page=0 chnl=15
char id=200 x=37 y=53 width=31 height=51 xoffset=4 yoffset=0 xadvance=37 page=0 chnl=15
char id=201 x=69 y=53 width=31 height=51 xoffset=4 yoffset=0 xadvance=37 page=0 chnl=15
char id=202 x=101 y=53 width=31 height=51 xoffset=4 yoffset=0 xadvance=37 page=0 chnl=15
char id=203 x=139 y=105 width=31 height=48 xoffset=4 yoffset=3 xadvance=37 page=0 chnl=15
char id=204 x=354 y=52 width=11 height=51 xoffset=1 yoffset=0 xadvance=15 page=0 chnl=15
char id=205 x=342 y=53 width=11 height=51 xoffset=3 yoffset=0 xadvance=15 page=0 chnl=15
char id=206 x=217 y=53 width=18 height=51 xoffset=-1 yoffset=0 xadvance=15 page=0 chnl=15
char id=207 x=171 y=105 width=16 height=48 xoffset=0 yoffset=3 xadvance=15 page=0 chnl=15
char id=208 x=431 y=188 width=39 height=40 xoffset=-1 yoffset=11 xadvance=40 page=0 chnl=15
char id=209 x=405 y=52 width=33 height=50 xoffset=3 yoffset=1 xadvance=40 page=0 chnl=15
char id=210 x=53 y=0 width=39 height=52 xoffset=2 yoffset=0 xadvance=43 page=0 chnl=15
char id=211 x=93 y=0 width=39 height=52 xoffset=2 yoffset=0 xadvance=43 page=0 chnl=15
char id=212 x=133 y=0 width=39 height=52 xoffset=2 yoffset=0 xadvance=43 page=0 chnl=15
char id=213 x=351 y=0 width=39 height=51 xoffset=2 yoffset=1 xadvance=43 page=0 chnl=15
char id=214 x=472 y=52 width=39 height=49 xoffset=2 yoffset=3 xadvance=43 page=0 chnl=15
char id=215 x=194 y=391 width=24 height=23 xoffset=4 yoffset=20 xadvance=32 page=0 chnl=15
char id=216 x=257 y=105 width=40 height=43 xoffset=2 yoffset=10 xadvance=43 page=0 chnl=15
char id=217 x=243 y=0 width=32 height=52 xoffset=4 yoffset=0 xadvance=40 page=0 chnl=15
char id=218 x=276 y=0 width=32 height=52 xoffset=4 yoffset=0 xadvance=40 page=0 chnl=15
char id=219 x=210 y=0 width=32 height=52 xoffset=4 yoffset=0 xadvance=40 page=0 chnl=15
char id=220 x=0 y=105 width=32 height=49 xoffset=4 yoffset=3 xadvance=40 page=0 chnl=15
char id=221 x=0 y=53 width=36 height=51 xoffset=-1 yoffset=0 xadvance=37 page=0 chnl=15
char id=222 x=64 y=280 width=31 height=40 xoffset=4 yoffset=11 xadvance=37 page=0 chnl=15
char id=223 x=96 y=280 width=30 height=40 xoffset=3 yoffset=11 xadvance=34 page=0 chnl=15
char id=224 x=460 y=146 width=28 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=225 x=315 y=149 width=28 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=226 x=344 y=148 width=28 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=227 x=218 y=279 width=28 height=40 xoffset=1 yoffset=11 xadvance=31 page=0 chnl=15
char id=228 x=432 y=313 width=28 height=38 xoffset=1 yoffset=13 xadvance=31 page=0 chnl=15
char id=229 x=298 y=105 width=28 height=43 xoffset=1 yoffset=8 xadvance=31 page=0 chnl=15
char id=230 x=92 y=362 width=47 height=30 xoffset=1 yoffset=21 xadvance=49 page=0 chnl=15
char id=231 x=84 y=197 width=26 height=41 xoffset=2 yoffset=21 xadvance=28 page=0 chnl=15
char id=232 x=402 y=146 width=28 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=233 x=373 y=146 width=28 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=234 x=431 y=146 width=28 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=235 x=461 y=311 width=28 height=38 xoffset=1 yoffset=13 xadvance=31 page=0 chnl=15
char id=236 x=225 y=192 width=10 height=41 xoffset=1 yoffset=10 xadvance=15 page=0 chnl=15
char id=237 x=213 y=196 width=11 height=41 xoffset=4 yoffset=10 xadvance=15 page=0 chnl=15
char id=238 x=489 y=144 width=18 height=41 xoffset=-1 yoffset=10 xadvance=15 page=0 chnl=15
char id=239 x=490 y=311 width=16 height=38 xoffset=0 yoffset=13 xadvance=15 page=0 chnl=15
char id=240 x=158 y=279 width=29 height=40 xoffset=1 yoffset=11 xadvance=31 page=0 chnl=15
char id=241 x=445 y=270 width=25 height=40 xoffset=3 yoffset=11 xadvance=31 page=0 chnl=15
char id=242 x=285 y=149 width=29 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=243 x=225 y=150 width=29 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=244 x=255 y=150 width=29 height=41 xoffset=1 yoffset=10 xadvance=31 page=0 chnl=15
char id=245 x=188 y=279 width=29 height=40 xoffset=1 yoffset=11 xadvance=31 page=0 chnl=15
char id=246 x=402 y=313 width=29 height=38 xoffset=1 yoffset=13 xadvance=31 page=0 chnl=15
char id=247 x=219 y=391 width=28 height=21 xoffset=1 yoffset=21 xadvance=30 page=0 chnl=15
char id=248 x=63 y=362 width=28 height=32 xoffset=3 yoffset=20 xadvance=34 page=0 chnl=15
char id=249 x=163 y=196 width=25 height=41 xoffset=3 yoffset=10 xadvance=31 page=0 chnl=15
char id=250 x=137 y=196 width=25 height=41 xoffset=3 yoffset=10 xadvance=31 page=0 chnl=15
char id=251 x=111 y=196 width=25 height=41 xoffset=3 yoffset=10 xadvance=31 page=0 chnl=15
char id=252 x=0 y=362 width=25 height=38 xoffset=3 yoffset=13 xadvance=31 page=0 chnl=15
char id=253 x=309 y=0 width=27 height=52 xoffset=0 yoffset=10 xadvance=28 page=0 chnl=15
char id=254 x=133 y=53 width=27 height=51 xoffset=3 yoffset=11 xadvance=31 page=0 chnl=15
char id=255 x=33 y=105 width=27 height=49 xoffset=0 yoffset=13 xadvance=28 page=0 chnl=15
kernings count=92
kerning first=32 second=65 amount=-3
kerning first=32 second=84 amount=-1
kerning first=32 second=89 amount=-1
kerning first=121 second=46 amount=-4
kerning first=121 second=44 amount=-4
kerning first=119 second=46 amount=-3
kerning first=119 second=44 amount=-3
kerning first=118 second=46 amount=-4
kerning first=118 second=44 amount=-4
kerning first=114 second=46 amount=-3
kerning first=49 second=49 amount=-4
kerning first=65 second=32 amount=-3
kerning first=65 second=84 amount=-4
kerning first=65 second=86 amount=-4
kerning first=65 second=87 amount=-2
kerning first=65 second=89 amount=-4
kerning first=65 second=118 amount=-1
kerning first=65 second=119 amount=-1
kerning first=65 second=121 amount=-1
kerning first=114 second=44 amount=-3
kerning first=70 second=44 amount=-6
kerning first=70 second=46 amount=-6
kerning first=70 second=65 amount=-3
kerning first=76 second=32 amount=-2
kerning first=76 second=84 amount=-4
kerning first=76 second=86 amount=-4
kerning first=76 second=87 amount=-4
kerning first=76 second=89 amount=-4
kerning first=76 second=121 amount=-2
kerning first=102 second=102 amount=-1
kerning first=80 second=32 amount=-1
kerning first=80 second=44 amount=-7
kerning first=80 second=46 amount=-7
kerning first=80 second=65 amount=-4
kerning first=82 second=84 amount=-1
kerning first=82 second=86 amount=-1
kerning first=82 second=87 amount=-1
kerning first=82 second=89 amount=-1
kerning first=84 second=32 amount=-1
kerning first=84 second=44 amount=-6
kerning first=84 second=45 amount=-3
kerning first=84 second=46 amount=-6
kerning first=84 second=58 amount=-6
kerning first=89 second=118 amount=-3
kerning first=84 second=65 amount=-4
kerning first=84 second=79 amount=-1
kerning first=84 second=97 amount=-6
kerning first=84 second=99 amount=-6
kerning first=84 second=101 amount=-6
kerning first=84 second=105 amount=-2
kerning first=84 second=111 amount=-6
kerning first=84 second=114 amount=-2
kerning first=84 second=115 amount=-6
kerning first=84 second=117 amount=-2
kerning first=84 second=119 amount=-3
kerning first=84 second=121 amount=-3
kerning first=86 second=44 amount=-5
kerning first=86 second=45 amount=-3
kerning first=86 second=46 amount=-5
kerning first=86 second=58 amount=-2
kerning first=89 second=117 amount=-3
kerning first=86 second=65 amount=-4
kerning first=86 second=97 amount=-4
kerning first=86 second=101 amount=-3
kerning first=86 second=105 amount=-1
kerning first=86 second=111 amount=-3
kerning first=86 second=114 amount=-2
kerning first=86 second=117 amount=-2
kerning first=86 second=121 amount=-2
kerning first=87 second=44 amount=-3
kerning first=87 second=45 amount=-1
kerning first=87 second=46 amount=-3
kerning first=87 second=58 amount=-1
kerning first=89 second=113 amount=-5
kerning first=87 second=65 amount=-2
kerning first=87 second=97 amount=-2
kerning first=87 second=101 amount=-1
kerning first=89 second=112 amount=-4
kerning first=87 second=111 amount=-1
kerning first=87 second=114 amount=-1
kerning first=87 second=117 amount=-1
kerning first=87 second=121 amount=-1
kerning first=89 second=32 amount=-1
kerning first=89 second=44 amount=-7
kerning first=89 second=45 amount=-5
kerning first=89 second=46 amount=-7
kerning first=89 second=58 amount=-3
kerning first=89 second=111 amount=-5
kerning first=89 second=65 amount=-4
kerning first=89 second=97 amount=-4
kerning first=89 second=101 amount=-5
kerning first=89 second=105 amount=-2

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

View file

@ -0,0 +1,985 @@
info face="Calibri" size=32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
common lineHeight=32 base=25 scaleW=256 scaleH=256 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="calibri32_0.png"
chars count=193
char id=0 x=254 y=0 width=0 height=1 xoffset=0 yoffset=31 xadvance=0 page=0 chnl=15
char id=13 x=253 y=0 width=0 height=1 xoffset=0 yoffset=31 xadvance=0 page=0 chnl=15
char id=32 x=247 y=41 width=3 height=1 xoffset=-1 yoffset=31 xadvance=6 page=0 chnl=15
char id=33 x=216 y=62 width=4 height=18 xoffset=3 yoffset=7 xadvance=8 page=0 chnl=15
char id=34 x=202 y=146 width=8 height=7 xoffset=1 yoffset=7 xadvance=10 page=0 chnl=15
char id=35 x=238 y=97 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=36 x=79 y=0 width=12 height=22 xoffset=1 yoffset=6 xadvance=13 page=0 chnl=15
char id=37 x=226 y=62 width=18 height=17 xoffset=0 yoffset=8 xadvance=19 page=0 chnl=15
char id=38 x=112 y=45 width=16 height=18 xoffset=1 yoffset=7 xadvance=18 page=0 chnl=15
char id=39 x=217 y=146 width=4 height=7 xoffset=1 yoffset=7 xadvance=6 page=0 chnl=15
char id=40 x=39 y=0 width=6 height=23 xoffset=1 yoffset=7 xadvance=8 page=0 chnl=15
char id=41 x=46 y=0 width=6 height=23 xoffset=1 yoffset=7 xadvance=8 page=0 chnl=15
char id=42 x=126 y=148 width=11 height=10 xoffset=1 yoffset=7 xadvance=13 page=0 chnl=15
char id=43 x=181 y=133 width=13 height=12 xoffset=0 yoffset=12 xadvance=13 page=0 chnl=15
char id=44 x=211 y=146 width=5 height=7 xoffset=0 yoffset=22 xadvance=6 page=0 chnl=15
char id=45 x=68 y=166 width=8 height=2 xoffset=0 yoffset=17 xadvance=8 page=0 chnl=15
char id=46 x=29 y=168 width=4 height=3 xoffset=1 yoffset=22 xadvance=7 page=0 chnl=15
char id=47 x=26 y=0 width=12 height=23 xoffset=-1 yoffset=6 xadvance=10 page=0 chnl=15
char id=48 x=210 y=99 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=49 x=209 y=116 width=11 height=16 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=15
char id=50 x=185 y=116 width=11 height=16 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=15
char id=51 x=233 y=116 width=11 height=16 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=15
char id=52 x=196 y=99 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=53 x=81 y=120 width=12 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=54 x=42 y=121 width=12 height=16 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=15
char id=55 x=94 y=120 width=12 height=16 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=15
char id=56 x=140 y=100 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=57 x=107 y=118 width=12 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=58 x=84 y=151 width=4 height=12 xoffset=2 yoffset=13 xadvance=7 page=0 chnl=15
char id=59 x=248 y=79 width=6 height=16 xoffset=0 yoffset=13 xadvance=7 page=0 chnl=15
char id=60 x=221 y=133 width=12 height=12 xoffset=0 yoffset=12 xadvance=13 page=0 chnl=15
char id=61 x=189 y=146 width=12 height=7 xoffset=0 yoffset=14 xadvance=13 page=0 chnl=15
char id=62 x=208 y=133 width=12 height=12 xoffset=1 yoffset=12 xadvance=13 page=0 chnl=15
char id=63 x=103 y=64 width=11 height=18 xoffset=1 yoffset=7 xadvance=12 page=0 chnl=15
char id=64 x=37 y=46 width=21 height=19 xoffset=1 yoffset=9 xadvance=23 page=0 chnl=15
char id=65 x=232 y=80 width=15 height=16 xoffset=0 yoffset=9 xadvance=15 page=0 chnl=15
char id=66 x=14 y=121 width=13 height=16 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=15
char id=67 x=0 y=121 width=13 height=16 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=15
char id=68 x=64 y=103 width=15 height=16 xoffset=1 yoffset=9 xadvance=16 page=0 chnl=15
char id=69 x=0 y=138 width=10 height=16 xoffset=2 yoffset=9 xadvance=13 page=0 chnl=15
char id=70 x=197 y=116 width=11 height=16 xoffset=1 yoffset=9 xadvance=12 page=0 chnl=15
char id=71 x=48 y=104 width=15 height=16 xoffset=0 yoffset=9 xadvance=16 page=0 chnl=15
char id=72 x=95 y=101 width=14 height=16 xoffset=1 yoffset=9 xadvance=16 page=0 chnl=15
char id=73 x=252 y=96 width=3 height=16 xoffset=2 yoffset=9 xadvance=7 page=0 chnl=15
char id=74 x=20 y=138 width=8 height=16 xoffset=-1 yoffset=9 xadvance=8 page=0 chnl=15
char id=75 x=120 y=118 width=12 height=16 xoffset=2 yoffset=9 xadvance=14 page=0 chnl=15
char id=76 x=245 y=62 width=10 height=16 xoffset=1 yoffset=9 xadvance=11 page=0 chnl=15
char id=77 x=177 y=82 width=20 height=16 xoffset=1 yoffset=9 xadvance=22 page=0 chnl=15
char id=78 x=0 y=104 width=15 height=16 xoffset=1 yoffset=9 xadvance=17 page=0 chnl=15
char id=79 x=215 y=82 width=16 height=16 xoffset=0 yoffset=9 xadvance=17 page=0 chnl=15
char id=80 x=146 y=117 width=12 height=16 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=15
char id=81 x=93 y=45 width=18 height=18 xoffset=1 yoffset=9 xadvance=18 page=0 chnl=15
char id=82 x=224 y=99 width=13 height=16 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=15
char id=83 x=159 y=117 width=12 height=16 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=15
char id=84 x=168 y=99 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=85 x=32 y=104 width=15 height=16 xoffset=1 yoffset=9 xadvance=17 page=0 chnl=15
char id=86 x=16 y=104 width=15 height=16 xoffset=0 yoffset=9 xadvance=15 page=0 chnl=15
char id=87 x=132 y=83 width=23 height=16 xoffset=0 yoffset=9 xadvance=23 page=0 chnl=15
char id=88 x=80 y=103 width=14 height=16 xoffset=0 yoffset=9 xadvance=14 page=0 chnl=15
char id=89 x=28 y=121 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=90 x=172 y=116 width=12 height=16 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=15
char id=91 x=123 y=0 width=6 height=22 xoffset=2 yoffset=7 xadvance=8 page=0 chnl=15
char id=92 x=92 y=0 width=12 height=22 xoffset=-1 yoffset=6 xadvance=10 page=0 chnl=15
char id=93 x=130 y=0 width=6 height=22 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=15
char id=94 x=177 y=147 width=11 height=9 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=15
char id=95 x=34 y=168 width=15 height=2 xoffset=-1 yoffset=28 xadvance=13 page=0 chnl=15
char id=96 x=15 y=168 width=6 height=4 xoffset=1 yoffset=7 xadvance=8 page=0 chnl=15
char id=97 x=26 y=155 width=11 height=12 xoffset=0 yoffset=13 xadvance=12 page=0 chnl=15
char id=98 x=216 y=43 width=12 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=99 x=50 y=154 width=11 height=12 xoffset=0 yoffset=13 xadvance=11 page=0 chnl=15
char id=100 x=229 y=43 width=12 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=101 x=0 y=155 width=12 height=12 xoffset=0 yoffset=13 xadvance=13 page=0 chnl=15
char id=102 x=187 y=63 width=9 height=18 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=15
char id=103 x=107 y=83 width=12 height=17 xoffset=0 yoffset=13 xadvance=12 page=0 chnl=15
char id=104 x=52 y=66 width=12 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=105 x=29 y=138 width=4 height=16 xoffset=1 yoffset=9 xadvance=6 page=0 chnl=15
char id=106 x=193 y=22 width=6 height=21 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=15
char id=107 x=127 y=64 width=11 height=18 xoffset=1 yoffset=7 xadvance=12 page=0 chnl=15
char id=108 x=211 y=63 width=4 height=18 xoffset=1 yoffset=7 xadvance=6 page=0 chnl=15
char id=109 x=112 y=135 width=19 height=12 xoffset=1 yoffset=13 xadvance=21 page=0 chnl=15
char id=110 x=13 y=155 width=12 height=12 xoffset=1 yoffset=13 xadvance=14 page=0 chnl=15
char id=111 x=152 y=134 width=14 height=12 xoffset=0 yoffset=13 xadvance=14 page=0 chnl=15
char id=112 x=81 y=83 width=12 height=17 xoffset=1 yoffset=13 xadvance=14 page=0 chnl=15
char id=113 x=94 y=83 width=12 height=17 xoffset=1 yoffset=13 xadvance=14 page=0 chnl=15
char id=114 x=247 y=131 width=8 height=12 xoffset=1 yoffset=13 xadvance=9 page=0 chnl=15
char id=115 x=73 y=151 width=10 height=12 xoffset=0 yoffset=13 xadvance=10 page=0 chnl=15
char id=116 x=48 y=138 width=9 height=15 xoffset=0 yoffset=10 xadvance=9 page=0 chnl=15
char id=117 x=234 y=133 width=12 height=12 xoffset=1 yoffset=13 xadvance=14 page=0 chnl=15
char id=118 x=195 y=133 width=12 height=12 xoffset=0 yoffset=13 xadvance=12 page=0 chnl=15
char id=119 x=132 y=135 width=19 height=12 xoffset=0 yoffset=13 xadvance=19 page=0 chnl=15
char id=120 x=38 y=154 width=11 height=12 xoffset=0 yoffset=13 xadvance=11 page=0 chnl=15
char id=121 x=68 y=85 width=12 height=17 xoffset=0 yoffset=13 xadvance=12 page=0 chnl=15
char id=122 x=62 y=153 width=10 height=12 xoffset=0 yoffset=13 xadvance=10 page=0 chnl=15
char id=123 x=114 y=0 width=8 height=22 xoffset=0 yoffset=7 xadvance=8 page=0 chnl=15
char id=124 x=53 y=0 width=4 height=23 xoffset=4 yoffset=7 xadvance=12 page=0 chnl=15
char id=125 x=105 y=0 width=8 height=22 xoffset=1 yoffset=7 xadvance=8 page=0 chnl=15
char id=126 x=236 y=146 width=13 height=5 xoffset=0 yoffset=10 xadvance=13 page=0 chnl=15
char id=160 x=251 y=41 width=3 height=1 xoffset=-1 yoffset=31 xadvance=6 page=0 chnl=15
char id=161 x=221 y=62 width=4 height=18 xoffset=2 yoffset=10 xadvance=8 page=0 chnl=15
char id=162 x=245 y=114 width=10 height=16 xoffset=2 yoffset=9 xadvance=13 page=0 chnl=15
char id=163 x=154 y=100 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=164 x=58 y=138 width=13 height=14 xoffset=0 yoffset=11 xadvance=13 page=0 chnl=15
char id=165 x=182 y=99 width=13 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=166 x=58 y=0 width=3 height=23 xoffset=5 yoffset=7 xadvance=13 page=0 chnl=15
char id=167 x=137 y=22 width=11 height=21 xoffset=1 yoffset=7 xadvance=13 page=0 chnl=15
char id=168 x=77 y=164 width=8 height=2 xoffset=1 yoffset=9 xadvance=10 page=0 chnl=15
char id=169 x=73 y=45 width=19 height=18 xoffset=1 yoffset=7 xadvance=22 page=0 chnl=15
char id=170 x=82 y=137 width=8 height=13 xoffset=1 yoffset=9 xadvance=10 page=0 chnl=15
char id=171 x=114 y=148 width=11 height=11 xoffset=1 yoffset=13 xadvance=13 page=0 chnl=15
char id=172 x=222 y=146 width=13 height=5 xoffset=0 yoffset=17 xadvance=13 page=0 chnl=15
char id=173 x=50 y=167 width=8 height=2 xoffset=0 yoffset=17 xadvance=8 page=0 chnl=15
char id=174 x=138 y=148 width=11 height=10 xoffset=1 yoffset=7 xadvance=13 page=0 chnl=15
char id=175 x=59 y=167 width=8 height=2 xoffset=1 yoffset=8 xadvance=10 page=0 chnl=15
char id=176 x=0 y=168 width=7 height=5 xoffset=1 yoffset=8 xadvance=9 page=0 chnl=15
char id=177 x=34 y=138 width=13 height=15 xoffset=0 yoffset=10 xadvance=13 page=0 chnl=15
char id=178 x=150 y=148 width=9 height=10 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=15
char id=179 x=160 y=147 width=9 height=10 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=15
char id=180 x=22 y=168 width=6 height=4 xoffset=1 yoffset=7 xadvance=8 page=0 chnl=15
char id=181 x=53 y=85 width=14 height=17 xoffset=1 yoffset=13 xadvance=14 page=0 chnl=15
char id=182 x=59 y=46 width=13 height=19 xoffset=1 yoffset=9 xadvance=15 page=0 chnl=15
char id=183 x=250 y=144 width=5 height=3 xoffset=1 yoffset=16 xadvance=7 page=0 chnl=15
char id=184 x=8 y=168 width=6 height=5 xoffset=1 yoffset=25 xadvance=8 page=0 chnl=15
char id=185 x=170 y=147 width=6 height=10 xoffset=-1 yoffset=6 xadvance=6 page=0 chnl=15
char id=186 x=72 y=137 width=9 height=13 xoffset=1 yoffset=9 xadvance=11 page=0 chnl=15
char id=187 x=89 y=151 width=12 height=11 xoffset=1 yoffset=13 xadvance=13 page=0 chnl=15
char id=188 x=36 y=86 width=16 height=17 xoffset=0 yoffset=8 xadvance=17 page=0 chnl=15
char id=189 x=18 y=86 width=17 height=17 xoffset=0 yoffset=8 xadvance=17 page=0 chnl=15
char id=190 x=0 y=86 width=17 height=17 xoffset=0 yoffset=8 xadvance=18 page=0 chnl=15
char id=191 x=91 y=64 width=11 height=18 xoffset=0 yoffset=10 xadvance=12 page=0 chnl=15
char id=192 x=48 y=24 width=15 height=21 xoffset=0 yoffset=4 xadvance=15 page=0 chnl=15
char id=193 x=64 y=23 width=15 height=21 xoffset=0 yoffset=4 xadvance=15 page=0 chnl=15
char id=194 x=32 y=24 width=15 height=21 xoffset=0 yoffset=4 xadvance=15 page=0 chnl=15
char id=195 x=16 y=24 width=15 height=21 xoffset=0 yoffset=4 xadvance=15 page=0 chnl=15
char id=196 x=0 y=46 width=15 height=20 xoffset=0 yoffset=5 xadvance=15 page=0 chnl=15
char id=197 x=0 y=24 width=15 height=21 xoffset=0 yoffset=4 xadvance=15 page=0 chnl=15
char id=198 x=156 y=82 width=20 height=16 xoffset=-1 yoffset=9 xadvance=20 page=0 chnl=15
char id=199 x=110 y=23 width=13 height=21 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=15
char id=200 x=149 y=22 width=10 height=21 xoffset=2 yoffset=4 xadvance=13 page=0 chnl=15
char id=201 x=182 y=22 width=10 height=21 xoffset=2 yoffset=4 xadvance=13 page=0 chnl=15
char id=202 x=171 y=22 width=10 height=21 xoffset=2 yoffset=4 xadvance=13 page=0 chnl=15
char id=203 x=16 y=46 width=10 height=20 xoffset=2 yoffset=5 xadvance=13 page=0 chnl=15
char id=204 x=207 y=22 width=6 height=21 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=15
char id=205 x=200 y=22 width=6 height=21 xoffset=2 yoffset=4 xadvance=7 page=0 chnl=15
char id=206 x=160 y=22 width=10 height=21 xoffset=-1 yoffset=4 xadvance=7 page=0 chnl=15
char id=207 x=27 y=46 width=9 height=20 xoffset=-1 yoffset=5 xadvance=7 page=0 chnl=15
char id=208 x=198 y=82 width=16 height=16 xoffset=0 yoffset=9 xadvance=16 page=0 chnl=15
char id=209 x=237 y=0 width=15 height=21 xoffset=1 yoffset=4 xadvance=17 page=0 chnl=15
char id=210 x=171 y=0 width=16 height=21 xoffset=0 yoffset=4 xadvance=17 page=0 chnl=15
char id=211 x=154 y=0 width=16 height=21 xoffset=0 yoffset=4 xadvance=17 page=0 chnl=15
char id=212 x=137 y=0 width=16 height=21 xoffset=0 yoffset=4 xadvance=17 page=0 chnl=15
char id=213 x=188 y=0 width=16 height=21 xoffset=0 yoffset=4 xadvance=17 page=0 chnl=15
char id=214 x=214 y=22 width=16 height=20 xoffset=0 yoffset=5 xadvance=17 page=0 chnl=15
char id=215 x=102 y=150 width=11 height=11 xoffset=1 yoffset=12 xadvance=13 page=0 chnl=15
char id=216 x=62 y=0 width=16 height=22 xoffset=1 yoffset=6 xadvance=17 page=0 chnl=15
char id=217 x=221 y=0 width=15 height=21 xoffset=1 yoffset=4 xadvance=17 page=0 chnl=15
char id=218 x=80 y=23 width=15 height=21 xoffset=1 yoffset=4 xadvance=17 page=0 chnl=15
char id=219 x=205 y=0 width=15 height=21 xoffset=1 yoffset=4 xadvance=17 page=0 chnl=15
char id=220 x=231 y=22 width=15 height=20 xoffset=1 yoffset=5 xadvance=17 page=0 chnl=15
char id=221 x=96 y=23 width=13 height=21 xoffset=0 yoffset=4 xadvance=13 page=0 chnl=15
char id=222 x=55 y=121 width=12 height=16 xoffset=1 yoffset=9 xadvance=13 page=0 chnl=15
char id=223 x=189 y=44 width=13 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=224 x=115 y=64 width=11 height=18 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=15
char id=225 x=175 y=63 width=11 height=18 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=15
char id=226 x=163 y=63 width=11 height=18 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=15
char id=227 x=151 y=63 width=11 height=18 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=15
char id=228 x=221 y=116 width=11 height=16 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=15
char id=229 x=139 y=64 width=11 height=18 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=15
char id=230 x=91 y=137 width=20 height=12 xoffset=0 yoffset=13 xadvance=20 page=0 chnl=15
char id=231 x=120 y=83 width=11 height=17 xoffset=0 yoffset=13 xadvance=11 page=0 chnl=15
char id=232 x=0 y=67 width=12 height=18 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=15
char id=233 x=13 y=67 width=12 height=18 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=15
char id=234 x=26 y=67 width=12 height=18 xoffset=0 yoffset=7 xadvance=13 page=0 chnl=15
char id=235 x=68 y=120 width=12 height=16 xoffset=0 yoffset=9 xadvance=13 page=0 chnl=15
char id=236 x=197 y=63 width=6 height=18 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=15
char id=237 x=204 y=63 width=6 height=18 xoffset=1 yoffset=7 xadvance=6 page=0 chnl=15
char id=238 x=247 y=22 width=8 height=18 xoffset=-1 yoffset=7 xadvance=6 page=0 chnl=15
char id=239 x=11 y=138 width=8 height=16 xoffset=-1 yoffset=9 xadvance=6 page=0 chnl=15
char id=240 x=39 y=66 width=12 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=241 x=242 y=43 width=12 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=242 x=144 y=44 width=14 height=18 xoffset=0 yoffset=7 xadvance=14 page=0 chnl=15
char id=243 x=129 y=45 width=14 height=18 xoffset=0 yoffset=7 xadvance=14 page=0 chnl=15
char id=244 x=174 y=44 width=14 height=18 xoffset=0 yoffset=7 xadvance=14 page=0 chnl=15
char id=245 x=159 y=44 width=14 height=18 xoffset=0 yoffset=7 xadvance=14 page=0 chnl=15
char id=246 x=110 y=101 width=14 height=16 xoffset=0 yoffset=9 xadvance=14 page=0 chnl=15
char id=247 x=167 y=134 width=13 height=12 xoffset=0 yoffset=12 xadvance=13 page=0 chnl=15
char id=248 x=125 y=101 width=14 height=16 xoffset=0 yoffset=11 xadvance=14 page=0 chnl=15
char id=249 x=65 y=66 width=12 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=250 x=78 y=64 width=12 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=251 x=203 y=44 width=12 height=18 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=252 x=133 y=118 width=12 height=16 xoffset=1 yoffset=9 xadvance=14 page=0 chnl=15
char id=253 x=0 y=0 width=12 height=23 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=15
char id=254 x=13 y=0 width=12 height=23 xoffset=1 yoffset=7 xadvance=14 page=0 chnl=15
char id=255 x=124 y=23 width=12 height=21 xoffset=0 yoffset=9 xadvance=12 page=0 chnl=15
kernings count=787
kerning first=179 second=47 amount=-4
kerning first=178 second=47 amount=-4
kerning first=185 second=47 amount=-4
kerning first=40 second=106 amount=1
kerning first=47 second=179 amount=-3
kerning first=47 second=178 amount=-3
kerning first=47 second=185 amount=-2
kerning first=47 second=198 amount=-1
kerning first=47 second=197 amount=-1
kerning first=47 second=196 amount=-1
kerning first=47 second=195 amount=-1
kerning first=47 second=194 amount=-1
kerning first=47 second=193 amount=-1
kerning first=47 second=192 amount=-1
kerning first=47 second=65 amount=-1
kerning first=46 second=255 amount=-1
kerning first=46 second=253 amount=-1
kerning first=46 second=121 amount=-1
kerning first=46 second=119 amount=-1
kerning first=46 second=118 amount=-1
kerning first=46 second=116 amount=-1
kerning first=46 second=102 amount=-1
kerning first=46 second=221 amount=-2
kerning first=46 second=89 amount=-2
kerning first=65 second=84 amount=-2
kerning first=46 second=87 amount=-2
kerning first=46 second=86 amount=-2
kerning first=46 second=84 amount=-2
kerning first=44 second=116 amount=-1
kerning first=44 second=221 amount=-2
kerning first=44 second=89 amount=-2
kerning first=44 second=87 amount=-2
kerning first=44 second=86 amount=-2
kerning first=44 second=84 amount=-2
kerning first=191 second=255 amount=-1
kerning first=191 second=253 amount=-1
kerning first=191 second=121 amount=-1
kerning first=191 second=119 amount=-1
kerning first=65 second=86 amount=-1
kerning first=65 second=87 amount=-1
kerning first=191 second=118 amount=-1
kerning first=191 second=102 amount=-1
kerning first=191 second=221 amount=-1
kerning first=191 second=89 amount=-1
kerning first=65 second=89 amount=-2
kerning first=191 second=86 amount=-1
kerning first=65 second=221 amount=-2
kerning first=191 second=84 amount=-1
kerning first=122 second=113 amount=-1
kerning first=65 second=116 amount=-1
kerning first=122 second=248 amount=-1
kerning first=122 second=246 amount=-1
kerning first=122 second=245 amount=-1
kerning first=65 second=121 amount=-1
kerning first=122 second=244 amount=-1
kerning first=65 second=253 amount=-1
kerning first=122 second=243 amount=-1
kerning first=65 second=255 amount=-1
kerning first=65 second=63 amount=-1
kerning first=122 second=242 amount=-1
kerning first=122 second=111 amount=-1
kerning first=122 second=235 amount=-1
kerning first=122 second=234 amount=-1
kerning first=122 second=233 amount=-1
kerning first=122 second=232 amount=-1
kerning first=122 second=101 amount=-1
kerning first=122 second=100 amount=-1
kerning first=122 second=231 amount=-1
kerning first=122 second=99 amount=-1
kerning first=255 second=46 amount=-2
kerning first=255 second=44 amount=-2
kerning first=253 second=46 amount=-2
kerning first=253 second=44 amount=-2
kerning first=121 second=46 amount=-2
kerning first=121 second=44 amount=-2
kerning first=120 second=113 amount=-1
kerning first=120 second=248 amount=-1
kerning first=120 second=246 amount=-1
kerning first=120 second=245 amount=-1
kerning first=120 second=244 amount=-1
kerning first=120 second=243 amount=-1
kerning first=120 second=242 amount=-1
kerning first=120 second=111 amount=-1
kerning first=120 second=235 amount=-1
kerning first=120 second=234 amount=-1
kerning first=120 second=233 amount=-1
kerning first=120 second=232 amount=-1
kerning first=120 second=101 amount=-1
kerning first=120 second=100 amount=-1
kerning first=120 second=231 amount=-1
kerning first=120 second=99 amount=-1
kerning first=119 second=46 amount=-2
kerning first=119 second=44 amount=-2
kerning first=118 second=46 amount=-2
kerning first=118 second=44 amount=-2
kerning first=223 second=255 amount=-1
kerning first=223 second=253 amount=-1
kerning first=223 second=121 amount=-1
kerning first=114 second=46 amount=-3
kerning first=114 second=44 amount=-2
kerning first=114 second=230 amount=-1
kerning first=114 second=229 amount=-1
kerning first=114 second=228 amount=-1
kerning first=114 second=227 amount=-1
kerning first=114 second=226 amount=-1
kerning first=114 second=225 amount=-1
kerning first=114 second=224 amount=-1
kerning first=114 second=97 amount=-1
kerning first=254 second=120 amount=-1
kerning first=112 second=120 amount=-1
kerning first=248 second=120 amount=-1
kerning first=246 second=120 amount=-1
kerning first=245 second=120 amount=-1
kerning first=244 second=120 amount=-1
kerning first=243 second=120 amount=-1
kerning first=242 second=120 amount=-1
kerning first=111 second=120 amount=-1
kerning first=192 second=84 amount=-2
kerning first=107 second=113 amount=-1
kerning first=107 second=248 amount=-1
kerning first=107 second=246 amount=-1
kerning first=107 second=245 amount=-1
kerning first=107 second=244 amount=-1
kerning first=107 second=243 amount=-1
kerning first=107 second=242 amount=-1
kerning first=107 second=111 amount=-1
kerning first=107 second=235 amount=-1
kerning first=107 second=234 amount=-1
kerning first=107 second=233 amount=-1
kerning first=107 second=232 amount=-1
kerning first=107 second=101 amount=-1
kerning first=192 second=86 amount=-1
kerning first=192 second=87 amount=-1
kerning first=107 second=100 amount=-1
kerning first=107 second=231 amount=-1
kerning first=107 second=99 amount=-1
kerning first=103 second=47 amount=1
kerning first=192 second=89 amount=-2
kerning first=102 second=46 amount=-2
kerning first=192 second=221 amount=-2
kerning first=102 second=44 amount=-2
kerning first=102 second=113 amount=-1
kerning first=192 second=116 amount=-1
kerning first=102 second=248 amount=-1
kerning first=102 second=246 amount=-1
kerning first=102 second=245 amount=-1
kerning first=192 second=121 amount=-1
kerning first=102 second=244 amount=-1
kerning first=192 second=253 amount=-1
kerning first=102 second=243 amount=-1
kerning first=192 second=255 amount=-1
kerning first=192 second=63 amount=-1
kerning first=102 second=242 amount=-1
kerning first=102 second=111 amount=-1
kerning first=102 second=103 amount=-1
kerning first=102 second=235 amount=-1
kerning first=102 second=234 amount=-1
kerning first=102 second=233 amount=-1
kerning first=102 second=232 amount=-1
kerning first=102 second=101 amount=-1
kerning first=102 second=100 amount=-1
kerning first=102 second=231 amount=-1
kerning first=102 second=99 amount=-1
kerning first=102 second=230 amount=-1
kerning first=102 second=229 amount=-1
kerning first=102 second=228 amount=-1
kerning first=102 second=227 amount=-1
kerning first=102 second=226 amount=-1
kerning first=102 second=225 amount=-1
kerning first=102 second=224 amount=-1
kerning first=102 second=97 amount=-1
kerning first=98 second=120 amount=-1
kerning first=90 second=118 amount=-1
kerning first=90 second=239 amount=1
kerning first=90 second=238 amount=1
kerning first=221 second=47 amount=-2
kerning first=221 second=46 amount=-3
kerning first=221 second=58 amount=-2
kerning first=221 second=59 amount=-2
kerning first=221 second=44 amount=-3
kerning first=221 second=122 amount=-1
kerning first=221 second=255 amount=-1
kerning first=221 second=253 amount=-1
kerning first=221 second=121 amount=-1
kerning first=221 second=120 amount=-1
kerning first=221 second=119 amount=-1
kerning first=221 second=118 amount=-1
kerning first=221 second=252 amount=-1
kerning first=221 second=251 amount=-1
kerning first=221 second=250 amount=-1
kerning first=221 second=249 amount=-1
kerning first=221 second=117 amount=-1
kerning first=221 second=116 amount=-1
kerning first=221 second=223 amount=-1
kerning first=221 second=115 amount=-1
kerning first=221 second=114 amount=-1
kerning first=221 second=113 amount=-2
kerning first=221 second=112 amount=-1
kerning first=221 second=248 amount=-2
kerning first=221 second=246 amount=-2
kerning first=221 second=245 amount=-2
kerning first=221 second=244 amount=-2
kerning first=221 second=243 amount=-2
kerning first=221 second=242 amount=-2
kerning first=221 second=111 amount=-2
kerning first=221 second=241 amount=-1
kerning first=221 second=110 amount=-1
kerning first=221 second=109 amount=-1
kerning first=221 second=106 amount=-1
kerning first=221 second=239 amount=1
kerning first=193 second=84 amount=-2
kerning first=221 second=238 amount=1
kerning first=221 second=237 amount=-1
kerning first=221 second=236 amount=1
kerning first=221 second=103 amount=-2
kerning first=221 second=102 amount=-1
kerning first=221 second=235 amount=-2
kerning first=221 second=234 amount=-2
kerning first=221 second=233 amount=-2
kerning first=221 second=232 amount=-2
kerning first=221 second=101 amount=-2
kerning first=221 second=100 amount=-2
kerning first=221 second=231 amount=-2
kerning first=221 second=99 amount=-2
kerning first=193 second=86 amount=-1
kerning first=193 second=87 amount=-1
kerning first=221 second=230 amount=-2
kerning first=221 second=229 amount=-2
kerning first=221 second=228 amount=-2
kerning first=221 second=227 amount=-2
kerning first=193 second=89 amount=-2
kerning first=221 second=226 amount=-2
kerning first=193 second=221 amount=-2
kerning first=221 second=225 amount=-2
kerning first=221 second=224 amount=-2
kerning first=193 second=116 amount=-1
kerning first=221 second=97 amount=-2
kerning first=221 second=81 amount=-1
kerning first=221 second=214 amount=-1
kerning first=193 second=121 amount=-1
kerning first=221 second=213 amount=-1
kerning first=193 second=253 amount=-1
kerning first=221 second=212 amount=-1
kerning first=193 second=255 amount=-1
kerning first=193 second=63 amount=-1
kerning first=221 second=211 amount=-1
kerning first=221 second=210 amount=-1
kerning first=221 second=79 amount=-1
kerning first=221 second=74 amount=-1
kerning first=221 second=71 amount=-1
kerning first=221 second=199 amount=-1
kerning first=221 second=67 amount=-1
kerning first=221 second=198 amount=-2
kerning first=221 second=197 amount=-2
kerning first=221 second=196 amount=-2
kerning first=221 second=195 amount=-2
kerning first=221 second=194 amount=-2
kerning first=221 second=193 amount=-2
kerning first=221 second=192 amount=-2
kerning first=221 second=65 amount=-2
kerning first=89 second=47 amount=-2
kerning first=89 second=46 amount=-3
kerning first=89 second=58 amount=-2
kerning first=89 second=59 amount=-2
kerning first=89 second=44 amount=-3
kerning first=89 second=122 amount=-1
kerning first=89 second=255 amount=-1
kerning first=89 second=253 amount=-1
kerning first=89 second=121 amount=-1
kerning first=89 second=120 amount=-1
kerning first=89 second=119 amount=-1
kerning first=89 second=118 amount=-1
kerning first=89 second=252 amount=-1
kerning first=89 second=251 amount=-1
kerning first=89 second=250 amount=-1
kerning first=89 second=249 amount=-1
kerning first=89 second=117 amount=-1
kerning first=89 second=116 amount=-1
kerning first=89 second=223 amount=-1
kerning first=89 second=115 amount=-1
kerning first=89 second=114 amount=-1
kerning first=89 second=113 amount=-2
kerning first=89 second=112 amount=-1
kerning first=89 second=248 amount=-2
kerning first=89 second=246 amount=-2
kerning first=89 second=245 amount=-2
kerning first=89 second=244 amount=-2
kerning first=89 second=243 amount=-2
kerning first=89 second=242 amount=-2
kerning first=89 second=111 amount=-2
kerning first=89 second=241 amount=-1
kerning first=89 second=110 amount=-1
kerning first=89 second=109 amount=-1
kerning first=89 second=106 amount=-1
kerning first=89 second=239 amount=1
kerning first=89 second=238 amount=1
kerning first=89 second=237 amount=-1
kerning first=89 second=236 amount=1
kerning first=89 second=103 amount=-2
kerning first=89 second=102 amount=-1
kerning first=89 second=235 amount=-2
kerning first=89 second=234 amount=-2
kerning first=89 second=233 amount=-2
kerning first=194 second=84 amount=-2
kerning first=89 second=232 amount=-2
kerning first=89 second=101 amount=-2
kerning first=89 second=100 amount=-2
kerning first=89 second=231 amount=-2
kerning first=89 second=99 amount=-2
kerning first=89 second=230 amount=-2
kerning first=89 second=229 amount=-2
kerning first=89 second=228 amount=-2
kerning first=89 second=227 amount=-2
kerning first=89 second=226 amount=-2
kerning first=89 second=225 amount=-2
kerning first=89 second=224 amount=-2
kerning first=89 second=97 amount=-2
kerning first=194 second=86 amount=-1
kerning first=194 second=87 amount=-1
kerning first=89 second=81 amount=-1
kerning first=89 second=214 amount=-1
kerning first=89 second=213 amount=-1
kerning first=89 second=212 amount=-1
kerning first=194 second=89 amount=-2
kerning first=89 second=211 amount=-1
kerning first=194 second=221 amount=-2
kerning first=89 second=210 amount=-1
kerning first=89 second=79 amount=-1
kerning first=194 second=116 amount=-1
kerning first=89 second=74 amount=-1
kerning first=89 second=71 amount=-1
kerning first=89 second=199 amount=-1
kerning first=194 second=121 amount=-1
kerning first=89 second=67 amount=-1
kerning first=194 second=253 amount=-1
kerning first=89 second=198 amount=-2
kerning first=194 second=255 amount=-1
kerning first=194 second=63 amount=-1
kerning first=89 second=197 amount=-2
kerning first=89 second=196 amount=-2
kerning first=89 second=195 amount=-2
kerning first=89 second=194 amount=-2
kerning first=89 second=193 amount=-2
kerning first=89 second=192 amount=-2
kerning first=89 second=65 amount=-2
kerning first=88 second=255 amount=-1
kerning first=88 second=253 amount=-1
kerning first=88 second=121 amount=-1
kerning first=88 second=119 amount=-1
kerning first=88 second=118 amount=-1
kerning first=88 second=113 amount=-1
kerning first=88 second=100 amount=-1
kerning first=88 second=81 amount=-1
kerning first=88 second=214 amount=-1
kerning first=88 second=213 amount=-1
kerning first=88 second=212 amount=-1
kerning first=88 second=211 amount=-1
kerning first=88 second=210 amount=-1
kerning first=88 second=79 amount=-1
kerning first=88 second=71 amount=-1
kerning first=88 second=199 amount=-1
kerning first=88 second=67 amount=-1
kerning first=87 second=46 amount=-3
kerning first=87 second=59 amount=-2
kerning first=87 second=44 amount=-3
kerning first=87 second=255 amount=-1
kerning first=87 second=253 amount=-1
kerning first=87 second=121 amount=-1
kerning first=87 second=252 amount=-1
kerning first=87 second=251 amount=-1
kerning first=87 second=250 amount=-1
kerning first=87 second=249 amount=-1
kerning first=87 second=117 amount=-1
kerning first=87 second=115 amount=-1
kerning first=87 second=114 amount=-1
kerning first=87 second=113 amount=-1
kerning first=87 second=112 amount=-1
kerning first=87 second=248 amount=-1
kerning first=87 second=246 amount=-1
kerning first=87 second=245 amount=-1
kerning first=87 second=244 amount=-1
kerning first=87 second=243 amount=-1
kerning first=87 second=242 amount=-1
kerning first=87 second=111 amount=-1
kerning first=87 second=241 amount=-1
kerning first=87 second=110 amount=-1
kerning first=87 second=109 amount=-1
kerning first=87 second=239 amount=1
kerning first=87 second=103 amount=-1
kerning first=87 second=235 amount=-1
kerning first=87 second=234 amount=-1
kerning first=87 second=233 amount=-1
kerning first=87 second=232 amount=-1
kerning first=87 second=101 amount=-1
kerning first=87 second=100 amount=-1
kerning first=87 second=231 amount=-1
kerning first=195 second=84 amount=-2
kerning first=87 second=99 amount=-1
kerning first=87 second=230 amount=-1
kerning first=87 second=229 amount=-1
kerning first=87 second=228 amount=-1
kerning first=87 second=227 amount=-1
kerning first=87 second=226 amount=-1
kerning first=87 second=225 amount=-1
kerning first=87 second=224 amount=-1
kerning first=87 second=97 amount=-1
kerning first=87 second=74 amount=-1
kerning first=87 second=198 amount=-2
kerning first=87 second=197 amount=-1
kerning first=87 second=196 amount=-1
kerning first=195 second=86 amount=-1
kerning first=195 second=87 amount=-1
kerning first=87 second=195 amount=-1
kerning first=87 second=194 amount=-1
kerning first=87 second=193 amount=-1
kerning first=87 second=192 amount=-1
kerning first=195 second=89 amount=-2
kerning first=87 second=65 amount=-1
kerning first=195 second=221 amount=-2
kerning first=86 second=47 amount=-1
kerning first=86 second=46 amount=-3
kerning first=195 second=116 amount=-1
kerning first=86 second=58 amount=-1
kerning first=86 second=59 amount=-1
kerning first=86 second=44 amount=-2
kerning first=195 second=121 amount=-1
kerning first=86 second=122 amount=-1
kerning first=195 second=253 amount=-1
kerning first=86 second=252 amount=-1
kerning first=195 second=255 amount=-1
kerning first=195 second=63 amount=-1
kerning first=86 second=251 amount=-1
kerning first=86 second=250 amount=-1
kerning first=86 second=249 amount=-1
kerning first=86 second=117 amount=-1
kerning first=86 second=115 amount=-1
kerning first=86 second=114 amount=-1
kerning first=86 second=113 amount=-1
kerning first=86 second=112 amount=-1
kerning first=86 second=248 amount=-1
kerning first=86 second=246 amount=-1
kerning first=86 second=245 amount=-1
kerning first=86 second=244 amount=-1
kerning first=86 second=243 amount=-1
kerning first=86 second=242 amount=-1
kerning first=86 second=111 amount=-1
kerning first=86 second=241 amount=-1
kerning first=86 second=110 amount=-1
kerning first=86 second=109 amount=-1
kerning first=86 second=239 amount=1
kerning first=86 second=238 amount=1
kerning first=86 second=236 amount=1
kerning first=86 second=103 amount=-1
kerning first=86 second=235 amount=-1
kerning first=86 second=234 amount=-1
kerning first=86 second=233 amount=-1
kerning first=86 second=232 amount=-1
kerning first=86 second=101 amount=-1
kerning first=86 second=100 amount=-1
kerning first=86 second=231 amount=-1
kerning first=86 second=99 amount=-1
kerning first=86 second=230 amount=-1
kerning first=86 second=229 amount=-1
kerning first=86 second=228 amount=-1
kerning first=86 second=227 amount=-1
kerning first=86 second=226 amount=-1
kerning first=86 second=225 amount=-1
kerning first=86 second=224 amount=-1
kerning first=86 second=97 amount=-1
kerning first=86 second=74 amount=-1
kerning first=86 second=198 amount=-2
kerning first=86 second=197 amount=-1
kerning first=86 second=196 amount=-1
kerning first=86 second=195 amount=-1
kerning first=86 second=194 amount=-1
kerning first=86 second=193 amount=-1
kerning first=86 second=192 amount=-1
kerning first=86 second=65 amount=-1
kerning first=220 second=74 amount=-1
kerning first=220 second=197 amount=-1
kerning first=220 second=196 amount=-1
kerning first=220 second=195 amount=-1
kerning first=220 second=194 amount=-1
kerning first=220 second=193 amount=-1
kerning first=220 second=192 amount=-1
kerning first=220 second=65 amount=-1
kerning first=219 second=74 amount=-1
kerning first=219 second=197 amount=-1
kerning first=219 second=196 amount=-1
kerning first=196 second=84 amount=-2
kerning first=219 second=195 amount=-1
kerning first=219 second=194 amount=-1
kerning first=219 second=193 amount=-1
kerning first=219 second=192 amount=-1
kerning first=219 second=65 amount=-1
kerning first=218 second=74 amount=-1
kerning first=218 second=197 amount=-1
kerning first=218 second=196 amount=-1
kerning first=218 second=195 amount=-1
kerning first=218 second=194 amount=-1
kerning first=218 second=193 amount=-1
kerning first=218 second=192 amount=-1
kerning first=218 second=65 amount=-1
kerning first=196 second=86 amount=-1
kerning first=196 second=87 amount=-1
kerning first=217 second=74 amount=-1
kerning first=217 second=197 amount=-1
kerning first=217 second=196 amount=-1
kerning first=217 second=195 amount=-1
kerning first=196 second=89 amount=-2
kerning first=217 second=194 amount=-1
kerning first=196 second=221 amount=-2
kerning first=217 second=193 amount=-1
kerning first=217 second=192 amount=-1
kerning first=196 second=116 amount=-1
kerning first=217 second=65 amount=-1
kerning first=85 second=74 amount=-1
kerning first=85 second=197 amount=-1
kerning first=196 second=121 amount=-1
kerning first=85 second=196 amount=-1
kerning first=196 second=253 amount=-1
kerning first=85 second=195 amount=-1
kerning first=196 second=255 amount=-1
kerning first=196 second=63 amount=-1
kerning first=85 second=194 amount=-1
kerning first=85 second=193 amount=-1
kerning first=85 second=192 amount=-1
kerning first=85 second=65 amount=-1
kerning first=84 second=47 amount=-1
kerning first=84 second=46 amount=-3
kerning first=84 second=58 amount=-2
kerning first=84 second=59 amount=-1
kerning first=84 second=44 amount=-3
kerning first=84 second=122 amount=-2
kerning first=84 second=255 amount=-1
kerning first=84 second=253 amount=-1
kerning first=84 second=121 amount=-1
kerning first=84 second=120 amount=-1
kerning first=84 second=119 amount=-1
kerning first=84 second=118 amount=-1
kerning first=84 second=252 amount=-2
kerning first=84 second=251 amount=-2
kerning first=84 second=250 amount=-2
kerning first=84 second=249 amount=-2
kerning first=84 second=117 amount=-2
kerning first=84 second=115 amount=-2
kerning first=84 second=114 amount=-2
kerning first=84 second=113 amount=-2
kerning first=84 second=112 amount=-2
kerning first=84 second=248 amount=-2
kerning first=84 second=246 amount=-2
kerning first=84 second=245 amount=-2
kerning first=84 second=244 amount=-2
kerning first=84 second=243 amount=-2
kerning first=84 second=242 amount=-2
kerning first=84 second=111 amount=-2
kerning first=84 second=241 amount=-2
kerning first=84 second=110 amount=-2
kerning first=84 second=109 amount=-2
kerning first=84 second=239 amount=1
kerning first=84 second=238 amount=1
kerning first=84 second=103 amount=-2
kerning first=84 second=235 amount=-2
kerning first=84 second=234 amount=-2
kerning first=84 second=233 amount=-2
kerning first=84 second=232 amount=-2
kerning first=84 second=101 amount=-2
kerning first=84 second=100 amount=-2
kerning first=84 second=231 amount=-2
kerning first=84 second=99 amount=-2
kerning first=84 second=230 amount=-2
kerning first=84 second=229 amount=-2
kerning first=84 second=228 amount=-2
kerning first=84 second=227 amount=-2
kerning first=84 second=226 amount=-2
kerning first=84 second=225 amount=-2
kerning first=84 second=224 amount=-2
kerning first=84 second=97 amount=-2
kerning first=84 second=81 amount=-1
kerning first=84 second=214 amount=-1
kerning first=84 second=213 amount=-1
kerning first=84 second=212 amount=-1
kerning first=84 second=211 amount=-1
kerning first=84 second=210 amount=-1
kerning first=84 second=79 amount=-1
kerning first=84 second=74 amount=-1
kerning first=84 second=71 amount=-1
kerning first=84 second=199 amount=-1
kerning first=84 second=67 amount=-1
kerning first=84 second=198 amount=-2
kerning first=84 second=197 amount=-2
kerning first=84 second=196 amount=-2
kerning first=84 second=195 amount=-2
kerning first=84 second=194 amount=-2
kerning first=84 second=193 amount=-2
kerning first=84 second=192 amount=-2
kerning first=84 second=65 amount=-2
kerning first=82 second=248 amount=-1
kerning first=82 second=246 amount=-1
kerning first=82 second=245 amount=-1
kerning first=82 second=244 amount=-1
kerning first=82 second=243 amount=-1
kerning first=82 second=242 amount=-1
kerning first=82 second=111 amount=-1
kerning first=81 second=47 amount=2
kerning first=81 second=59 amount=1
kerning first=81 second=44 amount=1
kerning first=81 second=106 amount=1
kerning first=81 second=103 amount=1
kerning first=81 second=221 amount=-1
kerning first=81 second=89 amount=-1
kerning first=81 second=84 amount=-1
kerning first=81 second=74 amount=1
kerning first=81 second=198 amount=1
kerning first=80 second=47 amount=-1
kerning first=80 second=46 amount=-3
kerning first=80 second=44 amount=-3
kerning first=80 second=248 amount=-1
kerning first=80 second=246 amount=-1
kerning first=80 second=245 amount=-1
kerning first=80 second=244 amount=-1
kerning first=80 second=243 amount=-1
kerning first=80 second=242 amount=-1
kerning first=80 second=111 amount=-1
kerning first=80 second=235 amount=-1
kerning first=80 second=234 amount=-1
kerning first=80 second=233 amount=-1
kerning first=80 second=232 amount=-1
kerning first=80 second=101 amount=-1
kerning first=80 second=231 amount=-1
kerning first=80 second=99 amount=-1
kerning first=80 second=230 amount=-1
kerning first=80 second=229 amount=-1
kerning first=80 second=228 amount=-1
kerning first=80 second=227 amount=-1
kerning first=80 second=226 amount=-1
kerning first=80 second=225 amount=-1
kerning first=80 second=224 amount=-1
kerning first=80 second=97 amount=-1
kerning first=80 second=74 amount=-2
kerning first=80 second=198 amount=-2
kerning first=80 second=197 amount=-2
kerning first=80 second=196 amount=-2
kerning first=80 second=195 amount=-2
kerning first=80 second=194 amount=-2
kerning first=80 second=193 amount=-2
kerning first=80 second=192 amount=-2
kerning first=80 second=65 amount=-2
kerning first=214 second=44 amount=-1
kerning first=214 second=221 amount=-1
kerning first=214 second=89 amount=-1
kerning first=214 second=88 amount=-1
kerning first=214 second=84 amount=-1
kerning first=213 second=44 amount=-1
kerning first=213 second=221 amount=-1
kerning first=213 second=89 amount=-1
kerning first=213 second=88 amount=-1
kerning first=213 second=84 amount=-1
kerning first=212 second=44 amount=-1
kerning first=212 second=221 amount=-1
kerning first=212 second=89 amount=-1
kerning first=212 second=88 amount=-1
kerning first=212 second=84 amount=-1
kerning first=211 second=44 amount=-1
kerning first=211 second=221 amount=-1
kerning first=211 second=89 amount=-1
kerning first=211 second=88 amount=-1
kerning first=211 second=84 amount=-1
kerning first=210 second=44 amount=-1
kerning first=210 second=221 amount=-1
kerning first=210 second=89 amount=-1
kerning first=210 second=88 amount=-1
kerning first=210 second=84 amount=-1
kerning first=79 second=44 amount=-1
kerning first=79 second=221 amount=-1
kerning first=79 second=89 amount=-1
kerning first=79 second=88 amount=-1
kerning first=79 second=84 amount=-1
kerning first=76 second=255 amount=-1
kerning first=76 second=253 amount=-1
kerning first=76 second=121 amount=-1
kerning first=76 second=119 amount=-1
kerning first=76 second=118 amount=-1
kerning first=76 second=221 amount=-2
kerning first=76 second=89 amount=-2
kerning first=76 second=87 amount=-2
kerning first=76 second=86 amount=-2
kerning first=76 second=220 amount=-1
kerning first=76 second=219 amount=-1
kerning first=76 second=218 amount=-1
kerning first=76 second=217 amount=-1
kerning first=76 second=85 amount=-1
kerning first=76 second=84 amount=-2
kerning first=76 second=81 amount=-1
kerning first=76 second=214 amount=-1
kerning first=76 second=213 amount=-1
kerning first=76 second=212 amount=-1
kerning first=76 second=211 amount=-1
kerning first=76 second=210 amount=-1
kerning first=76 second=79 amount=-1
kerning first=76 second=71 amount=-1
kerning first=76 second=198 amount=1
kerning first=75 second=255 amount=-1
kerning first=75 second=253 amount=-1
kerning first=75 second=121 amount=-1
kerning first=75 second=119 amount=-1
kerning first=75 second=118 amount=-1
kerning first=75 second=231 amount=-1
kerning first=75 second=99 amount=-1
kerning first=75 second=81 amount=-1
kerning first=75 second=214 amount=-1
kerning first=75 second=213 amount=-1
kerning first=75 second=212 amount=-1
kerning first=75 second=211 amount=-1
kerning first=75 second=210 amount=-1
kerning first=75 second=79 amount=-1
kerning first=75 second=71 amount=-1
kerning first=75 second=199 amount=-1
kerning first=75 second=67 amount=-1
kerning first=70 second=47 amount=-1
kerning first=70 second=46 amount=-2
kerning first=70 second=44 amount=-3
kerning first=70 second=230 amount=-1
kerning first=70 second=229 amount=-1
kerning first=70 second=228 amount=-1
kerning first=70 second=227 amount=-1
kerning first=70 second=226 amount=-1
kerning first=70 second=225 amount=-1
kerning first=70 second=224 amount=-1
kerning first=70 second=97 amount=-1
kerning first=70 second=74 amount=-1
kerning first=70 second=198 amount=-1
kerning first=70 second=197 amount=-1
kerning first=70 second=196 amount=-1
kerning first=70 second=195 amount=-1
kerning first=70 second=194 amount=-1
kerning first=70 second=193 amount=-1
kerning first=70 second=192 amount=-1
kerning first=70 second=65 amount=-1
kerning first=203 second=255 amount=-1
kerning first=203 second=253 amount=-1
kerning first=203 second=121 amount=-1
kerning first=203 second=118 amount=-1
kerning first=203 second=102 amount=-1
kerning first=202 second=255 amount=-1
kerning first=202 second=253 amount=-1
kerning first=202 second=121 amount=-1
kerning first=202 second=118 amount=-1
kerning first=202 second=102 amount=-1
kerning first=201 second=255 amount=-1
kerning first=201 second=253 amount=-1
kerning first=201 second=121 amount=-1
kerning first=201 second=118 amount=-1
kerning first=201 second=102 amount=-1
kerning first=200 second=255 amount=-1
kerning first=200 second=253 amount=-1
kerning first=200 second=121 amount=-1
kerning first=200 second=118 amount=-1
kerning first=200 second=102 amount=-1
kerning first=69 second=255 amount=-1
kerning first=69 second=253 amount=-1
kerning first=69 second=121 amount=-1
kerning first=69 second=118 amount=-1
kerning first=69 second=102 amount=-1
kerning first=208 second=46 amount=-1
kerning first=208 second=44 amount=-1
kerning first=68 second=46 amount=-1
kerning first=68 second=44 amount=-1
kerning first=197 second=84 amount=-2
kerning first=66 second=221 amount=-1
kerning first=66 second=89 amount=-1
kerning first=66 second=88 amount=-1
kerning first=66 second=84 amount=-1
kerning first=198 second=255 amount=-1
kerning first=198 second=253 amount=-1
kerning first=198 second=121 amount=-1
kerning first=198 second=118 amount=-1
kerning first=198 second=102 amount=-1
kerning first=197 second=63 amount=-1
kerning first=197 second=255 amount=-1
kerning first=197 second=253 amount=-1
kerning first=197 second=121 amount=-1
kerning first=197 second=86 amount=-1
kerning first=197 second=87 amount=-1
kerning first=197 second=116 amount=-1
kerning first=197 second=221 amount=-2
kerning first=197 second=89 amount=-2

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,195 @@
info face="Comic Sans MS" size=48 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
common lineHeight=47 base=37 scaleW=512 scaleH=512 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0
page id=0 file="comicSans48_0.png"
chars count=191
char id=32 x=507 y=30 width=3 height=1 xoffset=-1 yoffset=46 xadvance=10 page=0 chnl=15
char id=33 x=341 y=67 width=5 height=28 xoffset=1 yoffset=10 xadvance=8 page=0 chnl=15
char id=34 x=269 y=172 width=11 height=11 xoffset=1 yoffset=11 xadvance=14 page=0 chnl=15
char id=35 x=293 y=97 width=29 height=26 xoffset=0 yoffset=11 xadvance=29 page=0 chnl=15
char id=36 x=441 y=0 width=20 height=34 xoffset=1 yoffset=9 xadvance=24 page=0 chnl=15
char id=37 x=439 y=65 width=26 height=27 xoffset=2 yoffset=10 xadvance=28 page=0 chnl=15
char id=38 x=49 y=74 width=22 height=28 xoffset=0 yoffset=11 xadvance=22 page=0 chnl=15
char id=39 x=308 y=170 width=5 height=9 xoffset=4 yoffset=9 xadvance=13 page=0 chnl=15
char id=40 x=82 y=38 width=11 height=34 xoffset=1 yoffset=10 xadvance=12 page=0 chnl=15
char id=41 x=94 y=38 width=11 height=34 xoffset=1 yoffset=10 xadvance=12 page=0 chnl=15
char id=42 x=110 y=181 width=17 height=14 xoffset=0 yoffset=10 xadvance=18 page=0 chnl=15
char id=43 x=175 y=179 width=16 height=13 xoffset=0 yoffset=20 xadvance=16 page=0 chnl=15
char id=44 x=370 y=168 width=6 height=8 xoffset=3 yoffset=35 xadvance=9 page=0 chnl=15
char id=45 x=465 y=165 width=12 height=3 xoffset=1 yoffset=26 xadvance=13 page=0 chnl=15
char id=46 x=383 y=168 width=5 height=4 xoffset=2 yoffset=35 xadvance=8 page=0 chnl=15
char id=47 x=284 y=68 width=16 height=28 xoffset=1 yoffset=11 xadvance=17 page=0 chnl=15
char id=48 x=112 y=130 width=21 height=26 xoffset=0 yoffset=11 xadvance=21 page=0 chnl=15
char id=49 x=497 y=93 width=12 height=26 xoffset=2 yoffset=11 xadvance=15 page=0 chnl=15
char id=50 x=330 y=123 width=17 height=26 xoffset=2 yoffset=11 xadvance=21 page=0 chnl=15
char id=51 x=348 y=123 width=17 height=26 xoffset=2 yoffset=11 xadvance=21 page=0 chnl=15
char id=52 x=134 y=128 width=21 height=26 xoffset=0 yoffset=11 xadvance=21 page=0 chnl=15
char id=53 x=177 y=128 width=19 height=26 xoffset=1 yoffset=11 xadvance=21 page=0 chnl=15
char id=54 x=255 y=125 width=18 height=26 xoffset=1 yoffset=11 xadvance=21 page=0 chnl=15
char id=55 x=90 y=130 width=21 height=26 xoffset=0 yoffset=11 xadvance=21 page=0 chnl=15
char id=56 x=197 y=127 width=19 height=26 xoffset=1 yoffset=11 xadvance=21 page=0 chnl=15
char id=57 x=115 y=71 width=19 height=28 xoffset=1 yoffset=11 xadvance=21 page=0 chnl=15
char id=58 x=32 y=185 width=6 height=17 xoffset=2 yoffset=18 xadvance=10 page=0 chnl=15
char id=59 x=202 y=154 width=7 height=22 xoffset=1 yoffset=18 xadvance=10 page=0 chnl=15
char id=60 x=140 y=181 width=11 height=14 xoffset=0 yoffset=20 xadvance=13 page=0 chnl=15
char id=61 x=239 y=174 width=14 height=12 xoffset=1 yoffset=20 xadvance=17 page=0 chnl=15
char id=62 x=56 y=184 width=13 height=16 xoffset=0 yoffset=18 xadvance=13 page=0 chnl=15
char id=63 x=456 y=120 width=16 height=26 xoffset=0 yoffset=12 xadvance=17 page=0 chnl=15
char id=64 x=423 y=35 width=27 height=29 xoffset=1 yoffset=10 xadvance=30 page=0 chnl=15
char id=65 x=0 y=132 width=22 height=26 xoffset=1 yoffset=11 xadvance=24 page=0 chnl=15
char id=66 x=19 y=104 width=18 height=27 xoffset=2 yoffset=11 xadvance=21 page=0 chnl=15
char id=67 x=466 y=65 width=20 height=27 xoffset=1 yoffset=10 xadvance=20 page=0 chnl=15
char id=68 x=26 y=75 width=22 height=28 xoffset=2 yoffset=11 xadvance=25 page=0 chnl=15
char id=69 x=95 y=73 width=19 height=28 xoffset=2 yoffset=11 xadvance=21 page=0 chnl=15
char id=70 x=135 y=71 width=19 height=28 xoffset=2 yoffset=11 xadvance=21 page=0 chnl=15
char id=71 x=23 y=132 width=22 height=26 xoffset=1 yoffset=11 xadvance=23 page=0 chnl=15
char id=72 x=450 y=93 width=23 height=26 xoffset=2 yoffset=11 xadvance=26 page=0 chnl=15
char id=73 x=402 y=121 width=17 height=26 xoffset=1 yoffset=11 xadvance=19 page=0 chnl=15
char id=74 x=72 y=73 width=22 height=28 xoffset=1 yoffset=11 xadvance=23 page=0 chnl=15
char id=75 x=174 y=70 width=18 height=28 xoffset=3 yoffset=11 xadvance=21 page=0 chnl=15
char id=76 x=212 y=69 width=18 height=28 xoffset=1 yoffset=11 xadvance=19 page=0 chnl=15
char id=77 x=382 y=66 width=28 height=27 xoffset=1 yoffset=11 xadvance=29 page=0 chnl=15
char id=78 x=349 y=94 width=25 height=26 xoffset=1 yoffset=11 xadvance=27 page=0 chnl=15
char id=79 x=323 y=96 width=25 height=26 xoffset=1 yoffset=11 xadvance=27 page=0 chnl=15
char id=80 x=420 y=121 width=17 height=26 xoffset=1 yoffset=11 xadvance=18 page=0 chnl=15
char id=81 x=106 y=37 width=29 height=33 xoffset=1 yoffset=11 xadvance=30 page=0 chnl=15
char id=82 x=156 y=128 width=20 height=26 xoffset=1 yoffset=11 xadvance=21 page=0 chnl=15
char id=83 x=473 y=120 width=21 height=25 xoffset=2 yoffset=13 xadvance=24 page=0 chnl=15
char id=84 x=375 y=94 width=24 height=26 xoffset=1 yoffset=11 xadvance=23 page=0 chnl=15
char id=85 x=474 y=93 width=22 height=26 xoffset=2 yoffset=11 xadvance=25 page=0 chnl=15
char id=86 x=46 y=132 width=21 height=26 xoffset=2 yoffset=11 xadvance=22 page=0 chnl=15
char id=87 x=347 y=66 width=34 height=27 xoffset=2 yoffset=11 xadvance=35 page=0 chnl=15
char id=88 x=425 y=93 width=24 height=26 xoffset=0 yoffset=11 xadvance=25 page=0 chnl=15
char id=89 x=68 y=131 width=21 height=26 xoffset=0 yoffset=12 xadvance=22 page=0 chnl=15
char id=90 x=400 y=94 width=24 height=26 xoffset=0 yoffset=11 xadvance=24 page=0 chnl=15
char id=91 x=238 y=36 width=11 height=32 xoffset=2 yoffset=12 xadvance=13 page=0 chnl=15
char id=92 x=318 y=67 width=16 height=28 xoffset=2 yoffset=11 xadvance=19 page=0 chnl=15
char id=93 x=226 y=36 width=11 height=32 xoffset=2 yoffset=12 xadvance=13 page=0 chnl=15
char id=94 x=281 y=171 width=15 height=9 xoffset=3 yoffset=10 xadvance=19 page=0 chnl=15
char id=95 x=413 y=166 width=23 height=3 xoffset=-1 yoffset=40 xadvance=21 page=0 chnl=15
char id=96 x=361 y=169 width=8 height=8 xoffset=2 yoffset=10 xadvance=19 page=0 chnl=15
char id=97 x=460 y=147 width=17 height=17 xoffset=0 yoffset=20 xadvance=17 page=0 chnl=15
char id=98 x=114 y=102 width=17 height=27 xoffset=2 yoffset=10 xadvance=20 page=0 chnl=15
char id=99 x=0 y=185 width=15 height=17 xoffset=1 yoffset=20 xadvance=17 page=0 chnl=15
char id=100 x=38 y=104 width=18 height=27 xoffset=1 yoffset=10 xadvance=20 page=0 chnl=15
char id=101 x=405 y=148 width=18 height=17 xoffset=1 yoffset=20 xadvance=19 page=0 chnl=15
char id=102 x=494 y=35 width=16 height=29 xoffset=0 yoffset=10 xadvance=17 page=0 chnl=15
char id=103 x=366 y=121 width=17 height=26 xoffset=0 yoffset=20 xadvance=18 page=0 chnl=15
char id=104 x=132 y=100 width=17 height=27 xoffset=2 yoffset=10 xadvance=20 page=0 chnl=15
char id=105 x=101 y=157 width=6 height=24 xoffset=2 yoffset=13 xadvance=10 page=0 chnl=15
char id=106 x=40 y=39 width=13 height=34 xoffset=-1 yoffset=13 xadvance=14 page=0 chnl=15
char id=107 x=150 y=100 width=17 height=27 xoffset=2 yoffset=11 xadvance=18 page=0 chnl=15
char id=108 x=335 y=67 width=5 height=28 xoffset=2 yoffset=10 xadvance=9 page=0 chnl=15
char id=109 x=276 y=152 width=25 height=18 xoffset=1 yoffset=20 xadvance=26 page=0 chnl=15
char id=110 x=442 y=147 width=17 height=17 xoffset=1 yoffset=20 xadvance=18 page=0 chnl=15
char id=111 x=495 y=146 width=16 height=17 xoffset=1 yoffset=20 xadvance=18 page=0 chnl=15
char id=112 x=301 y=68 width=16 height=28 xoffset=1 yoffset=19 xadvance=18 page=0 chnl=15
char id=113 x=312 y=124 width=17 height=26 xoffset=0 yoffset=20 xadvance=18 page=0 chnl=15
char id=114 x=16 y=185 width=15 height=17 xoffset=1 yoffset=20 xadvance=16 page=0 chnl=15
char id=115 x=227 y=154 width=16 height=19 xoffset=0 yoffset=18 xadvance=17 page=0 chnl=15
char id=116 x=145 y=155 width=16 height=23 xoffset=0 yoffset=14 xadvance=16 page=0 chnl=15
char id=117 x=478 y=146 width=16 height=17 xoffset=1 yoffset=20 xadvance=18 page=0 chnl=15
char id=118 x=345 y=150 width=17 height=18 xoffset=0 yoffset=20 xadvance=17 page=0 chnl=15
char id=119 x=363 y=150 width=22 height=17 xoffset=1 yoffset=20 xadvance=23 page=0 chnl=15
char id=120 x=324 y=151 width=20 height=18 xoffset=0 yoffset=20 xadvance=20 page=0 chnl=15
char id=121 x=487 y=65 width=19 height=27 xoffset=-1 yoffset=20 xadvance=18 page=0 chnl=15
char id=122 x=424 y=148 width=17 height=17 xoffset=1 yoffset=20 xadvance=18 page=0 chnl=15
char id=123 x=68 y=38 width=13 height=34 xoffset=-1 yoffset=10 xadvance=12 page=0 chnl=15
char id=124 x=502 y=0 width=4 height=34 xoffset=5 yoffset=9 xadvance=14 page=0 chnl=15
char id=125 x=54 y=39 width=13 height=34 xoffset=-1 yoffset=10 xadvance=12 page=0 chnl=15
char id=126 x=314 y=170 width=19 height=8 xoffset=1 yoffset=21 xadvance=19 page=0 chnl=15
char id=160 x=507 y=28 width=3 height=1 xoffset=-1 yoffset=46 xadvance=10 page=0 chnl=15
char id=161 x=287 y=97 width=5 height=27 xoffset=1 yoffset=11 xadvance=8 page=0 chnl=15
char id=162 x=193 y=70 width=18 height=28 xoffset=1 yoffset=8 xadvance=21 page=0 chnl=15
char id=163 x=317 y=36 width=25 height=30 xoffset=0 yoffset=10 xadvance=27 page=0 chnl=15
char id=164 x=302 y=151 width=21 height=18 xoffset=0 yoffset=16 xadvance=21 page=0 chnl=15
char id=165 x=81 y=158 width=19 height=24 xoffset=2 yoffset=13 xadvance=22 page=0 chnl=15
char id=166 x=507 y=0 width=4 height=27 xoffset=5 yoffset=10 xadvance=14 page=0 chnl=15
char id=167 x=236 y=126 width=18 height=26 xoffset=1 yoffset=11 xadvance=22 page=0 chnl=15
char id=168 x=437 y=166 width=14 height=3 xoffset=3 yoffset=14 xadvance=19 page=0 chnl=15
char id=169 x=177 y=155 width=24 height=22 xoffset=1 yoffset=10 xadvance=26 page=0 chnl=15
char id=170 x=225 y=174 width=13 height=13 xoffset=1 yoffset=9 xadvance=16 page=0 chnl=15
char id=171 x=90 y=183 width=19 height=14 xoffset=0 yoffset=20 xadvance=20 page=0 chnl=15
char id=172 x=334 y=170 width=16 height=8 xoffset=0 yoffset=25 xadvance=16 page=0 chnl=15
char id=173 x=452 y=165 width=12 height=3 xoffset=1 yoffset=26 xadvance=13 page=0 chnl=15
char id=174 x=35 y=159 width=24 height=24 xoffset=1 yoffset=10 xadvance=26 page=0 chnl=15
char id=175 x=389 y=166 width=23 height=3 xoffset=-1 yoffset=6 xadvance=21 page=0 chnl=15
char id=176 x=254 y=172 width=14 height=12 xoffset=0 yoffset=9 xadvance=14 page=0 chnl=15
char id=177 x=210 y=154 width=16 height=19 xoffset=0 yoffset=20 xadvance=16 page=0 chnl=15
char id=178 x=128 y=181 width=11 height=14 xoffset=6 yoffset=8 xadvance=22 page=0 chnl=15
char id=179 x=164 y=179 width=10 height=14 xoffset=6 yoffset=9 xadvance=22 page=0 chnl=15
char id=180 x=351 y=169 width=9 height=8 xoffset=3 yoffset=10 xadvance=17 page=0 chnl=15
char id=181 x=60 y=159 width=20 height=24 xoffset=0 yoffset=20 xadvance=18 page=0 chnl=15
char id=182 x=451 y=35 width=23 height=29 xoffset=0 yoffset=11 xadvance=24 page=0 chnl=15
char id=183 x=377 y=168 width=5 height=4 xoffset=2 yoffset=24 xadvance=8 page=0 chnl=15
char id=184 x=297 y=171 width=10 height=9 xoffset=5 yoffset=35 xadvance=19 page=0 chnl=15
char id=185 x=152 y=179 width=11 height=14 xoffset=6 yoffset=8 xadvance=22 page=0 chnl=15
char id=186 x=192 y=178 width=16 height=13 xoffset=0 yoffset=9 xadvance=16 page=0 chnl=15
char id=187 x=70 y=184 width=19 height=14 xoffset=0 yoffset=20 xadvance=20 page=0 chnl=15
char id=188 x=20 y=40 width=19 height=34 xoffset=2 yoffset=9 xadvance=22 page=0 chnl=15
char id=189 x=0 y=40 width=19 height=34 xoffset=2 yoffset=9 xadvance=22 page=0 chnl=15
char id=190 x=482 y=0 width=19 height=34 xoffset=2 yoffset=9 xadvance=22 page=0 chnl=15
char id=191 x=438 y=120 width=17 height=26 xoffset=0 yoffset=12 xadvance=17 page=0 chnl=15
char id=192 x=241 y=0 width=22 height=35 xoffset=1 yoffset=2 xadvance=24 page=0 chnl=15
char id=193 x=418 y=0 width=22 height=34 xoffset=1 yoffset=3 xadvance=24 page=0 chnl=15
char id=194 x=218 y=0 width=22 height=35 xoffset=1 yoffset=2 xadvance=24 page=0 chnl=15
char id=195 x=136 y=37 width=24 height=33 xoffset=1 yoffset=4 xadvance=24 page=0 chnl=15
char id=196 x=343 y=35 width=22 height=30 xoffset=1 yoffset=7 xadvance=24 page=0 chnl=15
char id=197 x=161 y=36 width=22 height=33 xoffset=1 yoffset=4 xadvance=24 page=0 chnl=15
char id=198 x=383 y=35 width=39 height=29 xoffset=0 yoffset=10 xadvance=38 page=0 chnl=15
char id=199 x=205 y=36 width=20 height=32 xoffset=1 yoffset=11 xadvance=20 page=0 chnl=15
char id=200 x=40 y=0 width=19 height=38 xoffset=2 yoffset=1 xadvance=21 page=0 chnl=15
char id=201 x=20 y=0 width=19 height=39 xoffset=2 yoffset=0 xadvance=21 page=0 chnl=15
char id=202 x=0 y=0 width=19 height=39 xoffset=2 yoffset=0 xadvance=21 page=0 chnl=15
char id=203 x=462 y=0 width=19 height=34 xoffset=2 yoffset=5 xadvance=21 page=0 chnl=15
char id=204 x=287 y=0 width=17 height=35 xoffset=1 yoffset=2 xadvance=19 page=0 chnl=15
char id=205 x=305 y=0 width=17 height=35 xoffset=1 yoffset=2 xadvance=19 page=0 chnl=15
char id=206 x=125 y=0 width=17 height=36 xoffset=1 yoffset=1 xadvance=19 page=0 chnl=15
char id=207 x=299 y=36 width=17 height=31 xoffset=1 yoffset=6 xadvance=19 page=0 chnl=15
char id=208 x=0 y=75 width=25 height=28 xoffset=-1 yoffset=11 xadvance=25 page=0 chnl=15
char id=209 x=340 y=0 width=25 height=34 xoffset=1 yoffset=3 xadvance=27 page=0 chnl=15
char id=210 x=169 y=0 width=25 height=35 xoffset=1 yoffset=2 xadvance=27 page=0 chnl=15
char id=211 x=392 y=0 width=25 height=34 xoffset=1 yoffset=3 xadvance=27 page=0 chnl=15
char id=212 x=143 y=0 width=25 height=35 xoffset=1 yoffset=2 xadvance=27 page=0 chnl=15
char id=213 x=366 y=0 width=25 height=34 xoffset=1 yoffset=3 xadvance=27 page=0 chnl=15
char id=214 x=250 y=36 width=25 height=31 xoffset=1 yoffset=6 xadvance=27 page=0 chnl=15
char id=215 x=209 y=177 width=15 height=13 xoffset=0 yoffset=20 xadvance=16 page=0 chnl=15
char id=216 x=411 y=65 width=27 height=27 xoffset=1 yoffset=11 xadvance=27 page=0 chnl=15
char id=217 x=195 y=0 width=22 height=35 xoffset=2 yoffset=2 xadvance=25 page=0 chnl=15
char id=218 x=264 y=0 width=22 height=35 xoffset=2 yoffset=2 xadvance=25 page=0 chnl=15
char id=219 x=102 y=0 width=22 height=36 xoffset=2 yoffset=1 xadvance=25 page=0 chnl=15
char id=220 x=276 y=36 width=22 height=31 xoffset=2 yoffset=6 xadvance=25 page=0 chnl=15
char id=221 x=60 y=0 width=21 height=37 xoffset=0 yoffset=1 xadvance=22 page=0 chnl=15
char id=222 x=384 y=121 width=17 height=26 xoffset=1 yoffset=11 xadvance=18 page=0 chnl=15
char id=223 x=366 y=35 width=16 height=30 xoffset=0 yoffset=10 xadvance=16 page=0 chnl=15
char id=224 x=0 y=104 width=18 height=27 xoffset=0 yoffset=10 xadvance=17 page=0 chnl=15
char id=225 x=76 y=102 width=18 height=27 xoffset=0 yoffset=10 xadvance=17 page=0 chnl=15
char id=226 x=231 y=69 width=18 height=28 xoffset=0 yoffset=9 xadvance=17 page=0 chnl=15
char id=227 x=217 y=127 width=18 height=26 xoffset=0 yoffset=11 xadvance=17 page=0 chnl=15
char id=228 x=108 y=157 width=18 height=23 xoffset=0 yoffset=14 xadvance=17 page=0 chnl=15
char id=229 x=475 y=35 width=18 height=29 xoffset=0 yoffset=8 xadvance=17 page=0 chnl=15
char id=230 x=244 y=153 width=31 height=18 xoffset=0 yoffset=20 xadvance=31 page=0 chnl=15
char id=231 x=19 y=159 width=15 height=25 xoffset=1 yoffset=20 xadvance=17 page=0 chnl=15
char id=232 x=57 y=103 width=18 height=27 xoffset=1 yoffset=10 xadvance=19 page=0 chnl=15
char id=233 x=95 y=102 width=18 height=27 xoffset=1 yoffset=10 xadvance=19 page=0 chnl=15
char id=234 x=155 y=71 width=18 height=28 xoffset=1 yoffset=9 xadvance=19 page=0 chnl=15
char id=235 x=0 y=159 width=18 height=25 xoffset=1 yoffset=12 xadvance=19 page=0 chnl=15
char id=236 x=278 y=97 width=8 height=27 xoffset=0 yoffset=10 xadvance=10 page=0 chnl=15
char id=237 x=268 y=97 width=9 height=27 xoffset=1 yoffset=10 xadvance=10 page=0 chnl=15
char id=238 x=252 y=97 width=15 height=27 xoffset=-3 yoffset=10 xadvance=10 page=0 chnl=15
char id=239 x=162 y=155 width=14 height=23 xoffset=-2 yoffset=14 xadvance=10 page=0 chnl=15
char id=240 x=236 y=98 width=15 height=27 xoffset=2 yoffset=10 xadvance=17 page=0 chnl=15
char id=241 x=274 y=125 width=18 height=26 xoffset=1 yoffset=11 xadvance=18 page=0 chnl=15
char id=242 x=168 y=100 width=16 height=27 xoffset=1 yoffset=10 xadvance=18 page=0 chnl=15
char id=243 x=185 y=99 width=16 height=27 xoffset=1 yoffset=10 xadvance=18 page=0 chnl=15
char id=244 x=267 y=68 width=16 height=28 xoffset=1 yoffset=9 xadvance=18 page=0 chnl=15
char id=245 x=293 y=124 width=18 height=26 xoffset=1 yoffset=11 xadvance=18 page=0 chnl=15
char id=246 x=127 y=157 width=17 height=23 xoffset=1 yoffset=14 xadvance=18 page=0 chnl=15
char id=247 x=39 y=184 width=16 height=16 xoffset=0 yoffset=18 xadvance=16 page=0 chnl=15
char id=248 x=386 y=148 width=18 height=17 xoffset=0 yoffset=20 xadvance=18 page=0 chnl=15
char id=249 x=219 y=98 width=16 height=27 xoffset=1 yoffset=10 xadvance=18 page=0 chnl=15
char id=250 x=202 y=99 width=16 height=27 xoffset=1 yoffset=10 xadvance=18 page=0 chnl=15
char id=251 x=250 y=68 width=16 height=28 xoffset=1 yoffset=9 xadvance=18 page=0 chnl=15
char id=252 x=495 y=120 width=16 height=25 xoffset=1 yoffset=12 xadvance=18 page=0 chnl=15
char id=253 x=82 y=0 width=19 height=37 xoffset=-1 yoffset=10 xadvance=18 page=0 chnl=15
char id=254 x=323 y=0 width=16 height=35 xoffset=1 yoffset=12 xadvance=18 page=0 chnl=15
char id=255 x=184 y=36 width=20 height=33 xoffset=-1 yoffset=14 xadvance=18 page=0 chnl=15

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<dllmap dll="SDL2.dll" os="osx" target="libSDL2-2.0.0.dylib"/>
<dllmap dll="soft_oal.dll" os="osx" target="libopenal.1.dylib" />
<dllmap dll="SDL2.dll" os="linux" cpu="x86" target="./x86/libSDL2-2.0.so.0"/>
<dllmap dll="soft_oal.dll" os="linux" cpu="x86" target="./x86/libopenal.so.1" />
<dllmap dll="SDL2.dll" os="linux" cpu="x86-64" target="./x64/libSDL2-2.0.so.0"/>
<dllmap dll="soft_oal.dll" os="linux" cpu="x86-64" target="./x64/libopenal.so.1" />
</configuration>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,66 @@
<Project StylesheetPath="commodore-64/ui_stylesheet.xmms">
<ExportOptions Namespace="Myra.Samples.CustomUIStylesheet" Class="AllWidgets" OutputPath="D:\Projects\Hebron\Myra\Source\Samples\Myra.Samples.CustomUIStylesheet" />
<HorizontalSplitPane GridRow="1">
<ScrollPane>
<Grid ColumnSpacing="8" RowSpacing="8" Id="_gridRight">
<ColumnsProportions>
<Proportion />
<Proportion Type="Fill" />
</ColumnsProportions>
<RowsProportions>
<Proportion />
<Proportion />
<Proportion />
<Proportion />
<Proportion />
<Proportion />
</RowsProportions>
<TextBlock Text="Button:" Id="" />
<ImageTextButton Text="Button" Id="_button" GridColumn="1" />
<CheckBox Text="This is checkbox" GridRow="1" GridColumnSpan="2" />
<TextBlock Text="Slider:" Id="" GridRow="2" />
<HorizontalSlider GridColumn="1" GridRow="2" />
<TextBlock Text="Combo Box:" GridRow="3" />
<ComboBox GridColumn="1" GridRow="3">
<ListItem Text="Item 1" />
<ListItem Text="Item 2" />
<ListItem Text="Item 3" />
</ComboBox>
<TextBlock Text="Text Field:" GridRow="4" />
<TextField Text="" GridColumn="1" GridRow="4" />
<TextBlock Text="List Box:" GridRow="5" />
<ListBox GridColumn="1" GridRow="5">
<ListItem Text="Item 1" />
<ListItem Text="Item 2" />
<ListItem Text="Item 3" />
</ListBox>
</Grid>
</ScrollPane>
<VerticalSplitPane>
<Grid RowSpacing="8">
<ColumnsProportions>
<Proportion Type="Fill" />
</ColumnsProportions>
<RowsProportions>
<Proportion />
<Proportion Type="Fill" />
</RowsProportions>
<TextBlock Text="Vertical Slider:" />
<VerticalSlider HorizontalAlignment="Center" GridRow="1" />
</Grid>
<Grid RowSpacing="8">
<ColumnsProportions>
<Proportion Type="Fill" />
</ColumnsProportions>
<RowsProportions>
<Proportion />
<Proportion />
<Proportion Type="Fill" />
</RowsProportions>
<TextBlock Text="Progress Bars:" />
<HorizontalProgressBar Id="_horizontalProgressBar" GridRow="1" />
<VerticalProgressBar HorizontalAlignment="Center" Id="_verticalProgressBar" GridRow="2" />
</Grid>
</VerticalSplitPane>
</HorizontalSplitPane>
</Project>

View file

@ -0,0 +1,101 @@
info face="Commodore 64 Pixelized" size=20 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=-2,-2
common lineHeight=20 base=18 scaleW=512 scaleH=64 pages=1 packed=0
page id=0 file="ui_stylesheet.atlas:commodore-64"
chars count=96
char id=10 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=0 page=0 chnl=0
char id=32 x=0 y=0 width=0 height=0 xoffset=-1 yoffset=17 xadvance=16 page=0 chnl=0
char id=33 x=502 y=0 width=6 height=16 xoffset=5 yoffset=3 xadvance=16 page=0 chnl=0
char id=34 x=188 y=34 width=14 height=6 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=35 x=248 y=18 width=18 height=16 xoffset=-1 yoffset=3 xadvance=16 page=0 chnl=0
char id=36 x=220 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=37 x=234 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=38 x=266 y=18 width=16 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=39 x=142 y=34 width=10 height=8 xoffset=5 yoffset=3 xadvance=16 page=0 chnl=0
char id=40 x=90 y=18 width=10 height=16 xoffset=3 yoffset=3 xadvance=16 page=0 chnl=0
char id=41 x=100 y=18 width=10 height=16 xoffset=3 yoffset=3 xadvance=16 page=0 chnl=0
char id=42 x=114 y=34 width=18 height=12 xoffset=-1 yoffset=5 xadvance=16 page=0 chnl=0
char id=43 x=100 y=34 width=14 height=12 xoffset=1 yoffset=5 xadvance=16 page=0 chnl=0
char id=44 x=152 y=34 width=8 height=8 xoffset=3 yoffset=13 xadvance=16 page=0 chnl=0
char id=45 x=208 y=34 width=14 height=4 xoffset=1 yoffset=9 xadvance=16 page=0 chnl=0
char id=46 x=202 y=34 width=6 height=6 xoffset=5 yoffset=13 xadvance=16 page=0 chnl=0
char id=47 x=392 y=18 width=16 height=14 xoffset=1 yoffset=5 xadvance=16 page=0 chnl=0
char id=48 x=56 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=49 x=430 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=50 x=444 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=51 x=458 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=52 x=472 y=0 width=16 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=53 x=488 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=54 x=0 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=55 x=14 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=56 x=28 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=57 x=42 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=58 x=84 y=18 width=6 height=16 xoffset=5 yoffset=3 xadvance=16 page=0 chnl=0
char id=59 x=0 y=0 width=8 height=18 xoffset=3 yoffset=3 xadvance=16 page=0 chnl=0
char id=60 x=158 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=61 x=160 y=34 width=14 height=8 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=62 x=172 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=63 x=70 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=64 x=192 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=65 x=8 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=66 x=22 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=67 x=36 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=68 x=50 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=69 x=64 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=15 page=0 chnl=0
char id=70 x=78 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=15 page=0 chnl=0
char id=71 x=92 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=72 x=106 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=73 x=120 y=0 width=10 height=16 xoffset=3 yoffset=3 xadvance=16 page=0 chnl=0
char id=74 x=130 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=75 x=144 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=76 x=158 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=15 page=0 chnl=0
char id=77 x=172 y=0 width=16 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=78 x=188 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=79 x=202 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=80 x=216 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=81 x=230 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=82 x=244 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=83 x=258 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=84 x=272 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=85 x=286 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=86 x=300 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=87 x=314 y=0 width=16 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=88 x=330 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=89 x=344 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=90 x=358 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=91 x=110 y=18 width=10 height=16 xoffset=3 yoffset=3 xadvance=16 page=0 chnl=0
char id=92 x=408 y=18 width=16 height=14 xoffset=1 yoffset=5 xadvance=16 page=0 chnl=0
char id=93 x=120 y=18 width=10 height=16 xoffset=3 yoffset=3 xadvance=16 page=0 chnl=0
char id=94 x=206 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=95 x=222 y=34 width=18 height=4 xoffset=-1 yoffset=15 xadvance=16 page=0 chnl=0
char id=96 x=132 y=34 width=10 height=8 xoffset=5 yoffset=3 xadvance=16 page=0 chnl=0
char id=97 x=424 y=18 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=98 x=282 y=18 width=14 height=14 xoffset=1 yoffset=5 xadvance=16 page=0 chnl=0
char id=99 x=438 y=18 width=12 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=100 x=296 y=18 width=14 height=14 xoffset=1 yoffset=5 xadvance=16 page=0 chnl=0
char id=101 x=450 y=18 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=102 x=310 y=18 width=12 height=14 xoffset=3 yoffset=5 xadvance=16 page=0 chnl=0
char id=103 x=322 y=18 width=14 height=14 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=104 x=372 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=105 x=386 y=0 width=10 height=16 xoffset=3 yoffset=3 xadvance=16 page=0 chnl=0
char id=106 x=396 y=0 width=10 height=16 xoffset=3 yoffset=5 xadvance=16 page=0 chnl=0
char id=107 x=406 y=0 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=108 x=420 y=0 width=10 height=16 xoffset=3 yoffset=3 xadvance=16 page=0 chnl=0
char id=109 x=464 y=18 width=16 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=110 x=480 y=18 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=111 x=494 y=18 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=112 x=336 y=18 width=14 height=14 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=113 x=350 y=18 width=14 height=14 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=114 x=0 y=34 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=115 x=14 y=34 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=116 x=364 y=18 width=14 height=14 xoffset=1 yoffset=5 xadvance=16 page=0 chnl=0
char id=117 x=28 y=34 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=118 x=42 y=34 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=119 x=56 y=34 width=16 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=120 x=72 y=34 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=121 x=378 y=18 width=14 height=14 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=122 x=86 y=34 width=14 height=12 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=0
char id=123 x=130 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=124 x=186 y=18 width=6 height=16 xoffset=5 yoffset=3 xadvance=16 page=0 chnl=0
char id=125 x=144 y=18 width=14 height=16 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
char id=126 x=174 y=34 width=14 height=8 xoffset=1 yoffset=3 xadvance=16 page=0 chnl=0
kernings count=0

View file

@ -0,0 +1,274 @@
ui_stylesheet_atlas.png
size: 860,229
format: RGBA8888
filter: Nearest,Nearest
repeat: none
blue
rotate: false
xy: 106, 137
size: 2, 2
orig: 2, 2
offset: 0, 0
index: -1
button
rotate: false
xy: 715, 139
size: 36, 24
split: 18, 17, 11, 12
pad: 14, 14, 4, 4
orig: 36, 24
offset: 0, 0
index: -1
button-down
rotate: false
xy: 106, 140
size: 36, 24
split: 18, 17, 12, 11
pad: 14, 14, 4, 4
orig: 36, 24
offset: 0, 0
index: -1
check-box
rotate: false
xy: 162, 152
size: 12, 12
orig: 12, 12
offset: 0, 0
index: -1
check-box-off
rotate: false
xy: 715, 109
size: 12, 12
orig: 12, 12
offset: 0, 0
index: -1
commodore-64
rotate: false
xy: 1, 165
size: 512, 64
orig: 512, 64
offset: 0, 0
index: -1
cursor
rotate: false
xy: 143, 148
size: 18, 16
split: 9, 8, 7, 8
pad: 2, 0, 0, 0
orig: 18, 16
offset: 0, 0
index: -1
cursor-black
rotate: false
xy: 1, 14
size: 18, 16
split: 9, 8, 7, 8
pad: 2, 0, 0, 0
orig: 18, 16
offset: 0, 0
index: -1
dialog
rotate: false
xy: 1, 31
size: 38, 38
split: 19, 18, 18, 19
pad: 13, 13, 24, 13
orig: 38, 38
offset: 0, 0
index: -1
grey
rotate: false
xy: 752, 161
size: 2, 2
orig: 2, 2
offset: 0, 0
index: -1
horizontal-split-pane
rotate: false
xy: 732, 128
size: 14, 10
split: 6, 6, 0, 0
pad: 0, 0, 0, 0
orig: 14, 10
offset: 0, 0
index: -1
light-blue
rotate: false
xy: 143, 145
size: 2, 2
orig: 2, 2
offset: 0, 0
index: -1
list
rotate: false
xy: 821, 215
size: 22, 14
split: 0, 21, 0, 13
pad: 0, 17, 0, 2
orig: 22, 14
offset: 0, 0
index: -1
minus
rotate: false
xy: 78, 117
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
music
rotate: false
xy: 715, 164
size: 46, 32
orig: 46, 32
offset: 0, 0
index: -1
music-off
rotate: false
xy: 774, 197
size: 46, 32
orig: 46, 32
offset: 0, 0
index: -1
plus
rotate: false
xy: 821, 200
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
progress-bar
rotate: false
xy: 777, 180
size: 16, 16
split: 7, 8, 7, 8
pad: 2, 2, 2, 2
orig: 16, 16
offset: 0, 0
index: -1
progress-bar-knob
rotate: false
xy: 715, 122
size: 16, 16
split: 4, 4, 4, 4
pad: 0, 0, 0, 0
orig: 16, 16
offset: 0, 0
index: -1
radio-button
rotate: false
xy: 844, 217
size: 16, 12
orig: 16, 12
offset: 0, 0
index: -1
radio-button
rotate: false
xy: 844, 217
size: 16, 12
split: 14, 0, 5, 5
pad: 13, 0, 0, 0
orig: 16, 12
offset: 0, 0
index: -1
radio-button-off
rotate: false
xy: 1, 1
size: 16, 12
orig: 16, 12
offset: 0, 0
index: -1
scroll-bar
rotate: false
xy: 20, 16
size: 14, 14
split: 6, 6, 6, 6
pad: 0, 0, 0, 0
orig: 14, 14
offset: 0, 0
index: -1
scroll-bar-horizontal-knob
rotate: false
xy: 47, 117
size: 30, 14
split: 15, 14, 7, 6
pad: 0, 0, 0, 0
orig: 30, 14
offset: 0, 0
index: -1
scroll-bar-vertical-knob
rotate: false
xy: 762, 166
size: 14, 30
split: 7, 6, 16, 13
pad: 0, 0, 0, 0
orig: 14, 30
offset: 0, 0
index: -1
slider
rotate: false
xy: 40, 65
size: 4, 4
orig: 4, 4
offset: 0, 0
index: -1
slider-knob
rotate: false
xy: 777, 167
size: 10, 12
orig: 10, 12
offset: 0, 0
index: -1
sound
rotate: false
xy: 715, 197
size: 58, 32
orig: 58, 32
offset: 0, 0
index: -1
sound-off
rotate: false
xy: 47, 132
size: 58, 32
orig: 58, 32
offset: 0, 0
index: -1
touchpad
rotate: false
xy: 514, 29
size: 200, 200
orig: 200, 200
offset: 0, 0
index: -1
touchpad-knob
rotate: false
xy: 1, 70
size: 44, 44
orig: 44, 44
offset: 0, 0
index: -1
vertical-split-pane
rotate: false
xy: 794, 182
size: 10, 14
split: 0, 0, 6, 6
pad: 0, 1, 0, 0
orig: 10, 14
offset: 0, 0
index: -1
white
rotate: false
xy: 93, 129
size: 2, 2
orig: 2, 2
offset: 0, 0
index: -1
window
rotate: false
xy: 1, 115
size: 45, 49
split: 20, 20, 22, 22
pad: 22, 22, 24, 24
orig: 45, 49
offset: 0, 0
index: -1

View file

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<Stylesheet TextureRegionAtlas="ui_stylesheet.atlas">
<Fonts>
<Font Id="commodore-64" File="commodore-64.fnt"/>
</Fonts>
<DesktopStyle Background="blue" />
<LabelStyles>
<LabelStyle Font="commodore-64" TextColor="white" />
</LabelStyles>
<TextBoxStyles>
<TextBoxStyle Background="white" TextColor="black" Font="commodore-64" Cursor="cursor-black" Selection="light-blue" />
</TextBoxStyles>
<ScrollViewerStyles>
<ScrollViewerStyle HorizontalScrollBackground="scroll-bar" HorizontalScrollKnob="scroll-bar-horizontal-knob" VerticalScrollBackground="scroll-bar" VerticalScrollKnob="scroll-bar-vertical-knob" />
</ScrollViewerStyles>
<ButtonStyles>
<ButtonStyle Background="button" Padding="8, 5" PressedBackground="button-down">
<LabelStyle Font="commodore-64" TextColor="white" />
</ButtonStyle>
</ButtonStyles>
<CheckBoxStyles>
<CheckBoxStyle>
<LabelStyle Font="commodore-64" TextColor="white" />
<ImageStyle Image="check-box-off" PressedImage="check-box" />
</CheckBoxStyle>
</CheckBoxStyles>
<HorizontalSliderStyles>
<HorizontalSliderStyle Background="slider">
<KnobStyle>
<ImageStyle Image="slider-knob" />
</KnobStyle>
</HorizontalSliderStyle>
</HorizontalSliderStyles>
<VerticalSliderStyles>
<VerticalSliderStyle Background="slider">
<KnobStyle>
<ImageStyle Image="slider-knob" />
</KnobStyle>
</VerticalSliderStyle>
</VerticalSliderStyles>
<HorizontalProgressBarStyles>
<HorizontalProgressBarStyle Background="progress-bar" Filler="progress-bar-knob" Height="16" />
</HorizontalProgressBarStyles>
<VerticalProgressBarStyles>
<VerticalProgressBarStyle Background="progress-bar" Filler="progress-bar-knob" Width="16" />
</VerticalProgressBarStyles>
<ComboBoxStyles>
<ComboBoxStyle Background="list">
<LabelStyle Font="commodore-64" TextColor="white" />
<ListBoxStyle Background="blue">
<ListItemStyle OverBackground="white" Padding="8, 5" PressedBackground="button-down">
<LabelStyle Font="commodore-64" TextColor="white" OverTextColor="blue" PressedTextColor="blue" />
</ListItemStyle>
</ListBoxStyle>
</ComboBoxStyle>
</ComboBoxStyles>
<ListBoxStyles>
<ListBoxStyle>
<ListItemStyle PressedBackground="white">
<LabelStyle Font="commodore-64" TextColor="white" PressedTextColor="blue" />
</ListItemStyle>
</ListBoxStyle>
</ListBoxStyles>
<TreeStyles>
<TreeStyle SelectionBackground="progress-bar">
<MarkStyle>
<ImageStyle Image="plus" PressedImage="minus" />
</MarkStyle>
<LabelStyle Font="commodore-64" TextColor="white" />
</TreeStyle>
</TreeStyles>
<HorizontalSplitPaneStyles>
<HorizontalSplitPaneStyle>
<HandleStyle Background="horizontal-split-pane" />
</HorizontalSplitPaneStyle>
</HorizontalSplitPaneStyles>
<VerticalSplitPaneStyles>
<VerticalSplitPaneStyle>
<HandleStyle Background="vertical-split-pane" />
</VerticalSplitPaneStyle>
</VerticalSplitPaneStyles>
<WindowStyles>
<WindowStyle Background="window" Padding="25">
<TitleStyle Font="commodore-64" TextColor="white" />
</WindowStyle>
</WindowStyles>
</Stylesheet>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View file

@ -0,0 +1,101 @@
info face="Droid Sans" size=17 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1
common lineHeight=20 base=18 scaleW=256 scaleH=128 pages=1 packed=0
page id=0 file="ui_stylesheet.atlas:default"
chars count=95
char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=16 xadvance=4 page=0 chnl=0
char id=124 x=0 y=0 width=6 height=20 xoffset=1 yoffset=3 xadvance=9 page=0 chnl=0
char id=106 x=6 y=0 width=9 height=20 xoffset=-4 yoffset=3 xadvance=4 page=0 chnl=0
char id=81 x=15 y=0 width=15 height=19 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0
char id=74 x=30 y=0 width=11 height=19 xoffset=-5 yoffset=3 xadvance=4 page=0 chnl=0
char id=125 x=41 y=0 width=10 height=18 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0
char id=123 x=51 y=0 width=10 height=18 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0
char id=93 x=61 y=0 width=8 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=91 x=69 y=0 width=8 height=18 xoffset=-2 yoffset=3 xadvance=5 page=0 chnl=0
char id=41 x=77 y=0 width=9 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=40 x=86 y=0 width=9 height=18 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=64 x=95 y=0 width=18 height=17 xoffset=-3 yoffset=3 xadvance=14 page=0 chnl=0
char id=121 x=113 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0
char id=113 x=126 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=112 x=139 y=0 width=13 height=17 xoffset=-2 yoffset=6 xadvance=9 page=0 chnl=0
char id=103 x=152 y=0 width=13 height=17 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0
char id=38 x=165 y=0 width=16 height=16 xoffset=-3 yoffset=3 xadvance=11 page=0 chnl=0
char id=37 x=181 y=0 width=18 height=16 xoffset=-3 yoffset=3 xadvance=14 page=0 chnl=0
char id=36 x=199 y=0 width=12 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=63 x=211 y=0 width=11 height=16 xoffset=-3 yoffset=3 xadvance=7 page=0 chnl=0
char id=33 x=222 y=0 width=7 height=16 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0
char id=48 x=229 y=0 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=57 x=242 y=0 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=56 x=0 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=54 x=13 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=53 x=26 y=20 width=12 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=51 x=38 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=100 x=51 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=98 x=64 y=20 width=13 height=16 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=85 x=77 y=20 width=14 height=16 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0
char id=83 x=91 y=20 width=13 height=16 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0
char id=79 x=104 y=20 width=15 height=16 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0
char id=71 x=119 y=20 width=14 height=16 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0
char id=67 x=133 y=20 width=13 height=16 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=127 x=146 y=20 width=12 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=35 x=158 y=20 width=15 height=15 xoffset=-3 yoffset=3 xadvance=10 page=0 chnl=0
char id=92 x=173 y=20 width=11 height=15 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0
char id=47 x=184 y=20 width=11 height=15 xoffset=-3 yoffset=3 xadvance=6 page=0 chnl=0
char id=59 x=195 y=20 width=8 height=15 xoffset=-3 yoffset=6 xadvance=4 page=0 chnl=0
char id=55 x=203 y=20 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=52 x=216 y=20 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=50 x=230 y=20 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=49 x=243 y=20 width=9 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=116 x=0 y=36 width=10 height=15 xoffset=-3 yoffset=4 xadvance=5 page=0 chnl=0
char id=108 x=10 y=36 width=6 height=15 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0
char id=107 x=16 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0
char id=105 x=28 y=36 width=7 height=15 xoffset=-2 yoffset=3 xadvance=4 page=0 chnl=0
char id=104 x=35 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=102 x=47 y=36 width=11 height=15 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=90 x=58 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=89 x=71 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0
char id=88 x=84 y=36 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=87 x=98 y=36 width=19 height=15 xoffset=-3 yoffset=3 xadvance=15 page=0 chnl=0
char id=86 x=117 y=36 width=14 height=15 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=84 x=131 y=36 width=13 height=15 xoffset=-3 yoffset=3 xadvance=8 page=0 chnl=0
char id=82 x=144 y=36 width=13 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=80 x=157 y=36 width=12 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=78 x=169 y=36 width=14 height=15 xoffset=-2 yoffset=3 xadvance=12 page=0 chnl=0
char id=77 x=183 y=36 width=17 height=15 xoffset=-2 yoffset=3 xadvance=14 page=0 chnl=0
char id=76 x=200 y=36 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0
char id=75 x=211 y=36 width=13 height=15 xoffset=-2 yoffset=3 xadvance=9 page=0 chnl=0
char id=73 x=224 y=36 width=10 height=15 xoffset=-3 yoffset=3 xadvance=5 page=0 chnl=0
char id=72 x=234 y=36 width=14 height=15 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0
char id=70 x=0 y=51 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0
char id=69 x=11 y=51 width=11 height=15 xoffset=-2 yoffset=3 xadvance=8 page=0 chnl=0
char id=68 x=22 y=51 width=14 height=15 xoffset=-2 yoffset=3 xadvance=11 page=0 chnl=0
char id=66 x=36 y=51 width=13 height=15 xoffset=-2 yoffset=3 xadvance=10 page=0 chnl=0
char id=65 x=49 y=51 width=15 height=15 xoffset=-3 yoffset=3 xadvance=10 page=0 chnl=0
char id=58 x=64 y=51 width=7 height=13 xoffset=-2 yoffset=6 xadvance=4 page=0 chnl=0
char id=117 x=71 y=51 width=12 height=13 xoffset=-2 yoffset=6 xadvance=10 page=0 chnl=0
char id=115 x=83 y=51 width=11 height=13 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0
char id=111 x=94 y=51 width=13 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=101 x=107 y=51 width=13 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=99 x=120 y=51 width=12 height=13 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0
char id=97 x=132 y=51 width=12 height=13 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=60 x=144 y=51 width=13 height=12 xoffset=-3 yoffset=5 xadvance=9 page=0 chnl=0
char id=122 x=157 y=51 width=11 height=12 xoffset=-3 yoffset=6 xadvance=7 page=0 chnl=0
char id=120 x=168 y=51 width=13 height=12 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0
char id=119 x=181 y=51 width=17 height=12 xoffset=-3 yoffset=6 xadvance=12 page=0 chnl=0
char id=118 x=198 y=51 width=13 height=12 xoffset=-3 yoffset=6 xadvance=8 page=0 chnl=0
char id=114 x=211 y=51 width=10 height=12 xoffset=-2 yoffset=6 xadvance=6 page=0 chnl=0
char id=110 x=221 y=51 width=12 height=12 xoffset=-2 yoffset=6 xadvance=10 page=0 chnl=0
char id=109 x=233 y=51 width=17 height=12 xoffset=-2 yoffset=6 xadvance=15 page=0 chnl=0
char id=94 x=0 y=66 width=13 height=11 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=62 x=13 y=66 width=13 height=11 xoffset=-3 yoffset=5 xadvance=9 page=0 chnl=0
char id=42 x=26 y=66 width=13 height=10 xoffset=-3 yoffset=3 xadvance=9 page=0 chnl=0
char id=43 x=39 y=66 width=13 height=10 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=0
char id=61 x=52 y=66 width=13 height=8 xoffset=-3 yoffset=7 xadvance=9 page=0 chnl=0
char id=39 x=65 y=66 width=6 height=8 xoffset=-2 yoffset=3 xadvance=3 page=0 chnl=0
char id=34 x=71 y=66 width=9 height=8 xoffset=-2 yoffset=3 xadvance=6 page=0 chnl=0
char id=44 x=80 y=66 width=8 height=7 xoffset=-3 yoffset=14 xadvance=4 page=0 chnl=0
char id=126 x=88 y=66 width=13 height=6 xoffset=-3 yoffset=8 xadvance=9 page=0 chnl=0
char id=46 x=101 y=66 width=7 height=6 xoffset=-2 yoffset=13 xadvance=4 page=0 chnl=0
char id=96 x=108 y=66 width=8 height=6 xoffset=0 yoffset=2 xadvance=9 page=0 chnl=0
char id=45 x=116 y=66 width=9 height=5 xoffset=-3 yoffset=10 xadvance=5 page=0 chnl=0
char id=95 x=125 y=66 width=13 height=4 xoffset=-4 yoffset=17 xadvance=6 page=0 chnl=0
kernings count=-1

View file

@ -0,0 +1,201 @@
ui_stylesheet_atlas.png
size: 256,128
format: RGBA8888
filter: Linear,Linear
repeat: none
check-off
rotate: false
xy: 11, 5
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
textfield
rotate: false
xy: 11, 5
size: 14, 14
split: 3, 3, 3, 3
orig: 14, 14
offset: 0, 0
index: -1
check-on
rotate: false
xy: 125, 35
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
cursor
rotate: false
xy: 23, 1
size: 3, 3
split: 1, 1, 1, 1
orig: 3, 3
offset: 0, 0
index: -1
default
rotate: false
xy: 1, 50
size: 254, 77
orig: 254, 77
offset: 0, 0
index: -1
default-pane
rotate: false
xy: 11, 1
size: 5, 3
split: 1, 1, 1, 1
orig: 5, 3
offset: 0, 0
index: -1
default-rect-pad
rotate: false
xy: 11, 1
size: 5, 3
split: 1, 1, 1, 1
orig: 5, 3
offset: 0, 0
index: -1
default-pane-noborder
rotate: false
xy: 170, 44
size: 1, 1
split: 0, 0, 0, 0
orig: 1, 1
offset: 0, 0
index: -1
default-rect
rotate: false
xy: 38, 25
size: 3, 3
split: 1, 1, 1, 1
orig: 3, 3
offset: 0, 0
index: -1
default-rect-down
rotate: false
xy: 170, 46
size: 3, 3
split: 1, 1, 1, 1
orig: 3, 3
offset: 0, 0
index: -1
default-round
rotate: false
xy: 112, 29
size: 12, 20
split: 5, 5, 5, 4
pad: 4, 4, 1, 1
orig: 12, 20
offset: 0, 0
index: -1
default-round-down
rotate: false
xy: 99, 29
size: 12, 20
split: 5, 5, 5, 4
pad: 4, 4, 1, 1
orig: 12, 20
offset: 0, 0
index: -1
default-round-large
rotate: false
xy: 57, 29
size: 20, 20
split: 5, 5, 5, 4
orig: 20, 20
offset: 0, 0
index: -1
default-scroll
rotate: false
xy: 78, 29
size: 20, 20
split: 2, 2, 2, 2
orig: 20, 20
offset: 0, 0
index: -1
default-select
rotate: false
xy: 29, 29
size: 27, 20
split: 4, 14, 4, 4
orig: 27, 20
offset: 0, 0
index: -1
default-select-selection
rotate: false
xy: 26, 16
size: 3, 3
split: 1, 1, 1, 1
orig: 3, 3
offset: 0, 0
index: -1
default-slider
rotate: false
xy: 29, 20
size: 8, 8
split: 2, 2, 2, 2
orig: 8, 8
offset: 0, 0
index: -1
default-slider-knob
rotate: false
xy: 1, 1
size: 9, 18
orig: 9, 18
offset: 0, 0
index: -1
default-splitpane
rotate: false
xy: 17, 1
size: 5, 3
split: 0, 5, 0, 0
orig: 5, 3
offset: 0, 0
index: -1
default-splitpane-vertical
rotate: false
xy: 125, 29
size: 3, 5
split: 0, 0, 0, 5
orig: 3, 5
offset: 0, 0
index: -1
default-window
rotate: false
xy: 1, 20
size: 27, 29
split: 4, 3, 20, 3
orig: 27, 29
offset: 0, 0
index: -1
selection
rotate: false
xy: 174, 48
size: 1, 1
orig: 1, 1
offset: 0, 0
index: -1
tree-minus
rotate: false
xy: 140, 35
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
tree-plus
rotate: false
xy: 155, 35
size: 14, 14
orig: 14, 14
offset: 0, 0
index: -1
white
rotate: false
xy: 129, 31
size: 3, 3
orig: 3, 3
offset: 0, 0
index: -1

View file

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<Stylesheet TextureRegionAtlas="ui_stylesheet.atlas">
<Fonts>
<Font Id="ui_font" File="ui_font.fnt"/>
</Fonts>
<TextBlockStyles>
<TextBlockStyle Font="ui_font" TextColor="white" DisabledTextColor="gray" />
</TextBlockStyles>
<TextFieldStyles>
<TextFieldStyle Background="textfield" TextColor="white" DisabledTextColor="gray" Font="ui_font" Cursor="cursor" Selection="selection" />
</TextFieldStyles>
<ScrollPaneStyles>
<ScrollPaneStyle Background="default-rect" HorizontalScrollBackground="default-scroll" HorizontalScrollKnob="default-round-large" VerticalScrollBackground="default-scroll" VerticalScrollKnob="default-round-large" />
</ScrollPaneStyles>
<ButtonStyles>
<ButtonStyle Background="default-round" Padding="5, 0" PressedBackground="default-round-down">
<TextBlockStyle Font="ui_font" TextColor="white" DisabledTextColor="gray" />
</ButtonStyle>
</ButtonStyles>
<CheckBoxStyles>
<CheckBoxStyle>
<LabelStyle Font="ui_font" TextColor="white" />
<ImageStyle Image="check-off" PressedImage="check-on" />
</CheckBoxStyle>
</CheckBoxStyles>
<SpinButtonStyles>
<SpinButtonStyle Background="textfield">
<TextFieldStyle TextColor="white" DisabledTextColor="gray" Font="ui_font" Cursor="cursor" Selection="selection" />
<UpButtonStyle Background="default-round" PressedBackground="default-round-down">
<ImageStyle Image="tree-plus" />
</UpButtonStyle>
<DownButtonStyle Background="default-round" PressedBackground="default-round-down">
<ImageStyle Image="tree-minus" />
</DownButtonStyle>
</SpinButtonStyle>
</SpinButtonStyles>
<HorizontalSliderStyles>
<HorizontalSliderStyle Background="default-slider">
<KnobStyle>
<ImageStyle Image="default-slider-knob" />
</KnobStyle>
</HorizontalSliderStyle>
</HorizontalSliderStyles>
<VerticalSliderStyles>
<VerticalSliderStyle Background="default-slider">
<KnobStyle>
<ImageStyle Image="default-slider-knob" />
</KnobStyle>
</VerticalSliderStyle>
</VerticalSliderStyles>
<HorizontalProgressBarStyles>
<HorizontalProgressBarStyle Background="default-round" Filler="default-round-down" />
</HorizontalProgressBarStyles>
<VerticalProgressBarStyles>
<VerticalProgressBarStyle Background="default-round" Filler="default-round-down" />
</VerticalProgressBarStyles>
<ComboBoxStyles>
<ComboBoxStyle Background="default-select">
<LabelStyle Font="ui_font" TextColor="white" />
<ListBoxStyle Background="default-rect">
<ListItemStyle PressedBackground="default-select-selection">
<LabelStyle Font="ui_font" TextColor="white" />
</ListItemStyle>
</ListBoxStyle>
</ComboBoxStyle>
</ComboBoxStyles>
<ListBoxStyles>
<ListBoxStyle Background="default-rect">
<ListItemStyle Padding="5, 0" PressedBackground="default-select-selection">
<LabelStyle Font="ui_font" TextColor="white" DisabledTextColor="gray" />
</ListItemStyle>
</ListBoxStyle>
</ListBoxStyles>
<TreeStyles>
<TreeStyle>
<MarkStyle>
<ImageStyle Image="tree-plus" PressedImage="tree-minus" />
</MarkStyle>
<LabelStyle Font="ui_font" TextColor="white" DisabledTextColor="gray" />
</TreeStyle>
</TreeStyles>
<HorizontalSplitPaneStyles>
<HorizontalSplitPaneStyle>
<HandleStyle Background="default-splitpane" />
</HorizontalSplitPaneStyle>
</HorizontalSplitPaneStyles>
<VerticalSplitPaneStyles>
<VerticalSplitPaneStyle>
<HandleStyle Background="default-splitpane-vertical" />
</VerticalSplitPaneStyle>
</VerticalSplitPaneStyles>
<HorizontalMenuStyles>
<HorizontalMenuStyle Background="default-round" SelectionBackground="default-round-down">
<LabelStyle Padding="5, 0, 5, 2" Font="ui_font" TextColor="white" DisabledTextColor="gray" />
<SeparatorStyle Image="default-round" Thickness="3" />
</HorizontalMenuStyle>
</HorizontalMenuStyles>
<VerticalMenuStyles>
<VerticalMenuStyle Background="default-round" SelectionBackground="default-round-down">
<LabelStyle Padding="5, 2" Font="ui_font" TextColor="white" DisabledTextColor="gray" />
<SeparatorStyle Padding="0, 0, 2, 2" Image="default-round" Thickness="4" />
</VerticalMenuStyle>
</VerticalMenuStyles>
<WindowStyles>
<WindowStyle Background="default-window" Padding="2, 0">
<TitleStyle Padding="5, 0" Font="ui_font" TextColor="white" />
<CloseButtonStyle>
<ImageStyle Image="default-round" PressedImage="default-round-down" />
</CloseButtonStyle>
</WindowStyle>
</WindowStyles>
</Stylesheet>

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,38 +1,2 @@
# Map
to start the container run:
```
docker run --name=<name> -p:5000:80 -v /home/michele/sledgemapper/:/app/db -d privateregistry.michelescandura.com/michele/sledgemapper:<version>
```
Curl
Register user
```
curl -i -X POST -H "Content-Type: application/json" http://localhost:5000/users/register -d '{\"FirstName\":\"Michele\",\"LastName\":\"Scandura\", \"Username\":\"michele.scandura@outlook.com\", \"Password\":\"password1\", \"Initials\":\"MS\"}'
```
Login
```
curl -i -X POST -H "Content-Type: application/json" http://localhost:5000/users/authenticate -d '{\"Username\":\"michele.scandura@outlook.com\", \"Password\":\"password1\"}'
```
New Campaign
```
curl -i -X POST -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE2MTM3MjgzMjksImV4cCI6MTYxNDMzMzEyOCwiaWF0IjoxNjEzNzI4MzI5fQ.VEsDbYUTnnvpgWnB5buE88JyGx_cg3TJb5ybC3eLvmc" http://localhost:5000/campaign/highfell -d '""'
```
Get Campaigns
```
curl -i -X GET -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE2MTM3MjgzMjksImV4cCI6MTYxNDMzMzEyOCwiaWF0IjoxNjEzNzI4MzI5fQ.VEsDbYUTnnvpgWnB5buE88JyGx_cg3TJb5ybC3eLvmc" http://localhost:5000/campaign -d '""'
```
```
curl -i -X POST -H "Content-Type: application/json" http://localhost:5000/AuthManagement/register -d '{\"FirstName\":\"Michele\",\"LastName\":\"Scandura\", \"UserName\":\"michele\", \"Password\":\"Password1!\", \"Initials\":\"MS\", \"Email\":\"michele.scandura@outlook.com\"}'
```
```
curl -i -X POST -H "Content-Type: application/json" http://localhost:5000/AuthManagement/login -d '{ \"Password\":\"Password1!\", \"Email\":\"michele.scandura@outlook.com\"}'
```

View file

@ -7,31 +7,13 @@ namespace Sledgemapper.Api.Commands
{
public double Timestamp { get; private set; }
public string SessionName { get; private set; }
public Guid SessionId { get; private set; }
public Guid Campaign { get; private set; }
public string UserId { get; private set; }
public int UserId { get; private set; }
public BaseCommand(string sessionName, string userId)
public BaseCommand(string sessionName, int userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
SessionName = sessionName;
UserId = userId;
}
public BaseCommand(string campaign, string sessionName, string userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
SessionName = sessionName;
Campaign = new Guid(campaign);
UserId = userId;
}
public BaseCommand(Guid campaign, Guid sessionId, string userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
SessionId = sessionId;
Campaign = campaign;
UserId = userId;
}
}
}

View file

@ -1,4 +1,3 @@
using System;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Commands
@ -7,7 +6,7 @@ namespace Sledgemapper.Api.Commands
{
public Note Note { get; private set; }
public DeleteNoteCommand(Guid campaign, Guid mapName, Note note, string userId) : base(campaign, mapName, userId)
public DeleteNoteCommand(string sessionName, Note note, int userId) : base(sessionName, userId)
{
Note = note;
}

View file

@ -1,13 +1,12 @@
using System;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Commands
{
public class DeleteOverlayCommand : BaseCommand<bool>
public class DeleteOverlayCommand : BaseCommand<bool>
{
public Overlay Overlay { get; private set; }
public DeleteOverlayCommand(Guid campaign, Guid mapName, Overlay overlay, string userId) : base(campaign, mapName, userId)
public DeleteOverlayCommand(string sessionName, Overlay overlay, int userId) : base(sessionName, userId)
{
Overlay = overlay;
}

View file

@ -1,4 +1,3 @@
using System;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Commands
@ -7,7 +6,7 @@ namespace Sledgemapper.Api.Commands
{
public Tile Tile { get; private set; }
public DeleteTileCommand(Guid campaign, Guid mapName, Tile tile, string userId) : base(campaign, mapName, userId)
public DeleteTileCommand(string sessionName, Tile tile, int userId) : base(sessionName, userId)
{
Tile = tile;
}

View file

@ -1,4 +1,3 @@
using System;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Commands
@ -7,7 +6,7 @@ namespace Sledgemapper.Api.Commands
{
public Wall Wall { get; private set; }
public DeleteWallCommand(Guid campaign, Guid mapName, Wall wall, string userId) : base(campaign, mapName, userId)
public DeleteWallCommand(string sessionName, Wall wall, int userId) : base(sessionName, userId)
{
Wall = wall;
}

View file

@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using MediatR;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Commands
{
public class GetCampaignMapsCommand : IRequest<List<Session>>
{
public double Timestamp { get; private set; }
public Guid CampaignId { get; private set; }
public string UserId { get; private set; }
public GetCampaignMapsCommand(Guid campaignId, string userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
CampaignId = campaignId;
UserId = userId;
}
}
}

View file

@ -1,29 +0,0 @@
using System;
using System.Collections.Generic;
using MediatR;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Commands
{
public class GetCampaignPlayersCommand : IRequest<List<Player>>
{
public double Timestamp { get; private set; }
public string CampaignName { get; private set; }
public string UserId { get; private set; }
public Guid CampaignId { get; private set; }
public GetCampaignPlayersCommand(string campaingName, string userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
CampaignName = campaingName;
UserId = userId;
}
public GetCampaignPlayersCommand(Guid campaignId, string userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
CampaignId = campaignId;
UserId = userId;
}
}
}

View file

@ -1,16 +0,0 @@
using System.Collections.Generic;
using MediatR;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Commands
{
public class GetCampaignsCommand : IRequest<List<Campaign>>
{
public string UserId { get; private set; }
public GetCampaignsCommand(string userId)
{
UserId = userId;
}
}
}

View file

@ -1,18 +1,14 @@
using MediatR;
using Sledgemapper.Shared.Entities;
using System;
namespace Sledgemapper.Api.Commands
{
public class GetMapSnapshotCommand : IRequest<Session>
{
public Guid MapId { get; private set; }
public Guid CampaignId { get; private set;
}
public GetMapSnapshotCommand(Guid campaignId, Guid mapId)
public string SessionName { get; private set; }
public GetMapSnapshotCommand(string sessionName)
{
MapId = mapId;
CampaignId = campaignId;
SessionName = sessionName;
}
}
}

View file

@ -1,21 +0,0 @@
using System;
using MediatR;
namespace Sledgemapper.Api.Commands
{
public class InvitePlayerToCampaignCommand : IRequest<bool>
{
public double Timestamp { get; private set; }
public Guid CampaignId { get; private set; }
public string Email { get; private set; }
public string UserId { get; private set; }
public InvitePlayerToCampaignCommand(Guid campaignId, string email, string userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
CampaignId = campaignId;
UserId = userId;
Email = email;
}
}
}

View file

@ -1,19 +0,0 @@
using System;
using MediatR;
namespace Sledgemapper.Api.Commands
{
public class NewCampaignCommand : IRequest<bool>
{
public double Timestamp { get; private set; }
public string CampaignName { get; private set; }
public string UserId { get; private set; }
public NewCampaignCommand(string campaingName, string userId)
{
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
CampaignName = campaingName;
UserId = userId;
}
}
}

View file

@ -1,5 +1,4 @@
using Sledgemapper.Shared.Entities;
using System;
namespace Sledgemapper.Api.Commands
{
@ -7,7 +6,7 @@ namespace Sledgemapper.Api.Commands
{
public Line Line { get; private set; }
public NewLineCommand(Guid campaign, Guid mapName, Line line, string userId) : base(campaign, mapName, userId)
public NewLineCommand(string sessionName, Line line, int userId) : base(sessionName, userId)
{
Line = line;
}

View file

@ -1,5 +1,4 @@
using Sledgemapper.Shared.Entities;
using System;
namespace Sledgemapper.Api.Commands
{
@ -7,7 +6,7 @@ namespace Sledgemapper.Api.Commands
{
public Note Note { get; private set; }
public NewNoteCommand(Guid campaignId, Guid mapId, Note note, string userId) : base(campaignId, mapId, userId)
public NewNoteCommand(string sessionName, Note note, int userId) : base(sessionName, userId)
{
Note = note;
}

View file

@ -1,5 +1,4 @@
using Sledgemapper.Shared.Entities;
using System;
namespace Sledgemapper.Api.Commands
{
@ -7,7 +6,7 @@ namespace Sledgemapper.Api.Commands
{
public Overlay Overlay { get; private set; }
public NewOverlayCommand(Guid campaignId, Guid mapId, Overlay overlay, string userId) : base(campaignId, mapId, userId)
public NewOverlayCommand(string sessionName, Overlay overlay, int userId) : base(sessionName, userId)
{
Overlay = overlay;
}

View file

@ -1,5 +1,4 @@
using Sledgemapper.Shared.Entities;
using System;
namespace Sledgemapper.Api.Commands
{
@ -7,7 +6,7 @@ namespace Sledgemapper.Api.Commands
{
public Room Room { get; private set; }
public NewRoomCommand(Guid campaignId, Guid mapId, Room room, string userId) : base(campaignId, mapId, userId)
public NewRoomCommand(string sessionName, Room room, int userId) : base(sessionName, userId)
{
Room = room;
}

View file

@ -1,12 +1,9 @@
using System;
namespace Sledgemapper.Api.Commands
{
public class NewSessionCommand : BaseCommand<Guid>
public class NewSessionCommand : BaseCommand<bool>
{
public NewSessionCommand(string campaign, string sessionName, string userId) : base(campaign, sessionName, userId)
public NewSessionCommand(string sessionName, int userId):base(sessionName, userId)
{
}
}
}

View file

@ -5,7 +5,7 @@ namespace Sledgemapper.Api.Commands
public class NewSnapshotCommand : BaseCommand<bool>
{
public Session Session { get; private set; }
public NewSnapshotCommand(string sessionName, Session session, string userId) : base(sessionName, userId)
public NewSnapshotCommand(string sessionName, Session session, int userId) : base(sessionName, userId)
{
Session = session;
}

View file

@ -5,7 +5,7 @@ namespace Sledgemapper.Api.Commands
public class NewTileCommand : BaseCommand<bool>
{
public Tile Tile { get; private set; }
public NewTileCommand(string sessionName, Tile tile, string userId) : base(sessionName, userId)
public NewTileCommand(string sessionName, Tile tile, int userId) : base(sessionName, userId)
{
Tile = tile;
}

View file

@ -1,5 +1,4 @@
using Sledgemapper.Shared.Entities;
using System;
namespace Sledgemapper.Api.Commands
{
@ -7,7 +6,7 @@ namespace Sledgemapper.Api.Commands
{
public Wall Wall { get; private set; }
public NewWallCommand(Guid campaignId, Guid mapId, Wall wall, string userId) : base(campaignId, mapId, userId)
public NewWallCommand(string sessionName, Wall wall, int userId) : base(sessionName, userId)
{
Wall = wall;
}

View file

@ -1,13 +0,0 @@
// using Sledgemapper.Shared.Entities;
// namespace Sledgemapper.Api.Commands
// {
// public class PingCommand : BaseCommand<bool>
// {
// public Ping Location { get; private set; }
// public PingCommand(string sessionName, Ping location, int userId) : base(sessionName, userId)
// {
// Location = location;
// }
// }
// }

View file

@ -1,185 +0,0 @@
using AutoMapper;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using Sledgemapper.Api.Core.Entities;
using Sledgemapper.Api.Models;
namespace Sledgemapper.Api.Controllers
{
[Route("[controller]")] // api/authmanagement
[ApiController]
public class AuthManagementController : ControllerBase
{
private readonly UserManager<User> _userManager;
private readonly JwtConfig _jwtConfig;
private readonly IMapper _mapper;
public AuthManagementController(UserManager<User> userManager,
IOptionsMonitor<JwtConfig> optionsMonitor,
IMapper mapper)
{
_userManager = userManager;
_jwtConfig = optionsMonitor.CurrentValue;
_mapper = mapper;
}
[HttpPost]
[Route("Register")]
public async Task<IActionResult> Register([FromBody] RegisterModel user)
{
// Check if the incoming request is valid
if (ModelState.IsValid)
{
// check i the user with the same email exist
var existingUser = await _userManager.FindByEmailAsync(user.Email);
if (existingUser != null)
{
return BadRequest(new RegistrationResponse()
{
Result = false,
Errors = new List<string>(){
"Email already exist"
}
});
}
var newUser = _mapper.Map<User>(user);
// var newUser = new User() { Email = user.Email, UserName = user.UserName };
var isCreated = await _userManager.CreateAsync(newUser, user.Password);
if (isCreated.Succeeded)
{
var jwtToken = GenerateJwtToken(newUser);
return Ok(new RegistrationResponse()
{
Result = true,
Token = jwtToken
});
}
return new JsonResult(new RegistrationResponse()
{
Result = false,
Errors = isCreated.Errors.Select(x => x.Description).ToList()
}
)
{ StatusCode = 500 };
}
return BadRequest(new RegistrationResponse()
{
Result = false,
Errors = new List<string>(){
"Invalid payload"
}
});
}
[HttpPost]
[Route("Login")]
public async Task<IActionResult> Login([FromBody] UserLoginRequest user)
{
if (ModelState.IsValid)
{
// check if the user with the same email exist
var existingUser = await _userManager.FindByEmailAsync(user.Email);
if (existingUser == null)
{
// We dont want to give to much information on why the request has failed for security reasons
return BadRequest(new RegistrationResponse()
{
Result = false,
Errors = new List<string>(){
"Invalid authentication request"
}
});
}
// Now we need to check if the user has inputed the right password
var isCorrect = await _userManager.CheckPasswordAsync(existingUser, user.Password);
if (isCorrect)
{
var jwtToken = GenerateJwtToken(existingUser);
return Ok(new LoginResponse()
{
Result = true,
Token = jwtToken,
Username = existingUser.Email,
Initials = existingUser.Initials,
Id = existingUser.Id
});
}
else
{
// We dont want to give to much information on why the request has failed for security reasons
return BadRequest(new RegistrationResponse()
{
Result = false,
Errors = new List<string>(){
"Invalid authentication request"
}
});
}
}
return BadRequest(new RegistrationResponse()
{
Result = false,
Errors = new List<string>(){
"Invalid payload"
}
});
}
private string GenerateJwtToken(User user)
{
// Now its ime to define the jwt token which will be responsible of creating our tokens
var jwtTokenHandler = new JwtSecurityTokenHandler();
// We get our secret from the appsettings
var key = Encoding.ASCII.GetBytes(_jwtConfig.Secret);
// we define our token descriptor
// We need to utilise claims which are properties in our token which gives information about the token
// which belong to the specific user who it belongs to
// so it could contain their id, name, email the good part is that these information
// are generated by our server and identity framework which is valid and trusted
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[]
{
new Claim("Id", user.Id),
new Claim(JwtRegisteredClaimNames.Sub, user.Email),
new Claim(JwtRegisteredClaimNames.Email, user.Email),
// the JTI is used for our refresh token which we will be convering in the next video
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
}),
// the life span of the token needs to be shorter and utilise refresh token to keep the user signedin
// but since this is a demo app we can extend it to fit our current need
Expires = DateTime.UtcNow.AddHours(6),
// here we are adding the encryption alogorithim information which will be used to decrypt our token
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha512Signature)
};
var token = jwtTokenHandler.CreateToken(tokenDescriptor);
var jwtToken = jwtTokenHandler.WriteToken(token);
return jwtToken;
}
}
}

View file

@ -1,76 +0,0 @@
using MediatR;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Sledgemapper.Api.Commands;
using Sledgemapper.Shared.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Route("[controller]")]
public class CampaignController : ControllerBase
{
private readonly IMediator _mediator;
private string UserId => HttpContext.User.Claims.FirstOrDefault(m => m.Type == "Id").Value;
public CampaignController(IMediator mediator) => _mediator = mediator;
[HttpPost]
[Route("{campaignName}")]
public async Task<ActionResult<bool>> Post(string campaignName)
{
var result = await _mediator.Send(new NewCampaignCommand(campaignName, UserId));
if (!result)
{
return BadRequest();
}
return result;
}
//[HttpPost]
//[Route("{campaignName}")]
//public async Task<Guid> Get(string campaignName)
//{
// var result = await _mediator.Send(new GetCampaignCommand(campaignName, UserId.ToString()));
// return result;
//}
[HttpGet]
public async Task<List<Campaign>> Get()
{
var result = await _mediator.Send(new GetCampaignsCommand(UserId));
return result;
}
[HttpPost]
[Route("{campaignId}/players/{email}")]
public async Task<bool> Invite(Guid campaignId, string email)
{
var result = await _mediator.Send(new InvitePlayerToCampaignCommand(campaignId, email, UserId));
return result;
}
[HttpGet]
[Route("{campaignName}/players")]
public async Task<List<Player>> GetPlayers(Guid campaignName)
{
var result = await _mediator.Send(new GetCampaignPlayersCommand(campaignName, UserId));
return result;
}
[HttpGet]
[Route("{campaignName}/maps")]
public async Task<List<Session>> GetMaps(Guid campaignName)
{
var result = await _mediator.Send(new GetCampaignMapsCommand(campaignName, UserId));
return result;
}
}
}

View file

@ -1,100 +0,0 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Sledgemapper.Api.Commands;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Controllers
{
[Authorize]
[Route("[controller]/{campaign}/{mapName}")]
public class MapController : ControllerBase
{
private readonly IMediator _mediator;
public MapController(IMediator mediator)
{
_mediator = mediator;
}
private string UserId => HttpContext.User.Claims.FirstOrDefault(m => m.Type == "Id").Value;
[HttpDelete("overlay")]
public async Task Delete(Guid campaign, Guid mapName, [FromBody] Overlay overlay)
{
await _mediator.Send(new DeleteOverlayCommand(campaign, mapName, overlay, UserId));
}
[HttpDelete("wall")]
public async Task Delete(Guid campaign, Guid mapName, [FromBody] Wall wall)
{
await _mediator.Send(new DeleteWallCommand(campaign, mapName, wall, UserId));
}
[HttpDelete("note")]
public async Task Delete(Guid campaign, Guid mapName, [FromBody] Note note)
{
await _mediator.Send(new DeleteNoteCommand(campaign, mapName, note, UserId));
}
[HttpDelete("tile")]
public async Task Delete(Guid campaign, Guid mapName, [FromBody] Tile tile)
{
await _mediator.Send(new DeleteTileCommand(campaign, mapName, tile, UserId));
}
[HttpGet]
public async Task<Session> Get(Guid campaign, Guid mapName)
{
var result = await _mediator.Send(new GetMapSnapshotCommand(campaign, mapName));
return result;
}
[HttpPost]
public async Task<Guid> Post(string campaign, string mapName)
{
var result = await _mediator.Send(new NewSessionCommand(campaign, mapName, UserId));
return result;
}
[HttpPost("snapshot")]
public async Task Post(string campaign, string mapName, [FromBody] Session session)
{
await _mediator.Send(new NewSnapshotCommand(mapName, session, UserId));
}
[HttpPost("overlay")]
public async Task Post(Guid campaign, Guid mapName, [FromBody] Overlay overlay)
{
await _mediator.Send(new NewOverlayCommand(campaign, mapName, overlay, UserId));
}
[HttpPost("wall")]
public async Task Post(Guid campaign, Guid mapName, [FromBody] Wall wall)
{
await _mediator.Send(new NewWallCommand(campaign, mapName, wall, UserId));
}
[HttpPost("note")]
public async Task Post(Guid campaign, Guid mapName, [FromBody] Note note)
{
await _mediator.Send(new NewNoteCommand(campaign, mapName, note, UserId));
}
[HttpPost("room")]
public async Task Post(Guid campaign, Guid mapName, [FromBody] Room room)
{
await _mediator.Send(new NewRoomCommand(campaign, mapName, room, UserId));
}
[HttpPost("line")]
public async Task Post(Guid campaign, Guid mapName, [FromBody] Line line)
{
await _mediator.Send(new NewLineCommand(campaign, mapName, line, UserId));
}
}
}

View file

@ -0,0 +1,99 @@
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Sledgemapper.Api.Commands;
using Sledgemapper.Shared.Entities;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Controllers
{
[Authorize]
[Route("[controller]/{sessionName}")]
public class SessionController : ControllerBase
{
private readonly IMediator _mediator;
private int UserId => int.Parse(HttpContext.User.Identity.Name);
public SessionController(IMediator mediator) => _mediator = mediator;
[HttpPost]
public async Task<bool> Post(string sessionName)
{
var result = await _mediator.Send(new NewSessionCommand(sessionName, UserId));
return result;
}
[HttpGet]
public async Task<Session> Get(string sessionName)
{
var result = await _mediator.Send(new GetMapSnapshotCommand(sessionName));
return result;
}
[HttpPost("snapshot")]
public async Task Post(string sessionName, [FromBody] Session session)
{
await _mediator.Send(new NewSnapshotCommand(sessionName, session, UserId));
}
[HttpPost("tile")]
public async Task Post(string sessionName, [FromBody] Tile tile)
{
await _mediator.Send(new NewTileCommand(sessionName, tile, UserId));
}
[HttpPost("overlay")]
public async Task Post(string sessionName, [FromBody] Overlay overlay)
{
await _mediator.Send(new NewOverlayCommand(sessionName, overlay, UserId));
}
[HttpPost("wall")]
public async Task Post(string sessionName, [FromBody] Wall wall)
{
await _mediator.Send(new NewWallCommand(sessionName, wall, UserId));
}
[HttpPost("note")]
public async Task Post(string sessionName, [FromBody] Note note)
{
await _mediator.Send(new NewNoteCommand(sessionName, note, UserId));
}
[HttpPost("room")]
public async Task Post(string sessionName, [FromBody] Room room)
{
await _mediator.Send(new NewRoomCommand(sessionName, room, UserId));
}
[HttpPost("line")]
public async Task Post(string sessionName, [FromBody] Line line)
{
await _mediator.Send(new NewLineCommand(sessionName, line, UserId));
}
[HttpDelete("tile")]
public async Task Delete(string sessionName, [FromBody] Tile tile)
{
await _mediator.Send(new DeleteTileCommand(sessionName, tile, UserId));
}
[HttpDelete("overlay")]
public async Task Delete(string sessionName, [FromBody] Overlay overlay)
{
await _mediator.Send(new DeleteOverlayCommand(sessionName, overlay, UserId));
}
[HttpDelete("wall")]
public async Task Delete(string sessionName, [FromBody] Wall wall)
{
await _mediator.Send(new DeleteWallCommand(sessionName, wall, UserId));
}
[HttpDelete("note")]
public async Task Delete(string sessionName, [FromBody] Note note)
{
await _mediator.Send(new DeleteNoteCommand(sessionName, note, UserId));
}
}
}

View file

@ -0,0 +1,136 @@
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using AutoMapper;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.Extensions.Options;
using System.Text;
using Microsoft.IdentityModel.Tokens;
using System.Security.Claims;
using Microsoft.AspNetCore.Authorization;
using Sledgemapper.Services;
using Sledgemapper.Entities;
using Sledgemapper.Models.Users;
using Sledgemapper.Helpers;
namespace Sledgemapper.Controllers
{
[Authorize]
[ApiController]
[Route("[controller]")]
public class UsersController : ControllerBase
{
private IUserService _userService;
private IMapper _mapper;
private readonly AppSettings _appSettings;
public UsersController(
IUserService userService,
IMapper mapper,
IOptions<AppSettings> appSettings)
{
_userService = userService;
_mapper = mapper;
_appSettings = appSettings.Value;
}
[AllowAnonymous]
[HttpPost("authenticate")]
public IActionResult Authenticate([FromBody]AuthenticateModel model)
{
var user = _userService.Authenticate(model.Username, model.Password);
if (user == null)
return BadRequest(new { message = "Username or password is incorrect" });
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_appSettings.Secret);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, user.Id.ToString())
}),
Expires = DateTime.UtcNow.AddDays(7),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
// return basic user info and authentication token
return Ok(new
{
Id = user.Id,
Username = user.Username,
FirstName = user.FirstName,
LastName = user.LastName,
Initials = user.Initials,
Token = tokenString
});
}
[AllowAnonymous]
[HttpPost("register")]
public IActionResult Register([FromBody]RegisterModel model)
{
// map model to entity
var user = _mapper.Map<User>(model);
try
{
// create user
_userService.Create(user, model.Password);
return Ok();
}
catch (AppException ex)
{
// return error message if there was an exception
return BadRequest(new { message = ex.Message });
}
}
[HttpGet]
public IActionResult GetAll()
{
var users = _userService.GetAll();
var model = _mapper.Map<IList<UserModel>>(users);
return Ok(model);
}
[HttpGet("{id}")]
public IActionResult GetById(int id)
{
var user = _userService.GetById(id);
var model = _mapper.Map<UserModel>(user);
return Ok(model);
}
[HttpPut("{id}")]
public IActionResult Update(int id, [FromBody]UpdateModel model)
{
// map model to entity and set id
var user = _mapper.Map<User>(model);
user.Id = id;
try
{
// update user
_userService.Update(user, model.Password);
return Ok();
}
catch (AppException ex)
{
// return error message if there was an exception
return BadRequest(new { message = ex.Message });
}
}
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
_userService.Delete(id);
return Ok();
}
}
}

View file

@ -1,7 +0,0 @@
using System.ComponentModel.DataAnnotations;
public abstract class BaseEntity
{
[Key]
public int Id { get; set; }
}

View file

@ -1,25 +0,0 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
using Sledgemapper.Api.Models;
namespace Sledgemapper.Api.Core.Entities
{
[Index(nameof(CampaignName), nameof(OwnerId), IsUnique = true)]
public class Campaign
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CampaignId { get; set; }
public string CampaignName { get; set; }
public string OwnerId { get; set; }
public User Owner { get; set; }
public ICollection<User> InvitedUsers { get; set; }
public ICollection<Session> Maps { get; set; }
}
}

View file

@ -1,17 +0,0 @@
using System.ComponentModel.DataAnnotations;
namespace Sledgemapper.Api.Core.Entities
{
public class Map
{
[Key]
public int MapId { get; set; }
[Required]
public string MapName { get; set; }
[Required]
public int CampaignId { get; set; }
}
}

View file

@ -1,24 +0,0 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Sledgemapper.Api.Core.Entities
{
[Index(nameof(CampaignId), nameof(SessionName), IsUnique = true)]
public class Session
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid SessionId { get; set; }
[Required]
public Guid CampaignId { get; set; }
[Required]
public string SessionName { get; set; }
[Required]
public string OwnerUserId { get; set; }
}
}

View file

@ -1,18 +0,0 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Identity;
namespace Sledgemapper.Api.Core.Entities
{
public class User : IdentityUser
{
// public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
// public string Email { get; set; }
// public string Username { get; set; }
public string Initials { get; set; }
// public byte[] PasswordHash { get; set; }
public byte[] PasswordSalt { get; set; }
public ICollection<Campaign> Campaigns { get; set; }
}
}

View file

@ -0,0 +1,81 @@
using Microsoft.EntityFrameworkCore;
using Sledgemapper.Api.Models;
namespace Sledgemapper.Api.Data
{
public static class DbInitializer
{
public static void Initialize(MyDbContext context)
{
context.Database.EnsureCreated();
}
}
public class MyDbContext : DbContext
{
public DbSet<MapLog> MapLogs { get; set; }
public DbSet<Session> Sessions { get; set; }
public DbSet<UserConnection> UserConnections { get; set; }
public DbSet<SessionUser> SessionUsers { get; set; }
public DbSet<Snapshot> Snapshots { get; set; }
public MyDbContext(DbContextOptions options) : base(options)
{
}
// protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
// {
// // optionsBuilder.
// // options.MigrationsAssembly(Assembly.GetExecutingAssembly().FullName);
// // optionsBuilder.UseSqlite("Filename=SledgemapperDatabase.db", options =>
// // {
// // options.MigrationsAssembly(Assembly.GetExecutingAssembly().FullName);
// // });
// optionsBuilder.UseSqlite("Filename=MyDatabase.db").UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
// base.OnConfiguring(optionsBuilder);
// }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Map table names
modelBuilder.Entity<MapLog>().ToTable("MapLog", "dbo");
modelBuilder.Entity<MapLog>(entity =>
{
entity.HasKey(e => e.MapLogId);
});
modelBuilder.Entity<Session>().ToTable("Session", "dbo");
modelBuilder.Entity<Session>(entity =>
{
entity.HasKey(e => e.SessionId);
entity.HasIndex(e => e.SessionName).IsUnique();
});
modelBuilder.Entity<UserConnection>().ToTable("UserConnection", "dbo");
modelBuilder.Entity<UserConnection>(entity =>
{
entity.HasKey(e => e.UserConnectionId);
entity.HasIndex(e => e.UserId);
});
modelBuilder.Entity<SessionUser>().ToTable("SessionUser", "dbo");
modelBuilder.Entity<SessionUser>(entity =>
{
entity.HasKey(e => e.SessionUserId);
entity.HasIndex(e => e.SessionId);
});
modelBuilder.Entity<Snapshot>().ToTable("Snapshot", "dbo");
modelBuilder.Entity<Snapshot>(entity =>
{
entity.HasKey(e => e.SnapshotId);
});
base.OnModelCreating(modelBuilder);
}
}
}

View file

@ -0,0 +1,13 @@
namespace Sledgemapper.Entities
{
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public string Initials { get; set; }
public byte[] PasswordHash { get; set; }
public byte[] PasswordSalt { get; set; }
}
}

View file

@ -1,76 +0,0 @@
using MediatR;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System;
using Microsoft.EntityFrameworkCore;
using Sledgemapper.Api.Models;
using Sledgemapper.Api.Core.Entities;
namespace Sledgemapper.Api.Handlers
{
public abstract class BaseCommandHandler<TRequest, TResponse> : IRequestHandler<TRequest, TResponse> where TRequest : BaseCommand<TResponse>
{
protected SledgemapperDbContext DbContext { get; }
protected IMediator Mediator { get; }
public abstract Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken);
protected BaseCommandHandler(IMediator mediator, SledgemapperDbContext dbContext)
{
DbContext = dbContext;
Mediator = mediator;
}
protected async Task CheckAuthorization(TRequest command)
{
var user = await DbContext.Users.FindAsync(command.UserId);
DbContext.Attach(user);
var campaign = await GetCampaignForUser(command);
var maps = campaign.Maps.Any(s => s.SessionId == command.SessionId);
if (!maps)
{
throw new Exception("Unauthorized");
}
}
protected async Task<Campaign> GetCampaignForUser(TRequest command)
{
var user = await DbContext.Users.FindAsync(command.UserId);
DbContext.Attach(user);
var campaign = await DbContext
.Campaigns
.Where(campaign => campaign.CampaignId == command.Campaign)
.Include(c => c.InvitedUsers)
.Include(c => c.Maps)
.Include(c => c.Owner)
.Where(campaign => campaign.OwnerId == command.UserId || campaign.InvitedUsers.Contains(user)).FirstAsync();
return campaign;
}
protected async Task<Session> SaveLog(TRequest command, string operation, string type, string data, CancellationToken cancellationToken)
{
var session = DbContext.Sessions.First(m => m.SessionId == command.SessionId);
DbContext.MapLogs.Add(new MapLog
{
Operation = operation,
SessionId = session.SessionId,
Type = type,
Timestamp = command.Timestamp,
Object = data,
UserId = command.UserId,
});
await DbContext.SaveChangesAsync(cancellationToken);
return session;
}
}
}

View file

@ -1,25 +1,42 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Shared.Entities;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class DeleteNoteCommandHandler : BaseCommandHandler<DeleteNoteCommand, bool>
{
public DeleteNoteCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) : base(mediator, dbcontext)
{
}
public override async Task<bool> Handle(DeleteNoteCommand command, CancellationToken cancellationToken)
public class DeleteNoteCommandHandler : IRequestHandler<DeleteNoteCommand, bool>
{
private readonly MyDbContext _dbcontext;
private readonly IMediator _mediator;
public DeleteNoteCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(DeleteNoteCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Note);
var session = await SaveLog(command, "D", "N", jsonString, cancellationToken);
await Mediator.Publish(new DeleteNoteNotification(session, command.Note, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Note>(notification.Note);
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "D",
SessionId = session.SessionId,
Type = "N",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new DeleteNoteNotification(session, notification.Note, notification.UserId));
return true;
}
}

View file

@ -1,25 +1,40 @@
using MediatR;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Shared.Entities;
using Sledgemapper.Api.Notifications;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class DeleteOverlayCommandHandler : BaseCommandHandler<DeleteOverlayCommand, bool>
public class DeleteOverlayCommandHandler : IRequestHandler<DeleteOverlayCommand, bool>
{
public DeleteOverlayCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) : base(mediator, dbcontext)
{
}
private readonly MyDbContext _dbcontext;
public override async Task<bool> Handle(DeleteOverlayCommand command, CancellationToken cancellationToken)
private readonly IMediator _mediator;
public DeleteOverlayCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(DeleteOverlayCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Overlay);
var session = await SaveLog(command, "D", "O", jsonString, cancellationToken);
await Mediator.Publish(new DeleteOverlayNotification(session, command.Overlay, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Overlay>(notification.Overlay);
var session = _dbcontext.Sessions.First(m=>m.SessionName== notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "D",
SessionId = session.SessionId,
Type = "O",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId=notification.UserId
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new DeleteOverlayNotification(session, notification.Overlay, notification.UserId));
return true;
}
}

View file

@ -1,25 +1,39 @@
using MediatR;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Shared.Entities;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class DeleteTileCommandHandler : BaseCommandHandler<DeleteTileCommand, bool>
public class DeleteTileCommandHandler : IRequestHandler<DeleteTileCommand,bool>
{
public DeleteTileCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) : base(mediator, dbcontext)
{
}
private readonly MyDbContext _dbcontext;
public override async Task<bool> Handle(DeleteTileCommand command, CancellationToken cancellationToken)
private readonly IMediator _mediator;
public DeleteTileCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(DeleteTileCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Tile);
var session = await SaveLog(command, "D", "T", jsonString, cancellationToken);
await Mediator.Publish(new DeleteTileNotification(session, command.Tile, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Tile>(notification.Tile);
var session = _dbcontext.Sessions.First(m=>m.SessionName== notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "D",
SessionId = session.SessionId,
Type = "T",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new DeleteTileNotification(session, notification.Tile, notification.UserId));
return true;
}
}

View file

@ -1,25 +1,42 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Shared.Entities;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class DeleteWallCommandHandler : BaseCommandHandler<DeleteWallCommand, bool>
{
public DeleteWallCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) : base(mediator, dbcontext)
{
}
public override async Task<bool> Handle(DeleteWallCommand command, CancellationToken cancellationToken)
public class DeleteWallCommandHandler : IRequestHandler<DeleteWallCommand, bool>
{
private readonly MyDbContext _dbcontext;
private readonly IMediator _mediator;
public DeleteWallCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(DeleteWallCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Wall);
var session = await SaveLog(command, "D", "W", jsonString, cancellationToken);
await Mediator.Publish(new DeleteWallNotification(session, command.Wall, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Wall>(notification.Wall);
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "D",
SessionId = session.SessionId,
Type = "W",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new DeleteWallNotification(session, notification.Wall, notification.UserId));
return true;
}
}

View file

@ -1,56 +0,0 @@
using MediatR;
using Microsoft.EntityFrameworkCore;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Shared.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class GetCampaignMapsCommandHandler : IRequestHandler<GetCampaignMapsCommand, List<Session>>
{
private readonly IMediator _mediator;
private readonly SledgemapperDbContext _dbcontext;
public GetCampaignMapsCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext)
{
_mediator = mediator;
_dbcontext = dbcontext;
}
public async Task<List<Session>> Handle(GetCampaignMapsCommand command, CancellationToken cancellationToken)
{
try
{
var user = await _dbcontext.Users.FindAsync(command.UserId);
_dbcontext.Attach(user);
var campaign = await _dbcontext
.Campaigns
.Where(campaign => campaign.CampaignId == command.CampaignId)
.Include(c => c.InvitedUsers)
.Include(c => c.Maps)
.Include(c => c.Owner)
.Where(campaign => campaign.OwnerId == command.UserId || campaign.InvitedUsers.Contains(user)).FirstAsync();
//var campaign = await _dbcontext.Campaigns.Where(campaign => campaign.CampaignId == command.CampaignId && campaign.OwnerId == command.UserId).Include(campaign => campaign.Maps).FirstAsync();
var maps = campaign.Maps.Select(session => new Session { SessionName = session.SessionName, SessionId = session.SessionId }).ToList();
return maps;
}
catch (Exception ex)
{
}
return null;
}
}
}

View file

@ -1,54 +0,0 @@
using MediatR;
using Microsoft.EntityFrameworkCore;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Shared.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class GetCampaignPlayersCommandHandler : IRequestHandler<GetCampaignPlayersCommand, List<Player>>
{
private readonly IMediator _mediator;
private readonly SledgemapperDbContext _dbcontext;
public GetCampaignPlayersCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext)
{
_mediator = mediator;
_dbcontext = dbcontext;
}
public async Task<List<Player>> Handle(GetCampaignPlayersCommand command, CancellationToken cancellationToken)
{
try
{
var user = await _dbcontext.Users.FindAsync(command.UserId);
_dbcontext.Attach(user);
var campaign = await _dbcontext
.Campaigns
.Where(campaign => campaign.CampaignId == command.CampaignId)
.Include(c => c.InvitedUsers)
.Include(c => c.Owner)
.Where(campaign => campaign.OwnerId == command.UserId || campaign.InvitedUsers.Contains(user)).FirstAsync();
//var campaign = await _dbcontext.Campaigns.Where(campaign => campaign.CampaignId == command.CampaignId && campaign.OwnerId == command.UserId).Include(campaign => campaign.InvitedUsers).FirstAsync();
var players = campaign.InvitedUsers.Select(user => new Player { Initials = user.Initials, UserName = user.UserName , UserId = new Guid(user.Id)}).ToList();
return players;
}
catch (Exception ex)
{
}
return null;
}
}
}

View file

@ -1,45 +0,0 @@
using MediatR;
using Microsoft.EntityFrameworkCore;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Shared.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class GetCampaignsCommandHandler : IRequestHandler<GetCampaignsCommand, List<Campaign>>
{
private readonly IMediator _mediator;
private readonly SledgemapperDbContext _dbcontext;
public GetCampaignsCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext)
{
_mediator = mediator;
_dbcontext = dbcontext;
}
public async Task<List<Campaign>> Handle(GetCampaignsCommand command, CancellationToken cancellationToken)
{
try
{
var user = await _dbcontext.Users.FindAsync(command.UserId);
_dbcontext.Attach(user);
var campaigns = await _dbcontext.Campaigns
.Include(c => c.InvitedUsers)
.Include(c => c.Owner)
.Where(campaign => campaign.OwnerId == command.UserId || campaign.InvitedUsers.Contains(user)).ToListAsync();
return campaigns.Select(c => new Campaign { Id = c.CampaignId, Name = c.CampaignName }).ToList();
}
catch (Exception ex)
{
}
return new List<Campaign>();
}
}
}

View file

@ -1,37 +1,36 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Shared.Entities;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Core.Entities;
using Session = Sledgemapper.Shared.Entities.Session;
using Sledgemapper.Api.Models;
namespace Sledgemapper.Api.Handlers
namespace Sledgemapper.Api.Commands
{
public class GetMapSnapshotCommandHandler : IRequestHandler<GetMapSnapshotCommand, Session>
public class GetMapSnapshotCommandHandler : IRequestHandler<GetMapSnapshotCommand, Sledgemapper.Shared.Entities.Session>
{
private readonly SledgemapperDbContext _dbcontext;
private readonly MyDbContext _dbcontext;
public GetMapSnapshotCommandHandler(SledgemapperDbContext dbcontext) { _dbcontext = dbcontext; }
public GetMapSnapshotCommandHandler(MyDbContext dbcontext) { _dbcontext = dbcontext; }
public async Task<Session> Handle(GetMapSnapshotCommand notification, CancellationToken cancellationToken)
public async Task<Sledgemapper.Shared.Entities.Session> Handle(GetMapSnapshotCommand notification, CancellationToken cancellationToken)
{
Snapshot snapshot;
double timestamp;
Session mapSession;
var session = _dbcontext.Sessions.First(m => m.SessionId == notification.MapId);
var snapshot = _dbcontext.Snapshots.OrderByDescending(s => s.Timestamp).FirstOrDefault(m => m.SessionId == session.SessionId);
Sledgemapper.Shared.Entities.Session mapSession;
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
snapshot = _dbcontext.Snapshots.OrderByDescending(s => s.Timestamp).FirstOrDefault(m => m.SessionId == session.SessionId);
if (snapshot is null)
{
timestamp = 0;
mapSession = new Session();
mapSession = new Shared.Entities.Session();
}
else
{
mapSession = JsonSerializer.Deserialize<Session>(snapshot.Object);
mapSession = JsonSerializer.Deserialize<Sledgemapper.Shared.Entities.Session>(snapshot.Object);
timestamp = snapshot.Timestamp;
}
@ -58,7 +57,7 @@ namespace Sledgemapper.Api.Handlers
var note = JsonSerializer.Deserialize<Note>(mapUpdate.Object);
mapSession.NewNote(note);
break;
case "L":
case "L":
var line = JsonSerializer.Deserialize<Line>(mapUpdate.Object);
mapSession.NewLine(line);
break;
@ -66,6 +65,10 @@ namespace Sledgemapper.Api.Handlers
var room = JsonSerializer.Deserialize<Room>(mapUpdate.Object);
mapSession.NewRoom(room);
break;
}
}
@ -98,10 +101,10 @@ namespace Sledgemapper.Api.Handlers
{
SessionId = session.SessionId,
Timestamp = mapUpdates.Max(mapSession => mapSession.Timestamp),
Object = JsonSerializer.Serialize(mapSession)
Object = JsonSerializer.Serialize<Sledgemapper.Shared.Entities.Session>(mapSession)
};
await _dbcontext.Snapshots.AddAsync(newSnapshot, cancellationToken);
await _dbcontext.SaveChangesAsync(cancellationToken);
await _dbcontext.Snapshots.AddAsync(newSnapshot);
await _dbcontext.SaveChangesAsync();
}
return mapSession;
}

View file

@ -1,54 +0,0 @@
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using Microsoft.EntityFrameworkCore;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
namespace Sledgemapper.Api.Handlers
{
public class InvitePlayerToCampaignCommandHandler : IRequestHandler<InvitePlayerToCampaignCommand, bool>
{
private readonly SledgemapperDbContext _dbContext;
private readonly IMediator _mediator;
public InvitePlayerToCampaignCommandHandler(IMediator mediator, SledgemapperDbContext dbContext)
{
_mediator = mediator;
_dbContext = dbContext;
}
public async Task<bool> Handle(InvitePlayerToCampaignCommand command, CancellationToken cancellationToken)
{
try
{
var user = await _dbContext.Users.FindAsync(command.UserId);
var campaign = await _dbContext
.Campaigns
.Where(campaign => campaign.CampaignId == command.CampaignId)
.Include(c => c.InvitedUsers)
.Where(campaign => campaign.OwnerId == command.UserId || campaign.InvitedUsers.Contains(user))
.FirstAsync(cancellationToken);
var invitedUser =
await _dbContext.Users.FirstOrDefaultAsync(iUser => iUser.Email == command.Email,
cancellationToken);
_dbContext.Attach(invitedUser);
_dbContext.Attach(campaign);
campaign.InvitedUsers.Add(invitedUser);
await _dbContext.SaveChangesAsync(cancellationToken);
return true;
}
catch (Exception ex)
{
}
return false;
}
}
}

View file

@ -1,48 +0,0 @@
using MediatR;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
using System;
using System.Threading;
using System.Threading.Tasks;
using Sledgemapper.Api.Core.Entities;
namespace Sledgemapper.Api.Handlers
{
public class NewCampaignCommandHandler : IRequestHandler<NewCampaignCommand, bool>
{
private readonly IMediator _mediator;
private readonly SledgemapperDbContext _dbcontext;
public NewCampaignCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext)
{
_mediator = mediator;
_dbcontext = dbcontext;
}
public async Task<bool> Handle(NewCampaignCommand notification, CancellationToken cancellationToken)
{
try
{
var user = await _dbcontext.Users.FindAsync(new object[] { notification.UserId }, cancellationToken);
_dbcontext.Attach(user);
var campaign = new Core.Entities.Campaign
{
CampaignName = notification.CampaignName,
OwnerId = user.Id,
InvitedUsers = new System.Collections.Generic.List<User> { user }
};
_dbcontext.Campaigns.Add(campaign);
await _dbcontext.SaveChangesAsync(cancellationToken);
return true;
}
catch (Exception ex)
{
}
return false;
}
}
}

View file

@ -1,6 +1,8 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Shared.Entities;
using Sledgemapper.Api.Commands;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
@ -8,18 +10,29 @@ using Sledgemapper.Api.Notifications;
namespace Sledgemapper.Api.Handlers
{
public class NewLineCommandHandler : BaseCommandHandler<NewLineCommand, bool>
public class NewLineCommandHandler : IRequestHandler<NewLineCommand, bool>
{
public NewLineCommandHandler(IMediator mediator, SledgemapperDbContext dbContext) : base(mediator, dbContext)
{
}
private readonly MyDbContext _dbcontext;
public override async Task<bool> Handle(NewLineCommand command, CancellationToken cancellationToken)
private readonly IMediator _mediator;
public NewLineCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(NewLineCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Line);
var session = await SaveLog(command, "N", "L", jsonString, cancellationToken);
await Mediator.Publish(new NewLineNotification(session, command.Line, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Line>(notification.Line);
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "N",
SessionId = session.SessionId,
Type = "L",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId,
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new NewLineNotification(session, notification.Line, notification.UserId));
return true;
}
}

View file

@ -1,25 +1,38 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Shared.Entities;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Notifications;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class NewNoteCommandHandler : BaseCommandHandler<NewNoteCommand, bool>
public class NewNoteCommandHandler : IRequestHandler<NewNoteCommand, bool>
{
public NewNoteCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) : base(mediator, dbcontext)
{
}
private readonly MyDbContext _dbcontext;
public override async Task<bool> Handle(NewNoteCommand command, CancellationToken cancellationToken)
private readonly IMediator _mediator;
public NewNoteCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(NewNoteCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Note);
var session = await SaveLog(command, "N", "N", jsonString, cancellationToken);
await Mediator.Publish(new NewNoteNotification(session, command.Note, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Note>(notification.Note);
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "N",
SessionId = session.SessionId,
Type = "N",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId,
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new NewNoteNotification(session, notification.Note, notification.UserId));
return true;
}
}

View file

@ -1,26 +1,38 @@
using MediatR;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Api.Data;
using Sledgemapper.Shared.Entities;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class NewOverlayCommandHandler : BaseCommandHandler<NewOverlayCommand, bool>
public class NewOverlayCommandHandler : IRequestHandler<NewOverlayCommand, bool>
{
public NewOverlayCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) : base(mediator, dbcontext)
{
}
private readonly MyDbContext _dbcontext;
public override async Task<bool> Handle(NewOverlayCommand command, CancellationToken cancellationToken)
private readonly IMediator _mediator;
public NewOverlayCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(NewOverlayCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Overlay);
var session = await SaveLog(command, "N", "O", jsonString, cancellationToken);
await Mediator.Publish(new NewOverlayNotification(session, command.Overlay, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Overlay>(notification.Overlay);
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "N",
SessionId = session.SessionId,
Type = "O",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId,
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new NewOverlayNotification(session, notification.Overlay, notification.UserId));
return true;
}
}

View file

@ -1,6 +1,8 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Shared.Entities;
using Sledgemapper.Api.Commands;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
@ -8,17 +10,29 @@ using Sledgemapper.Api.Notifications;
namespace Sledgemapper.Api.Handlers
{
public class NewRoomCommandHandler : BaseCommandHandler<NewRoomCommand, bool>
public class NewRoomCommandHandler : IRequestHandler<NewRoomCommand, bool>
{
public NewRoomCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) : base(mediator, dbcontext)
{ }
private readonly MyDbContext _dbcontext;
public override async Task<bool> Handle(NewRoomCommand command, CancellationToken cancellationToken)
private readonly IMediator _mediator;
public NewRoomCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(NewRoomCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Room);
var session = await SaveLog(command, "N", "R", jsonString, cancellationToken);
await Mediator.Publish(new NewRoomNotification(session, command.Room, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Room>(notification.Room);
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "N",
SessionId = session.SessionId,
Type = "R",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId,
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new NewRoomNotification(session, notification.Room, notification.UserId));
return true;
}
}

View file

@ -1,37 +1,34 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Core.Entities;
namespace Sledgemapper.Api.Handlers
namespace Sledgemapper.Api.Commands
{
public class NewSnapshotCommandHandler : IRequestHandler<NewSnapshotCommand, bool>
{
private readonly SledgemapperDbContext _dbcontext;
private readonly MyDbContext _dbcontext;
private readonly IMediator _mediator;
public NewSnapshotCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public NewSnapshotCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(NewSnapshotCommand notification, CancellationToken cancellationToken)
{
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
var newSnapshot = new Snapshot
{
SessionId = session.SessionId,
Timestamp = notification.Timestamp,
Object = JsonSerializer.Serialize(notification.Session)
};
await _dbcontext.Snapshots.AddAsync(newSnapshot, cancellationToken);
await _dbcontext.SaveChangesAsync(cancellationToken);
var newSnapshot = new Sledgemapper.Api.Models.Snapshot{
SessionId=session.SessionId,
Timestamp=notification.Timestamp,
Object = JsonSerializer.Serialize<Sledgemapper.Shared.Entities.Session>(notification.Session)
};
await _dbcontext.Snapshots.AddAsync(newSnapshot);
await _dbcontext.SaveChangesAsync();
return true;
}

View file

@ -1,26 +1,41 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Api.Commands;
using System.Linq;
using Sledgemapper.Shared.Entities;
namespace Sledgemapper.Api.Handlers
namespace Sledgemapper.Api.Commands
{
public class NewTileCommandHandler : BaseCommandHandler<NewTileCommand, bool>
public class NewTileCommandHandler : IRequestHandler<NewTileCommand, bool>
{
public NewTileCommandHandler(IMediator mediator, SledgemapperDbContext dbContext) : base(mediator, dbContext)
{
}
private readonly MyDbContext _dbcontext;
private readonly IMediator _mediator;
public override async Task<bool> Handle(NewTileCommand command, CancellationToken cancellationToken)
public NewTileCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(NewTileCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Tile);
var session = await SaveLog(command, "N", "T", jsonString, cancellationToken);
await Mediator.Publish(new NewTileNotification(session, command.Tile, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Tile>(notification.Tile);
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "N",
SessionId = session.SessionId,
Type = "T",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new NewTileNotification(session, notification.Tile, notification.UserId));
return true;
}
}
}

View file

@ -1,25 +1,38 @@
using MediatR;
using Sledgemapper.Api.Infrastructure.Data;
using Sledgemapper.Api.Data;
using Sledgemapper.Shared.Entities;
using Sledgemapper.Api.Commands;
using Sledgemapper.Api.Notifications;
using System.Linq;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace Sledgemapper.Api.Handlers
{
public class NewWallCommandHandler : BaseCommandHandler<NewWallCommand, bool>
public class NewWallCommandHandler : IRequestHandler<NewWallCommand, bool>
{
public NewWallCommandHandler(IMediator mediator, SledgemapperDbContext dbContext) : base(mediator, dbContext)
{
}
private readonly MyDbContext _dbcontext;
public override async Task<bool> Handle(NewWallCommand command, CancellationToken cancellationToken)
private readonly IMediator _mediator;
public NewWallCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
public async Task<bool> Handle(NewWallCommand notification, CancellationToken cancellationToken)
{
await CheckAuthorization(command);
var jsonString = JsonSerializer.Serialize(command.Wall);
var session = await SaveLog(command, "N", "W", jsonString, cancellationToken);
await Mediator.Publish(new NewWallNotification(session, command.Wall, command.UserId), cancellationToken);
var jsonString = JsonSerializer.Serialize<Wall>(notification.Wall);
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
_dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog
{
Operation = "N",
SessionId = session.SessionId,
Type = "W",
Timestamp = notification.Timestamp,
Object = jsonString,
UserId = notification.UserId,
});
await _dbcontext.SaveChangesAsync();
await _mediator.Publish(new NewWallNotification(session, notification.Wall, notification.UserId));
return true;
}
}

View file

@ -1,6 +1,6 @@
using MediatR;
using Microsoft.AspNetCore.SignalR;
using Sledgemapper.Shared.Clients;
using Sledgemapper.Clients;
using System.Threading;
using System.Threading.Tasks;
using Sledgemapper.Api.Hubs;
@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(DeleteNoteNotification notification, CancellationToken cancellationToken)
{
await _hub.Clients.Groups(notification.Session.SessionId.ToString()).DeleteNote(notification.Note);
await _hub.Clients.Groups(notification.Session.SessionName).DeleteNote(notification.Note);
}
}
}

View file

@ -2,9 +2,9 @@ using MediatR;
using Microsoft.AspNetCore.SignalR;
using Sledgemapper.Api.Hubs;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Clients;
using System.Threading;
using System.Threading.Tasks;
using Sledgemapper.Shared.Clients;
namespace Sledgemapper.Api.Handlers
{
@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(DeleteOverlayNotification notification, CancellationToken cancellationToken)
{
await _hub.Clients.Groups(notification.Session.SessionId.ToString()).DeleteOverlay(notification.Overlay);
await _hub.Clients.Groups(notification.Session.SessionName).DeleteOverlay(notification.Overlay);
}
}
}

View file

@ -2,9 +2,9 @@ using MediatR;
using Microsoft.AspNetCore.SignalR;
using Sledgemapper.Api.Hubs;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Clients;
using System.Threading;
using System.Threading.Tasks;
using Sledgemapper.Shared.Clients;
namespace Sledgemapper.Api.Handlers
{
@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(DeleteTileNotification notification, CancellationToken cancellationToken)
{
await _hub.Clients.Groups(notification.Session.SessionId.ToString()).DeleteTile(notification.Tile);
await _hub.Clients.Groups(notification.Session.SessionName).DeleteTile(notification.Tile);
}
}
}

View file

@ -1,10 +1,10 @@
using MediatR;
using Microsoft.AspNetCore.SignalR;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Clients;
using System.Threading;
using System.Threading.Tasks;
using Sledgemapper.Api.Hubs;
using Sledgemapper.Shared.Clients;
namespace Sledgemapper.Api.Handlers
{
@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(DeleteWallNotification notification, CancellationToken cancellationToken)
{
await _hub.Clients.Groups(notification.Session.SessionId.ToString()).DeleteWall(notification.Wall);
await _hub.Clients.Groups(notification.Session.SessionName).DeleteWall(notification.Wall);
}
}
}

View file

@ -1,10 +1,10 @@
using MediatR;
using Microsoft.AspNetCore.SignalR;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Clients;
using System.Threading;
using System.Threading.Tasks;
using Sledgemapper.Api.Hubs;
using Sledgemapper.Shared.Clients;
namespace Sledgemapper.Api.Handlers
{
@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(NewLineNotification notification, CancellationToken cancellationToken)
{
await _hub.Clients.Groups(notification.Session.SessionId.ToString()).NewLine(notification.Line);
await _hub.Clients.Groups(notification.Session.SessionName).NewLine(notification.Line);
}
}
}

View file

@ -1,10 +1,10 @@
using MediatR;
using Microsoft.AspNetCore.SignalR;
using Sledgemapper.Api.Notifications;
using Sledgemapper.Clients;
using System.Threading;
using System.Threading.Tasks;
using Sledgemapper.Api.Hubs;
using Sledgemapper.Shared.Clients;
namespace Sledgemapper.Api.Handlers
{
@ -16,7 +16,7 @@ namespace Sledgemapper.Api.Handlers
public async Task Handle(NewNoteNotification notification, CancellationToken cancellationToken)
{
await _hub.Clients.Groups(notification.Session.SessionId.ToString()).NewNote(notification.Note);
await _hub.Clients.Groups(notification.Session.SessionName).NewNote(notification.Note);
}
}
}

Some files were not shown because too many files have changed in this diff Show more