diff --git a/image/anim/playing/0.png b/image/anim/playing/0.png new file mode 100644 index 00000000..e0b56e7b Binary files /dev/null and b/image/anim/playing/0.png differ diff --git a/image/anim/playing/1.png b/image/anim/playing/1.png new file mode 100644 index 00000000..f99a2fe5 Binary files /dev/null and b/image/anim/playing/1.png differ diff --git a/image/anim/playing/10.png b/image/anim/playing/10.png new file mode 100644 index 00000000..48b65447 Binary files /dev/null and b/image/anim/playing/10.png differ diff --git a/image/anim/playing/11.png b/image/anim/playing/11.png new file mode 100644 index 00000000..d75e5ecb Binary files /dev/null and b/image/anim/playing/11.png differ diff --git a/image/anim/playing/2.png b/image/anim/playing/2.png new file mode 100644 index 00000000..6380255b Binary files /dev/null and b/image/anim/playing/2.png differ diff --git a/image/anim/playing/3.png b/image/anim/playing/3.png new file mode 100644 index 00000000..65922657 Binary files /dev/null and b/image/anim/playing/3.png differ diff --git a/image/anim/playing/4.png b/image/anim/playing/4.png new file mode 100644 index 00000000..9618f636 Binary files /dev/null and b/image/anim/playing/4.png differ diff --git a/image/anim/playing/5.png b/image/anim/playing/5.png new file mode 100644 index 00000000..6cf55866 Binary files /dev/null and b/image/anim/playing/5.png differ diff --git a/image/anim/playing/6.png b/image/anim/playing/6.png new file mode 100644 index 00000000..5c46359a Binary files /dev/null and b/image/anim/playing/6.png differ diff --git a/image/anim/playing/7.png b/image/anim/playing/7.png new file mode 100644 index 00000000..94ea8d44 Binary files /dev/null and b/image/anim/playing/7.png differ diff --git a/image/anim/playing/8.png b/image/anim/playing/8.png new file mode 100644 index 00000000..0f6ed3ef Binary files /dev/null and b/image/anim/playing/8.png differ diff --git a/image/anim/playing/9.png b/image/anim/playing/9.png new file mode 100644 index 00000000..ba7ef3b8 Binary files /dev/null and b/image/anim/playing/9.png differ diff --git a/image/anim/selectable/0.png b/image/anim/selectable/0.png new file mode 100644 index 00000000..ce9ff305 Binary files /dev/null and b/image/anim/selectable/0.png differ diff --git a/image/anim/selectable/1.png b/image/anim/selectable/1.png new file mode 100644 index 00000000..42b2d717 Binary files /dev/null and b/image/anim/selectable/1.png differ diff --git a/image/anim/selectable/2.png b/image/anim/selectable/2.png new file mode 100644 index 00000000..38079203 Binary files /dev/null and b/image/anim/selectable/2.png differ diff --git a/image/anim/selectable/3.png b/image/anim/selectable/3.png new file mode 100644 index 00000000..f5a24596 Binary files /dev/null and b/image/anim/selectable/3.png differ diff --git a/image/anim/selectable/4.png b/image/anim/selectable/4.png new file mode 100644 index 00000000..3c29f621 Binary files /dev/null and b/image/anim/selectable/4.png differ diff --git a/image/anim/selectable/5.png b/image/anim/selectable/5.png new file mode 100644 index 00000000..ee0963c9 Binary files /dev/null and b/image/anim/selectable/5.png differ diff --git a/image/anim/selectable/6.png b/image/anim/selectable/6.png new file mode 100644 index 00000000..b9999cbf Binary files /dev/null and b/image/anim/selectable/6.png differ diff --git a/image/anim/selectable/7.png b/image/anim/selectable/7.png new file mode 100644 index 00000000..dc657f2b Binary files /dev/null and b/image/anim/selectable/7.png differ diff --git a/image/anim/selectable/8.png b/image/anim/selectable/8.png new file mode 100644 index 00000000..004d9196 Binary files /dev/null and b/image/anim/selectable/8.png differ diff --git a/image/anim/selectable/9.png b/image/anim/selectable/9.png new file mode 100644 index 00000000..fd960ff4 Binary files /dev/null and b/image/anim/selectable/9.png differ diff --git a/image/anim/selected/0.png b/image/anim/selected/0.png new file mode 100644 index 00000000..9b0e510d Binary files /dev/null and b/image/anim/selected/0.png differ diff --git a/image/anim/selected/1.png b/image/anim/selected/1.png new file mode 100644 index 00000000..30952131 Binary files /dev/null and b/image/anim/selected/1.png differ diff --git a/image/anim/selected/10.png b/image/anim/selected/10.png new file mode 100644 index 00000000..9978d63b Binary files /dev/null and b/image/anim/selected/10.png differ diff --git a/image/anim/selected/11.png b/image/anim/selected/11.png new file mode 100644 index 00000000..202d2873 Binary files /dev/null and b/image/anim/selected/11.png differ diff --git a/image/anim/selected/2.png b/image/anim/selected/2.png new file mode 100644 index 00000000..42b08704 Binary files /dev/null and b/image/anim/selected/2.png differ diff --git a/image/anim/selected/3.png b/image/anim/selected/3.png new file mode 100644 index 00000000..b616724b Binary files /dev/null and b/image/anim/selected/3.png differ diff --git a/image/anim/selected/4.png b/image/anim/selected/4.png new file mode 100644 index 00000000..eff00a4a Binary files /dev/null and b/image/anim/selected/4.png differ diff --git a/image/anim/selected/5.png b/image/anim/selected/5.png new file mode 100644 index 00000000..95e83140 Binary files /dev/null and b/image/anim/selected/5.png differ diff --git a/image/anim/selected/6.png b/image/anim/selected/6.png new file mode 100644 index 00000000..7046ee87 Binary files /dev/null and b/image/anim/selected/6.png differ diff --git a/image/anim/selected/7.png b/image/anim/selected/7.png new file mode 100644 index 00000000..1e23ee64 Binary files /dev/null and b/image/anim/selected/7.png differ diff --git a/image/anim/selected/8.png b/image/anim/selected/8.png new file mode 100644 index 00000000..4147d070 Binary files /dev/null and b/image/anim/selected/8.png differ diff --git a/image/anim/selected/9.png b/image/anim/selected/9.png new file mode 100644 index 00000000..30b46948 Binary files /dev/null and b/image/anim/selected/9.png differ diff --git a/image/card/amazing_grace.png b/image/card/amazing_grace.png new file mode 100644 index 00000000..0749cd86 Binary files /dev/null and b/image/card/amazing_grace.png differ diff --git a/image/card/analeptic.png b/image/card/analeptic.png new file mode 100644 index 00000000..3b98f7fb Binary files /dev/null and b/image/card/analeptic.png differ diff --git a/image/card/archery_attack.png b/image/card/archery_attack.png new file mode 100644 index 00000000..4a7ecf00 Binary files /dev/null and b/image/card/archery_attack.png differ diff --git a/image/card/axe.png b/image/card/axe.png new file mode 100644 index 00000000..64c9c3a9 Binary files /dev/null and b/image/card/axe.png differ diff --git a/image/card/blade.png b/image/card/blade.png new file mode 100644 index 00000000..294e7016 Binary files /dev/null and b/image/card/blade.png differ diff --git a/image/card/card-back.png b/image/card/card-back.png new file mode 100644 index 00000000..2149077b Binary files /dev/null and b/image/card/card-back.png differ diff --git a/image/card/chitu.png b/image/card/chitu.png new file mode 100644 index 00000000..741a3355 Binary files /dev/null and b/image/card/chitu.png differ diff --git a/image/card/collateral.png b/image/card/collateral.png new file mode 100644 index 00000000..d2118208 Binary files /dev/null and b/image/card/collateral.png differ diff --git a/image/card/crossbow.png b/image/card/crossbow.png new file mode 100644 index 00000000..abb5176f Binary files /dev/null and b/image/card/crossbow.png differ diff --git a/image/card/dayuan.png b/image/card/dayuan.png new file mode 100644 index 00000000..4ecae5c9 Binary files /dev/null and b/image/card/dayuan.png differ diff --git a/image/card/delayedTrick/YanxiaoCard.png b/image/card/delayedTrick/YanxiaoCard.png new file mode 100644 index 00000000..e8eeac0c Binary files /dev/null and b/image/card/delayedTrick/YanxiaoCard.png differ diff --git a/image/card/delayedTrick/deluge.png b/image/card/delayedTrick/deluge.png new file mode 100644 index 00000000..9adf30cc Binary files /dev/null and b/image/card/delayedTrick/deluge.png differ diff --git a/image/card/delayedTrick/earthquake.png b/image/card/delayedTrick/earthquake.png new file mode 100644 index 00000000..6597331b Binary files /dev/null and b/image/card/delayedTrick/earthquake.png differ diff --git a/image/card/delayedTrick/indulgence.png b/image/card/delayedTrick/indulgence.png new file mode 100644 index 00000000..9301c4dd Binary files /dev/null and b/image/card/delayedTrick/indulgence.png differ diff --git a/image/card/delayedTrick/lightning.png b/image/card/delayedTrick/lightning.png new file mode 100644 index 00000000..be86598d Binary files /dev/null and b/image/card/delayedTrick/lightning.png differ diff --git a/image/card/delayedTrick/mudslide.png b/image/card/delayedTrick/mudslide.png new file mode 100644 index 00000000..e76710bd Binary files /dev/null and b/image/card/delayedTrick/mudslide.png differ diff --git a/image/card/delayedTrick/supply_shortage.png b/image/card/delayedTrick/supply_shortage.png new file mode 100644 index 00000000..cd375a8b Binary files /dev/null and b/image/card/delayedTrick/supply_shortage.png differ diff --git a/image/card/delayedTrick/typhoon.png b/image/card/delayedTrick/typhoon.png new file mode 100644 index 00000000..8ec700fb Binary files /dev/null and b/image/card/delayedTrick/typhoon.png differ diff --git a/image/card/delayedTrick/volcano.png b/image/card/delayedTrick/volcano.png new file mode 100644 index 00000000..e1b6b8f2 Binary files /dev/null and b/image/card/delayedTrick/volcano.png differ diff --git a/image/card/dilu.png b/image/card/dilu.png new file mode 100644 index 00000000..3dac7c08 Binary files /dev/null and b/image/card/dilu.png differ diff --git a/image/card/dismantlement.png b/image/card/dismantlement.png new file mode 100644 index 00000000..47b577ee Binary files /dev/null and b/image/card/dismantlement.png differ diff --git a/image/card/double_sword.png b/image/card/double_sword.png new file mode 100644 index 00000000..65e55bbc Binary files /dev/null and b/image/card/double_sword.png differ diff --git a/image/card/drowning.png b/image/card/drowning.png new file mode 100644 index 00000000..93a3bb8e Binary files /dev/null and b/image/card/drowning.png differ diff --git a/image/card/duel.png b/image/card/duel.png new file mode 100644 index 00000000..04c412d8 Binary files /dev/null and b/image/card/duel.png differ diff --git a/image/card/eight_diagram.png b/image/card/eight_diagram.png new file mode 100644 index 00000000..5a0d8f27 Binary files /dev/null and b/image/card/eight_diagram.png differ diff --git a/image/card/equipIcon/horse_flag.png b/image/card/equipIcon/horse_flag.png new file mode 100644 index 00000000..1feea784 Binary files /dev/null and b/image/card/equipIcon/horse_flag.png differ diff --git a/image/card/equipIcon/ico_0.png b/image/card/equipIcon/ico_0.png new file mode 100644 index 00000000..416652aa Binary files /dev/null and b/image/card/equipIcon/ico_0.png differ diff --git a/image/card/equipIcon/ico_101.png b/image/card/equipIcon/ico_101.png new file mode 100644 index 00000000..a0a37575 Binary files /dev/null and b/image/card/equipIcon/ico_101.png differ diff --git a/image/card/equipIcon/ico_102.png b/image/card/equipIcon/ico_102.png new file mode 100644 index 00000000..2dc9c3bd Binary files /dev/null and b/image/card/equipIcon/ico_102.png differ diff --git a/image/card/equipIcon/ico_11048.png b/image/card/equipIcon/ico_11048.png new file mode 100644 index 00000000..3b3892e3 Binary files /dev/null and b/image/card/equipIcon/ico_11048.png differ diff --git a/image/card/equipIcon/ico_11049.png b/image/card/equipIcon/ico_11049.png new file mode 100644 index 00000000..51d0915c Binary files /dev/null and b/image/card/equipIcon/ico_11049.png differ diff --git a/image/card/equipIcon/ico_11050.png b/image/card/equipIcon/ico_11050.png new file mode 100644 index 00000000..0c0a34fe Binary files /dev/null and b/image/card/equipIcon/ico_11050.png differ diff --git a/image/card/equipIcon/ico_11051.png b/image/card/equipIcon/ico_11051.png new file mode 100644 index 00000000..a98266b3 Binary files /dev/null and b/image/card/equipIcon/ico_11051.png differ diff --git a/image/card/equipIcon/ico_11052.png b/image/card/equipIcon/ico_11052.png new file mode 100644 index 00000000..c370c065 Binary files /dev/null and b/image/card/equipIcon/ico_11052.png differ diff --git a/image/card/equipIcon/ico_11161.png b/image/card/equipIcon/ico_11161.png new file mode 100644 index 00000000..ee500736 Binary files /dev/null and b/image/card/equipIcon/ico_11161.png differ diff --git a/image/card/equipIcon/ico_11179.png b/image/card/equipIcon/ico_11179.png new file mode 100644 index 00000000..7fe5a75e Binary files /dev/null and b/image/card/equipIcon/ico_11179.png differ diff --git a/image/card/equipIcon/ico_11200.png b/image/card/equipIcon/ico_11200.png new file mode 100644 index 00000000..23856b44 Binary files /dev/null and b/image/card/equipIcon/ico_11200.png differ diff --git a/image/card/equipIcon/ico_11228.png b/image/card/equipIcon/ico_11228.png new file mode 100644 index 00000000..b908d6d9 Binary files /dev/null and b/image/card/equipIcon/ico_11228.png differ diff --git a/image/card/equipIcon/ico_11229.png b/image/card/equipIcon/ico_11229.png new file mode 100644 index 00000000..9e47948c Binary files /dev/null and b/image/card/equipIcon/ico_11229.png differ diff --git a/image/card/equipIcon/ico_11230.png b/image/card/equipIcon/ico_11230.png new file mode 100644 index 00000000..752a4d56 Binary files /dev/null and b/image/card/equipIcon/ico_11230.png differ diff --git a/image/card/equipIcon/ico_11231.png b/image/card/equipIcon/ico_11231.png new file mode 100644 index 00000000..204866e8 Binary files /dev/null and b/image/card/equipIcon/ico_11231.png differ diff --git a/image/card/equipIcon/ico_11232.png b/image/card/equipIcon/ico_11232.png new file mode 100644 index 00000000..b20cdb06 Binary files /dev/null and b/image/card/equipIcon/ico_11232.png differ diff --git a/image/card/equipIcon/ico_11233.png b/image/card/equipIcon/ico_11233.png new file mode 100644 index 00000000..96cda0d0 Binary files /dev/null and b/image/card/equipIcon/ico_11233.png differ diff --git a/image/card/equipIcon/ico_11234.png b/image/card/equipIcon/ico_11234.png new file mode 100644 index 00000000..6ad37f39 Binary files /dev/null and b/image/card/equipIcon/ico_11234.png differ diff --git a/image/card/equipIcon/ico_12052.png b/image/card/equipIcon/ico_12052.png new file mode 100644 index 00000000..9cd88034 Binary files /dev/null and b/image/card/equipIcon/ico_12052.png differ diff --git a/image/card/equipIcon/ico_16.png b/image/card/equipIcon/ico_16.png new file mode 100644 index 00000000..63681604 Binary files /dev/null and b/image/card/equipIcon/ico_16.png differ diff --git a/image/card/equipIcon/ico_23.png b/image/card/equipIcon/ico_23.png new file mode 100644 index 00000000..b9fc2ae7 Binary files /dev/null and b/image/card/equipIcon/ico_23.png differ diff --git a/image/card/equipIcon/ico_24.png b/image/card/equipIcon/ico_24.png new file mode 100644 index 00000000..194bc371 Binary files /dev/null and b/image/card/equipIcon/ico_24.png differ diff --git a/image/card/equipIcon/ico_25.png b/image/card/equipIcon/ico_25.png new file mode 100644 index 00000000..66a66560 Binary files /dev/null and b/image/card/equipIcon/ico_25.png differ diff --git a/image/card/equipIcon/ico_26.png b/image/card/equipIcon/ico_26.png new file mode 100644 index 00000000..1473fb16 Binary files /dev/null and b/image/card/equipIcon/ico_26.png differ diff --git a/image/card/equipIcon/ico_27.png b/image/card/equipIcon/ico_27.png new file mode 100644 index 00000000..3675fb4a Binary files /dev/null and b/image/card/equipIcon/ico_27.png differ diff --git a/image/card/equipIcon/ico_28.png b/image/card/equipIcon/ico_28.png new file mode 100644 index 00000000..d8584d5f Binary files /dev/null and b/image/card/equipIcon/ico_28.png differ diff --git a/image/card/equipIcon/ico_29.png b/image/card/equipIcon/ico_29.png new file mode 100644 index 00000000..0a7d95e2 Binary files /dev/null and b/image/card/equipIcon/ico_29.png differ diff --git a/image/card/equipIcon/ico_30.png b/image/card/equipIcon/ico_30.png new file mode 100644 index 00000000..11ec0041 Binary files /dev/null and b/image/card/equipIcon/ico_30.png differ diff --git a/image/card/equipIcon/ico_31.png b/image/card/equipIcon/ico_31.png new file mode 100644 index 00000000..cecd3af2 Binary files /dev/null and b/image/card/equipIcon/ico_31.png differ diff --git a/image/card/equipIcon/ico_32.png b/image/card/equipIcon/ico_32.png new file mode 100644 index 00000000..818f5380 Binary files /dev/null and b/image/card/equipIcon/ico_32.png differ diff --git a/image/card/equipIcon/ico_37.png b/image/card/equipIcon/ico_37.png new file mode 100644 index 00000000..03113897 Binary files /dev/null and b/image/card/equipIcon/ico_37.png differ diff --git a/image/card/equipIcon/ico_38.png b/image/card/equipIcon/ico_38.png new file mode 100644 index 00000000..b41e0747 Binary files /dev/null and b/image/card/equipIcon/ico_38.png differ diff --git a/image/card/equipIcon/ico_39.png b/image/card/equipIcon/ico_39.png new file mode 100644 index 00000000..f925a0ec Binary files /dev/null and b/image/card/equipIcon/ico_39.png differ diff --git a/image/card/equipIcon/ico_40.png b/image/card/equipIcon/ico_40.png new file mode 100644 index 00000000..7857e2e0 Binary files /dev/null and b/image/card/equipIcon/ico_40.png differ diff --git a/image/card/equipIcon/ico_48.png b/image/card/equipIcon/ico_48.png new file mode 100644 index 00000000..d5994f5e Binary files /dev/null and b/image/card/equipIcon/ico_48.png differ diff --git a/image/card/equipIcon/ico_49.png b/image/card/equipIcon/ico_49.png new file mode 100644 index 00000000..997c69d5 Binary files /dev/null and b/image/card/equipIcon/ico_49.png differ diff --git a/image/card/equipIcon/ico_580.png b/image/card/equipIcon/ico_580.png new file mode 100644 index 00000000..18ef90b5 Binary files /dev/null and b/image/card/equipIcon/ico_580.png differ diff --git a/image/card/ex_nihilo.png b/image/card/ex_nihilo.png new file mode 100644 index 00000000..64c68a4f Binary files /dev/null and b/image/card/ex_nihilo.png differ diff --git a/image/card/fan.png b/image/card/fan.png new file mode 100644 index 00000000..57c2dc83 Binary files /dev/null and b/image/card/fan.png differ diff --git a/image/card/fire_attack.png b/image/card/fire_attack.png new file mode 100644 index 00000000..947c3fec Binary files /dev/null and b/image/card/fire_attack.png differ diff --git a/image/card/fire_slash.png b/image/card/fire_slash.png new file mode 100644 index 00000000..ca4b971d Binary files /dev/null and b/image/card/fire_slash.png differ diff --git a/image/card/god_salvation.png b/image/card/god_salvation.png new file mode 100644 index 00000000..74e655fa Binary files /dev/null and b/image/card/god_salvation.png differ diff --git a/image/card/guding_blade.png b/image/card/guding_blade.png new file mode 100644 index 00000000..6d91443a Binary files /dev/null and b/image/card/guding_blade.png differ diff --git a/image/card/halberd.png b/image/card/halberd.png new file mode 100644 index 00000000..3fd083be Binary files /dev/null and b/image/card/halberd.png differ diff --git a/image/card/hualiu.png b/image/card/hualiu.png new file mode 100644 index 00000000..f35a955d Binary files /dev/null and b/image/card/hualiu.png differ diff --git a/image/card/ice_sword.png b/image/card/ice_sword.png new file mode 100644 index 00000000..f7427f50 Binary files /dev/null and b/image/card/ice_sword.png differ diff --git a/image/card/indulgence.png b/image/card/indulgence.png new file mode 100644 index 00000000..7a05cc58 Binary files /dev/null and b/image/card/indulgence.png differ diff --git a/image/card/iron_chain.png b/image/card/iron_chain.png new file mode 100644 index 00000000..1e8d9350 Binary files /dev/null and b/image/card/iron_chain.png differ diff --git a/image/card/jink.png b/image/card/jink.png new file mode 100644 index 00000000..9553a3b0 Binary files /dev/null and b/image/card/jink.png differ diff --git a/image/card/jueying.png b/image/card/jueying.png new file mode 100644 index 00000000..99fd42b8 Binary files /dev/null and b/image/card/jueying.png differ diff --git a/image/card/kylin_bow.png b/image/card/kylin_bow.png new file mode 100644 index 00000000..7e603e05 Binary files /dev/null and b/image/card/kylin_bow.png differ diff --git a/image/card/lightning.png b/image/card/lightning.png new file mode 100644 index 00000000..e6fb289b Binary files /dev/null and b/image/card/lightning.png differ diff --git a/image/card/nullification.png b/image/card/nullification.png new file mode 100644 index 00000000..c8278d39 Binary files /dev/null and b/image/card/nullification.png differ diff --git a/image/card/number/black/1.png b/image/card/number/black/1.png new file mode 100644 index 00000000..a1be8d15 Binary files /dev/null and b/image/card/number/black/1.png differ diff --git a/image/card/number/black/10.png b/image/card/number/black/10.png new file mode 100644 index 00000000..12df6e47 Binary files /dev/null and b/image/card/number/black/10.png differ diff --git a/image/card/number/black/11.png b/image/card/number/black/11.png new file mode 100644 index 00000000..3fa67099 Binary files /dev/null and b/image/card/number/black/11.png differ diff --git a/image/card/number/black/12.png b/image/card/number/black/12.png new file mode 100644 index 00000000..3fbcdb3b Binary files /dev/null and b/image/card/number/black/12.png differ diff --git a/image/card/number/black/13.png b/image/card/number/black/13.png new file mode 100644 index 00000000..7be16daa Binary files /dev/null and b/image/card/number/black/13.png differ diff --git a/image/card/number/black/2.png b/image/card/number/black/2.png new file mode 100644 index 00000000..da67aa87 Binary files /dev/null and b/image/card/number/black/2.png differ diff --git a/image/card/number/black/3.png b/image/card/number/black/3.png new file mode 100644 index 00000000..b1414d72 Binary files /dev/null and b/image/card/number/black/3.png differ diff --git a/image/card/number/black/4.png b/image/card/number/black/4.png new file mode 100644 index 00000000..7b921043 Binary files /dev/null and b/image/card/number/black/4.png differ diff --git a/image/card/number/black/5.png b/image/card/number/black/5.png new file mode 100644 index 00000000..929a78ea Binary files /dev/null and b/image/card/number/black/5.png differ diff --git a/image/card/number/black/6.png b/image/card/number/black/6.png new file mode 100644 index 00000000..83ffdfe8 Binary files /dev/null and b/image/card/number/black/6.png differ diff --git a/image/card/number/black/7.png b/image/card/number/black/7.png new file mode 100644 index 00000000..b5e298ca Binary files /dev/null and b/image/card/number/black/7.png differ diff --git a/image/card/number/black/8.png b/image/card/number/black/8.png new file mode 100644 index 00000000..c20a194a Binary files /dev/null and b/image/card/number/black/8.png differ diff --git a/image/card/number/black/9.png b/image/card/number/black/9.png new file mode 100644 index 00000000..b1888b65 Binary files /dev/null and b/image/card/number/black/9.png differ diff --git a/image/card/number/red/1.png b/image/card/number/red/1.png new file mode 100644 index 00000000..85020c79 Binary files /dev/null and b/image/card/number/red/1.png differ diff --git a/image/card/number/red/10.png b/image/card/number/red/10.png new file mode 100644 index 00000000..9b2475b0 Binary files /dev/null and b/image/card/number/red/10.png differ diff --git a/image/card/number/red/11.png b/image/card/number/red/11.png new file mode 100644 index 00000000..009a5163 Binary files /dev/null and b/image/card/number/red/11.png differ diff --git a/image/card/number/red/12.png b/image/card/number/red/12.png new file mode 100644 index 00000000..f95a8ecd Binary files /dev/null and b/image/card/number/red/12.png differ diff --git a/image/card/number/red/13.png b/image/card/number/red/13.png new file mode 100644 index 00000000..c1e9969b Binary files /dev/null and b/image/card/number/red/13.png differ diff --git a/image/card/number/red/2.png b/image/card/number/red/2.png new file mode 100644 index 00000000..79d3f904 Binary files /dev/null and b/image/card/number/red/2.png differ diff --git a/image/card/number/red/3.png b/image/card/number/red/3.png new file mode 100644 index 00000000..cdd592e0 Binary files /dev/null and b/image/card/number/red/3.png differ diff --git a/image/card/number/red/4.png b/image/card/number/red/4.png new file mode 100644 index 00000000..675518e7 Binary files /dev/null and b/image/card/number/red/4.png differ diff --git a/image/card/number/red/5.png b/image/card/number/red/5.png new file mode 100644 index 00000000..de373cf3 Binary files /dev/null and b/image/card/number/red/5.png differ diff --git a/image/card/number/red/6.png b/image/card/number/red/6.png new file mode 100644 index 00000000..19b79cf7 Binary files /dev/null and b/image/card/number/red/6.png differ diff --git a/image/card/number/red/7.png b/image/card/number/red/7.png new file mode 100644 index 00000000..90b7803b Binary files /dev/null and b/image/card/number/red/7.png differ diff --git a/image/card/number/red/8.png b/image/card/number/red/8.png new file mode 100644 index 00000000..6c72b743 Binary files /dev/null and b/image/card/number/red/8.png differ diff --git a/image/card/number/red/9.png b/image/card/number/red/9.png new file mode 100644 index 00000000..42c56282 Binary files /dev/null and b/image/card/number/red/9.png differ diff --git a/image/card/peach.png b/image/card/peach.png new file mode 100644 index 00000000..2112d4bd Binary files /dev/null and b/image/card/peach.png differ diff --git a/image/card/qinggang_sword.png b/image/card/qinggang_sword.png new file mode 100644 index 00000000..a869c9d1 Binary files /dev/null and b/image/card/qinggang_sword.png differ diff --git a/image/card/renwang_shield.png b/image/card/renwang_shield.png new file mode 100644 index 00000000..080bccb4 Binary files /dev/null and b/image/card/renwang_shield.png differ diff --git a/image/card/savage_assault.png b/image/card/savage_assault.png new file mode 100644 index 00000000..88c73749 Binary files /dev/null and b/image/card/savage_assault.png differ diff --git a/image/card/silver_lion.png b/image/card/silver_lion.png new file mode 100644 index 00000000..13a84907 Binary files /dev/null and b/image/card/silver_lion.png differ diff --git a/image/card/slash.png b/image/card/slash.png new file mode 100644 index 00000000..5ed4360c Binary files /dev/null and b/image/card/slash.png differ diff --git a/image/card/snatch.png b/image/card/snatch.png new file mode 100644 index 00000000..5897d066 Binary files /dev/null and b/image/card/snatch.png differ diff --git a/image/card/spear.png b/image/card/spear.png new file mode 100644 index 00000000..14e39c7f Binary files /dev/null and b/image/card/spear.png differ diff --git a/image/card/suit/black.png b/image/card/suit/black.png new file mode 100644 index 00000000..fe4e33a2 Binary files /dev/null and b/image/card/suit/black.png differ diff --git a/image/card/suit/club.png b/image/card/suit/club.png new file mode 100644 index 00000000..02b17574 Binary files /dev/null and b/image/card/suit/club.png differ diff --git a/image/card/suit/diamond.png b/image/card/suit/diamond.png new file mode 100644 index 00000000..baa373ff Binary files /dev/null and b/image/card/suit/diamond.png differ diff --git a/image/card/suit/heart.png b/image/card/suit/heart.png new file mode 100644 index 00000000..232198ed Binary files /dev/null and b/image/card/suit/heart.png differ diff --git a/image/card/suit/nocolor.png b/image/card/suit/nocolor.png new file mode 100644 index 00000000..176c5191 Binary files /dev/null and b/image/card/suit/nocolor.png differ diff --git a/image/card/suit/red.png b/image/card/suit/red.png new file mode 100644 index 00000000..b21a3331 Binary files /dev/null and b/image/card/suit/red.png differ diff --git a/image/card/suit/spade.png b/image/card/suit/spade.png new file mode 100644 index 00000000..6f5308ef Binary files /dev/null and b/image/card/suit/spade.png differ diff --git a/image/card/supply_shortage.png b/image/card/supply_shortage.png new file mode 100644 index 00000000..2e52258a Binary files /dev/null and b/image/card/supply_shortage.png differ diff --git a/image/card/thunder_slash.png b/image/card/thunder_slash.png new file mode 100644 index 00000000..243197a6 Binary files /dev/null and b/image/card/thunder_slash.png differ diff --git a/image/card/unknown.png b/image/card/unknown.png new file mode 100644 index 00000000..1fdc3665 Binary files /dev/null and b/image/card/unknown.png differ diff --git a/image/card/vine.png b/image/card/vine.png new file mode 100644 index 00000000..3b8fc843 Binary files /dev/null and b/image/card/vine.png differ diff --git a/image/card/vscrossbow.png b/image/card/vscrossbow.png new file mode 100644 index 00000000..235036ab Binary files /dev/null and b/image/card/vscrossbow.png differ diff --git a/image/card/wooden_ox.png b/image/card/wooden_ox.png new file mode 100644 index 00000000..47df4da8 Binary files /dev/null and b/image/card/wooden_ox.png differ diff --git a/image/card/zhuahuangfeidian.png b/image/card/zhuahuangfeidian.png new file mode 100644 index 00000000..f5c9717f Binary files /dev/null and b/image/card/zhuahuangfeidian.png differ diff --git a/image/card/zixing.png b/image/card/zixing.png new file mode 100644 index 00000000..aaa3b131 Binary files /dev/null and b/image/card/zixing.png differ diff --git a/image/generals/caocao.jpg b/image/generals/caocao.jpg new file mode 100644 index 00000000..cd83e6ff Binary files /dev/null and b/image/generals/caocao.jpg differ diff --git a/image/generals/daqiao.jpg b/image/generals/daqiao.jpg new file mode 100644 index 00000000..6c99f2a2 Binary files /dev/null and b/image/generals/daqiao.jpg differ diff --git a/image/generals/diaochan.jpg b/image/generals/diaochan.jpg new file mode 100644 index 00000000..844e2bd7 Binary files /dev/null and b/image/generals/diaochan.jpg differ diff --git a/image/generals/ganning.jpg b/image/generals/ganning.jpg new file mode 100644 index 00000000..2e6f33f2 Binary files /dev/null and b/image/generals/ganning.jpg differ diff --git a/image/generals/guanyu.jpg b/image/generals/guanyu.jpg new file mode 100644 index 00000000..b2ecd961 Binary files /dev/null and b/image/generals/guanyu.jpg differ diff --git a/image/generals/guojia.jpg b/image/generals/guojia.jpg new file mode 100644 index 00000000..35af2791 Binary files /dev/null and b/image/generals/guojia.jpg differ diff --git a/image/generals/huanggai.jpg b/image/generals/huanggai.jpg new file mode 100644 index 00000000..f461bca7 Binary files /dev/null and b/image/generals/huanggai.jpg differ diff --git a/image/generals/huangyueying.jpg b/image/generals/huangyueying.jpg new file mode 100644 index 00000000..6eeb86f7 Binary files /dev/null and b/image/generals/huangyueying.jpg differ diff --git a/image/generals/huatuo.jpg b/image/generals/huatuo.jpg new file mode 100644 index 00000000..faaccd60 Binary files /dev/null and b/image/generals/huatuo.jpg differ diff --git a/image/generals/liubei.jpg b/image/generals/liubei.jpg new file mode 100644 index 00000000..12538945 Binary files /dev/null and b/image/generals/liubei.jpg differ diff --git a/image/generals/luxun.jpg b/image/generals/luxun.jpg new file mode 100644 index 00000000..6fbd3469 Binary files /dev/null and b/image/generals/luxun.jpg differ diff --git a/image/generals/lvbu.jpg b/image/generals/lvbu.jpg new file mode 100644 index 00000000..f7b23261 Binary files /dev/null and b/image/generals/lvbu.jpg differ diff --git a/image/generals/lvmeng.jpg b/image/generals/lvmeng.jpg new file mode 100644 index 00000000..cd6b49f4 Binary files /dev/null and b/image/generals/lvmeng.jpg differ diff --git a/image/generals/machao.jpg b/image/generals/machao.jpg new file mode 100644 index 00000000..d009dab5 Binary files /dev/null and b/image/generals/machao.jpg differ diff --git a/image/generals/simayi.jpg b/image/generals/simayi.jpg new file mode 100644 index 00000000..1e746f09 Binary files /dev/null and b/image/generals/simayi.jpg differ diff --git a/image/generals/sunquan.jpg b/image/generals/sunquan.jpg new file mode 100644 index 00000000..0232f5b7 Binary files /dev/null and b/image/generals/sunquan.jpg differ diff --git a/image/generals/sunshangxiang.jpg b/image/generals/sunshangxiang.jpg new file mode 100644 index 00000000..27f45cb3 Binary files /dev/null and b/image/generals/sunshangxiang.jpg differ diff --git a/image/generals/xiahoudun.jpg b/image/generals/xiahoudun.jpg new file mode 100644 index 00000000..ca3096c4 Binary files /dev/null and b/image/generals/xiahoudun.jpg differ diff --git a/image/generals/xuchu.jpg b/image/generals/xuchu.jpg new file mode 100644 index 00000000..8012d491 Binary files /dev/null and b/image/generals/xuchu.jpg differ diff --git a/image/generals/zhangfei.jpg b/image/generals/zhangfei.jpg new file mode 100644 index 00000000..bd376647 Binary files /dev/null and b/image/generals/zhangfei.jpg differ diff --git a/image/generals/zhangliao.jpg b/image/generals/zhangliao.jpg new file mode 100644 index 00000000..01fc9265 Binary files /dev/null and b/image/generals/zhangliao.jpg differ diff --git a/image/generals/zhaoyun.jpg b/image/generals/zhaoyun.jpg new file mode 100644 index 00000000..0201fc82 Binary files /dev/null and b/image/generals/zhaoyun.jpg differ diff --git a/image/generals/zhenji.jpg b/image/generals/zhenji.jpg new file mode 100644 index 00000000..e9ce6380 Binary files /dev/null and b/image/generals/zhenji.jpg differ diff --git a/image/generals/zhouyu.jpg b/image/generals/zhouyu.jpg new file mode 100644 index 00000000..5ccdd5fe Binary files /dev/null and b/image/generals/zhouyu.jpg differ diff --git a/image/generals/zhugeliang.jpg b/image/generals/zhugeliang.jpg new file mode 100644 index 00000000..5b5e88d3 Binary files /dev/null and b/image/generals/zhugeliang.jpg differ diff --git a/image/photo/back/god.png b/image/photo/back/god.png new file mode 100644 index 00000000..b36a9ebb Binary files /dev/null and b/image/photo/back/god.png differ diff --git a/image/photo/back/qun.png b/image/photo/back/qun.png new file mode 100644 index 00000000..f831f7c2 Binary files /dev/null and b/image/photo/back/qun.png differ diff --git a/image/photo/back/shu.png b/image/photo/back/shu.png new file mode 100644 index 00000000..049b5b52 Binary files /dev/null and b/image/photo/back/shu.png differ diff --git a/image/photo/back/wei.png b/image/photo/back/wei.png new file mode 100644 index 00000000..c46c149b Binary files /dev/null and b/image/photo/back/wei.png differ diff --git a/image/photo/back/wu.png b/image/photo/back/wu.png new file mode 100644 index 00000000..0628a34e Binary files /dev/null and b/image/photo/back/wu.png differ diff --git a/image/photo/chain.png b/image/photo/chain.png new file mode 100644 index 00000000..472870bc Binary files /dev/null and b/image/photo/chain.png differ diff --git a/image/photo/control/timebar.png b/image/photo/control/timebar.png new file mode 100644 index 00000000..6a3ae416 Binary files /dev/null and b/image/photo/control/timebar.png differ diff --git a/image/photo/control/timebar_bg.png b/image/photo/control/timebar_bg.png new file mode 100644 index 00000000..1b79c0d4 Binary files /dev/null and b/image/photo/control/timebar_bg.png differ diff --git a/image/photo/control/tip.png b/image/photo/control/tip.png new file mode 100644 index 00000000..86ae867b Binary files /dev/null and b/image/photo/control/tip.png differ diff --git a/image/photo/death/lord.png b/image/photo/death/lord.png new file mode 100644 index 00000000..3ca1986b Binary files /dev/null and b/image/photo/death/lord.png differ diff --git a/image/photo/death/loyalist.png b/image/photo/death/loyalist.png new file mode 100644 index 00000000..fc0c66e6 Binary files /dev/null and b/image/photo/death/loyalist.png differ diff --git a/image/photo/death/rebel.png b/image/photo/death/rebel.png new file mode 100644 index 00000000..1126fd90 Binary files /dev/null and b/image/photo/death/rebel.png differ diff --git a/image/photo/death/renegade.png b/image/photo/death/renegade.png new file mode 100644 index 00000000..4ad1f893 Binary files /dev/null and b/image/photo/death/renegade.png differ diff --git a/image/photo/death/run.png b/image/photo/death/run.png new file mode 100644 index 00000000..d23f504c Binary files /dev/null and b/image/photo/death/run.png differ diff --git a/image/photo/death/saveme.png b/image/photo/death/saveme.png new file mode 100644 index 00000000..21743f84 Binary files /dev/null and b/image/photo/death/saveme.png differ diff --git a/image/photo/death/surrender.png b/image/photo/death/surrender.png new file mode 100644 index 00000000..2c64ce67 Binary files /dev/null and b/image/photo/death/surrender.png differ diff --git a/image/photo/death/unknown.png b/image/photo/death/unknown.png new file mode 100644 index 00000000..5b18e843 Binary files /dev/null and b/image/photo/death/unknown.png differ diff --git a/image/photo/disable.png b/image/photo/disable.png new file mode 100644 index 00000000..e26de241 Binary files /dev/null and b/image/photo/disable.png differ diff --git a/image/photo/equipbg.png b/image/photo/equipbg.png new file mode 100644 index 00000000..5c4b4d01 Binary files /dev/null and b/image/photo/equipbg.png differ diff --git a/image/photo/faceturned.png b/image/photo/faceturned.png new file mode 100644 index 00000000..dbefce64 Binary files /dev/null and b/image/photo/faceturned.png differ diff --git a/image/photo/handcard.png b/image/photo/handcard.png new file mode 100644 index 00000000..8bfc5b22 Binary files /dev/null and b/image/photo/handcard.png differ diff --git a/image/photo/magatama/0.png b/image/photo/magatama/0.png new file mode 100644 index 00000000..3f95e48b Binary files /dev/null and b/image/photo/magatama/0.png differ diff --git a/image/photo/magatama/1.png b/image/photo/magatama/1.png new file mode 100644 index 00000000..9ec70bd1 Binary files /dev/null and b/image/photo/magatama/1.png differ diff --git a/image/photo/magatama/2.png b/image/photo/magatama/2.png new file mode 100644 index 00000000..934048cd Binary files /dev/null and b/image/photo/magatama/2.png differ diff --git a/image/photo/magatama/3.png b/image/photo/magatama/3.png new file mode 100644 index 00000000..eb2b58cc Binary files /dev/null and b/image/photo/magatama/3.png differ diff --git a/image/photo/role/lord.png b/image/photo/role/lord.png new file mode 100644 index 00000000..9ac1cc81 Binary files /dev/null and b/image/photo/role/lord.png differ diff --git a/image/photo/role/loyalist.png b/image/photo/role/loyalist.png new file mode 100644 index 00000000..769d8eb9 Binary files /dev/null and b/image/photo/role/loyalist.png differ diff --git a/image/photo/role/rebel.png b/image/photo/role/rebel.png new file mode 100644 index 00000000..386c8f09 Binary files /dev/null and b/image/photo/role/rebel.png differ diff --git a/image/photo/role/renegade.png b/image/photo/role/renegade.png new file mode 100644 index 00000000..a514a86e Binary files /dev/null and b/image/photo/role/renegade.png differ diff --git a/image/photo/role/unknown.png b/image/photo/role/unknown.png new file mode 100644 index 00000000..9501591e Binary files /dev/null and b/image/photo/role/unknown.png differ diff --git a/image/photo/state/leave.png b/image/photo/state/leave.png new file mode 100644 index 00000000..53cc5a2a Binary files /dev/null and b/image/photo/state/leave.png differ diff --git a/image/photo/state/offline.png b/image/photo/state/offline.png new file mode 100644 index 00000000..53cc5a2a Binary files /dev/null and b/image/photo/state/offline.png differ diff --git a/image/photo/state/online.png b/image/photo/state/online.png new file mode 100644 index 00000000..c0774756 Binary files /dev/null and b/image/photo/state/online.png differ diff --git a/image/photo/state/robot.png b/image/photo/state/robot.png new file mode 100644 index 00000000..c0774756 Binary files /dev/null and b/image/photo/state/robot.png differ diff --git a/image/photo/state/trust.png b/image/photo/state/trust.png new file mode 100644 index 00000000..d04b605a Binary files /dev/null and b/image/photo/state/trust.png differ diff --git a/image/photo/status/03lvse_02.png b/image/photo/status/03lvse_02.png new file mode 100644 index 00000000..01575d6d Binary files /dev/null and b/image/photo/status/03lvse_02.png differ diff --git a/image/photo/status/04lanse_03.png b/image/photo/status/04lanse_03.png new file mode 100644 index 00000000..7e823b59 Binary files /dev/null and b/image/photo/status/04lanse_03.png differ diff --git a/image/photo/status/06huangse_05.png b/image/photo/status/06huangse_05.png new file mode 100644 index 00000000..49ce87c0 Binary files /dev/null and b/image/photo/status/06huangse_05.png differ diff --git a/image/photo/status/saveme.png b/image/photo/status/saveme.png new file mode 100644 index 00000000..b3c3e8ed Binary files /dev/null and b/image/photo/status/saveme.png differ diff --git a/image/photo/status/target.png b/image/photo/status/target.png new file mode 100644 index 00000000..a5a375af Binary files /dev/null and b/image/photo/status/target.png differ diff --git a/image/photo/status/use.png b/image/photo/status/use.png new file mode 100644 index 00000000..4ca1ce3c Binary files /dev/null and b/image/photo/status/use.png differ diff --git a/lua/freekill.lua b/lua/freekill.lua index 4ae794e6..b63b2588 100644 --- a/lua/freekill.lua +++ b/lua/freekill.lua @@ -7,6 +7,8 @@ package.path = package.path .. ';./lua/lib/?.lua' class = require 'middleclass' json = require 'json' +DebugMode = true + function pt(t) for k, v in pairs(t) do print(k, v) diff --git a/lua/server/server.lua b/lua/server/server.lua index dcf3d789..e2c8e6e8 100644 --- a/lua/server/server.lua +++ b/lua/server/server.lua @@ -41,4 +41,12 @@ freekill.server_callback["QuitRoom"] = function(jsonData) end end +freekill.server_callback["DoLuaScript"] = function(jsonData) + -- jsonData: [ int uid, string luaScript ] + -- warning: only use this in debugging mode. + if not DebugMode then return end + local data = json.decode(jsonData) + assert(load(data[2]))() +end + ServerInstance = Server:new() diff --git a/packages/standard/init.lua b/packages/standard/init.lua new file mode 100644 index 00000000..8d1c8b69 --- /dev/null +++ b/packages/standard/init.lua @@ -0,0 +1 @@ + diff --git a/packages/standard/metadata.json b/packages/standard/metadata.json new file mode 100644 index 00000000..8d1c8b69 --- /dev/null +++ b/packages/standard/metadata.json @@ -0,0 +1 @@ + diff --git a/qml/Logic.js b/qml/Logic.js new file mode 100644 index 00000000..cf4fbb51 --- /dev/null +++ b/qml/Logic.js @@ -0,0 +1,33 @@ +var callbacks = {} + +callbacks["ErrorMsg"] = function(jsonData) { + toast.show(jsonData); + mainWindow.busy = false; +} + +callbacks["EnterLobby"] = function(jsonData) { + // depth == 1 means the lobby page is not present in mainStack + if (mainStack.depth === 1) { + mainStack.push(lobby); + } + mainWindow.busy = false; +} + +callbacks["EnterRoom"] = function(jsonData) { + mainStack.push(room); + mainWindow.busy = false; +} + +callbacks["UpdateRoomList"] = function(jsonData) { + let current = mainStack.currentItem; // should be lobby + current.roomModel.clear(); + JSON.parse(jsonData).forEach(function(room) { + current.roomModel.append({ + roomId: room[0], + roomName: room[1], + gameMode: room[2], + playerNum: room[3], + capacity: room[4], + }); + }); +} diff --git a/qml/Pages/Room.qml b/qml/Pages/Room.qml index e40d29e0..0a73af58 100644 --- a/qml/Pages/Room.qml +++ b/qml/Pages/Room.qml @@ -1,18 +1,98 @@ import QtQuick 2.15 import QtQuick.Controls 2.0 +import QtQuick.Layouts 1.15 +import "RoomElement" +import "RoomLogic.js" as Logic Item { - id: root + id: roomScene + + property var photoModel: [] + property int playerNum: 0 + property var dashboardModel + + // tmp Text { anchors.centerIn: parent text: "You are in room." } Button { text: "quit" + anchors.bottom: parent.bottom onClicked: { mainStack.pop(); Backend.notifyServer("QuitRoom", "[]"); } } + + // For debugging + RowLayout { + visible: Debugging ? true : false + width: parent.width + TextField { + id: lua + Layout.fillWidth: true + text: "player" + } + Button { + text: "DoLuaScript" + onClicked: { + Backend.notifyServer("DoLuaScript", JSON.stringify([lua.text])); + } + } + } + + /* Layout: + * +---------------------+ + * | Photos, get more | + * | in arrangePhotos() | + * | tablePile | + * | progress,prompt,btn | + * +---------------------+ + * | dashboard | + * +---------------------+ + */ + + Item { + id: roomArea + width: roomScene.width + height: roomScene.height - dashboard.height + + Repeater { + id: photos + model: photoModel + Photo { + // TODO + } + } + + onWidthChanged: Logic.arrangePhotos(); + onHeightChanged: Logic.arrangePhotos(); + + InvisibleCardArea { + id: drawPile + x: parent.width / 2 + y: roomScene.height / 2 + } + + TablePile { + id: tablePile + width: parent.width * 0.6 + height: 150 + x: parent.width * 0.2 + y: parent.height * 0.5 + } + } + + Dashboard { + id: dashboard + width: roomScene.width + anchors.top: roomArea.bottom + } + + Component.onCompleted: { + toast.show("Sucesessfully entered room."); + Logic.arrangePhotos(); + } } diff --git a/qml/Pages/RoomElement/CardArea.qml b/qml/Pages/RoomElement/CardArea.qml new file mode 100644 index 00000000..3ccf334d --- /dev/null +++ b/qml/Pages/RoomElement/CardArea.qml @@ -0,0 +1,77 @@ +import QtQuick 2.15 + +// CardArea stores CardItem. + +Item { + property var cards: [] + property int length: 0 + + id: root + + function add(inputs) + { + if (inputs instanceof Array) { + cards.push(...inputs); + } else { + cards.push(inputs); + } + length = cards.length; + } + + function remove(outputs) + { + var result = []; + for (var i = 0; i < cards.length; i++) { + for (var j = 0; j < outputs.length; j++) { + if (outputs[j] === cards[i].cid) { + result.push(cards[i]); + cards.splice(i, 1); + i--; + break; + } + } + } + length = cards.length; + return result; + } + + function updateCardPosition(animated) + { + var i, card; + + var overflow = false; + for (i = 0; i < cards.length; i++) { + card = cards[i]; + card.origX = i * card.width; + if (card.origX + card.width >= root.width) { + overflow = true; + break; + } + card.origY = 0; + } + + if (overflow) { + // TODO: Adjust cards in multiple lines if there are too many cards + var xLimit = root.width - card.width; + var spacing = xLimit / (cards.length - 1); + for (i = 0; i < cards.length; i++) { + card = cards[i]; + card.origX = i * spacing; + card.origY = 0; + } + } + + var parentPos = roomScene.mapFromItem(root, 0, 0); + for (i = 0; i < cards.length; i++) { + card = cards[i]; + card.origX += parentPos.x; + card.origY += parentPos.y; + } + + if (animated) { + for (i = 0; i < cards.length; i++) + cards[i].goBack(true); + } + } +} + diff --git a/qml/Pages/RoomElement/CardItem.qml b/qml/Pages/RoomElement/CardItem.qml new file mode 100644 index 00000000..9e867518 --- /dev/null +++ b/qml/Pages/RoomElement/CardItem.qml @@ -0,0 +1,213 @@ +import QtQuick 2.15 +import QtGraphicalEffects 1.0 +import "../skin-bank.js" as SkinBank + +/* Layout of card: + * +--------+ + * num -|5 | + * suit-|s | + * | img | + * | | + * |footnote| + * +--------+ + */ + +Item { + id: root + width: 93 + height: 130 + + // properties for the view + property string suit: "club" + property int number: 7 + property string name: "slash" + property string color: "" // only use when suit is empty + property string footnote: "曹操对刘备" // footnote, e.g. "A use card to B" + property bool footnoteVisible: true + property bool known: true // if false it only show a card back + property bool enabled: true // if false the card will be grey + property alias glow: glowItem + + function getColor() { + if (suit != "") + return (suit == "heart" || suit == "diamond") ? "red" : "black"; + else return color; + } + + // properties for animation and game system + property int cid: 0 + property bool selectable: true + property bool selected: false + property int origX: 0 + property int origY: 0 + property real origOpacity: 0 + property bool moveAborted: false + property alias goBackAnim: goBackAnimation + property int goBackDuration: 500 + + signal toggleDiscards() + signal clicked() + signal doubleClicked() + signal thrown() + signal released() + signal entered() + signal exited() + signal moveFinished() + signal generalChanged() // For choose general freely + signal hoverChanged(bool enter) + + RectangularGlow { + id: glowItem + anchors.fill: parent + glowRadius: 8 + spread: 0 + color: "#88FFFFFF" + cornerRadius: 8 + visible: false + } + + Image { + id: cardItem + source: known ? (name != "" ? SkinBank.CARD_DIR + name : "") + : (SkinBank.CARD_DIR + "card-back") + anchors.fill: parent + } + + Image { + id: suitItem + visible: known + source: suit != "" ? SkinBank.CARD_SUIT_DIR + suit : "" + x: 3 + y: 19 + width: 21 + height: 17 + } + + Image { + id: numberItem + visible: known + source: (suit != "" && number > 0) ? SkinBank.CARD_DIR + + "number/" + root.getColor() + "/" + number : "" + x: 0 + y: 0 + width: 27 + height: 28 + } + + Image { + id: colorItem + visible: known && suit == "" + source: visible ? SkinBank.CARD_SUIT_DIR + "/" + color : "" + x: 1 + } + + GlowText { + id: footnoteItem + text: footnote + x: 6 + y: parent.height - height - 6 + width: root.width - x * 2 + color: "#E4D5A0" + visible: footnoteVisible + wrapMode: Text.WrapAnywhere + horizontalAlignment: Text.AlignHCenter + font.family: "FZLiBian-S02" + font.pixelSize: 14 + glow.color: "black" + glow.spread: 1 + glow.radius: 1 + glow.samples: 12 + } + + Rectangle { + visible: !root.selectable + anchors.fill: parent + color: Qt.rgba(0, 0, 0, 0.5) + opacity: 0.7 + } + + ParallelAnimation { + id: goBackAnimation + + PropertyAnimation { + target: root + property: "x" + to: origX + easing.type: Easing.OutQuad + duration: goBackDuration + } + + PropertyAnimation { + target: root + property: "y" + to: origY + easing.type: Easing.OutQuad + duration: goBackDuration + } + + SequentialAnimation { + PropertyAnimation { + target: root + property: "opacity" + to: 1 + easing.type: Easing.OutQuad + duration: goBackDuration * 0.8 + } + + PropertyAnimation { + target: root + property: "opacity" + to: origOpacity + easing.type: Easing.OutQuad + duration: goBackDuration * 0.2 + } + } + + onStopped: { + if (!moveAborted) + root.moveFinished(); + } + } + + function setData(data) + { + cid = data.cid; + name = data.name; + suit = data.suit; + number = data.number; + color = data.color; + } + + function toData() + { + var data = { + cid: cid, + name: name, + suit: suit, + number: number, + color: color + }; + return data; + } + + function goBack(animated) + { + if (animated) { + moveAborted = true; + goBackAnimation.stop(); + moveAborted = false; + goBackAnimation.start(); + } else { + x = origX; + y = origY; + opacity = origOpacity; + } + } + + function destroyOnStop() + { + root.moveFinished.connect(function(){ + destroy(); + }); + } +} diff --git a/qml/Pages/RoomElement/Dashboard.qml b/qml/Pages/RoomElement/Dashboard.qml new file mode 100644 index 00000000..829c6266 --- /dev/null +++ b/qml/Pages/RoomElement/Dashboard.qml @@ -0,0 +1,21 @@ +import QtQuick 2.15 +import QtQuick.Layouts 1.1 +import QtGraphicalEffects 1.0 + +RowLayout { + id: root + + property alias self: selfPhoto + + HandcardArea { + id: handcardAreaItem + Layout.fillWidth: true + Layout.fillHeight: true + } + + Photo { + id: selfPhoto + } + + Item { width: 5 } +} diff --git a/qml/Pages/RoomElement/GlowText.qml b/qml/Pages/RoomElement/GlowText.qml new file mode 100644 index 00000000..243f8b3f --- /dev/null +++ b/qml/Pages/RoomElement/GlowText.qml @@ -0,0 +1,30 @@ +import QtQuick 2.15 +import QtGraphicalEffects 1.0 + +Item { + property alias text: textItem.text + property alias color: textItem.color + property alias font: textItem.font + property alias fontSizeMode: textItem.fontSizeMode + property alias horizontalAlignment: textItem.horizontalAlignment + property alias verticalAlignment: textItem.verticalAlignment + property alias style: textItem.style + property alias styleColor: textItem.styleColor + property alias wrapMode: textItem.wrapMode + property alias lineHeight: textItem.lineHeight + property alias glow: glowItem + + width: textItem.implicitWidth + height: textItem.implicitHeight + + Text { + id: textItem + anchors.fill: parent + } + + Glow { + id: glowItem + source: textItem + anchors.fill: textItem + } +} diff --git a/qml/Pages/RoomElement/HandcardArea.qml b/qml/Pages/RoomElement/HandcardArea.qml new file mode 100644 index 00000000..09c60c88 --- /dev/null +++ b/qml/Pages/RoomElement/HandcardArea.qml @@ -0,0 +1,130 @@ +import QtQuick 2.15 + +Item { + property alias cards: cardArea.cards + property alias length: cardArea.length + property var selectedCards: [] + + signal cardSelected(int cardId, bool selected) + + id: area + + CardArea { + anchors.fill: parent + id: cardArea + onLengthChanged: area.updateCardPosition(true); + } + + function add(inputs) + { + cardArea.add(inputs); + if (inputs instanceof Array) { + for (var i = 0; i < inputs.length; i++) + filterInputCard(inputs[i]); + } else { + filterInputCard(inputs); + } + } + + function filterInputCard(card) + { + card.autoBack = true; + card.draggable = true; + card.selectable = false; + card.clicked.connect(adjustCards); + } + + function remove(outputs) + { + var result = cardArea.remove(outputs); + var card; + for (var i = 0; i < result.length; i++) { + card = result[i]; + card.draggable = false; + card.selectable = false; + card.selectedChanged.disconnect(adjustCards); + } + return result; + } + + function enableCards(cardIds) + { + var card, i; + for (i = 0; i < cards.length; i++) { + card = cards[i]; + card.selectable = cardIds.contains(card.cid); + if (!card.selectable) { + card.selected = false; + unselectCard(card); + } + } + } + + function updateCardPosition(animated) + { + cardArea.updateCardPosition(false); + + var i, card; + for (i = 0; i < cards.length; i++) { + card = cards[i]; + if (card.selected) + card.homeY -= 20; + } + + if (animated) { + for (i = 0; i < cards.length; i++) + roomScene.cardItemGoBack(cards[i], true) + } + } + + function adjustCards() + { + area.updateCardPosition(true); + + for (var i = 0; i < cards.length; i++) { + var card = cards[i]; + if (card.selected) { + if (!selectedCards.contains(card)) + selectCard(card); + } else { + if (selectedCards.contains(card)) + unselectCard(card); + } + } + } + + function selectCard(card) + { + selectedCards.push(card); + cardSelected(card.cid, true); + } + + function unselectCard(card) + { + for (var i = 0; i < selectedCards.length; i++) { + if (selectedCards[i] === card) { + selectedCards.splice(i, 1); + cardSelected(card.cid, false); + break; + } + } + } + + function unselectAll(exceptId) { + let card = undefined; + for (var i = 0; i < selectedCards.length; i++) { + if (selectedCards[i].cid !== exceptId) { + selectedCards[i].selected = false; + } else { + card = selectedCards[i]; + card.selected = true; + } + } + if (card === undefined) { + selectedCards = []; + } else { + selectedCards = [card]; + } + updateCardPosition(true); + } +} diff --git a/qml/Pages/RoomElement/InvisibleCardArea.qml b/qml/Pages/RoomElement/InvisibleCardArea.qml new file mode 100644 index 00000000..bb2c17b8 --- /dev/null +++ b/qml/Pages/RoomElement/InvisibleCardArea.qml @@ -0,0 +1,111 @@ +import QtQuick 2.15 + +Item { + property var cards: [] + property int length: 0 + property var pendingInput: [] + property bool checkExisting: false + + id: root + + function add(inputs) + { + var card; + if (inputs instanceof Array) { + for (var i = 0; i < inputs.length; i++) { + card = inputs[i]; + pendingInput.push(card); + cards.push(card.toData()); + } + + if (checkExisting) + length = cards.length; + else + length += inputs.length; + } else { + pendingInput.push(inputs); + cards.push(inputs.toData()); + + if (checkExisting) + length = cards.length; + else + length++; + } + } + + function _contains(cid) + { + if (!checkExisting) + return true; + + for (var i = 0; i < cards.length; i++) + { + if (cards[i].cid === cid) + return true; + } + return false; + } + + function remove(outputs) + { + var component = Qt.createComponent("CardItem.qml"); + if (component.status !== Component.Ready) + return []; + + var parentPos = roomScene.mapFromItem(root, 0, 0); + var card; + var items = []; + for (let i = 0; i < outputs.length; i++) { + if (_contains(outputs[i])) { + let state = JSON.parse(Sanguosha.getCard4Qml(outputs[i])) + state.x = parentPos.x; + state.y = parentPos.y; + state.opacity = 0; + card = component.createObject(roomScene, state); + card.x -= card.width / 2; + card.x += (i - outputs.length / 2) * 15; + card.y -= card.height / 2; + items.push(card); + if (checkExisting) { + //@to-do: remove it from cards + cards.splice(i, 1); + i--; + } + } + } + if (checkExisting) + length = cards.length; + else + length -= outputs.length; + return items; + } + + function updateCardPosition(animated) + { + var i, card; + + if (animated) { + var parentPos = roomScene.mapFromItem(root, 0, 0); + for (i = 0; i < pendingInput.length; i++) { + card = pendingInput[i]; + card.origX = parentPos.x - card.width / 2 + ((i - pendingInput.length / 2) * 15); + card.origY = parentPos.y - card.height / 2; + card.origOpacity = 0; + card.destroyOnStop(); + } + + for (i = 0; i < pendingInput.length; i++) + pendingInput[i].goBack(true); + } else { + for (i = 0; i < pendingInput.length; i++) { + card = pendingInput[i]; + card.x = parentPos.x - card.width / 2; + card.y = parentPos.y - card.height / 2; + card.opacity = 1; + card.destroy(); + } + } + + pendingInput = []; + } +} diff --git a/qml/Pages/RoomElement/Photo.qml b/qml/Pages/RoomElement/Photo.qml new file mode 100644 index 00000000..865f3b32 --- /dev/null +++ b/qml/Pages/RoomElement/Photo.qml @@ -0,0 +1,154 @@ +import QtQuick 2.15 +import QtGraphicalEffects 1.15 +import "PhotoElement" +import "../skin-bank.js" as SkinBank + +Item { + id: root + width: 175 + height: 233 + scale: 0.8 + property string general: "liubei" + property string screenName: "" + property string role: "lord" + property string kingdom: "shu" + property string netstate: "trust" + property int handcards: 0 + property int maxHp: 4 + property int hp: 3 + property int seatNumber: 3 + property bool isDead: false + property bool dying: false + property bool faceturned: false + property bool chained: false + property bool drank: false + + Image { + id: back + source: SkinBank.PHOTO_BACK_DIR + root.kingdom + } + + Text { + id: generalName + x: 5 + y: 28 + font.family: "FZLiBian-S02" + font.pixelSize: 22 + opacity: 0.7 + horizontalAlignment: Text.AlignHCenter + lineHeight: 18 + lineHeightMode: Text.FixedHeight + color: "white" + width: 24 + wrapMode: Text.WordWrap + text: "刘备" + } + + HpBar { + id: hp + x: 8 + value: root.hp + maxValue: root.maxHp + anchors.bottom: parent.bottom + anchors.bottomMargin: 36 + } + + Image { + id: generalImage + width: 138 + height: 222 + smooth: true + visible: false + fillMode: Image.PreserveAspectCrop + source: SkinBank.GENERAL_DIR + general + } + + Rectangle { + id: photoMask + x: 31 + y: 5 + width: 138 + height: 222 + radius: 8 + visible: false + } + + OpacityMask { + anchors.fill: photoMask + source: generalImage + maskSource: photoMask + } + + Colorize { + anchors.fill: photoMask + source: generalImage + saturation: 0 + visible: root.isDead + } + + Image { + id: turnedOver + visible: root.faceturned + source: SkinBank.PHOTO_DIR + "faceturned" + anchors.centerIn: photoMask + } + + Image { + id: chain + visible: root.chained + source: SkinBank.PHOTO_DIR + "chain" + anchors.horizontalCenter: parent.horizontalCenter + y: 72 + } + + Image { + // id: saveme + visible: root.isDead || root.dying + source: SkinBank.DEATH_DIR + (root.isDead ? root.role : "saveme") + anchors.centerIn: photoMask + } + + Image { + id: netstat + source: SkinBank.STATE_DIR + root.netstate + x: photoMask.x + y: photoMask.y + } + + Image { + id: handcardNum + source: SkinBank.PHOTO_DIR + "handcard" + anchors.bottom: parent.bottom + anchors.bottomMargin: -6 + x: -6 + + Text { + text: root.handcards + font.family: "FZLiBian-S02" + font.pixelSize: 32 + //font.weight: 30 + color: "white" + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + anchors.bottomMargin: 4 + style: Text.Outline + } + } + + RoleComboBox { + id: role + value: root.role + anchors.top: parent.top + anchors.topMargin: -4 + anchors.right: parent.right + anchors.rightMargin: -4 + } + + Text { + id: seatNum + visible: false // TODO + property var seatChr: ["一", "二", "三", "四", "五", "六", "七"] + font.family: "FZLiShu II-S06S" + text: seatChr[root.seatNumber - 1] + } +} diff --git a/qml/Pages/RoomElement/PhotoElement/DelayedTrickArea.qml b/qml/Pages/RoomElement/PhotoElement/DelayedTrickArea.qml new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/qml/Pages/RoomElement/PhotoElement/DelayedTrickArea.qml @@ -0,0 +1 @@ + diff --git a/qml/Pages/RoomElement/PhotoElement/EquipArea.qml b/qml/Pages/RoomElement/PhotoElement/EquipArea.qml new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/qml/Pages/RoomElement/PhotoElement/EquipArea.qml @@ -0,0 +1 @@ + diff --git a/qml/Pages/RoomElement/PhotoElement/HpBar.qml b/qml/Pages/RoomElement/PhotoElement/HpBar.qml new file mode 100644 index 00000000..470a0e49 --- /dev/null +++ b/qml/Pages/RoomElement/PhotoElement/HpBar.qml @@ -0,0 +1,72 @@ +import QtQuick 2.15 +import ".." + +Column { + id: root + property int maxValue: 4 + property int value: 4 + property var colors: ["#F4180E", "#F4180E", "#E3B006", "#25EC27"] + + Repeater { + id: repeater + model: maxValue <= 4 ? maxValue : 0 + Magatama { + state: (maxValue - 1 - index) >= value ? 0 : (value >= 3 || value >= maxValue ? 3 : (value <= 0 ? 0 : value)) + } + } + + Column { + visible: maxValue > 4 + spacing: -4 + + Magatama { + state: (value >= 3 || value >= maxValue) ? 3 : (value <= 0 ? 0 : value) + } + + GlowText { + id: hpItem + width: root.width + text: value + color: root.colors[(value >= 3 || value >= maxValue) ? 3 : (value <= 0 ? 0 : value)] + font.family: "FZLiBian-S02" + font.pixelSize: 22 + font.bold: true + horizontalAlignment: Text.AlignHCenter + + glow.color: "#3E3F47" + glow.spread: 0.8 + glow.radius: 8 + glow.samples: 12 + } + + GlowText { + id: splitter + width: root.width + text: "/" + z: -10 + color: hpItem.color + font: hpItem.font + horizontalAlignment: hpItem.horizontalAlignment + + glow.color: hpItem.glow.color + glow.spread: hpItem.glow.spread + glow.radius: hpItem.glow.radius + glow.samples: hpItem.glow.samples + } + + GlowText { + id: maxHpItem + width: root.width + text: maxValue + color: hpItem.color + font: hpItem.font + horizontalAlignment: hpItem.horizontalAlignment + + glow.color: hpItem.glow.color + glow.spread: hpItem.glow.spread + glow.radius: hpItem.glow.radius + glow.samples: hpItem.glow.samples + } + } +} + diff --git a/qml/Pages/RoomElement/PhotoElement/Magatama.qml b/qml/Pages/RoomElement/PhotoElement/Magatama.qml new file mode 100644 index 00000000..f8e4628c --- /dev/null +++ b/qml/Pages/RoomElement/PhotoElement/Magatama.qml @@ -0,0 +1,58 @@ +import QtQuick 2.15 +import "../../skin-bank.js" as SkinBank + +Image { + source: SkinBank.MAGATAMA_DIR + "0" + state: "3" + + states: [ + State { + name: "3" + PropertyChanges { + target: main + source: SkinBank.MAGATAMA_DIR + "3" + opacity: 1 + scale: 1 + } + }, + State { + name: "2" + PropertyChanges { + target: main + source: SkinBank.MAGATAMA_DIR + "2" + opacity: 1 + scale: 1 + } + }, + State { + name: "1" + PropertyChanges { + target: main + source: SkinBank.MAGATAMA_DIR + "1" + opacity: 1 + scale: 1 + } + }, + State { + name: "0" + PropertyChanges { + target: main + source: SkinBank.MAGATAMA_DIR + "0" + opacity: 0 + scale: 4 + } + } + ] + + transitions: Transition { + PropertyAnimation { + properties: "opacity,scale" + } + } + + Image { + id: main + anchors.centerIn: parent + } +} + diff --git a/qml/Pages/RoomElement/PhotoElement/RoleComboBox.qml b/qml/Pages/RoomElement/PhotoElement/RoleComboBox.qml new file mode 100644 index 00000000..b1d6e2e0 --- /dev/null +++ b/qml/Pages/RoomElement/PhotoElement/RoleComboBox.qml @@ -0,0 +1,47 @@ + +import QtQuick 2.15 +import "../../skin-bank.js" as SkinBank + +Image { + property string value: "unknown" + property var options: ["unknown", "loyalist", "rebel", "renegade"] + + id: root + source: visible ? SkinBank.ROLE_DIR + value : "" + visible: value != "hidden" + + Image { + property string value: "unknown" + + id: assumptionBox + source: SkinBank.ROLE_DIR + value + visible: root.value == "unknown" + + MouseArea { + anchors.fill: parent + onClicked: optionPopupBox.visible = true; + } + } + + Column { + id: optionPopupBox + visible: false + spacing: 2 + + Repeater { + model: options + + Image { + source: SkinBank.ROLE_DIR + modelData + + MouseArea { + anchors.fill: parent + onClicked: { + optionPopupBox.visible = false; + assumptionBox.value = modelData; + } + } + } + } + } +} diff --git a/qml/Pages/RoomElement/SkillArea.qml b/qml/Pages/RoomElement/SkillArea.qml new file mode 100644 index 00000000..ee41fbc8 --- /dev/null +++ b/qml/Pages/RoomElement/SkillArea.qml @@ -0,0 +1,5 @@ +import QtQuick 2.15 + +Flickable { + id: root +} diff --git a/qml/Pages/RoomElement/TablePile.qml b/qml/Pages/RoomElement/TablePile.qml new file mode 100644 index 00000000..684ba4c1 --- /dev/null +++ b/qml/Pages/RoomElement/TablePile.qml @@ -0,0 +1,138 @@ +import QtQuick 2.15 + +Item { + property var discardedCards: [] + property alias cards: area.cards + property bool toVanish: false + + id: root + + CardArea { + id: area + } + + InvisibleCardArea { + id: invisibleArea + } + + Timer { + id: vanishTimer + interval: 1500 + repeat: true + running: true + triggeredOnStart: true + onTriggered: { + var i, card; + if (toVanish) { + for (i = 0; i < discardedCards.length; i++) { + card = discardedCards[i]; + card.homeOpacity = 0; + // card.goBack(true); + roomScene.cardItemGoBack(card, true) + card.destroyOnStop() + } + + cards.splice(0, discardedCards.length); + updateCardPosition(true); + + discardedCards = new Array(cards.length); + for (i = 0; i < cards.length; i++) + discardedCards[i] = cards[i]; + toVanish = false + } else { + for (i = 0; i < discardedCards.length; i++) { + discardedCards[i].selectable = false + } + toVanish = true + } + } + } + + function add(inputs) + { + area.add(inputs); + // if (!inputs instanceof Array) + for (let i = 0; i < inputs.length; i++) { + inputs[i].footnoteVisible = true + inputs[i].selectable = true + } + } + + function remove(outputs) + { + var i, j; + + var result = area.remove(outputs); + var vanished = []; + if (result.length < outputs.length) { + for (i = 0; i < outputs.length; i++) { + var exists = false; + for (j = 0; j < result.length; j++) { + if (result[j].cid === outputs[i]) { + exists = true; + break; + } + } + if (!exists) + vanished.push(outputs[i]); + } + } + result = result.concat(invisibleArea.remove(vanished)); + + for (i = 0; i < result.length; i++) { + for (j = 0; j < discardedCards.length; j++) { + if (result[i].cid === discardedCards[j].cid) { + discardedCards.splice(j, 1); + break; + } + } + } + updateCardPosition(true); + return result; + } + + function updateCardPosition(animated) + { + if (cards.length <= 0) + return; + + var i, card; + + var overflow = false; + for (i = 0; i < cards.length; i++) { + card = cards[i]; + card.homeX = i * card.width; + if (card.homeX + card.width >= root.width) { + overflow = true; + break; + } + card.homeY = 0; + } + + if (overflow) { + //@to-do: Adjust cards in multiple lines if there are too many cards + var xLimit = root.width - card.width; + var spacing = xLimit / (cards.length - 1); + for (i = 0; i < cards.length; i++) { + card = cards[i]; + card.homeX = i * spacing; + card.homeY = 0; + } + } + + var offsetX = Math.max(0, (root.width - cards.length * card.width) / 2); + var parentPos = roomScene.mapFromItem(root, 0, 0); + for (i = 0; i < cards.length; i++) { + card = cards[i]; + card.homeX += parentPos.x + offsetX; + card.homeY += parentPos.y; + } + + if (animated) { + for (i = 0; i < cards.length; i++) + // cards[i].goBack() // WTF + // console.log(cards[i].homeOpacity) + roomScene.cardItemGoBack(cards[i], true) + } + } +} diff --git a/qml/Pages/RoomLogic.js b/qml/Pages/RoomLogic.js new file mode 100644 index 00000000..c51bb1ae --- /dev/null +++ b/qml/Pages/RoomLogic.js @@ -0,0 +1,49 @@ +function arrangePhotos() { + /* Layout of photos: + * +---------------+ + * | 6 5 4 3 2 | + * | 7 1 | + * | dashboard | + * +---------------+ + */ + + var photoWidth = 175; + var roomAreaPadding = 10; + var verticalPadding = Math.max(10, roomArea.width * 0.01); + var horizontalSpacing = Math.max(30, roomArea.height * 0.1); + var verticalSpacing = (roomArea.width - photoWidth * 7 - verticalPadding * 2) / 6; + + // Position 1-7 + var regions = [ + { x: verticalPadding + (photoWidth + verticalSpacing) * 6, y: roomAreaPadding + horizontalSpacing * 2 }, + { x: verticalPadding + (photoWidth + verticalSpacing) * 5, y: roomAreaPadding + horizontalSpacing }, + { x: verticalPadding + (photoWidth + verticalSpacing) * 4, y: roomAreaPadding }, + { x: verticalPadding + (photoWidth + verticalSpacing) * 3, y: roomAreaPadding }, + { x: verticalPadding + (photoWidth + verticalSpacing) * 2, y: roomAreaPadding }, + { x: verticalPadding + photoWidth + verticalSpacing, y: roomAreaPadding + horizontalSpacing }, + { x: verticalPadding, y: roomAreaPadding + horizontalSpacing * 2 }, + ]; + + var regularSeatIndex = [ + [4], + [3, 5], + [1, 4, 7], + [1, 3, 5, 7], + [1, 3, 4, 5, 7], + [1, 2, 3, 5, 6, 7], + [1, 2, 3, 4, 5, 6, 7], + ]; + var seatIndex = regularSeatIndex[playerNum - 2]; + + var item, region, i; + + for (i = 0; i < playerNum - 1; i++) { + item = photos.itemAt(i); + if (!item) + continue; + + region = regions[seatIndex[i] - 1]; + item.x = region.x; + item.y = region.y; + } +} diff --git a/qml/Pages/skin-bank.js b/qml/Pages/skin-bank.js new file mode 100644 index 00000000..2afb1e55 --- /dev/null +++ b/qml/Pages/skin-bank.js @@ -0,0 +1,10 @@ +//var AppPath = "file://home/notify/develop/FreeKill"; +var PHOTO_BACK_DIR = AppPath + "/image/photo/back/"; +var PHOTO_DIR = AppPath + "/image/photo/"; +var GENERAL_DIR = AppPath + "/image/generals/"; +var STATE_DIR = AppPath + "/image/photo/state/"; +var ROLE_DIR = AppPath + "/image/photo/role/"; +var DEATH_DIR = AppPath + "/image/photo/death/"; +var MAGATAMA_DIR = AppPath + "/image/photo/magatama/"; +var CARD_DIR = AppPath + "/image/card/"; +var CARD_SUIT_DIR = AppPath + "/image/card/suit/"; diff --git a/qml/main.qml b/qml/main.qml index d3dbb7d1..c2bf1976 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -1,6 +1,7 @@ import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Window 2.0 +import "Logic.js" as Logic import "Pages" Window { @@ -8,35 +9,7 @@ Window { visible: true width: 720 height: 480 - property var callbacks: ({ - "ErrorMsg": function(jsonData) { - toast.show(jsonData); - mainWindow.busy = false; - }, - "EnterLobby": function(jsonData) { - if (mainStack.depth === 1) { - mainStack.push(lobby); - } - mainWindow.busy = false; - }, - "EnterRoom": function(jsonData) { - mainStack.push(room); - mainWindow.busy = false; - }, - "UpdateRoomList": function(jsonData) { - let current = mainStack.currentItem; // should be lobby - current.roomModel.clear(); - JSON.parse(jsonData).forEach(function(room) { - current.roomModel.append({ - roomId: room[0], - roomName: room[1], - gameMode: room[2], - playerNum: room[3], - capacity: room[4], - }); - }); - } - }) + property var callbacks: Logic.callbacks StackView { id: mainStack diff --git a/src/main.cpp b/src/main.cpp index c7e6cb64..1d9fcf6e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include "qmlbackend.h" #include "server.h" @@ -36,6 +37,14 @@ int main(int argc, char *argv[]) QQmlApplicationEngine engine; QmlBackend backend; engine.rootContext()->setContextProperty("Backend", &backend); + QUrl currentDir = QUrl::fromLocalFile(QDir::currentPath()); + engine.rootContext()->setContextProperty("AppPath", currentDir); +#ifdef QT_DEBUG + bool debugging = true; +#else + bool debugging = false; +#endif + engine.rootContext()->setContextProperty("Debugging", debugging); engine.load("qml/main.qml"); return app.exec();