Clean up UI, work on tutorial
This commit is contained in:
parent
cfbd29d5b1
commit
619de45221
@ -4,7 +4,7 @@
|
|||||||
"name": "inai",
|
"name": "inai",
|
||||||
"texturePath": "resources/w/interior/Building_work014.png",
|
"texturePath": "resources/w/interior/Building_work014.png",
|
||||||
"textureDarkandsPath": "resources/w/interior/darklands_generated_building001.png",
|
"textureDarkandsPath": "resources/w/interior/darklands_generated_building001.png",
|
||||||
"meshPath": "resources/w/interior/Building_007.txt.bin",
|
"meshPath": "resources/w/interior/Building_008.txt",
|
||||||
"rotationX": 0.0,
|
"rotationX": 0.0,
|
||||||
"rotationY": 0.0,
|
"rotationY": 0.0,
|
||||||
"rotationZ": 0.0,
|
"rotationZ": 0.0,
|
||||||
|
|||||||
@ -26,14 +26,14 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Knife001",
|
"name": "Knife001",
|
||||||
"texturePath": "resources/w/white.png",
|
"texturePath": "resources/w/gg/Props.png",
|
||||||
"meshPath": "resources/w/interior/Knife.txt.bin",
|
"meshPath": "resources/w/interior/Knife_lay001_004.txt",
|
||||||
"rotationX": 0.0,
|
"rotationX": 0.0,
|
||||||
"rotationY": 0.0,
|
"rotationY": 0.0,
|
||||||
"rotationZ": 0.0,
|
"rotationZ": 0.0,
|
||||||
"positionX": -5.3964,
|
"positionX": -4.8327,
|
||||||
"positionY": 0.91414,
|
"positionY": 0.9197,
|
||||||
"positionZ": 2.54703,
|
"positionZ": 2.2418,
|
||||||
"approachRadius": 1.4,
|
"approachRadius": 1.4,
|
||||||
"boundsMaxX": 0.30867958068847656,
|
"boundsMaxX": 0.30867958068847656,
|
||||||
"boundsMaxY": 0.4,
|
"boundsMaxY": 0.4,
|
||||||
|
|||||||
@ -2,11 +2,11 @@
|
|||||||
"teleports": [
|
"teleports": [
|
||||||
{
|
{
|
||||||
"id": "tp_dorm_to_loc2",
|
"id": "tp_dorm_to_loc2",
|
||||||
"positionX": -8.32343,
|
"positionX": -11.4,
|
||||||
"positionY": 0.0,
|
"positionY": 0.0,
|
||||||
"positionZ": -0.152264,
|
"positionZ": 0.0,
|
||||||
"radius": 1.5,
|
"radius": 1.5,
|
||||||
"active": true,
|
"active": false,
|
||||||
"destinationLocation": "uni_exterior",
|
"destinationLocation": "uni_exterior",
|
||||||
"destinationPositionX": -15.1939,
|
"destinationPositionX": -15.1939,
|
||||||
"destinationPositionY": 0.0,
|
"destinationPositionY": 0.0,
|
||||||
|
|||||||
@ -1,6 +1,19 @@
|
|||||||
{
|
{
|
||||||
"teleports": [
|
"teleports": [
|
||||||
{
|
{
|
||||||
|
"id": "tp_loc2_to_dorm",
|
||||||
|
"positionX": -15.8665,
|
||||||
|
"positionY": 0.0,
|
||||||
|
"positionZ": -36.85,
|
||||||
|
"radius": 5.0,
|
||||||
|
"active": false,
|
||||||
|
"destinationLocation": "location_dorm",
|
||||||
|
"destinationPositionX": -8.32343,
|
||||||
|
"destinationPositionY": 0.0,
|
||||||
|
"destinationPositionZ": -0.152264,
|
||||||
|
"destinationRotationY": 1.5708
|
||||||
|
},
|
||||||
|
{
|
||||||
"id": "tp_loc2_to_loc1",
|
"id": "tp_loc2_to_loc1",
|
||||||
"positionX": 8.2,
|
"positionX": 8.2,
|
||||||
"positionY": 0.0,
|
"positionY": 0.0,
|
||||||
@ -12,19 +25,6 @@
|
|||||||
"destinationPositionY": 0.0,
|
"destinationPositionY": 0.0,
|
||||||
"destinationPositionZ": -9.37259,
|
"destinationPositionZ": -9.37259,
|
||||||
"destinationRotationY": -1.5708
|
"destinationRotationY": -1.5708
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "tp_loc2_to_dorm",
|
|
||||||
"positionX": -15.1939,
|
|
||||||
"positionY": 0.0,
|
|
||||||
"positionZ": -34.4107,
|
|
||||||
"radius": 5.0,
|
|
||||||
"active": true,
|
|
||||||
"destinationLocation": "location_dorm",
|
|
||||||
"destinationPositionX": -8.32343,
|
|
||||||
"destinationPositionY": 0.0,
|
|
||||||
"destinationPositionZ": -0.152264,
|
|
||||||
"destinationRotationY": 1.5708
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,14 @@
|
|||||||
{
|
{
|
||||||
"trigger_zones": [
|
"trigger_zones": [
|
||||||
|
{
|
||||||
|
"id": "taxi_zone001",
|
||||||
|
"positionX": -8.32343,
|
||||||
|
"positionY": 0.0,
|
||||||
|
"positionZ": 0.0,
|
||||||
|
"radius": 3.0,
|
||||||
|
"hysteresis": 0.3,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "pickup_phone_zone001",
|
"id": "pickup_phone_zone001",
|
||||||
"positionX": 2.54938,
|
"positionX": 2.54938,
|
||||||
|
|||||||
@ -1,5 +1,14 @@
|
|||||||
{
|
{
|
||||||
"trigger_zones": [
|
"trigger_zones": [
|
||||||
|
{
|
||||||
|
"id": "taxi_zone001",
|
||||||
|
"positionX": -15.0359,
|
||||||
|
"positionY": 0.0,
|
||||||
|
"positionZ": -30.2937,
|
||||||
|
"radius": 4.0,
|
||||||
|
"hysteresis": 0.4,
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "darklands_exit001",
|
"id": "darklands_exit001",
|
||||||
"positionX": 11.747,
|
"positionX": 11.747,
|
||||||
|
|||||||
BIN
resources/dialogue/ChoiceNormal001.png
(Stored with Git LFS)
Normal file
BIN
resources/dialogue/ChoiceNormal001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/dialogue/ChoiceSelected001.png
(Stored with Git LFS)
Normal file
BIN
resources/dialogue/ChoiceSelected001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/dialogue/DialogChoice001.png
(Stored with Git LFS)
Normal file
BIN
resources/dialogue/DialogChoice001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -89,6 +89,16 @@ game_api.set_trigger_zone_callbacks("ladder_zone001",
|
|||||||
nil
|
nil
|
||||||
)
|
)
|
||||||
|
|
||||||
|
function taxi_zone001_enter_callback()
|
||||||
|
game_api.start_dialogue("dialog_taxi001")
|
||||||
|
game_api.call_tutorial_taxi_required()
|
||||||
|
end
|
||||||
|
|
||||||
|
game_api.set_trigger_zone_callbacks("taxi_zone001",
|
||||||
|
taxi_zone001_enter_callback,
|
||||||
|
nil
|
||||||
|
)
|
||||||
|
|
||||||
function on_bed_sleep()
|
function on_bed_sleep()
|
||||||
if (not game_api.is_night()) then
|
if (not game_api.is_night()) then
|
||||||
game_api.start_dialogue("dialog_no_sleep001")
|
game_api.start_dialogue("dialog_no_sleep001")
|
||||||
|
|||||||
BIN
resources/test_cutscene001.png
(Stored with Git LFS)
BIN
resources/test_cutscene001.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/default_float001.anim
(Stored with Git LFS)
BIN
resources/w/default_float001.anim
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/default_float001_cut.anim
(Stored with Git LFS)
BIN
resources/w/default_float001_cut.anim
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/default_idle002.anim
(Stored with Git LFS)
BIN
resources/w/default_idle002.anim
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/default_walk001.anim
(Stored with Git LFS)
BIN
resources/w/default_walk001.anim
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/float_attack003.anim
(Stored with Git LFS)
BIN
resources/w/float_attack003.anim
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/float_attack003_cut.anim
(Stored with Git LFS)
BIN
resources/w/float_attack003_cut.anim
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/gg/Props.png
(Stored with Git LFS)
Normal file
BIN
resources/w/gg/Props.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -1,64 +1,122 @@
|
|||||||
===Vertices (Split by UV/Normal): 41
|
===Vertices (Split by UV/Normal): 41
|
||||||
V 0: Pos(0.02, 0.15, 0.0) Norm(0.577338, 0.577356, -0.577357) UV(0.77503, 0.750033)
|
V 0: Pos(-0.0, 5.7e-05, 1.422173) Norm(-1e-06, 0.920107, -0.391668) UV(0.038153, 0.92737)
|
||||||
V 1: Pos(-0.02, -0.15, 0.0) Norm(-0.577338, -0.577356, -0.577357) UV(0.808365, 0.500022)
|
V 1: Pos(0.006128, 0.050084, 1.443607) Norm(-0.613997, -0.475616, -0.629919) UV(0.028605, 0.949655)
|
||||||
V 2: Pos(-0.02, 0.15, 0.0) Norm(-0.577347, 0.577357, -0.577347) UV(0.808365, 0.750033)
|
V 2: Pos(0.012645, 0.059427, 1.417791) Norm(-0.739205, -0.650575, -0.174149) UV(0.040105, 0.953817)
|
||||||
V 3: Pos(0.02, -0.15, 0.6) Norm(0.577338, -0.577356, 0.577357) UV(0.866701, 0.496276)
|
V 3: Pos(-0.012645, 0.055039, 1.259587) Norm(0.754845, -0.655796, 0.011846) UV(0.125898, 0.952246)
|
||||||
V 4: Pos(-0.02, 0.15, 0.6) Norm(-0.577338, 0.577356, 0.577357) UV(0.833366, 0.746287)
|
V 4: Pos(-0.0, -0.055404, 1.081773) Norm(0.0, 0.999104, -0.042318) UV(0.213822, 0.894469)
|
||||||
V 5: Pos(-0.02, -0.15, 0.6) Norm(-0.577347, -0.577357, 0.577347) UV(0.833366, 0.496276)
|
V 5: Pos(-0.012645, 0.048755, 1.056192) Norm(0.751649, -0.659466, 0.011364) UV(0.228705, 0.94907)
|
||||||
V 6: Pos(0.02, -0.15, 0.0) Norm(0.577347, -0.577357, -0.577347) UV(0.833366, 0.496276)
|
V 6: Pos(-0.0, -0.035523, 1.289999) Norm(3.6e-05, 0.994157, -0.107942) UV(0.110526, 0.906471)
|
||||||
V 7: Pos(-0.02, -0.15, 0.6) Norm(-0.577347, -0.577357, 0.577347) UV(0.866701, 0.0)
|
V 7: Pos(0.012645, 0.055039, 1.259587) Norm(-0.754852, -0.655789, 0.011835) UV(0.125898, 0.952246)
|
||||||
V 8: Pos(-0.02, -0.15, 0.0) Norm(-0.577338, -0.577356, -0.577357) UV(0.866701, 0.496276)
|
V 8: Pos(-0.0, -0.040301, 0.610075) Norm(-5e-06, 0.999715, 0.023859) UV(0.56615, 0.898857)
|
||||||
V 9: Pos(0.02, 0.15, 0.0) Norm(0.577338, 0.577356, -0.577357) UV(0.500022, 0.5)
|
V 9: Pos(-0.012645, 0.046268, 0.747854) Norm(0.744681, -0.666628, 0.032518) UV(0.479093, 0.952662)
|
||||||
V 10: Pos(0.02, -0.15, 0.6) Norm(0.577338, -0.577356, 0.577357) UV(0.750033, 0.0)
|
V 10: Pos(-0.0, -0.060482, 0.826058) Norm(-2e-05, 1.0, -0.000105) UV(0.435536, 0.894543)
|
||||||
V 11: Pos(0.02, -0.15, 0.0) Norm(0.577347, -0.577357, -0.577347) UV(0.750033, 0.5)
|
V 11: Pos(0.012645, 0.024541, 0.589224) Norm(-0.69335, -0.554504, -0.460207) UV(0.577483, 0.934099)
|
||||||
V 12: Pos(-0.02, 0.15, 0.0) Norm(-0.577347, 0.577357, -0.577347) UV(0.77503, 0.500022)
|
V 12: Pos(0.033736, -0.04134, 0.575821) Norm(-0.685444, 0.61818, -0.384734) UV(0.584767, 0.898292)
|
||||||
V 13: Pos(0.02, 0.15, 0.6) Norm(0.577347, 0.577357, 0.577347) UV(0.808365, 0.0)
|
V 13: Pos(-0.0, -0.027796, 0.590145) Norm(-1e-06, 0.464145, -0.885759) UV(0.576982, 0.905654)
|
||||||
V 14: Pos(0.02, 0.15, 0.0) Norm(0.577338, 0.577356, -0.577357) UV(0.808365, 0.500022)
|
V 14: Pos(0.033736, 0.038391, 0.573675) Norm(-0.663441, -0.642047, -0.384215) UV(0.585933, 0.941626)
|
||||||
V 15: Pos(-0.02, -0.15, 0.0) Norm(-0.577338, -0.577356, -0.577357) UV(0.500022, 1.0)
|
V 15: Pos(0.01579, -0.032919, 0.44085) Norm(-0.700722, 0.712907, 0.02741) UV(0.657157, 0.899274)
|
||||||
V 16: Pos(-0.02, 0.15, 0.6) Norm(-0.577338, 0.577356, 0.577357) UV(0.750033, 0.5)
|
V 16: Pos(-0.01579, -0.032919, 0.44085) Norm(0.700728, 0.712902, 0.027411) UV(0.657157, 0.899274)
|
||||||
V 17: Pos(-0.02, 0.15, 0.0) Norm(-0.577347, 0.577357, -0.577347) UV(0.750033, 1.0)
|
V 17: Pos(-0.033736, 0.061479, 0.067748) Norm(0.672517, -0.736572, 0.071992) UV(0.917476, 0.96461)
|
||||||
V 18: Pos(0.015, 0.15, 0.6) Norm(0.583227, 0.576373, -0.572398) UV(0.8667, 0.250011)
|
V 18: Pos(-0.01579, 0.032786, 0.440702) Norm(0.699372, -0.714536, 0.017816) UV(0.657245, 0.938479)
|
||||||
V 19: Pos(-0.015, -0.15, 0.6) Norm(-0.570792, -0.648582, -0.503526) UV(0.891702, 0.0)
|
V 19: Pos(0.033736, 0.015689, 0.000187) Norm(-0.633407, -0.291172, 0.716948) UV(0.960945, 0.935148)
|
||||||
V 20: Pos(-0.015, 0.15, 0.6) Norm(-0.583229, 0.576375, -0.572394) UV(0.891702, 0.250011)
|
V 20: Pos(0.033736, -0.050242, 0.031808) Norm(-0.651358, 0.646109, 0.39784) UV(0.9406, 0.892727)
|
||||||
V 21: Pos(0.0, 0.05, 1.4) Norm(0.0, -0.417006, 0.908904) UV(0.166674, 0.0)
|
V 21: Pos(0.033736, 0.050242, 0.033003) Norm(-0.655582, -0.638984, 0.402383) UV(0.939831, 0.95738)
|
||||||
V 22: Pos(-0.015, 0.15, 0.6) Norm(-0.583229, 0.576375, -0.572394) UV(0.250011, 0.666784)
|
V 22: Pos(0.033736, -0.060156, 0.066285) Norm(-0.675813, 0.734528, 0.06121) UV(0.918417, 0.886348)
|
||||||
V 23: Pos(-0.015, -0.15, 0.6) Norm(-0.570792, -0.648582, -0.503526) UV(0.0, 0.666784)
|
V 23: Pos(0.033736, 0.061479, 0.067748) Norm(-0.672518, -0.736571, 0.071989) UV(0.917476, 0.96461)
|
||||||
V 24: Pos(0.015, 0.15, 0.6) Norm(0.583227, 0.576373, -0.572398) UV(0.250011, 0.666784)
|
V 24: Pos(0.012645, 0.036314, 0.610368) Norm(-0.709435, -0.664321, 0.23533) UV(0.56599, 0.940497)
|
||||||
V 25: Pos(0.0, 0.05, 1.4) Norm(0.0, -0.417006, 0.908904) UV(0.333348, 0.0)
|
V 25: Pos(0.012645, 0.048755, 1.056192) Norm(-0.751669, -0.659443, 0.011334) UV(0.228705, 0.94907)
|
||||||
V 26: Pos(0.015, -0.15, 0.6) Norm(0.570794, -0.648585, -0.50352) UV(0.500022, 0.666784)
|
V 26: Pos(-0.006128, 0.050084, 1.443607) Norm(0.613972, -0.47558, -0.62997) UV(0.028605, 0.949655)
|
||||||
V 27: Pos(-0.015, -0.15, 0.6) Norm(-0.570792, -0.648582, -0.503526) UV(0.77503, 0.68218)
|
V 27: Pos(-0.0, 0.024599, 1.452407) Norm(0.0, 0.481298, -0.876557) UV(0.024685, 0.938303)
|
||||||
V 28: Pos(0.015, -0.15, 0.6) Norm(0.570794, -0.648585, -0.50352) UV(0.750033, 0.681722)
|
V 28: Pos(-0.012645, 0.059427, 1.417791) Norm(0.739204, -0.650577, -0.174146) UV(0.040105, 0.953817)
|
||||||
V 29: Pos(0.0, 0.05, 1.4) Norm(0.0, -0.417006, 0.908904) UV(0.77503, 0.0)
|
V 29: Pos(0.012645, 0.046268, 0.747854) Norm(-0.744639, -0.666672, 0.032574) UV(0.479093, 0.952662)
|
||||||
V 30: Pos(-0.015, 0.15, 0.6) Norm(-0.583229, 0.576375, -0.572394) UV(0.808365, 0.666696)
|
V 30: Pos(-0.012645, 0.036314, 0.610368) Norm(0.709441, -0.664317, 0.235322) UV(0.56599, 0.940497)
|
||||||
V 31: Pos(0.0, 0.15, 1.4) Norm(0.0, 0.536928, 0.843628) UV(0.820865, 0.0)
|
V 31: Pos(-0.033736, -0.04134, 0.575821) Norm(0.685442, 0.618181, -0.384735) UV(0.584767, 0.898292)
|
||||||
V 32: Pos(0.015, 0.15, 0.6) Norm(0.583227, 0.576373, -0.572398) UV(0.833366, 0.666696)
|
V 32: Pos(-0.012645, 0.024541, 0.589224) Norm(0.693361, -0.554513, -0.46018) UV(0.577483, 0.934099)
|
||||||
V 33: Pos(0.02, -0.15, 0.0) Norm(0.577347, -0.577357, -0.577347) UV(0.77503, 0.500022)
|
V 33: Pos(-0.033736, 0.038391, 0.573675) Norm(0.66347, -0.642006, -0.384234) UV(0.585933, 0.941626)
|
||||||
V 34: Pos(0.02, 0.15, 0.6) Norm(0.577347, 0.577357, 0.577347) UV(0.866701, 0.746287)
|
V 34: Pos(0.01579, 0.032786, 0.440702) Norm(-0.69943, -0.71448, 0.017777) UV(0.657245, 0.938479)
|
||||||
V 35: Pos(0.02, -0.15, 0.6) Norm(0.577338, -0.577356, 0.577357) UV(0.833366, 0.0)
|
V 35: Pos(-0.033736, -0.050242, 0.031808) Norm(0.651349, 0.646115, 0.397844) UV(0.9406, 0.892727)
|
||||||
V 36: Pos(0.02, 0.15, 0.6) Norm(0.577347, 0.577357, 0.577347) UV(0.500022, 0.0)
|
V 36: Pos(-0.033736, 0.015689, 0.000187) Norm(0.633403, -0.291164, 0.716954) UV(0.960945, 0.935148)
|
||||||
V 37: Pos(-0.02, 0.15, 0.6) Norm(-0.577338, 0.577356, 0.577357) UV(0.77503, 0.0)
|
V 37: Pos(-0.033736, 0.050242, 0.033003) Norm(0.655581, -0.638982, 0.402387) UV(0.939831, 0.95738)
|
||||||
V 38: Pos(-0.02, -0.15, 0.6) Norm(-0.577347, -0.577357, 0.577347) UV(0.500022, 0.5)
|
V 38: Pos(-0.033736, -0.060156, 0.066285) Norm(0.67582, 0.734521, 0.061209) UV(0.918417, 0.886348)
|
||||||
V 39: Pos(0.015, -0.15, 0.6) Norm(0.570794, -0.648585, -0.50352) UV(0.8667, 0.0)
|
V 39: Pos(-0.033736, -0.015689, -0.000187) Norm(0.632466, 0.278334, 0.722853) UV(0.961186, 0.914959)
|
||||||
V 40: Pos(0.0, 0.15, 1.4) Norm(0.0, 0.536928, 0.843628) UV(0.250011, 0.0)
|
V 40: Pos(0.033736, -0.015689, -0.000187) Norm(-0.632455, 0.278335, 0.722863) UV(0.961186, 0.914959)
|
||||||
|
|
||||||
===Triangles (Indices): 20
|
===Triangles (Indices): 78
|
||||||
Tri: 0 1 2
|
Tri: 0 1 2
|
||||||
Tri: 3 4 5
|
Tri: 3 4 5
|
||||||
Tri: 6 7 8
|
Tri: 6 2 7
|
||||||
Tri: 9 10 11
|
Tri: 8 9 10
|
||||||
Tri: 12 13 14
|
Tri: 11 12 13
|
||||||
Tri: 15 16 17
|
Tri: 14 15 12
|
||||||
Tri: 18 19 20
|
Tri: 16 17 18
|
||||||
|
Tri: 19 20 21
|
||||||
Tri: 21 22 23
|
Tri: 21 22 23
|
||||||
Tri: 24 25 26
|
Tri: 24 13 8
|
||||||
Tri: 27 28 29
|
Tri: 25 10 4
|
||||||
Tri: 30 31 32
|
Tri: 0 26 27
|
||||||
Tri: 0 33 1
|
Tri: 6 28 0
|
||||||
Tri: 3 34 4
|
Tri: 29 30 24
|
||||||
Tri: 6 35 7
|
Tri: 31 32 13
|
||||||
Tri: 9 36 10
|
Tri: 16 33 31
|
||||||
Tri: 12 37 13
|
Tri: 17 34 18
|
||||||
Tri: 15 38 16
|
Tri: 35 36 37
|
||||||
Tri: 18 39 19
|
Tri: 38 37 17
|
||||||
Tri: 21 40 22
|
Tri: 13 30 8
|
||||||
Tri: 24 40 25
|
Tri: 10 5 4
|
||||||
|
Tri: 12 16 31
|
||||||
|
Tri: 38 15 22
|
||||||
|
Tri: 2 3 7
|
||||||
|
Tri: 8 29 24
|
||||||
|
Tri: 25 9 29
|
||||||
|
Tri: 23 15 34
|
||||||
|
Tri: 1 27 26
|
||||||
|
Tri: 19 39 40
|
||||||
|
Tri: 23 37 21
|
||||||
|
Tri: 4 7 25
|
||||||
|
Tri: 1 28 2
|
||||||
|
Tri: 40 35 20
|
||||||
|
Tri: 24 32 11
|
||||||
|
Tri: 7 5 25
|
||||||
|
Tri: 19 37 36
|
||||||
|
Tri: 20 38 22
|
||||||
|
Tri: 13 12 31
|
||||||
|
Tri: 14 18 34
|
||||||
|
Tri: 11 33 14
|
||||||
|
Tri: 0 27 1
|
||||||
|
Tri: 3 6 4
|
||||||
|
Tri: 6 0 2
|
||||||
|
Tri: 8 30 9
|
||||||
|
Tri: 11 14 12
|
||||||
|
Tri: 14 34 15
|
||||||
|
Tri: 16 38 17
|
||||||
|
Tri: 19 40 20
|
||||||
|
Tri: 21 20 22
|
||||||
|
Tri: 24 11 13
|
||||||
|
Tri: 25 29 10
|
||||||
|
Tri: 0 28 26
|
||||||
|
Tri: 6 3 28
|
||||||
|
Tri: 29 9 30
|
||||||
|
Tri: 31 33 32
|
||||||
|
Tri: 16 18 33
|
||||||
|
Tri: 17 23 34
|
||||||
|
Tri: 35 39 36
|
||||||
|
Tri: 38 35 37
|
||||||
|
Tri: 13 32 30
|
||||||
|
Tri: 10 9 5
|
||||||
|
Tri: 12 15 16
|
||||||
|
Tri: 38 16 15
|
||||||
|
Tri: 2 28 3
|
||||||
|
Tri: 8 10 29
|
||||||
|
Tri: 25 5 9
|
||||||
|
Tri: 23 22 15
|
||||||
|
Tri: 19 36 39
|
||||||
|
Tri: 23 17 37
|
||||||
|
Tri: 4 6 7
|
||||||
|
Tri: 1 26 28
|
||||||
|
Tri: 40 39 35
|
||||||
|
Tri: 24 30 32
|
||||||
|
Tri: 7 3 5
|
||||||
|
Tri: 19 21 37
|
||||||
|
Tri: 20 35 38
|
||||||
|
Tri: 14 33 18
|
||||||
|
Tri: 11 32 33
|
||||||
|
|||||||
BIN
resources/w/ghost_skin001.png
(Stored with Git LFS)
BIN
resources/w/ghost_skin001.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/ghost_skin002.png
(Stored with Git LFS)
BIN
resources/w/ghost_skin002.png
(Stored with Git LFS)
Binary file not shown.
1819
resources/w/interior/Building_008.txt
Normal file
1819
resources/w/interior/Building_008.txt
Normal file
File diff suppressed because it is too large
Load Diff
122
resources/w/interior/Knife_lay001_004.txt
Normal file
122
resources/w/interior/Knife_lay001_004.txt
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
===Vertices (Split by UV/Normal): 41
|
||||||
|
V 0: Pos(0.246991, -0.255746, 0.0) Norm(0.389794, 0.920902, -0.0) UV(0.038153, 0.92737)
|
||||||
|
V 1: Pos(0.25971, -0.250913, -0.001532) Norm(-0.779708, 0.122736, 0.613996) UV(0.028605, 0.949655)
|
||||||
|
V 2: Pos(0.256907, -0.244648, -0.003161) Norm(-0.588958, -0.326655, 0.739206) UV(0.040105, 0.953817)
|
||||||
|
V 3: Pos(0.228644, -0.21696, 0.003161) Norm(-0.463512, -0.464075, -0.754845) UV(0.125898, 0.952246)
|
||||||
|
V 4: Pos(0.177902, -0.204162, 0.0) Norm(0.689299, 0.724477, 0.0) UV(0.213822, 0.894469)
|
||||||
|
V 5: Pos(0.192191, -0.181473, 0.003161) Norm(-0.466486, -0.466278, -0.751649) UV(0.228705, 0.94907)
|
||||||
|
V 6: Pos(0.217639, -0.238156, 0.0) Norm(0.640155, 0.768246, -3.6e-05) UV(0.110526, 0.906471)
|
||||||
|
V 7: Pos(0.228644, -0.21696, -0.003161) Norm(-0.463514, -0.464062, 0.754852) UV(0.125898, 0.952246)
|
||||||
|
V 8: Pos(0.098701, -0.116712, 0.0) Norm(0.73571, 0.677297, 5e-06) UV(0.56615, 0.898857)
|
||||||
|
V 9: Pos(0.138196, -0.126455, 0.003161) Norm(-0.456943, -0.48647, -0.744681) UV(0.479093, 0.952662)
|
||||||
|
V 10: Pos(0.13258, -0.159058, 0.0) Norm(0.719267, 0.694734, 2e-05) UV(0.435536, 0.894543)
|
||||||
|
V 11: Pos(0.106741, -0.101701, -0.003161) Norm(-0.718563, -0.054144, 0.693351) UV(0.577483, 0.934099)
|
||||||
|
V 12: Pos(0.092565, -0.110732, -0.008434) Norm(0.177423, 0.706178, 0.685445) UV(0.584767, 0.898292)
|
||||||
|
V 13: Pos(0.097489, -0.110956, 0.0) Norm(-0.281422, 0.959584, 1e-06) UV(0.576982, 0.905654)
|
||||||
|
V 14: Pos(0.106531, -0.0965, -0.008434) Norm(-0.728749, -0.169621, 0.663441) UV(0.585933, 0.941626)
|
||||||
|
V 15: Pos(0.07064, -0.084997, -0.003947) Norm(0.531864, 0.47551, 0.700722) UV(0.657157, 0.899274)
|
||||||
|
V 16: Pos(0.07064, -0.084997, 0.003948) Norm(0.53186, 0.475505, -0.700728) UV(0.657157, 0.899274)
|
||||||
|
V 17: Pos(0.022822, -0.001507, 0.008434) Norm(-0.479836, -0.563453, -0.672517) UV(0.917476, 0.96461)
|
||||||
|
V 18: Pos(0.08243, -0.07356, 0.003948) Norm(-0.501618, -0.509174, -0.699372) UV(0.657245, 0.938479)
|
||||||
|
V 19: Pos(0.002854, 0.002691, -0.008434) Norm(0.288583, -0.717995, 0.633407) UV(0.960945, 0.935148)
|
||||||
|
V 20: Pos(-0.003511, -0.014445, -0.008434) Norm(0.741135, 0.162643, 0.651358) UV(0.9406, 0.892727)
|
||||||
|
V 21: Pos(0.014767, 0.00279, -0.008434) Norm(-0.180128, -0.733326, 0.655582) UV(0.939831, 0.95738)
|
||||||
|
V 22: Pos(0.000693, -0.022367, -0.008434) Norm(0.570895, 0.466214, 0.675813) UV(0.918417, 0.886348)
|
||||||
|
V 23: Pos(0.022822, -0.001507, -0.008434) Norm(-0.479837, -0.56345, 0.672518) UV(0.917476, 0.96461)
|
||||||
|
V 24: Pos(0.11253, -0.103459, -0.003161) Norm(-0.314398, -0.630759, 0.709435) UV(0.56599, 0.940497)
|
||||||
|
V 25: Pos(0.192191, -0.181473, -0.003161) Norm(-0.466491, -0.466241, 0.751669) UV(0.228705, 0.94907)
|
||||||
|
V 26: Pos(0.25971, -0.250913, 0.001532) Norm(-0.779718, 0.122797, -0.613971) UV(0.028605, 0.949655)
|
||||||
|
V 27: Pos(0.256655, -0.256921, 0.0) Norm(-0.262688, 0.964881, 0.0) UV(0.024685, 0.938303)
|
||||||
|
V 28: Pos(0.256907, -0.244648, 0.003161) Norm(-0.588957, -0.326659, -0.739204) UV(0.040105, 0.953817)
|
||||||
|
V 29: Pos(0.138196, -0.126455, -0.003161) Norm(-0.456936, -0.486541, 0.744639) UV(0.479093, 0.952662)
|
||||||
|
V 30: Pos(0.11253, -0.103459, 0.003161) Norm(-0.314401, -0.63075, -0.709441) UV(0.56599, 0.940497)
|
||||||
|
V 31: Pos(0.092565, -0.110732, 0.008434) Norm(0.177423, 0.70618, -0.685442) UV(0.584767, 0.898292)
|
||||||
|
V 32: Pos(0.106741, -0.101701, 0.003161) Norm(-0.718551, -0.05417, -0.693362) UV(0.577483, 0.934099)
|
||||||
|
V 33: Pos(0.106531, -0.0965, 0.008434) Norm(-0.728732, -0.169579, -0.66347) UV(0.585933, 0.941626)
|
||||||
|
V 34: Pos(0.08243, -0.07356, -0.003948) Norm(-0.501605, -0.509107, 0.69943) UV(0.657245, 0.938479)
|
||||||
|
V 35: Pos(-0.003511, -0.014445, 0.008434) Norm(0.741141, 0.162644, -0.651349) UV(0.9406, 0.892727)
|
||||||
|
V 36: Pos(0.002854, 0.002691, 0.008434) Norm(0.288592, -0.717993, -0.633404) UV(0.960945, 0.935148)
|
||||||
|
V 37: Pos(0.014767, 0.00279, 0.008434) Norm(-0.180124, -0.733327, -0.655581) UV(0.939831, 0.95738)
|
||||||
|
V 38: Pos(0.000693, -0.022367, 0.008434) Norm(0.57089, 0.466211, -0.67582) UV(0.918417, 0.886348)
|
||||||
|
V 39: Pos(-0.002854, -0.002691, 0.008434) Norm(0.702352, -0.32663, -0.632466) UV(0.961186, 0.914959)
|
||||||
|
V 40: Pos(-0.002854, -0.002691, -0.008434) Norm(0.70236, -0.326637, 0.632455) UV(0.961186, 0.914959)
|
||||||
|
|
||||||
|
===Triangles (Indices): 78
|
||||||
|
Tri: 0 1 2
|
||||||
|
Tri: 3 4 5
|
||||||
|
Tri: 6 2 7
|
||||||
|
Tri: 8 9 10
|
||||||
|
Tri: 11 12 13
|
||||||
|
Tri: 14 15 12
|
||||||
|
Tri: 16 17 18
|
||||||
|
Tri: 19 20 21
|
||||||
|
Tri: 21 22 23
|
||||||
|
Tri: 24 13 8
|
||||||
|
Tri: 25 10 4
|
||||||
|
Tri: 0 26 27
|
||||||
|
Tri: 6 28 0
|
||||||
|
Tri: 29 30 24
|
||||||
|
Tri: 31 32 13
|
||||||
|
Tri: 16 33 31
|
||||||
|
Tri: 17 34 18
|
||||||
|
Tri: 35 36 37
|
||||||
|
Tri: 38 37 17
|
||||||
|
Tri: 13 30 8
|
||||||
|
Tri: 10 5 4
|
||||||
|
Tri: 12 16 31
|
||||||
|
Tri: 38 15 22
|
||||||
|
Tri: 2 3 7
|
||||||
|
Tri: 8 29 24
|
||||||
|
Tri: 25 9 29
|
||||||
|
Tri: 23 15 34
|
||||||
|
Tri: 1 27 26
|
||||||
|
Tri: 19 39 40
|
||||||
|
Tri: 23 37 21
|
||||||
|
Tri: 4 7 25
|
||||||
|
Tri: 1 28 2
|
||||||
|
Tri: 40 35 20
|
||||||
|
Tri: 24 32 11
|
||||||
|
Tri: 7 5 25
|
||||||
|
Tri: 19 37 36
|
||||||
|
Tri: 20 38 22
|
||||||
|
Tri: 13 12 31
|
||||||
|
Tri: 14 18 34
|
||||||
|
Tri: 11 33 14
|
||||||
|
Tri: 0 27 1
|
||||||
|
Tri: 3 6 4
|
||||||
|
Tri: 6 0 2
|
||||||
|
Tri: 8 30 9
|
||||||
|
Tri: 11 14 12
|
||||||
|
Tri: 14 34 15
|
||||||
|
Tri: 16 38 17
|
||||||
|
Tri: 19 40 20
|
||||||
|
Tri: 21 20 22
|
||||||
|
Tri: 24 11 13
|
||||||
|
Tri: 25 29 10
|
||||||
|
Tri: 0 28 26
|
||||||
|
Tri: 6 3 28
|
||||||
|
Tri: 29 9 30
|
||||||
|
Tri: 31 33 32
|
||||||
|
Tri: 16 18 33
|
||||||
|
Tri: 17 23 34
|
||||||
|
Tri: 35 39 36
|
||||||
|
Tri: 38 35 37
|
||||||
|
Tri: 13 32 30
|
||||||
|
Tri: 10 9 5
|
||||||
|
Tri: 12 15 16
|
||||||
|
Tri: 38 16 15
|
||||||
|
Tri: 2 28 3
|
||||||
|
Tri: 8 10 29
|
||||||
|
Tri: 25 5 9
|
||||||
|
Tri: 23 22 15
|
||||||
|
Tri: 19 36 39
|
||||||
|
Tri: 23 17 37
|
||||||
|
Tri: 4 6 7
|
||||||
|
Tri: 1 26 28
|
||||||
|
Tri: 40 39 35
|
||||||
|
Tri: 24 30 32
|
||||||
|
Tri: 7 3 5
|
||||||
|
Tri: 19 21 37
|
||||||
|
Tri: 20 35 38
|
||||||
|
Tri: 14 33 18
|
||||||
|
Tri: 11 32 33
|
||||||
@ -5,44 +5,6 @@
|
|||||||
"width": "match_parent",
|
"width": "match_parent",
|
||||||
"height": "match_parent",
|
"height": "match_parent",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
|
||||||
"type": "LinearLayout",
|
|
||||||
"orientation": "vertical",
|
|
||||||
"vertical_align": "center",
|
|
||||||
"horizontal_align": "center",
|
|
||||||
"spacing": 0,
|
|
||||||
"width": "match_parent",
|
|
||||||
"height": 600,
|
|
||||||
"x": 210,
|
|
||||||
"y": 75,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "StaticImage",
|
|
||||||
"name": "hint1",
|
|
||||||
"width": 880,
|
|
||||||
"height": 268,
|
|
||||||
"horizontal_gravity": "center",
|
|
||||||
"texture": "resources/w/ui/img/Hint1.png",
|
|
||||||
"pulse": {
|
|
||||||
"minScale": 0.92,
|
|
||||||
"maxScale": 1.08,
|
|
||||||
"periodMs": 1500
|
|
||||||
},
|
|
||||||
"fadeIn": {
|
|
||||||
"durationMs": 600
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "StaticImage",
|
|
||||||
"name": "hint2",
|
|
||||||
"width": 24,
|
|
||||||
"height": 118,
|
|
||||||
"y" : 20,
|
|
||||||
"horizontal_gravity": "center",
|
|
||||||
"texture": "resources/w/ui/img/hint_arrow_down.png"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "Button",
|
"type": "Button",
|
||||||
"name": "settingsButton",
|
"name": "settingsButton",
|
||||||
@ -60,14 +22,14 @@
|
|||||||
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
|
"pressed": "resources/w/ui/img/Settings001_State=Tap001.png"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "StaticImage",
|
"type": "StaticImage",
|
||||||
"name": "location",
|
"name": "location",
|
||||||
"width": 380,
|
"width": 380,
|
||||||
"height": 64,
|
"height": 64,
|
||||||
"y" : 30,
|
"y": 30,
|
||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"vertical_align": "top",
|
"vertical_align": "top",
|
||||||
"texture": "resources/w/ui/img/Location_dorm.png"
|
"texture": "resources/w/ui/img/Location_dorm.png"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -18,8 +18,8 @@
|
|||||||
{
|
{
|
||||||
"type": "StaticImage",
|
"type": "StaticImage",
|
||||||
"name": "hint2",
|
"name": "hint2",
|
||||||
"width": 440,
|
"width": 660,
|
||||||
"height": 134,
|
"height": 201,
|
||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"texture": "resources/w/ui/img/Hint2.png",
|
"texture": "resources/w/ui/img/Hint2.png",
|
||||||
"pulse": {
|
"pulse": {
|
||||||
@ -28,7 +28,7 @@
|
|||||||
"periodMs": 1500
|
"periodMs": 1500
|
||||||
},
|
},
|
||||||
"fadeIn": {
|
"fadeIn": {
|
||||||
"durationMs": 600
|
"durationMs": 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
"periodMs": 1500
|
"periodMs": 1500
|
||||||
},
|
},
|
||||||
"fadeIn": {
|
"fadeIn": {
|
||||||
"durationMs": 600
|
"durationMs": 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -18,8 +18,8 @@
|
|||||||
{
|
{
|
||||||
"type": "StaticImage",
|
"type": "StaticImage",
|
||||||
"name": "hint4",
|
"name": "hint4",
|
||||||
"width": 440,
|
"width": 940,
|
||||||
"height": 134,
|
"height": 312,
|
||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"texture": "resources/w/ui/img/Hint4.png",
|
"texture": "resources/w/ui/img/Hint4.png",
|
||||||
"pulse": {
|
"pulse": {
|
||||||
@ -28,7 +28,7 @@
|
|||||||
"periodMs": 1500
|
"periodMs": 1500
|
||||||
},
|
},
|
||||||
"fadeIn": {
|
"fadeIn": {
|
||||||
"durationMs": 600
|
"durationMs": 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -18,8 +18,8 @@
|
|||||||
{
|
{
|
||||||
"type": "StaticImage",
|
"type": "StaticImage",
|
||||||
"name": "hint5",
|
"name": "hint5",
|
||||||
"width": 692,
|
"width": 808,
|
||||||
"height": 312,
|
"height": 268,
|
||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"texture": "resources/w/ui/img/Hint5.png",
|
"texture": "resources/w/ui/img/Hint5.png",
|
||||||
"pulse": {
|
"pulse": {
|
||||||
@ -28,7 +28,7 @@
|
|||||||
"periodMs": 1500
|
"periodMs": 1500
|
||||||
},
|
},
|
||||||
"fadeIn": {
|
"fadeIn": {
|
||||||
"durationMs": 600
|
"durationMs": 1000
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -5,35 +5,6 @@
|
|||||||
"width": "match_parent",
|
"width": "match_parent",
|
||||||
"height": "match_parent",
|
"height": "match_parent",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
|
||||||
"type": "LinearLayout",
|
|
||||||
"orientation": "vertical",
|
|
||||||
"vertical_align": "center",
|
|
||||||
"horizontal_align": "center",
|
|
||||||
"spacing": 0,
|
|
||||||
"width": "match_parent",
|
|
||||||
"height": 600,
|
|
||||||
"y": -250,
|
|
||||||
"x": 300,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "StaticImage",
|
|
||||||
"name": "hint6a",
|
|
||||||
"width": 440,
|
|
||||||
"height": 134,
|
|
||||||
"horizontal_gravity": "center",
|
|
||||||
"texture": "resources/w/ui/img/Hint6a.png",
|
|
||||||
"pulse": {
|
|
||||||
"minScale": 0.92,
|
|
||||||
"maxScale": 1.08,
|
|
||||||
"periodMs": 1500
|
|
||||||
},
|
|
||||||
"fadeIn": {
|
|
||||||
"durationMs": 600
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "Button",
|
"type": "Button",
|
||||||
"name": "phoneButton",
|
"name": "phoneButton",
|
||||||
@ -94,6 +65,153 @@
|
|||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"vertical_align": "top",
|
"vertical_align": "top",
|
||||||
"texture": "resources/w/ui/img/Location_dorm.png"
|
"texture": "resources/w/ui/img/Location_dorm.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible": false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible": false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible": false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible": false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible": false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible": false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint6a",
|
||||||
|
"width": 606,
|
||||||
|
"height": 234,
|
||||||
|
"x" : 270,
|
||||||
|
"y" : -20,
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/Hint6a.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint6aarrow",
|
||||||
|
"width": 170,
|
||||||
|
"height": 48,
|
||||||
|
"x" : 140,
|
||||||
|
"y" : 50,
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_left.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,50 +5,6 @@
|
|||||||
"width": "match_parent",
|
"width": "match_parent",
|
||||||
"height": "match_parent",
|
"height": "match_parent",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
|
||||||
"type": "LinearLayout",
|
|
||||||
"orientation": "horizontal",
|
|
||||||
"vertical_align": "center",
|
|
||||||
"horizontal_align": "right",
|
|
||||||
"spacing": 16,
|
|
||||||
"width": "match_parent",
|
|
||||||
"height": 600,
|
|
||||||
"y": -200,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "StaticImage",
|
|
||||||
"name": "hint6a",
|
|
||||||
"width": 440,
|
|
||||||
"height": 134,
|
|
||||||
"horizontal_gravity": "center",
|
|
||||||
"texture": "resources/w/ui/img/Hint6a.png",
|
|
||||||
"pulse": {
|
|
||||||
"minScale": 0.92,
|
|
||||||
"maxScale": 1.08,
|
|
||||||
"periodMs": 1500
|
|
||||||
},
|
|
||||||
"fadeIn": {
|
|
||||||
"durationMs": 600
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "StaticImage",
|
|
||||||
"name": "hint6b",
|
|
||||||
"width": 440,
|
|
||||||
"height": 134,
|
|
||||||
"horizontal_gravity": "center",
|
|
||||||
"texture": "resources/w/ui/img/Hint6b.png",
|
|
||||||
"pulse": {
|
|
||||||
"minScale": 0.92,
|
|
||||||
"maxScale": 1.08,
|
|
||||||
"periodMs": 1500
|
|
||||||
},
|
|
||||||
"fadeIn": {
|
|
||||||
"durationMs": 600
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "Button",
|
"type": "Button",
|
||||||
"name": "phoneButton",
|
"name": "phoneButton",
|
||||||
@ -100,7 +56,7 @@
|
|||||||
"pressed": "resources/w/ui/img/Inventory001_State=Tap001.png"
|
"pressed": "resources/w/ui/img/Inventory001_State=Tap001.png"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "Button",
|
"type": "Button",
|
||||||
"name": "journalButton",
|
"name": "journalButton",
|
||||||
"horizontal_gravity": "right",
|
"horizontal_gravity": "right",
|
||||||
@ -126,6 +82,229 @@
|
|||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"vertical_align": "top",
|
"vertical_align": "top",
|
||||||
"texture": "resources/w/ui/img/Location_dorm.png"
|
"texture": "resources/w/ui/img/Location_dorm.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint6b",
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"width": 738.75,
|
||||||
|
"height": 292.5,
|
||||||
|
"x": 0,
|
||||||
|
"y": 200,
|
||||||
|
"texture": "resources/w/ui/img/Hint6b.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint6barrow",
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"width": 24,
|
||||||
|
"height": 118,
|
||||||
|
"x": 280,
|
||||||
|
"y": 120,
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_up.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint6a",
|
||||||
|
"width": 606,
|
||||||
|
"height": 234,
|
||||||
|
"x" : 270,
|
||||||
|
"y" : -20,
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/Hint6a.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint6aarrow",
|
||||||
|
"width": 170,
|
||||||
|
"height": 48,
|
||||||
|
"x" : 140,
|
||||||
|
"y" : 50,
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_left.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint7",
|
||||||
|
"width": 606,
|
||||||
|
"height": 201,
|
||||||
|
"x" : 270,
|
||||||
|
"y" : -20,
|
||||||
|
"visible":false,
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/Hint_m004.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint7arrow",
|
||||||
|
"width": 170,
|
||||||
|
"height": 48,
|
||||||
|
"x" : 140,
|
||||||
|
"y" : 50,
|
||||||
|
"visible":false,
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_left.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,34 +5,6 @@
|
|||||||
"width": "match_parent",
|
"width": "match_parent",
|
||||||
"height": "match_parent",
|
"height": "match_parent",
|
||||||
"children": [
|
"children": [
|
||||||
{
|
|
||||||
"type": "LinearLayout",
|
|
||||||
"orientation": "vertical",
|
|
||||||
"vertical_align": "center",
|
|
||||||
"horizontal_align": "center",
|
|
||||||
"spacing": 0,
|
|
||||||
"width": "match_parent",
|
|
||||||
"height": 600,
|
|
||||||
"y": -250,
|
|
||||||
"children": [
|
|
||||||
{
|
|
||||||
"type": "StaticImage",
|
|
||||||
"name": "hint6b",
|
|
||||||
"width": 440,
|
|
||||||
"height": 134,
|
|
||||||
"horizontal_gravity": "center",
|
|
||||||
"texture": "resources/w/ui/img/Hint6b.png",
|
|
||||||
"pulse": {
|
|
||||||
"minScale": 0.92,
|
|
||||||
"maxScale": 1.08,
|
|
||||||
"periodMs": 1500
|
|
||||||
},
|
|
||||||
"fadeIn": {
|
|
||||||
"durationMs": 600
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "Button",
|
"type": "Button",
|
||||||
"name": "settingsButton",
|
"name": "settingsButton",
|
||||||
@ -93,6 +65,143 @@
|
|||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"vertical_align": "top",
|
"vertical_align": "top",
|
||||||
"texture": "resources/w/ui/img/Location_uni_ext.png"
|
"texture": "resources/w/ui/img/Location_uni_ext.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint6b",
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"width": 738.75,
|
||||||
|
"height": 292.5,
|
||||||
|
"x": 0,
|
||||||
|
"y": 200,
|
||||||
|
"texture": "resources/w/ui/img/Hint6b.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint6barrow",
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"width": 24,
|
||||||
|
"height": 118,
|
||||||
|
"x": 280,
|
||||||
|
"y": 120,
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_up.png"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
46
resources/w/ui/hud_top_hint01.json
Normal file
46
resources/w/ui/hud_top_hint01.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"root": {
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"name": "hud_root",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint2",
|
||||||
|
"width": 72,
|
||||||
|
"height": 354,
|
||||||
|
"y": 200,
|
||||||
|
"x": 500,
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_down.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint1",
|
||||||
|
"width": 880,
|
||||||
|
"height": 268,
|
||||||
|
"x": 100,
|
||||||
|
"y" : -40,
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"texture": "resources/w/ui/img/Hint1.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -82,7 +82,116 @@
|
|||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"vertical_align": "top",
|
"vertical_align": "top",
|
||||||
"texture": "resources/w/ui/img/Location_uni_ext.png"
|
"texture": "resources/w/ui/img/Location_uni_ext.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -126,6 +126,115 @@
|
|||||||
1.0,
|
1.0,
|
||||||
1.0
|
1.0
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -126,6 +126,115 @@
|
|||||||
1.0,
|
1.0,
|
||||||
1.0
|
1.0
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -99,6 +99,115 @@
|
|||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"vertical_align": "top",
|
"vertical_align": "top",
|
||||||
"texture": "resources/w/ui/img/Location_uni_int.png"
|
"texture": "resources/w/ui/img/Location_uni_int.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -99,6 +99,115 @@
|
|||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"vertical_align": "top",
|
"vertical_align": "top",
|
||||||
"texture": "resources/w/ui/img/Location_uni_int.png"
|
"texture": "resources/w/ui/img/Location_uni_int.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,6 +82,115 @@
|
|||||||
"horizontal_gravity": "center",
|
"horizontal_gravity": "center",
|
||||||
"vertical_align": "top",
|
"vertical_align": "top",
|
||||||
"texture": "resources/w/ui/img/Location_uni_int.png"
|
"texture": "resources/w/ui/img/Location_uni_int.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -125,6 +125,115 @@
|
|||||||
"x": 860,
|
"x": 860,
|
||||||
"y": 110,
|
"y": 110,
|
||||||
"texture": "resources/w/ui/img/hint_arrow_up.png"
|
"texture": "resources/w/ui/img/hint_arrow_up.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -152,6 +152,115 @@
|
|||||||
1.0,
|
1.0,
|
||||||
1.0
|
1.0
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -135,6 +135,115 @@
|
|||||||
1.0,
|
1.0,
|
||||||
1.0
|
1.0
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 528,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast001",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 80,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_received001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast002",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 200,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/item_removed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "toast003",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"width": 672,
|
||||||
|
"height": 176,
|
||||||
|
"y": 320,
|
||||||
|
"visible" : false,
|
||||||
|
"texture": "resources/w/ui/img/toast/objective_completed001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast001text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 170,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast002text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 290,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 2.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "toast003text",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 410,
|
||||||
|
"x": 8,
|
||||||
|
"width": 400,
|
||||||
|
"height": 100,
|
||||||
|
"visible" : false,
|
||||||
|
"text": "Серебряный нож 3.",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
resources/w/ui/img/Hint_m001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/Hint_m001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/Hint_m002.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/Hint_m002.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/Hint_m003.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/Hint_m003.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/Hint_m004.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/Hint_m004.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/RedClose001_State=Default001.png
(Stored with Git LFS)
BIN
resources/w/ui/img/RedClose001_State=Default001.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/ui/img/RedClose001_State=Selected001.png
(Stored with Git LFS)
BIN
resources/w/ui/img/RedClose001_State=Selected001.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/ui/img/RedClose001_State=Tap001.png
(Stored with Git LFS)
BIN
resources/w/ui/img/RedClose001_State=Tap001.png
(Stored with Git LFS)
Binary file not shown.
BIN
resources/w/ui/img/hint_arrow_left.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/hint_arrow_left.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/hint_arrow_right.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/hint_arrow_right.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/main/about.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/main/about.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/main/bkg.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/main/bkg.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/toast/item_received001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/toast/item_received001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/toast/item_removed001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/toast/item_removed001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/toast/objective_completed001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/toast/objective_completed001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/toast/quest_completed001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/toast/quest_completed001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/toast/quest_failed001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/toast/quest_failed001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
resources/w/ui/img/toast/quest_new001.png
(Stored with Git LFS)
Normal file
BIN
resources/w/ui/img/toast/quest_new001.png
(Stored with Git LFS)
Normal file
Binary file not shown.
37
resources/w/ui/screen_about.json
Normal file
37
resources/w/ui/screen_about.json
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"root": {
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "aboutBkg",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"texture": "resources/ui/img/main/bkg.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "aboutImage",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"width": 800,
|
||||||
|
"height": 500,
|
||||||
|
"texture": "resources/ui/img/main/about.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"name": "aboutBackButton",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "bottom",
|
||||||
|
"y": 40,
|
||||||
|
"width": 200,
|
||||||
|
"height": 60,
|
||||||
|
"text": "Back",
|
||||||
|
"fontSize": 40,
|
||||||
|
"textCentered": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
69
resources/w/ui/screen_main_menu.json
Normal file
69
resources/w/ui/screen_main_menu.json
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
{
|
||||||
|
"root": {
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "mainMenuBkg",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"texture": "resources/ui/img/main/bkg.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "LinearLayout",
|
||||||
|
"orientation": "vertical",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"vertical_align": "center",
|
||||||
|
"spacing": 24,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"name": "menuStartButton",
|
||||||
|
"width": 300,
|
||||||
|
"height": 70,
|
||||||
|
"text": "Start",
|
||||||
|
"fontSize": 48,
|
||||||
|
"textCentered": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"name": "menuAboutButton",
|
||||||
|
"width": 300,
|
||||||
|
"height": 70,
|
||||||
|
"text": "About",
|
||||||
|
"fontSize": 48,
|
||||||
|
"textCentered": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"name": "menuExitButton",
|
||||||
|
"width": 300,
|
||||||
|
"height": 70,
|
||||||
|
"text": "Exit",
|
||||||
|
"fontSize": 48,
|
||||||
|
"textCentered": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "mainMenuVersion",
|
||||||
|
"horizontal_gravity": "right",
|
||||||
|
"vertical_gravity": "bottom",
|
||||||
|
"x": 10,
|
||||||
|
"y": 10,
|
||||||
|
"width": 160,
|
||||||
|
"height": 36,
|
||||||
|
"text": "v. 1.0",
|
||||||
|
"fontSize": 24,
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"paddingY": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
264
resources/w/ui/screen_phone_chat_list_hint001.json
Normal file
264
resources/w/ui/screen_phone_chat_list_hint001.json
Normal file
@ -0,0 +1,264 @@
|
|||||||
|
{
|
||||||
|
"root": {
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"name": "hud_root",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"vertical_align": "center",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m002",
|
||||||
|
"width": 400,
|
||||||
|
"height": 156,
|
||||||
|
"x" : 420,
|
||||||
|
"y" : 0,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity" : "top",
|
||||||
|
"texture": "resources/w/ui/img/Hint_m001.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneExitButton",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"y": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/transparent.png",
|
||||||
|
"hover": "resources/transparent.png",
|
||||||
|
"pressed": "resources/transparent.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneMain",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"y": -60,
|
||||||
|
"width": 617.4,
|
||||||
|
"height": 991.2,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone/PhoneChatList001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone/PhoneChatList001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone/PhoneChatList001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "LinearLayout",
|
||||||
|
"orientation": "vertical",
|
||||||
|
"vertical_align": "top",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"spacing": 0,
|
||||||
|
"x": 0,
|
||||||
|
"y": 100,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": 800,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"name": "chat1frame",
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"name": "chat1button",
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"text": "Айпери",
|
||||||
|
"textPaddingY": 0.0,
|
||||||
|
"textPaddingX": 100.0,
|
||||||
|
"fontSize": 32,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone/ChatListItem001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone/ChatListItem001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone/ChatListItem001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "chat1Unread",
|
||||||
|
"x" : 408,
|
||||||
|
"y" : 24,
|
||||||
|
"width": 28.7,
|
||||||
|
"height": 28.7,
|
||||||
|
"texture": "resources/w/ui/img/phone/ChatListUnread1.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "chat1msg",
|
||||||
|
"x": 100.0,
|
||||||
|
"y": 36.0,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"text": "Бекзат, помнишь мы ски...",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
0.8,
|
||||||
|
0.8,
|
||||||
|
0.8,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"name": "chat2frame",
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"name": "chat2button",
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"text": "Атам",
|
||||||
|
"textPaddingY": 0.0,
|
||||||
|
"textPaddingX": 100.0,
|
||||||
|
"fontSize": 32,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone/ChatListItem002.png",
|
||||||
|
"hover": "resources/w/ui/img/phone/ChatListItem002.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone/ChatListItem002.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "chat2Unread",
|
||||||
|
"x" : 408,
|
||||||
|
"y" : 24,
|
||||||
|
"width": 28.7,
|
||||||
|
"height": 28.7,
|
||||||
|
"texture": "resources/w/ui/img/phone/ChatListUnread1.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "chat2msg",
|
||||||
|
"x": 100.0,
|
||||||
|
"y": 36.0,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"text": "Бекзат, сынок, мы c мамой ...",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
0.8,
|
||||||
|
0.8,
|
||||||
|
0.8,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"name": "chat3frame",
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "TextButton",
|
||||||
|
"name": "chat3button",
|
||||||
|
"x": 0.0,
|
||||||
|
"y": 0.0,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"text": "БишкекНовости",
|
||||||
|
"textPaddingY": 0.0,
|
||||||
|
"textPaddingX": 100.0,
|
||||||
|
"fontSize": 32,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0,
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone/ChatListItem003.png",
|
||||||
|
"hover": "resources/w/ui/img/phone/ChatListItem003.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone/ChatListItem003.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "chat3Unread",
|
||||||
|
"x" : 408,
|
||||||
|
"y" : 24,
|
||||||
|
"width": 28.7,
|
||||||
|
"height": 28.7,
|
||||||
|
"texture": "resources/w/ui/img/phone/ChatListUnread1.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "TextView",
|
||||||
|
"name": "chat3msg",
|
||||||
|
"x": 100.0,
|
||||||
|
"y": 36.0,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 88.2,
|
||||||
|
"text": "Жители Бишкека все чаще ...",
|
||||||
|
"fontSize": 24,
|
||||||
|
"fontPath": "resources/fonts/DroidSans.ttf",
|
||||||
|
"textCentered": false,
|
||||||
|
"topAligned": true,
|
||||||
|
"wrap": true,
|
||||||
|
"color": [
|
||||||
|
0.8,
|
||||||
|
0.8,
|
||||||
|
0.8,
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
164
resources/w/ui/screen_phone_hint001.json
Normal file
164
resources/w/ui/screen_phone_hint001.json
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
{
|
||||||
|
"root": {
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"name": "hud_root",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"vertical_align": "center",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneExitButton",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"y": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/transparent.png",
|
||||||
|
"hover": "resources/transparent.png",
|
||||||
|
"pressed": "resources/transparent.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneMain",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"y": -60,
|
||||||
|
"width": 617.4,
|
||||||
|
"height": 991.2,
|
||||||
|
"texture": "resources/w/ui/img/phone2/Phone002.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeDay",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockDay001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeNight",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockNight001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeDawn",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockMorning001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneBank",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": -80,
|
||||||
|
"y": -60,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconBank001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconBank001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconBank001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneTaxi",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": 80,
|
||||||
|
"y": -60,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconTaxi001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconTaxi001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconTaxi001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneVideo",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": 80,
|
||||||
|
"y": -190,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconVideo001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconVideo001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconVideo001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneMessenger",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": -80,
|
||||||
|
"y": -190,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconMessenger001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconMessenger001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconMessenger001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m001arrow",
|
||||||
|
"width": 170,
|
||||||
|
"height": 48,
|
||||||
|
"x" : -220,
|
||||||
|
"y" : 150,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_left.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m001",
|
||||||
|
"width": 414,
|
||||||
|
"height": 156,
|
||||||
|
"x" : -420,
|
||||||
|
"y" : 100,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/Hint_m002.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
202
resources/w/ui/screen_phone_hint001_002.json
Normal file
202
resources/w/ui/screen_phone_hint001_002.json
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
{
|
||||||
|
"root": {
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"name": "hud_root",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"vertical_align": "center",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneExitButton",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"y": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/transparent.png",
|
||||||
|
"hover": "resources/transparent.png",
|
||||||
|
"pressed": "resources/transparent.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneMain",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"y": -60,
|
||||||
|
"width": 617.4,
|
||||||
|
"height": 991.2,
|
||||||
|
"texture": "resources/w/ui/img/phone2/Phone002.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeDay",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockDay001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeNight",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockNight001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeDawn",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockMorning001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneBank",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": -80,
|
||||||
|
"y": -60,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconBank001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconBank001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconBank001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneTaxi",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": 80,
|
||||||
|
"y": -60,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconTaxi001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconTaxi001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconTaxi001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneVideo",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": 80,
|
||||||
|
"y": -190,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconVideo001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconVideo001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconVideo001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneMessenger",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": -80,
|
||||||
|
"y": -190,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconMessenger001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconMessenger001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconMessenger001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m001arrow",
|
||||||
|
"width": 170,
|
||||||
|
"height": 48,
|
||||||
|
"x": -220,
|
||||||
|
"y": 150,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "bottom",
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_left.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m001",
|
||||||
|
"width": 414,
|
||||||
|
"height": 156,
|
||||||
|
"x": -420,
|
||||||
|
"y": 100,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "bottom",
|
||||||
|
"texture": "resources/w/ui/img/Hint_m002.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m003arrow",
|
||||||
|
"width": 170,
|
||||||
|
"height": 48,
|
||||||
|
"x": 220,
|
||||||
|
"y": 270,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "bottom",
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_right.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m003",
|
||||||
|
"width": 318,
|
||||||
|
"height": 178,
|
||||||
|
"x": 420,
|
||||||
|
"y": 220,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "bottom",
|
||||||
|
"texture": "resources/w/ui/img/Hint_m003.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
164
resources/w/ui/screen_phone_hint002.json
Normal file
164
resources/w/ui/screen_phone_hint002.json
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
{
|
||||||
|
"root": {
|
||||||
|
"type": "FrameLayout",
|
||||||
|
"name": "hud_root",
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"vertical_align": "center",
|
||||||
|
"horizontal_align": "center",
|
||||||
|
"children": [
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneExitButton",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"y": 0,
|
||||||
|
"width": "match_parent",
|
||||||
|
"height": "match_parent",
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/transparent.png",
|
||||||
|
"hover": "resources/transparent.png",
|
||||||
|
"pressed": "resources/transparent.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneMain",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"y": -60,
|
||||||
|
"width": 617.4,
|
||||||
|
"height": 991.2,
|
||||||
|
"texture": "resources/w/ui/img/phone2/Phone002.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeDay",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockDay001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeNight",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockNight001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "phoneTimeDawn",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "top",
|
||||||
|
"y": 120,
|
||||||
|
"width": 446.25,
|
||||||
|
"height": 120.4,
|
||||||
|
"texture": "resources/w/ui/img/phone2/ClockMorning001.png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneBank",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": -80,
|
||||||
|
"y": -60,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconBank001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconBank001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconBank001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneTaxi",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": 80,
|
||||||
|
"y": -60,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconTaxi001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconTaxi001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconTaxi001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneVideo",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": 80,
|
||||||
|
"y": -190,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconVideo001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconVideo001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconVideo001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "Button",
|
||||||
|
"name": "phoneMessenger",
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity": "center",
|
||||||
|
"x": -80,
|
||||||
|
"y": -190,
|
||||||
|
"width": 119,
|
||||||
|
"height": 119,
|
||||||
|
"textures": {
|
||||||
|
"normal": "resources/w/ui/img/phone2/IconMessenger001.png",
|
||||||
|
"hover": "resources/w/ui/img/phone2/IconMessenger001.png",
|
||||||
|
"pressed": "resources/w/ui/img/phone2/IconMessenger001.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m003arrow",
|
||||||
|
"width": 170,
|
||||||
|
"height": 48,
|
||||||
|
"x" : 220,
|
||||||
|
"y" : 270,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/hint_arrow_right.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "StaticImage",
|
||||||
|
"name": "hint_m003",
|
||||||
|
"width": 318,
|
||||||
|
"height": 178,
|
||||||
|
"x" : 420,
|
||||||
|
"y" : 220,
|
||||||
|
"horizontal_gravity": "center",
|
||||||
|
"vertical_gravity" : "bottom",
|
||||||
|
"texture": "resources/w/ui/img/Hint_m003.png",
|
||||||
|
"pulse": {
|
||||||
|
"minScale": 0.92,
|
||||||
|
"maxScale": 1.08,
|
||||||
|
"periodMs": 1500
|
||||||
|
},
|
||||||
|
"fadeIn": {
|
||||||
|
"durationMs": 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
53
src/Game.cpp
53
src/Game.cpp
@ -342,6 +342,26 @@ namespace ZL
|
|||||||
if (locations["location_dorm"]->player)
|
if (locations["location_dorm"]->player)
|
||||||
locations["location_dorm"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
locations["location_dorm"]->player->onDeathAnimComplete = [this]() { startDarklandsTransition(); };
|
||||||
|
|
||||||
|
locations["location_dorm"]->onPlayerTaxiRequired = [this]() {
|
||||||
|
menuManager.tutorialShowTaxiHint();
|
||||||
|
};
|
||||||
|
|
||||||
|
menuManager.callTaxiFunc = [this]()
|
||||||
|
{
|
||||||
|
if (locations["location_dorm"])
|
||||||
|
{
|
||||||
|
locations["location_dorm"]->onPlayerTaxiRequired = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentLocation)
|
||||||
|
{
|
||||||
|
if (currentLocation->teleportZones.size() > 0)
|
||||||
|
{
|
||||||
|
currentLocation->teleportZones[0].active = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Teleport callbacks: destination name and position come from the teleport zone data.
|
// Teleport callbacks: destination name and position come from the teleport zone data.
|
||||||
auto teleportCallback = [this](const std::string& destName, const Eigen::Vector3f& destPos, float destRotY) {
|
auto teleportCallback = [this](const std::string& destName, const Eigen::Vector3f& destPos, float destRotY) {
|
||||||
std::cout << "[TELEPORT] " << " -> " << destName << std::endl;
|
std::cout << "[TELEPORT] " << " -> " << destName << std::endl;
|
||||||
@ -388,9 +408,20 @@ namespace ZL
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wire inventory item-pickup callback for tutorial step4/5 item tracking.
|
renderer.textureManager.LoadFromPng("resources/w/ui/img/toast/item_received001.png", CONST_ZIP_FILE, true);
|
||||||
|
renderer.textureManager.LoadFromPng("resources/w/ui/img/toast/item_removed001.png", CONST_ZIP_FILE, true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Wire inventory callbacks: tutorial tracking + toast notifications.
|
||||||
inventory.onItemAdded = [this](const std::string& itemId) {
|
inventory.onItemAdded = [this](const std::string& itemId) {
|
||||||
menuManager.onItemPickedUp(itemId);
|
menuManager.onItemPickedUp(itemId);
|
||||||
|
const Item* item = ItemRegistry::instance().findById(itemId);
|
||||||
|
if (item) menuManager.showToast("resources/w/ui/img/toast/item_received001.png", item->name);
|
||||||
|
};
|
||||||
|
inventory.onItemRemoved = [this](const std::string& itemId) {
|
||||||
|
const Item* item = ItemRegistry::instance().findById(itemId);
|
||||||
|
if (item) menuManager.showToast("resources/w/ui/img/toast/item_removed001.png", item->name);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Wire phone dialogue start function so MenuManager can trigger dialogues.
|
// Wire phone dialogue start function so MenuManager can trigger dialogues.
|
||||||
@ -431,9 +462,6 @@ namespace ZL
|
|||||||
if (currentLocation) currentLocation->dialogueSystem.skipCutscene();
|
if (currentLocation) currentLocation->dialogueSystem.skipCutscene();
|
||||||
};
|
};
|
||||||
|
|
||||||
currentLocation = locations["location_dorm"];
|
|
||||||
currentLocation->scriptEngine.callLocationEnterCallback();
|
|
||||||
|
|
||||||
std::cout << "Load resurces step 5" << std::endl;
|
std::cout << "Load resurces step 5" << std::endl;
|
||||||
/*
|
/*
|
||||||
std::cout << "Load resurces step 12" << std::endl;
|
std::cout << "Load resurces step 12" << std::endl;
|
||||||
@ -478,6 +506,11 @@ namespace ZL
|
|||||||
std::cerr << "Failed to load UI: " << e.what() << std::endl;
|
std::cerr << "Failed to load UI: " << e.what() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
menuManager.startGameFunc = [this]() {
|
||||||
|
currentLocation = locations["location_dorm"];
|
||||||
|
currentLocation->scriptEngine.callLocationEnterCallback();
|
||||||
|
};
|
||||||
|
|
||||||
// Wire HP-change callbacks so all player instances update the health bar HUD.
|
// Wire HP-change callbacks so all player instances update the health bar HUD.
|
||||||
for (auto& [name, loc] : locations) {
|
for (auto& [name, loc] : locations) {
|
||||||
if (loc->player) {
|
if (loc->player) {
|
||||||
@ -564,10 +597,6 @@ namespace ZL
|
|||||||
CheckGlError(__FILE__, __LINE__);
|
CheckGlError(__FILE__, __LINE__);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// ??? Main menu???
|
|
||||||
}
|
|
||||||
drawUI();
|
drawUI();
|
||||||
drawDarklandsFlash();
|
drawDarklandsFlash();
|
||||||
}
|
}
|
||||||
@ -632,10 +661,12 @@ namespace ZL
|
|||||||
lastTickCount = newTickCount;
|
lastTickCount = newTickCount;
|
||||||
|
|
||||||
updateDarklandsFlash(delta);
|
updateDarklandsFlash(delta);
|
||||||
|
|
||||||
menuManager.uiManager.update(static_cast<float>(delta));
|
menuManager.uiManager.update(static_cast<float>(delta));
|
||||||
menuManager.topUiManager.update(static_cast<float>(delta));
|
menuManager.topUiManager.update(static_cast<float>(delta));
|
||||||
|
|
||||||
|
if (!menuManager.isMainMenuOpen())
|
||||||
|
menuManager.update(static_cast<float>(delta));
|
||||||
|
|
||||||
if (currentLocation)
|
if (currentLocation)
|
||||||
{
|
{
|
||||||
currentLocation->update(delta);
|
currentLocation->update(delta);
|
||||||
@ -797,7 +828,7 @@ namespace ZL
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDLK_f:
|
case SDLK_f:
|
||||||
currentLocation->dialogueSystem.startDialogue("dialog_start001");
|
currentLocation->dialogueSystem.startDialogue("phone_night_aiperi001");
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case SDLK_e:
|
case SDLK_e:
|
||||||
@ -836,6 +867,8 @@ namespace ZL
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SDLK_k:
|
case SDLK_k:
|
||||||
|
x = x - 1;
|
||||||
|
std::cout << "current x: " << x << std::endl;
|
||||||
//y = y + 1;
|
//y = y + 1;
|
||||||
//std::cout << "current y: " << y << std::endl;
|
//std::cout << "current y: " << y << std::endl;
|
||||||
//y = y - 0.002;
|
//y = y - 0.002;
|
||||||
|
|||||||
@ -75,9 +75,10 @@ namespace ZL
|
|||||||
player->loadBinaryAnimation(AnimationState::ACTION_TO_DEATH, "resources/w/gg/new/gg_die001.anim", CONST_ZIP_FILE);
|
player->loadBinaryAnimation(AnimationState::ACTION_TO_DEATH, "resources/w/gg/new/gg_die001.anim", CONST_ZIP_FILE);
|
||||||
player->loadBinaryAnimation(AnimationState::DEATH_IDLE, "resources/w/gg/new/gg_die_idle001.anim", CONST_ZIP_FILE);
|
player->loadBinaryAnimation(AnimationState::DEATH_IDLE, "resources/w/gg/new/gg_die_idle001.anim", CONST_ZIP_FILE);
|
||||||
|
|
||||||
player->weaponTexture = renderer.textureManager.LoadFromPng("resources/w/white.png", CONST_ZIP_FILE);
|
player->weaponTexture = renderer.textureManager.LoadFromPng("resources/w/gg/Props.png", CONST_ZIP_FILE);
|
||||||
player->weaponMesh.data = LoadFromTextFile02("resources/w/gg/knife002.txt", CONST_ZIP_FILE);
|
player->weaponMesh.data = LoadFromTextFile02("resources/w/gg/knife002.txt", CONST_ZIP_FILE);
|
||||||
player->weaponMesh.data.Scale(0.1f);
|
player->weaponMesh.data.Move(Vector3f(0, -0.3, 0));
|
||||||
|
player->weaponMesh.data.Scale(0.2f);
|
||||||
player->weaponMesh.RefreshVBO();
|
player->weaponMesh.RefreshVBO();
|
||||||
player->weaponAttachBoneName = "RightHand";
|
player->weaponAttachBoneName = "RightHand";
|
||||||
player->weaponInitialRotation = Eigen::AngleAxisf(-M_PI * 0.5, Eigen::Vector3f::UnitZ()).toRotationMatrix();
|
player->weaponInitialRotation = Eigen::AngleAxisf(-M_PI * 0.5, Eigen::Vector3f::UnitZ()).toRotationMatrix();
|
||||||
|
|||||||
@ -106,6 +106,8 @@ namespace ZL
|
|||||||
// Used by the tutorial system to detect the "tap to walk" gesture.
|
// Used by the tutorial system to detect the "tap to walk" gesture.
|
||||||
std::function<void()> onPlayerFloorWalk;
|
std::function<void()> onPlayerFloorWalk;
|
||||||
|
|
||||||
|
std::function<void()> onPlayerTaxiRequired;
|
||||||
|
|
||||||
// Set by Game after setup(). Lua and onDeathAnimComplete call this to
|
// Set by Game after setup(). Lua and onDeathAnimComplete call this to
|
||||||
// request the transition without coupling Location to Game directly.
|
// request the transition without coupling Location to Game directly.
|
||||||
std::function<bool()> requestDarklandsTransition;
|
std::function<bool()> requestDarklandsTransition;
|
||||||
|
|||||||
@ -100,20 +100,29 @@ namespace ZL {
|
|||||||
hudUniIntFullRoot = loadUiFromFile("resources/w/ui/hud_uni_int_full.json", renderer, zipFile);
|
hudUniIntFullRoot = loadUiFromFile("resources/w/ui/hud_uni_int_full.json", renderer, zipFile);
|
||||||
hudUniIntDarkFullRoot = loadUiFromFile("resources/w/ui/hud_uni_int_dark_full.json", renderer, zipFile);
|
hudUniIntDarkFullRoot = loadUiFromFile("resources/w/ui/hud_uni_int_dark_full.json", renderer, zipFile);
|
||||||
hudUniExtDarkRoot = loadUiFromFile("resources/w/ui/hud_uni_ext_dark.json", renderer, zipFile);
|
hudUniExtDarkRoot = loadUiFromFile("resources/w/ui/hud_uni_ext_dark.json", renderer, zipFile);
|
||||||
|
|
||||||
hudCutsceneRoot_ = loadUiFromFile("resources/w/ui/hud_cutscene.json", renderer, zipFile);
|
hudCutsceneRoot_ = loadUiFromFile("resources/w/ui/hud_cutscene.json", renderer, zipFile);
|
||||||
|
hudTopHintRoot_ = loadUiFromFile("resources/w/ui/hud_top_hint01.json", renderer, zipFile);
|
||||||
|
|
||||||
phoneMainRoot = loadUiFromFile("resources/w/ui/screen_phone.json", renderer, zipFile);
|
phoneMainRoot = loadUiFromFile("resources/w/ui/screen_phone.json", renderer, zipFile);
|
||||||
|
phoneMainHintARoot = loadUiFromFile("resources/w/ui/screen_phone_hint001.json", renderer, zipFile);
|
||||||
|
phoneMainHintBRoot = loadUiFromFile("resources/w/ui/screen_phone_hint002.json", renderer, zipFile);
|
||||||
|
phoneMainHintABRoot = loadUiFromFile("resources/w/ui/screen_phone_hint001_002.json", renderer, zipFile);
|
||||||
|
|
||||||
phoneBankRoot = loadUiFromFile("resources/w/ui/screen_phone_bank.json", renderer, zipFile);
|
phoneBankRoot = loadUiFromFile("resources/w/ui/screen_phone_bank.json", renderer, zipFile);
|
||||||
phoneVideoRoot = loadUiFromFile("resources/w/ui/screen_phone_video.json", renderer, zipFile);
|
phoneVideoRoot = loadUiFromFile("resources/w/ui/screen_phone_video.json", renderer, zipFile);
|
||||||
phoneMapDormRoot = loadUiFromFile("resources/w/ui/screen_phone_map_dorm.json", renderer, zipFile);
|
phoneMapDormRoot = loadUiFromFile("resources/w/ui/screen_phone_map_dorm.json", renderer, zipFile);
|
||||||
phoneMapUniRoot = loadUiFromFile("resources/w/ui/screen_phone_map_uni.json", renderer, zipFile);
|
phoneMapUniRoot = loadUiFromFile("resources/w/ui/screen_phone_map_uni.json", renderer, zipFile);
|
||||||
phoneChatListRoot = loadUiFromFile("resources/w/ui/screen_phone_chat_list.json", renderer, zipFile);
|
phoneChatListRoot = loadUiFromFile("resources/w/ui/screen_phone_chat_list.json", renderer, zipFile);
|
||||||
|
phoneChatListHintRoot = loadUiFromFile("resources/w/ui/screen_phone_chat_list_hint001.json", renderer, zipFile);
|
||||||
phoneChat1Root = loadUiFromFile("resources/w/ui/screen_phone_chat1.json", renderer, zipFile);
|
phoneChat1Root = loadUiFromFile("resources/w/ui/screen_phone_chat1.json", renderer, zipFile);
|
||||||
phoneChat2Root = loadUiFromFile("resources/w/ui/screen_phone_chat2.json", renderer, zipFile);
|
phoneChat2Root = loadUiFromFile("resources/w/ui/screen_phone_chat2.json", renderer, zipFile);
|
||||||
phoneChat3Root = loadUiFromFile("resources/w/ui/screen_phone_chat3.json", renderer, zipFile);
|
phoneChat3Root = loadUiFromFile("resources/w/ui/screen_phone_chat3.json", renderer, zipFile);
|
||||||
|
|
||||||
newInventoryRoot = loadUiFromFile("resources/w/ui/screen_inventory.json", renderer, zipFile);
|
newInventoryRoot = loadUiFromFile("resources/w/ui/screen_inventory.json", renderer, zipFile);
|
||||||
questJournalRoot = loadUiFromFile("resources/w/ui/screen_journal.json", renderer, zipFile);
|
questJournalRoot = loadUiFromFile("resources/w/ui/screen_journal.json", renderer, zipFile);
|
||||||
|
mainMenuRoot = loadUiFromFile("resources/w/ui/screen_main_menu.json", renderer, zipFile);
|
||||||
|
aboutScreenRoot = loadUiFromFile("resources/w/ui/screen_about.json", renderer, zipFile);
|
||||||
|
|
||||||
texObjectiveCompleted_ = renderer.textureManager.LoadFromPng("resources/w/ui/img/journal/quest_objective_completed.png", zipFile, true);
|
texObjectiveCompleted_ = renderer.textureManager.LoadFromPng("resources/w/ui/img/journal/quest_objective_completed.png", zipFile, true);
|
||||||
texObjectiveBlank_ = renderer.textureManager.LoadFromPng("resources/w/ui/img/journal/quest_objective_blank.png", zipFile, true);
|
texObjectiveBlank_ = renderer.textureManager.LoadFromPng("resources/w/ui/img/journal/quest_objective_blank.png", zipFile, true);
|
||||||
@ -122,6 +131,29 @@ namespace ZL {
|
|||||||
|
|
||||||
questJournal.loadFromFile("resources/quests/quests.json", zipFile);
|
questJournal.loadFromFile("resources/quests/quests.json", zipFile);
|
||||||
|
|
||||||
|
renderer.textureManager.LoadFromPng("resources/w/ui/img/toast/quest_new001.png", zipFile, true);
|
||||||
|
renderer.textureManager.LoadFromPng("resources/w/ui/img/toast/quest_completed001.png", zipFile, true);
|
||||||
|
renderer.textureManager.LoadFromPng("resources/w/ui/img/toast/quest_failed001.png", zipFile, true);
|
||||||
|
|
||||||
|
|
||||||
|
questJournal.onQuestUnlocked = [this](const std::string& id) {
|
||||||
|
const Quest::QuestState* q = questJournal.findQuest(id);
|
||||||
|
if (q) showToast("resources/w/ui/img/toast/quest_new001.png", q->definition.title);
|
||||||
|
};
|
||||||
|
questJournal.onQuestCompleted = [this](const std::string& id) {
|
||||||
|
const Quest::QuestState* q = questJournal.findQuest(id);
|
||||||
|
if (q) showToast("resources/w/ui/img/toast/quest_completed001.png", q->definition.title);
|
||||||
|
};
|
||||||
|
questJournal.onQuestFailed = [this](const std::string& id) {
|
||||||
|
const Quest::QuestState* q = questJournal.findQuest(id);
|
||||||
|
if (q) showToast("resources/w/ui/img/toast/quest_failed001.png", q->definition.title);
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
questJournal.onObjectiveCompleted = [this](const std::string& id, const std::string&) {
|
||||||
|
const Quest::QuestState* q = questJournal.findQuest(id);
|
||||||
|
if (q) showToast("resources/w/ui/img/toast/objective_completed001.png", q->definition.title);
|
||||||
|
};*/
|
||||||
|
|
||||||
const std::string imgDir = "resources/w/ui/img/phone/";
|
const std::string imgDir = "resources/w/ui/img/phone/";
|
||||||
texBubbleInCenter_ = renderer.textureManager.LoadFromPng(imgDir + "bubble_in_center.png", zipFile, true);
|
texBubbleInCenter_ = renderer.textureManager.LoadFromPng(imgDir + "bubble_in_center.png", zipFile, true);
|
||||||
texBubbleInLT_ = renderer.textureManager.LoadFromPng(imgDir + "bubble_in_corner_left_top.png", zipFile, true);
|
texBubbleInLT_ = renderer.textureManager.LoadFromPng(imgDir + "bubble_in_corner_left_top.png", zipFile, true);
|
||||||
@ -134,12 +166,16 @@ namespace ZL {
|
|||||||
texBubbleOutRT_ = renderer.textureManager.LoadFromPng(imgDir + "bubble_out_corner_right_top.png", zipFile, true);
|
texBubbleOutRT_ = renderer.textureManager.LoadFromPng(imgDir + "bubble_out_corner_right_top.png", zipFile, true);
|
||||||
texBubbleOutRB_ = renderer.textureManager.LoadFromPng(imgDir + "bubble_out_corner_right_bottom.png",zipFile, true);
|
texBubbleOutRB_ = renderer.textureManager.LoadFromPng(imgDir + "bubble_out_corner_right_bottom.png",zipFile, true);
|
||||||
|
|
||||||
enterGameplay();
|
showMainMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::enterGameplay() {
|
void MenuManager::enterGameplay() {
|
||||||
|
if (state == GameState::MainMenu && startGameFunc) startGameFunc();
|
||||||
state = GameState::Gameplay;
|
state = GameState::Gameplay;
|
||||||
uiManager.replaceRoot(hudRoot);
|
uiManager.replaceRoot(hudRoot);
|
||||||
|
topUiManager.replaceRoot(hudTopHintRoot_);
|
||||||
|
|
||||||
|
|
||||||
applyCurrentHealthBar();
|
applyCurrentHealthBar();
|
||||||
/*
|
/*
|
||||||
uiManager.setTextButtonCallback("inventory_button", [this](const std::string&) {
|
uiManager.setTextButtonCallback("inventory_button", [this](const std::string&) {
|
||||||
@ -156,6 +192,33 @@ namespace ZL {
|
|||||||
//openInventory()
|
//openInventory()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MenuManager::showMainMenu() {
|
||||||
|
state = GameState::MainMenu;
|
||||||
|
uiManager.replaceRoot(mainMenuRoot);
|
||||||
|
|
||||||
|
uiManager.setTextButtonCallback("menuStartButton", [this](const std::string&) {
|
||||||
|
enterGameplay();
|
||||||
|
});
|
||||||
|
uiManager.setTextButtonCallback("menuAboutButton", [this](const std::string&) {
|
||||||
|
showAboutScreen();
|
||||||
|
});
|
||||||
|
|
||||||
|
#ifndef EMSCRIPTEN
|
||||||
|
uiManager.setTextButtonCallback("menuExitButton", [this](const std::string&) {
|
||||||
|
Environment::exitGameLoop = true;
|
||||||
|
});
|
||||||
|
#else
|
||||||
|
uiManager.setNodeVisible("menuExitButton", false);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuManager::showAboutScreen() {
|
||||||
|
uiManager.pushMenuFromSavedRoot(aboutScreenRoot);
|
||||||
|
uiManager.setTextButtonCallback("aboutBackButton", [this](const std::string&) {
|
||||||
|
uiManager.popMenu();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void MenuManager::openInventory() {
|
void MenuManager::openInventory() {
|
||||||
state = GameState::Inventory;
|
state = GameState::Inventory;
|
||||||
uiManager.pushMenuFromSavedRoot(newInventoryRoot);
|
uiManager.pushMenuFromSavedRoot(newInventoryRoot);
|
||||||
@ -248,7 +311,9 @@ namespace ZL {
|
|||||||
void MenuManager::openQuestJournal() {
|
void MenuManager::openQuestJournal() {
|
||||||
state = GameState::QuestJournal;
|
state = GameState::QuestJournal;
|
||||||
tutorialJournalScreenOpened = true;
|
tutorialJournalScreenOpened = true;
|
||||||
|
|
||||||
uiManager.setNodeVisible("hint6b", false);
|
uiManager.setNodeVisible("hint6b", false);
|
||||||
|
uiManager.setNodeVisible("hint6barrow", false);
|
||||||
uiManager.pushMenuFromSavedRoot(questJournalRoot);
|
uiManager.pushMenuFromSavedRoot(questJournalRoot);
|
||||||
|
|
||||||
uiManager.setButtonCallback("journalExitButton", [this](const std::string&) {
|
uiManager.setButtonCallback("journalExitButton", [this](const std::string&) {
|
||||||
@ -294,10 +359,30 @@ namespace ZL {
|
|||||||
|
|
||||||
void MenuManager::openPhoneScreen() {
|
void MenuManager::openPhoneScreen() {
|
||||||
state = GameState::PhoneScreen;
|
state = GameState::PhoneScreen;
|
||||||
tutorialPhoneScreenOpened = true;
|
|
||||||
uiManager.setNodeVisible("hint6a", false);
|
|
||||||
uiManager.pushMenuFromSavedRoot(phoneMainRoot);
|
|
||||||
|
|
||||||
|
//uiManager.setNodeVisible("hint6a", false);
|
||||||
|
//uiManager.setNodeVisible("hint6aarrow", false);
|
||||||
|
|
||||||
|
//tutorialPhoneScreenOpened = true;
|
||||||
|
|
||||||
|
|
||||||
|
if (tutorialNeedOpenTaxiScreen && (tutorialPhoneChatScreenOpened == false))
|
||||||
|
{
|
||||||
|
uiManager.pushMenuFromSavedRoot(phoneMainHintABRoot);
|
||||||
|
}
|
||||||
|
else if (tutorialNeedOpenTaxiScreen)
|
||||||
|
{
|
||||||
|
uiManager.pushMenuFromSavedRoot(phoneMainHintBRoot);
|
||||||
|
}
|
||||||
|
else if (tutorialPhoneChatScreenOpened == false)
|
||||||
|
{
|
||||||
|
uiManager.pushMenuFromSavedRoot(phoneMainHintARoot);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uiManager.pushMenuFromSavedRoot(phoneMainRoot);
|
||||||
|
}
|
||||||
|
|
||||||
uiManager.setButtonCallback("phoneExitButton", [this](const std::string&) {
|
uiManager.setButtonCallback("phoneExitButton", [this](const std::string&) {
|
||||||
closePhoneEntirely();
|
closePhoneEntirely();
|
||||||
});
|
});
|
||||||
@ -338,7 +423,16 @@ namespace ZL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::openPhoneMessenger() {
|
void MenuManager::openPhoneMessenger() {
|
||||||
uiManager.pushMenuFromSavedRoot(phoneChatListRoot);
|
|
||||||
|
if (tutorialPhoneChatScreenOpened)
|
||||||
|
{
|
||||||
|
uiManager.pushMenuFromSavedRoot(phoneChatListRoot);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uiManager.pushMenuFromSavedRoot(phoneChatListHintRoot);
|
||||||
|
}
|
||||||
|
//uiManager.pushMenuFromSavedRoot(phoneChatListRoot);
|
||||||
refreshChatUnreadIndicators();
|
refreshChatUnreadIndicators();
|
||||||
|
|
||||||
uiManager.setButtonCallback("phoneExitButton", [this](const std::string&) {
|
uiManager.setButtonCallback("phoneExitButton", [this](const std::string&) {
|
||||||
@ -430,6 +524,12 @@ namespace ZL {
|
|||||||
uiManager.popMenu();
|
uiManager.popMenu();
|
||||||
});
|
});
|
||||||
uiManager.setButtonCallback("mapGo", [this](const std::string&) {
|
uiManager.setButtonCallback("mapGo", [this](const std::string&) {
|
||||||
|
tutorialNeedOpenTaxiScreen = false;
|
||||||
|
|
||||||
|
if (callTaxiFunc)
|
||||||
|
{
|
||||||
|
callTaxiFunc();
|
||||||
|
}
|
||||||
money_ -= 500;
|
money_ -= 500;
|
||||||
closePhoneEntirely();
|
closePhoneEntirely();
|
||||||
if (startDialogueFunc) startDialogueFunc("dialog_taxi002");
|
if (startDialogueFunc) startDialogueFunc("dialog_taxi002");
|
||||||
@ -439,6 +539,7 @@ namespace ZL {
|
|||||||
void MenuManager::openPhoneChatFromList(int chatIndex, std::shared_ptr<UiNode> chatRoot) {
|
void MenuManager::openPhoneChatFromList(int chatIndex, std::shared_ptr<UiNode> chatRoot) {
|
||||||
activeChatIndex_ = chatIndex;
|
activeChatIndex_ = chatIndex;
|
||||||
phoneChatVisibleBubbles_.clear();
|
phoneChatVisibleBubbles_.clear();
|
||||||
|
tutorialPhoneChatScreenOpened = true;
|
||||||
uiManager.pushMenuFromSavedRoot(chatRoot);
|
uiManager.pushMenuFromSavedRoot(chatRoot);
|
||||||
|
|
||||||
rebuildChatBubblesFromHistory(chatIndex);
|
rebuildChatBubblesFromHistory(chatIndex);
|
||||||
@ -460,6 +561,14 @@ namespace ZL {
|
|||||||
activeChatIndex_ = -1;
|
activeChatIndex_ = -1;
|
||||||
phoneChatVisibleBubbles_.clear();
|
phoneChatVisibleBubbles_.clear();
|
||||||
uiManager.popMenu();
|
uiManager.popMenu();
|
||||||
|
if (tutorialPhoneChatScreenOpened)
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint_m002", false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint_m002", true);
|
||||||
|
}
|
||||||
refreshChatUnreadIndicators();
|
refreshChatUnreadIndicators();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -469,6 +578,32 @@ namespace ZL {
|
|||||||
phoneChatVisibleBubbles_.clear();
|
phoneChatVisibleBubbles_.clear();
|
||||||
const int depth = uiManager.menuStackSize();
|
const int depth = uiManager.menuStackSize();
|
||||||
for (int i = 0; i < depth; ++i) uiManager.popMenu();
|
for (int i = 0; i < depth; ++i) uiManager.popMenu();
|
||||||
|
|
||||||
|
if (tutorialNeedOpenTaxiScreen)
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint7", true);
|
||||||
|
uiManager.setNodeVisible("hint7arrow", true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint7", false);
|
||||||
|
uiManager.setNodeVisible("hint7arrow", false);
|
||||||
|
|
||||||
|
if (tutorialPhoneChatScreenOpened)
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint6a", false);
|
||||||
|
uiManager.setNodeVisible("hint6aarrow", false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint6a", true);
|
||||||
|
uiManager.setNodeVisible("hint6aarrow", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::closePhoneScreenFromChat() {
|
void MenuManager::closePhoneScreenFromChat() {
|
||||||
@ -479,6 +614,21 @@ namespace ZL {
|
|||||||
closePhoneEntirely();
|
closePhoneEntirely();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MenuManager::tutorialShowTaxiHint()
|
||||||
|
{
|
||||||
|
std::cout << "tutorialShowTaxiHint" << std::endl;
|
||||||
|
tutorialNeedOpenTaxiScreen = true;
|
||||||
|
if (state == GameState::Gameplay)
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint6a", false);
|
||||||
|
uiManager.setNodeVisible("hint6aarrow", false);
|
||||||
|
|
||||||
|
uiManager.setNodeVisible("hint7", true);
|
||||||
|
uiManager.setNodeVisible("hint7arrow", true);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Registers phoneButton / journalButton callbacks on the current HUD root
|
// Registers phoneButton / journalButton callbacks on the current HUD root
|
||||||
// and hides any hints that have already been completed.
|
// and hides any hints that have already been completed.
|
||||||
// Called after every replaceRoot during step 5.
|
// Called after every replaceRoot during step 5.
|
||||||
@ -498,9 +648,30 @@ namespace ZL {
|
|||||||
openQuestJournal();
|
openQuestJournal();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (tutorialPhoneScreenOpened) uiManager.setNodeVisible("hint6a", false);
|
if (tutorialNeedOpenTaxiScreen)
|
||||||
if (tutorialJournalScreenOpened) uiManager.setNodeVisible("hint6b", false);
|
{
|
||||||
if (tutorialPhoneScreenOpened && tutorialJournalScreenOpened) {
|
uiManager.setNodeVisible("hint6a", false);
|
||||||
|
uiManager.setNodeVisible("hint6aarrow", false);
|
||||||
|
|
||||||
|
uiManager.setNodeVisible("hint7", true);
|
||||||
|
uiManager.setNodeVisible("hint7arrow", true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint7", false);
|
||||||
|
uiManager.setNodeVisible("hint7arrow", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tutorialPhoneChatScreenOpened) {
|
||||||
|
uiManager.setNodeVisible("hint6a", false);
|
||||||
|
uiManager.setNodeVisible("hint6aarrow", false);
|
||||||
|
}
|
||||||
|
if (tutorialJournalScreenOpened)
|
||||||
|
{
|
||||||
|
uiManager.setNodeVisible("hint6b", false);
|
||||||
|
uiManager.setNodeVisible("hint6barrow", false);
|
||||||
|
}
|
||||||
|
if (tutorialPhoneChatScreenOpened && tutorialJournalScreenOpened) {
|
||||||
tutorialStep = TutorialStep::Step6;
|
tutorialStep = TutorialStep::Step6;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -514,6 +685,8 @@ namespace ZL {
|
|||||||
uiManager.setButtonCallback("journalButton", [this](const std::string&) { openQuestJournal(); });
|
uiManager.setButtonCallback("journalButton", [this](const std::string&) { openQuestJournal(); });
|
||||||
if (uiManager.findButton("darklandsButton"))
|
if (uiManager.findButton("darklandsButton"))
|
||||||
uiManager.setButtonCallback("darklandsButton", [this](const std::string&) { startDarklandsTransitionFunc(); });
|
uiManager.setButtonCallback("darklandsButton", [this](const std::string&) { startDarklandsTransitionFunc(); });
|
||||||
|
hideAllToastWidgets();
|
||||||
|
applyToastsToUi();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::onLocationChanged(const std::string& locationName) {
|
void MenuManager::onLocationChanged(const std::string& locationName) {
|
||||||
@ -541,6 +714,7 @@ namespace ZL {
|
|||||||
case TutorialStep::Step0:
|
case TutorialStep::Step0:
|
||||||
tutorialStep = TutorialStep::Step1;
|
tutorialStep = TutorialStep::Step1;
|
||||||
nextRoot = hudStep1Root;
|
nextRoot = hudStep1Root;
|
||||||
|
topUiManager.replaceRoot(nullptr);
|
||||||
break;
|
break;
|
||||||
case TutorialStep::Step1:
|
case TutorialStep::Step1:
|
||||||
tutorialStep = TutorialStep::Step2;
|
tutorialStep = TutorialStep::Step2;
|
||||||
@ -860,7 +1034,7 @@ namespace ZL {
|
|||||||
}
|
}
|
||||||
uiManager.replaceRoot(root);
|
uiManager.replaceRoot(root);
|
||||||
applyCurrentHealthBar();
|
applyCurrentHealthBar();
|
||||||
setupGameplayHudCallbacks();
|
setupGameplayHudCallbacks(); // already calls hideAllToastWidgets + applyToastsToUi
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuManager::onPlayerStartedWalking()
|
void MenuManager::onPlayerStartedWalking()
|
||||||
@ -921,4 +1095,116 @@ namespace ZL {
|
|||||||
uiManager.setText("healthValue", hpText);
|
uiManager.setText("healthValue", hpText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---- Toast notification system ----
|
||||||
|
|
||||||
|
float MenuManager::ToastEntry::currentAlpha() const {
|
||||||
|
switch (state) {
|
||||||
|
case State::FadeIn: return min(timer / TOAST_FADE_MS, 1.0f);
|
||||||
|
case State::Visible: return 1.0f;
|
||||||
|
case State::FadeOut: return max(1.0f - timer / TOAST_FADE_MS, 0.0f);
|
||||||
|
}
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuManager::showToast(const std::string& iconPath, const std::string& text) {
|
||||||
|
if (activeToasts_.size() < 3) {
|
||||||
|
ToastEntry e;
|
||||||
|
e.iconPath = iconPath;
|
||||||
|
e.text = text;
|
||||||
|
activeToasts_.push_back(std::move(e));
|
||||||
|
} else {
|
||||||
|
toastQueue_.push_back({ iconPath, text });
|
||||||
|
}
|
||||||
|
applyToastsToUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuManager::updateToasts(float deltaMs) {
|
||||||
|
if (activeToasts_.empty() && toastQueue_.empty()) return;
|
||||||
|
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
for (auto& e : activeToasts_) {
|
||||||
|
e.timer += deltaMs;
|
||||||
|
// Advance state machine
|
||||||
|
if (e.state == ToastEntry::State::FadeIn && e.timer >= TOAST_FADE_MS) {
|
||||||
|
e.state = ToastEntry::State::Visible;
|
||||||
|
e.timer = 0.0f;
|
||||||
|
changed = true;
|
||||||
|
} else if (e.state == ToastEntry::State::Visible && e.timer >= TOAST_VISIBLE_MS) {
|
||||||
|
e.state = ToastEntry::State::FadeOut;
|
||||||
|
e.timer = 0.0f;
|
||||||
|
changed = true;
|
||||||
|
} else if (e.state == ToastEntry::State::FadeOut && e.timer >= TOAST_FADE_MS) {
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove finished entries (FadeOut complete)
|
||||||
|
auto removed = std::remove_if(activeToasts_.begin(), activeToasts_.end(),
|
||||||
|
[](const ToastEntry& e) {
|
||||||
|
return e.state == ToastEntry::State::FadeOut && e.timer >= TOAST_FADE_MS;
|
||||||
|
});
|
||||||
|
if (removed != activeToasts_.end()) {
|
||||||
|
activeToasts_.erase(removed, activeToasts_.end());
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pull queued messages into now-free slots (with FadeIn)
|
||||||
|
while (!toastQueue_.empty() && activeToasts_.size() < 3) {
|
||||||
|
ToastEntry e;
|
||||||
|
e.iconPath = toastQueue_.front().iconPath;
|
||||||
|
e.text = toastQueue_.front().text;
|
||||||
|
toastQueue_.pop_front();
|
||||||
|
activeToasts_.push_back(std::move(e));
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed) applyToastsToUi();
|
||||||
|
// Also refresh alpha smoothly every frame while any slot is fading
|
||||||
|
else if (!activeToasts_.empty()) applyToastsToUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuManager::applyToastsToUi() {
|
||||||
|
static const char* imgNames[3] = { "toast001", "toast002", "toast003" };
|
||||||
|
static const char* txtNames[3] = { "toast001text", "toast002text", "toast003text" };
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; ++i) {
|
||||||
|
if (i < static_cast<int>(activeToasts_.size())) {
|
||||||
|
const ToastEntry& e = activeToasts_[i];
|
||||||
|
const float a = e.currentAlpha();
|
||||||
|
|
||||||
|
auto img = uiManager.findStaticImage(imgNames[i]);
|
||||||
|
auto tv = uiManager.findTextView(txtNames[i]);
|
||||||
|
|
||||||
|
if (img) {
|
||||||
|
img->texture = renderer.textureManager.LoadFromPng(e.iconPath, CONST_ZIP_FILE, true);
|
||||||
|
img->alpha = a;
|
||||||
|
}
|
||||||
|
if (tv) {
|
||||||
|
tv->color[3] = a;
|
||||||
|
}
|
||||||
|
uiManager.setText(txtNames[i], e.text);
|
||||||
|
uiManager.setNodeVisible(imgNames[i], true);
|
||||||
|
uiManager.setNodeVisible(txtNames[i], true);
|
||||||
|
} else {
|
||||||
|
uiManager.setNodeVisible(imgNames[i], false);
|
||||||
|
uiManager.setNodeVisible(txtNames[i], false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuManager::hideAllToastWidgets() {
|
||||||
|
static const char* names[6] = {
|
||||||
|
"toast001", "toast001text",
|
||||||
|
"toast002", "toast002text",
|
||||||
|
"toast003", "toast003text"
|
||||||
|
};
|
||||||
|
for (const char* name : names)
|
||||||
|
uiManager.setNodeVisible(name, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MenuManager::update(float deltaMs) {
|
||||||
|
updateToasts(deltaMs);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ZL
|
} // namespace ZL
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
#include "items/Item.h"
|
#include "items/Item.h"
|
||||||
#include "quest/QuestJournal.h"
|
#include "quest/QuestJournal.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <deque>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
@ -14,6 +15,8 @@ namespace ZL {
|
|||||||
extern const char* CONST_ZIP_FILE;
|
extern const char* CONST_ZIP_FILE;
|
||||||
|
|
||||||
enum class GameState {
|
enum class GameState {
|
||||||
|
MainMenu,
|
||||||
|
About,
|
||||||
Gameplay,
|
Gameplay,
|
||||||
Inventory,
|
Inventory,
|
||||||
QuestJournal,
|
QuestJournal,
|
||||||
@ -56,21 +59,28 @@ namespace ZL {
|
|||||||
bool isInventoryOpen() const { return state == GameState::Inventory; }
|
bool isInventoryOpen() const { return state == GameState::Inventory; }
|
||||||
bool isQuestJournalOpen() const { return state == GameState::QuestJournal; }
|
bool isQuestJournalOpen() const { return state == GameState::QuestJournal; }
|
||||||
|
|
||||||
|
void showMainMenu();
|
||||||
|
bool isMainMenuOpen() const { return state == GameState::MainMenu; }
|
||||||
|
|
||||||
void openPhoneScreen();
|
void openPhoneScreen();
|
||||||
void closePhoneScreen();
|
void closePhoneScreen();
|
||||||
bool isPhoneScreenOpen() const { return state == GameState::PhoneScreen; }
|
bool isPhoneScreenOpen() const { return state == GameState::PhoneScreen; }
|
||||||
void closePhoneEntirely();
|
void closePhoneEntirely();
|
||||||
|
|
||||||
|
void tutorialShowTaxiHint();
|
||||||
|
|
||||||
void setChatUnread(int chatIndex, bool unread);
|
void setChatUnread(int chatIndex, bool unread);
|
||||||
|
|
||||||
void spendMoney(int amount);
|
void spendMoney(int amount);
|
||||||
int getMoney() const { return money_; }
|
int getMoney() const { return money_; }
|
||||||
|
|
||||||
|
std::function<void()> startGameFunc;
|
||||||
std::function<void(const std::string&)> startDialogueFunc;
|
std::function<void(const std::string&)> startDialogueFunc;
|
||||||
std::function<void()> startDarklandsTransitionFunc;
|
std::function<void()> startDarklandsTransitionFunc;
|
||||||
std::function<void()> startNightTransitionFunc;
|
std::function<void()> startNightTransitionFunc;
|
||||||
std::function<void(int)> chatOpenCallback;
|
std::function<void(int)> chatOpenCallback;
|
||||||
std::function<void()> skipCutsceneFunc;
|
std::function<void()> skipCutsceneFunc;
|
||||||
|
std::function<void()> callTaxiFunc;
|
||||||
|
|
||||||
// Called when a chat message bubble should be shown (text + direction)
|
// Called when a chat message bubble should be shown (text + direction)
|
||||||
void onChatBubbleReady(const std::string& text, bool incoming);
|
void onChatBubbleReady(const std::string& text, bool incoming);
|
||||||
@ -90,6 +100,10 @@ namespace ZL {
|
|||||||
void onCutsceneFinished();
|
void onCutsceneFinished();
|
||||||
bool cutsceneHudActive_ = false;
|
bool cutsceneHudActive_ = false;
|
||||||
|
|
||||||
|
// Toast notification system
|
||||||
|
void showToast(const std::string& iconPath, const std::string& text);
|
||||||
|
void update(float deltaMs);
|
||||||
|
|
||||||
TutorialStep tutorialStep = TutorialStep::Step0;
|
TutorialStep tutorialStep = TutorialStep::Step0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -115,6 +129,27 @@ namespace ZL {
|
|||||||
void closePhoneScreenFromChat();
|
void closePhoneScreenFromChat();
|
||||||
void applyUniIntHud();
|
void applyUniIntHud();
|
||||||
void rebuildChatBubblesFromHistory(int chatIndex);
|
void rebuildChatBubblesFromHistory(int chatIndex);
|
||||||
|
void showAboutScreen();
|
||||||
|
|
||||||
|
// Toast internals
|
||||||
|
struct ToastEntry {
|
||||||
|
std::string iconPath;
|
||||||
|
std::string text;
|
||||||
|
float timer = 0.0f;
|
||||||
|
enum class State { FadeIn, Visible, FadeOut } state = State::FadeIn;
|
||||||
|
float currentAlpha() const;
|
||||||
|
};
|
||||||
|
struct ToastMessage { std::string iconPath; std::string text; };
|
||||||
|
|
||||||
|
void updateToasts(float deltaMs);
|
||||||
|
void applyToastsToUi();
|
||||||
|
void hideAllToastWidgets();
|
||||||
|
|
||||||
|
std::vector<ToastEntry> activeToasts_;
|
||||||
|
std::deque<ToastMessage> toastQueue_;
|
||||||
|
|
||||||
|
static constexpr float TOAST_FADE_MS = 1000.0f;
|
||||||
|
static constexpr float TOAST_VISIBLE_MS = 2000.0f;
|
||||||
|
|
||||||
GameState state = GameState::Gameplay;
|
GameState state = GameState::Gameplay;
|
||||||
Inventory* inventory = nullptr;
|
Inventory* inventory = nullptr;
|
||||||
@ -128,8 +163,13 @@ namespace ZL {
|
|||||||
|
|
||||||
bool tutorialPhonePickedUp = false;
|
bool tutorialPhonePickedUp = false;
|
||||||
bool tutorialJournalPickedUp = false;
|
bool tutorialJournalPickedUp = false;
|
||||||
bool tutorialPhoneScreenOpened = false;
|
//bool tutorialPhoneScreenOpened = false;
|
||||||
|
bool tutorialPhoneChatScreenOpened = false;
|
||||||
bool tutorialJournalScreenOpened = false;
|
bool tutorialJournalScreenOpened = false;
|
||||||
|
bool tutorialMessengerScreenOpened = false;
|
||||||
|
//bool tutorialTaxiScreenOpened = false;
|
||||||
|
|
||||||
|
bool tutorialNeedOpenTaxiScreen = false;
|
||||||
|
|
||||||
std::shared_ptr<UiNode> hudRoot;
|
std::shared_ptr<UiNode> hudRoot;
|
||||||
std::shared_ptr<UiNode> hudStep1Root;
|
std::shared_ptr<UiNode> hudStep1Root;
|
||||||
@ -147,17 +187,30 @@ namespace ZL {
|
|||||||
std::shared_ptr<UiNode> hudUniIntStep13Root;
|
std::shared_ptr<UiNode> hudUniIntStep13Root;
|
||||||
std::shared_ptr<UiNode> hudUniIntDarkFullRoot;
|
std::shared_ptr<UiNode> hudUniIntDarkFullRoot;
|
||||||
std::shared_ptr<UiNode> hudUniExtDarkRoot;
|
std::shared_ptr<UiNode> hudUniExtDarkRoot;
|
||||||
|
|
||||||
|
|
||||||
std::shared_ptr<UiNode> hudCutsceneRoot_;
|
std::shared_ptr<UiNode> hudCutsceneRoot_;
|
||||||
|
std::shared_ptr<UiNode> hudTopHintRoot_;
|
||||||
|
|
||||||
|
|
||||||
std::shared_ptr<UiNode> phoneMainRoot;
|
std::shared_ptr<UiNode> phoneMainRoot;
|
||||||
|
std::shared_ptr<UiNode> phoneMainHintARoot;
|
||||||
|
std::shared_ptr<UiNode> phoneMainHintBRoot;
|
||||||
|
std::shared_ptr<UiNode> phoneMainHintABRoot;
|
||||||
|
|
||||||
std::shared_ptr<UiNode> phoneBankRoot;
|
std::shared_ptr<UiNode> phoneBankRoot;
|
||||||
std::shared_ptr<UiNode> phoneVideoRoot;
|
std::shared_ptr<UiNode> phoneVideoRoot;
|
||||||
std::shared_ptr<UiNode> phoneMapDormRoot;
|
std::shared_ptr<UiNode> phoneMapDormRoot;
|
||||||
std::shared_ptr<UiNode> phoneMapUniRoot;
|
std::shared_ptr<UiNode> phoneMapUniRoot;
|
||||||
std::shared_ptr<UiNode> phoneChatListRoot;
|
std::shared_ptr<UiNode> phoneChatListRoot;
|
||||||
|
std::shared_ptr<UiNode> phoneChatListHintRoot;
|
||||||
std::shared_ptr<UiNode> phoneChat1Root;
|
std::shared_ptr<UiNode> phoneChat1Root;
|
||||||
std::shared_ptr<UiNode> phoneChat2Root;
|
std::shared_ptr<UiNode> phoneChat2Root;
|
||||||
std::shared_ptr<UiNode> phoneChat3Root;
|
std::shared_ptr<UiNode> phoneChat3Root;
|
||||||
|
|
||||||
|
std::shared_ptr<UiNode> mainMenuRoot;
|
||||||
|
std::shared_ptr<UiNode> aboutScreenRoot;
|
||||||
|
|
||||||
std::shared_ptr<UiNode> newInventoryRoot;
|
std::shared_ptr<UiNode> newInventoryRoot;
|
||||||
std::shared_ptr<UiNode> questJournalRoot;
|
std::shared_ptr<UiNode> questJournalRoot;
|
||||||
|
|
||||||
|
|||||||
@ -657,6 +657,18 @@ namespace ZL {
|
|||||||
return this_impl->questJournal->setActiveObjective(questId, index);
|
return this_impl->questJournal->setActiveObjective(questId, index);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
api.set_function("call_tutorial_taxi_required",
|
||||||
|
[game]() -> void {
|
||||||
|
if (game->onPlayerTaxiRequired)
|
||||||
|
{
|
||||||
|
game->onPlayerTaxiRequired();
|
||||||
|
game->onPlayerTaxiRequired = nullptr;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
std::cerr << "[script] call_tutorial_taxi_required: function is empty\n";
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
lua.script_file(scriptPath);
|
lua.script_file(scriptPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -402,15 +402,16 @@ namespace ZL {
|
|||||||
void UiStaticImage::draw(Renderer& renderer) const {
|
void UiStaticImage::draw(Renderer& renderer) const {
|
||||||
if (!texture) return;
|
if (!texture) return;
|
||||||
|
|
||||||
const float alpha = (fadeInEnabled && fadeInDurationMs > 0.0f)
|
const float fadeAlpha = (fadeInEnabled && fadeInDurationMs > 0.0f)
|
||||||
? std::clamp(fadeInElapsedMs / fadeInDurationMs, 0.0f, 1.0f)
|
? std::clamp(fadeInElapsedMs / fadeInDurationMs, 0.0f, 1.0f)
|
||||||
: 1.0f;
|
: 1.0f;
|
||||||
|
const float finalAlpha = alpha * fadeAlpha;
|
||||||
|
|
||||||
renderer.RenderUniform1i(textureUniformName, 0);
|
renderer.RenderUniform1i(textureUniformName, 0);
|
||||||
renderer.RenderUniform1f("uAlpha", alpha);
|
renderer.RenderUniform1f("uAlpha", finalAlpha);
|
||||||
glBindTexture(GL_TEXTURE_2D, texture->getTexID());
|
glBindTexture(GL_TEXTURE_2D, texture->getTexID());
|
||||||
renderer.DrawVertexRenderStruct(mesh);
|
renderer.DrawVertexRenderStruct(mesh);
|
||||||
if (alpha < 1.0f) {
|
if (finalAlpha < 1.0f) {
|
||||||
renderer.RenderUniform1f("uAlpha", 1.0f); // restore for subsequent draws
|
renderer.RenderUniform1f("uAlpha", 1.0f); // restore for subsequent draws
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -236,6 +236,9 @@ namespace ZL {
|
|||||||
|
|
||||||
VertexRenderStruct mesh;
|
VertexRenderStruct mesh;
|
||||||
|
|
||||||
|
// Externally controllable opacity (0=transparent, 1=opaque). Multiplies with fade-in.
|
||||||
|
float alpha = 1.0f;
|
||||||
|
|
||||||
// Fade-in on first display (triggers each time the containing UI is shown)
|
// Fade-in on first display (triggers each time the containing UI is shown)
|
||||||
bool fadeInEnabled = false;
|
bool fadeInEnabled = false;
|
||||||
float fadeInDurationMs = 1000.0f;
|
float fadeInDurationMs = 1000.0f;
|
||||||
|
|||||||
@ -19,9 +19,14 @@ bool DialogueOverlay::init(Renderer& renderer, const std::string& zipFile) {
|
|||||||
zipFilename = zipFile;
|
zipFilename = zipFile;
|
||||||
|
|
||||||
textboxTexture = renderer.textureManager.LoadFromPng("resources/dialogue/textbox_bg.png", zipFile);
|
textboxTexture = renderer.textureManager.LoadFromPng("resources/dialogue/textbox_bg.png", zipFile);
|
||||||
choiceMainTexture = renderer.textureManager.LoadFromPng("resources/dialogue/choice_main.png", zipFile);
|
textboxChoiceTexture = renderer.textureManager.LoadFromPng("resources/dialogue/DialogChoice001.png", zipFile);
|
||||||
|
/*choiceMainTexture = renderer.textureManager.LoadFromPng("resources/dialogue/choice_main.png", zipFile);
|
||||||
choiceOptionalTexture = renderer.textureManager.LoadFromPng("resources/dialogue/choice_optional.png", zipFile);
|
choiceOptionalTexture = renderer.textureManager.LoadFromPng("resources/dialogue/choice_optional.png", zipFile);
|
||||||
choiceSelectedTexture = renderer.textureManager.LoadFromPng("resources/dialogue/choice_selected.png", zipFile);
|
choiceSelectedTexture = renderer.textureManager.LoadFromPng("resources/dialogue/choice_selected.png", zipFile);
|
||||||
|
*/
|
||||||
|
choiceMainTexture = renderer.textureManager.LoadFromPng("resources/dialogue/ChoiceNormal001.png", zipFile);
|
||||||
|
choiceOptionalTexture = renderer.textureManager.LoadFromPng("resources/dialogue/ChoiceNormal001.png", zipFile);
|
||||||
|
choiceSelectedTexture = renderer.textureManager.LoadFromPng("resources/dialogue/ChoiceSelected001.png", zipFile);
|
||||||
|
|
||||||
nameRenderer = std::make_unique<TextRenderer>();
|
nameRenderer = std::make_unique<TextRenderer>();
|
||||||
bodyRenderer = std::make_unique<TextRenderer>();
|
bodyRenderer = std::make_unique<TextRenderer>();
|
||||||
@ -57,6 +62,7 @@ void DialogueOverlay::draw(Renderer& renderer, const PresentationModel& model) {
|
|||||||
|
|
||||||
UiRect portraitRect{ 24.0f + 90, 24.0f + 16, 176.0f, 176.0f };
|
UiRect portraitRect{ 24.0f + 90, 24.0f + 16, 176.0f, 176.0f };
|
||||||
UiRect textboxRect{ 30.f, -48.f, 1222.f, 340.0f };
|
UiRect textboxRect{ 30.f, -48.f, 1222.f, 340.0f };
|
||||||
|
UiRect textboxChoiceRect{ 30.f, -48.f, 1200.f, 619.5f };
|
||||||
|
|
||||||
lastDialogueAdvanceRect = { portraitRect.x, portraitRect.y, textboxRect.x + textboxRect.w - portraitRect.x, textboxRect.h };
|
lastDialogueAdvanceRect = { portraitRect.x, portraitRect.y, textboxRect.x + textboxRect.w - portraitRect.x, textboxRect.h };
|
||||||
|
|
||||||
@ -69,6 +75,11 @@ void DialogueOverlay::draw(Renderer& renderer, const PresentationModel& model) {
|
|||||||
textboxQuad.rebuild(textboxRect);
|
textboxQuad.rebuild(textboxRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!textboxChoiceQuad.initialized || textboxChoiceQuad.rect.w != textboxChoiceRect.w || textboxChoiceQuad.rect.h != textboxChoiceRect.h ||
|
||||||
|
textboxChoiceQuad.rect.x != textboxChoiceRect.x || textboxChoiceQuad.rect.y != textboxChoiceRect.y) {
|
||||||
|
textboxChoiceQuad.rebuild(textboxChoiceRect);
|
||||||
|
}
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
renderer.shaderManager.PushShader(defaultShaderName);
|
renderer.shaderManager.PushShader(defaultShaderName);
|
||||||
renderer.RenderUniform1i(textureUniformName, 0);
|
renderer.RenderUniform1i(textureUniformName, 0);
|
||||||
@ -77,45 +88,77 @@ void DialogueOverlay::draw(Renderer& renderer, const PresentationModel& model) {
|
|||||||
renderer.LoadIdentity();
|
renderer.LoadIdentity();
|
||||||
renderer.RenderUniform1f("uAlpha", 1.0f);
|
renderer.RenderUniform1f("uAlpha", 1.0f);
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, textboxTexture->getTexID());
|
if (model.mode == PresentationMode::Choice)
|
||||||
renderer.DrawVertexRenderStruct(textboxQuad.mesh);
|
{
|
||||||
|
glBindTexture(GL_TEXTURE_2D, textboxTexture->getTexID());
|
||||||
|
renderer.DrawVertexRenderStruct(textboxChoiceQuad.mesh);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glBindTexture(GL_TEXTURE_2D, textboxTexture->getTexID());
|
||||||
|
renderer.DrawVertexRenderStruct(textboxQuad.mesh);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
renderer.PushMatrix();
|
||||||
|
|
||||||
|
if (model.mode == PresentationMode::Choice)
|
||||||
|
{
|
||||||
|
renderer.TranslateMatrix(Vector3f{ 0, 230, 0 });
|
||||||
|
}
|
||||||
|
|
||||||
auto portrait = loadTextureCached(model.portraitPath);
|
auto portrait = loadTextureCached(model.portraitPath);
|
||||||
if (portrait) {
|
if (portrait) {
|
||||||
glBindTexture(GL_TEXTURE_2D, portrait->getTexID());
|
glBindTexture(GL_TEXTURE_2D, portrait->getTexID());
|
||||||
renderer.DrawVertexRenderStruct(portraitQuad.mesh);
|
renderer.DrawVertexRenderStruct(portraitQuad.mesh);
|
||||||
}
|
}
|
||||||
|
renderer.PopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer.PopMatrix();
|
renderer.PopMatrix();
|
||||||
renderer.PopProjectionMatrix();
|
renderer.PopProjectionMatrix();
|
||||||
renderer.shaderManager.PopShader();
|
renderer.shaderManager.PopShader();
|
||||||
|
|
||||||
const float nameX = 312;
|
|
||||||
|
const float nameX = 312+8;
|
||||||
const float nameY = 232 - 38.0f;
|
const float nameY = 232 - 38.0f;
|
||||||
const float bodyX = 312;
|
const float bodyX = 312+8;
|
||||||
const float bodyY = 232 - 78.0f;
|
const float bodyY = 232 - 78.0f;
|
||||||
|
|
||||||
|
lastChoiceRects.clear();
|
||||||
|
|
||||||
if (!model.speaker.empty()) {
|
if (!model.speaker.empty()) {
|
||||||
nameRenderer->drawText(model.speaker, nameX, nameY, 1.0f, false, { 1.0f, 0.88f, 0.45f, 1.0f });
|
|
||||||
|
if (model.mode == PresentationMode::Choice)
|
||||||
|
{
|
||||||
|
nameRenderer->drawText(model.speaker, nameX+x, nameY+230, 1.0f, false, { 1.0f, 0.88f, 0.45f, 1.0f });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
nameRenderer->drawText(model.speaker, nameX+x, nameY, 1.0f, false, { 1.0f, 0.88f, 0.45f, 1.0f });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const float bodyMaxWidthPx = W - nameX - 48.f - ZL::x - 60.f;
|
const float bodyMaxWidthPx = W - nameX - 48.f - 60.f;
|
||||||
const std::string wrappedBody = wrapTextToWidth(model.visibleText, *bodyRenderer, bodyMaxWidthPx, 1.0f);
|
const std::string wrappedBody = wrapTextToWidth(model.visibleText, *bodyRenderer, bodyMaxWidthPx, 1.0f);
|
||||||
bodyRenderer->drawText(wrappedBody, bodyX, bodyY, 1.0f, false, { 1.0f, 1.0f, 1.0f, 1.0f });
|
bodyRenderer->drawText(wrappedBody, bodyX, bodyY, 1.0f, false, { 1.0f, 1.0f, 1.0f, 1.0f });
|
||||||
|
|
||||||
lastChoiceRects.clear();
|
|
||||||
if (model.mode == PresentationMode::Choice) {
|
if (model.mode == PresentationMode::Choice) {
|
||||||
const float choiceStartY = textboxRect.y + 56.0f;
|
const float choiceStartY = 270.f-35;
|
||||||
const float choiceHeight = 30.0f;
|
const float choiceHeight = 121.f*0.9;
|
||||||
const float choiceSpacing = 8.0f;
|
const float choiceSpacing = -30.f;
|
||||||
const float choiceWidth = textboxRect.w - 48.0f;
|
const float choiceWidth = 913.f * 0.9;
|
||||||
|
|
||||||
|
//UiRect textboxRect{ 30.f, -48.f, 1222.f, 340.0f };
|
||||||
|
|
||||||
|
|
||||||
if (choiceQuads.size() < model.choices.size()) {
|
if (choiceQuads.size() < model.choices.size()) {
|
||||||
choiceQuads.resize(model.choices.size());
|
choiceQuads.resize(model.choices.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
renderer.shaderManager.PushShader(defaultShaderName);
|
renderer.shaderManager.PushShader(defaultShaderName);
|
||||||
renderer.RenderUniform1i(textureUniformName, 0);
|
renderer.RenderUniform1i(textureUniformName, 0);
|
||||||
renderer.PushProjectionMatrix(0.0f, W, 0.0f, Environment::projectionHeight, -10.0f, 10.0f);
|
renderer.PushProjectionMatrix(0.0f, W, 0.0f, Environment::projectionHeight, -10.0f, 10.0f);
|
||||||
@ -124,7 +167,7 @@ void DialogueOverlay::draw(Renderer& renderer, const PresentationModel& model) {
|
|||||||
|
|
||||||
for (size_t i = 0; i < model.choices.size(); ++i) {
|
for (size_t i = 0; i < model.choices.size(); ++i) {
|
||||||
const float cy = choiceStartY + (choiceHeight + choiceSpacing) * static_cast<float>(model.choices.size() - 1 - i);
|
const float cy = choiceStartY + (choiceHeight + choiceSpacing) * static_cast<float>(model.choices.size() - 1 - i);
|
||||||
UiRect rect{ textboxRect.x + 20.0f, cy, choiceWidth, choiceHeight };
|
UiRect rect{ 300.f, cy, choiceWidth, choiceHeight };
|
||||||
lastChoiceRects.push_back(rect);
|
lastChoiceRects.push_back(rect);
|
||||||
choiceQuads[i].rebuild(rect);
|
choiceQuads[i].rebuild(rect);
|
||||||
|
|
||||||
@ -149,7 +192,7 @@ void DialogueOverlay::draw(Renderer& renderer, const PresentationModel& model) {
|
|||||||
|
|
||||||
const std::string wrappedChoice = wrapTextToWidth(model.choices[i].text, *choiceRenderer, rect.w - 28.0f, 1.0f);
|
const std::string wrappedChoice = wrapTextToWidth(model.choices[i].text, *choiceRenderer, rect.w - 28.0f, 1.0f);
|
||||||
choiceRenderer->drawText(
|
choiceRenderer->drawText(
|
||||||
wrappedChoice, rect.x + 14.0f, rect.y + 9.0f, 1.0f, false,
|
wrappedChoice, rect.x + 32.0f, rect.y + 50.f, 1.5f, false,
|
||||||
isHighlighted ? std::array<float, 4>{1.0f, 1.0f, 1.0f, 1.0f} : color
|
isHighlighted ? std::array<float, 4>{1.0f, 1.0f, 1.0f, 1.0f} : color
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,6 +27,8 @@ private:
|
|||||||
std::string zipFilename;
|
std::string zipFilename;
|
||||||
|
|
||||||
std::shared_ptr<Texture> textboxTexture;
|
std::shared_ptr<Texture> textboxTexture;
|
||||||
|
std::shared_ptr<Texture> textboxChoiceTexture;
|
||||||
|
|
||||||
std::shared_ptr<Texture> choiceMainTexture;
|
std::shared_ptr<Texture> choiceMainTexture;
|
||||||
std::shared_ptr<Texture> choiceOptionalTexture;
|
std::shared_ptr<Texture> choiceOptionalTexture;
|
||||||
std::shared_ptr<Texture> choiceSelectedTexture;
|
std::shared_ptr<Texture> choiceSelectedTexture;
|
||||||
@ -42,6 +44,7 @@ private:
|
|||||||
|
|
||||||
UiQuad portraitQuad;
|
UiQuad portraitQuad;
|
||||||
UiQuad textboxQuad;
|
UiQuad textboxQuad;
|
||||||
|
UiQuad textboxChoiceQuad;
|
||||||
mutable std::vector<UiQuad> choiceQuads;
|
mutable std::vector<UiQuad> choiceQuads;
|
||||||
|
|
||||||
std::shared_ptr<Texture> loadTextureCached(const std::string& path);
|
std::shared_ptr<Texture> loadTextureCached(const std::string& path);
|
||||||
|
|||||||
@ -15,6 +15,7 @@ namespace ZL {
|
|||||||
[&itemId](const Item& item) { return item.id == itemId; });
|
[&itemId](const Item& item) { return item.id == itemId; });
|
||||||
if (it != items.end()) {
|
if (it != items.end()) {
|
||||||
std::cout << "Item removed from inventory: " << it->name << std::endl;
|
std::cout << "Item removed from inventory: " << it->name << std::endl;
|
||||||
|
if (onItemRemoved) onItemRemoved(itemId);
|
||||||
items.erase(it);
|
items.erase(it);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,8 +31,9 @@ namespace ZL {
|
|||||||
void clear() { items.clear(); }
|
void clear() { items.clear(); }
|
||||||
size_t getCount() const { return items.size(); }
|
size_t getCount() const { return items.size(); }
|
||||||
|
|
||||||
// Called whenever an item is added; receives the item id.
|
// Called whenever an item is added/removed; receives the item id.
|
||||||
std::function<void(const std::string&)> onItemAdded;
|
std::function<void(const std::string&)> onItemAdded;
|
||||||
|
std::function<void(const std::string&)> onItemRemoved;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace ZL
|
} // namespace ZL
|
||||||
@ -113,16 +113,21 @@ bool QuestJournal::unlockQuest(const std::string& questId) {
|
|||||||
if (!quest) return false;
|
if (!quest) return false;
|
||||||
if (quest->status == QuestStatus::Hidden) {
|
if (quest->status == QuestStatus::Hidden) {
|
||||||
quest->status = QuestStatus::Available;
|
quest->status = QuestStatus::Available;
|
||||||
|
if (onQuestUnlocked) onQuestUnlocked(questId);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QuestJournal::completeQuest(const std::string& questId) {
|
bool QuestJournal::completeQuest(const std::string& questId) {
|
||||||
return setStatus(questId, QuestStatus::Completed);
|
bool changed = setStatus(questId, QuestStatus::Completed);
|
||||||
|
if (changed && onQuestCompleted) onQuestCompleted(questId);
|
||||||
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QuestJournal::failQuest(const std::string& questId) {
|
bool QuestJournal::failQuest(const std::string& questId) {
|
||||||
return setStatus(questId, QuestStatus::Failed);
|
bool changed = setStatus(questId, QuestStatus::Failed);
|
||||||
|
if (changed && onQuestFailed) onQuestFailed(questId);
|
||||||
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QuestJournal::setObjectiveCompleted(const std::string& questId, const std::string& objectiveId, bool completed) {
|
bool QuestJournal::setObjectiveCompleted(const std::string& questId, const std::string& objectiveId, bool completed) {
|
||||||
@ -133,13 +138,19 @@ bool QuestJournal::setObjectiveCompleted(const std::string& questId, const std::
|
|||||||
if (objective.id == objectiveId) {
|
if (objective.id == objectiveId) {
|
||||||
objective.completed = completed;
|
objective.completed = completed;
|
||||||
|
|
||||||
|
if (completed) {
|
||||||
|
if (onObjectiveCompleted) onObjectiveCompleted(questId, objectiveId);
|
||||||
|
}
|
||||||
|
|
||||||
if (completed && quest->definition.autoComplete && quest->status == QuestStatus::Available) {
|
if (completed && quest->definition.autoComplete && quest->status == QuestStatus::Available) {
|
||||||
const bool allDone = std::all_of(
|
const bool allDone = std::all_of(
|
||||||
quest->definition.objectives.begin(),
|
quest->definition.objectives.begin(),
|
||||||
quest->definition.objectives.end(),
|
quest->definition.objectives.end(),
|
||||||
[](const QuestObjective& o) { return o.completed; });
|
[](const QuestObjective& o) { return o.completed; });
|
||||||
if (allDone)
|
if (allDone) {
|
||||||
quest->status = QuestStatus::Completed;
|
quest->status = QuestStatus::Completed;
|
||||||
|
if (onQuestCompleted) onQuestCompleted(questId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
namespace ZL::Quest {
|
namespace ZL::Quest {
|
||||||
|
|
||||||
@ -11,6 +12,12 @@ class QuestJournal {
|
|||||||
public:
|
public:
|
||||||
bool loadFromFile(const std::string& path, const std::string& zipFile = "");
|
bool loadFromFile(const std::string& path, const std::string& zipFile = "");
|
||||||
|
|
||||||
|
// Event callbacks — set by the owner (MenuManager) to receive notifications.
|
||||||
|
std::function<void(const std::string& questId)> onQuestUnlocked;
|
||||||
|
std::function<void(const std::string& questId)> onQuestCompleted;
|
||||||
|
std::function<void(const std::string& questId)> onQuestFailed;
|
||||||
|
std::function<void(const std::string& questId, const std::string& objectiveId)> onObjectiveCompleted;
|
||||||
|
|
||||||
bool unlockQuest(const std::string& questId);
|
bool unlockQuest(const std::string& questId);
|
||||||
bool completeQuest(const std::string& questId);
|
bool completeQuest(const std::string& questId);
|
||||||
bool failQuest(const std::string& questId);
|
bool failQuest(const std::string& questId);
|
||||||
|
|||||||
@ -471,7 +471,7 @@ void TextRenderer::drawText(const std::string& text, float x, float y, float sca
|
|||||||
|
|
||||||
r->DrawVertexRenderStruct(cached.mesh);
|
r->DrawVertexRenderStruct(cached.mesh);
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
//glDisable(GL_BLEND);
|
||||||
|
|
||||||
r->shaderManager.PopShader();
|
r->shaderManager.PopShader();
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user