|
|
@@ -8,6 +8,8 @@
|
|
|
#include "Player.h"
|
|
|
#include "static_data.h"
|
|
|
|
|
|
+#include <luwra.hpp>
|
|
|
+
|
|
|
using Pacman::GameState;
|
|
|
using Pacman::Player;
|
|
|
using Pacman::ButtonInput;
|
|
|
@@ -22,94 +24,93 @@ using WalrusRPG::Input::Key;
|
|
|
|
|
|
uint16_t map_data[] = {
|
|
|
5,3,3,3,3,3,3,3,3,3,3,3,3,13,14,3,3,3,3,3,3,3,3,3,3,3,3,6,
|
|
|
-1,0,0,0,0,0,0,0,0,0,0,0,0,18,17,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
|
|
-1,0,9,15,15,10,0,9,15,15,15,10,0,18,17,0,9,15,15,15,10,0,9,15,15,10,0,2,
|
|
|
-1,0,18,0,0,17,0,18,0,0,0,17,0,18,17,0,18,0,0,0,17,0,18,0,0,17,0,2,
|
|
|
-1,0,11,16,16,12,0,11,16,16,16,12,0,11,12,0,11,16,16,16,12,0,11,16,16,12,0,2,
|
|
|
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
|
|
-1,0,9,15,15,10,0,9,10,0,9,15,15,15,15,15,15,10,0,9,10,0,9,15,15,10,0,2,
|
|
|
-1,0,11,16,16,12,0,18,17,0,11,16,16,24,23,16,16,12,0,18,17,0,11,16,16,12,0,2,
|
|
|
-1,0,0,0,0,0,0,18,17,0,0,0,0,18,17,0,0,0,0,18,17,0,0,0,0,0,0,2,
|
|
|
-7,4,4,4,4,10,0,18,25,15,15,10,0,18,17,0,9,15,15,26,17,0,9,4,4,4,4,8,
|
|
|
-0,0,0,0,0,1,0,18,23,16,16,12,0,11,12,0,11,16,16,24,17,0,2,0,0,0,0,0,
|
|
|
-0,0,0,0,0,1,0,18,17,0,0,0,0,0,0,0,0,0,0,18,17,0,2,0,0,0,0,0,
|
|
|
-0,0,0,0,0,1,0,18,17,0,19,4,4,31,31,4,4,20,0,18,17,0,2,0,0,0,0,0,
|
|
|
-3,3,3,3,3,12,0,11,12,0,2,0,0,0,0,0,0,1,0,11,12,0,11,3,3,3,3,3,
|
|
|
-0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
|
|
|
-4,4,4,4,4,10,0,9,10,0,2,0,0,0,0,0,0,1,0,9,10,0,9,4,4,4,4,4,
|
|
|
-0,0,0,0,0,1,0,18,17,0,21,3,3,3,3,3,3,22,0,18,17,0,2,0,0,0,0,0,
|
|
|
-0,0,0,0,0,1,0,18,17,0,0,0,0,0,0,0,0,0,0,18,17,0,2,0,0,0,0,0,
|
|
|
-0,0,0,0,0,1,0,18,17,0,9,15,15,15,15,15,15,10,0,18,17,0,2,0,0,0,0,0,
|
|
|
-5,3,3,3,3,12,0,11,12,0,11,16,16,24,23,16,16,12,0,11,12,0,11,3,3,3,3,6,
|
|
|
-1,0,0,0,0,0,0,0,0,0,0,0,0,18,17,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
|
|
-1,0,9,15,15,10,0,9,15,15,15,10,0,18,17,0,9,15,15,15,10,0,9,15,15,10,0,2,
|
|
|
-1,0,11,16,24,17,0,11,16,16,16,12,0,11,12,0,11,16,16,16,12,0,18,23,16,12,0,2,
|
|
|
-1,0,0,0,18,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,17,0,0,0,2,
|
|
|
-27,15,10,0,18,17,0,9,10,0,9,15,15,15,15,15,15,10,0,9,10,0,18,17,0,9,15,29,
|
|
|
-28,16,12,0,11,12,0,18,17,0,11,16,16,24,23,16,16,12,0,18,17,0,11,12,0,11,16,30,
|
|
|
-1,0,0,0,0,0,0,18,17,0,0,0,0,18,17,0,0,0,0,18,17,0,0,0,0,0,0,2,
|
|
|
-1,0,9,15,15,15,15,26,25,15,15,10,0,18,17,0,9,15,15,26,25,15,15,15,15,10,0,2,
|
|
|
-1,0,11,16,16,16,16,16,16,16,16,12,0,11,12,0,11,16,16,16,16,16,16,16,16,12,0,2,
|
|
|
-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
|
|
-7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,
|
|
|
+ 1,0,0,0,0,0,0,0,0,0,0,0,0,18,17,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
|
|
+ 1,0,9,15,15,10,0,9,15,15,15,10,0,18,17,0,9,15,15,15,10,0,9,15,15,10,0,2,
|
|
|
+ 1,0,18,0,0,17,0,18,0,0,0,17,0,18,17,0,18,0,0,0,17,0,18,0,0,17,0,2,
|
|
|
+ 1,0,11,16,16,12,0,11,16,16,16,12,0,11,12,0,11,16,16,16,12,0,11,16,16,12,0,2,
|
|
|
+ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
|
|
+ 1,0,9,15,15,10,0,9,10,0,9,15,15,15,15,15,15,10,0,9,10,0,9,15,15,10,0,2,
|
|
|
+ 1,0,11,16,16,12,0,18,17,0,11,16,16,24,23,16,16,12,0,18,17,0,11,16,16,12,0,2,
|
|
|
+ 1,0,0,0,0,0,0,18,17,0,0,0,0,18,17,0,0,0,0,18,17,0,0,0,0,0,0,2,
|
|
|
+ 7,4,4,4,4,10,0,18,25,15,15,10,0,18,17,0,9,15,15,26,17,0,9,4,4,4,4,8,
|
|
|
+ 0,0,0,0,0,1,0,18,23,16,16,12,0,11,12,0,11,16,16,24,17,0,2,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,1,0,18,17,0,0,0,0,0,0,0,0,0,0,18,17,0,2,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,1,0,18,17,0,19,4,4,31,31,4,4,20,0,18,17,0,2,0,0,0,0,0,
|
|
|
+ 3,3,3,3,3,12,0,11,12,0,2,0,0,0,0,0,0,1,0,11,12,0,11,3,3,3,3,3,
|
|
|
+ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
|
|
|
+ 4,4,4,4,4,10,0,9,10,0,2,0,0,0,0,0,0,1,0,9,10,0,9,4,4,4,4,4,
|
|
|
+ 0,0,0,0,0,1,0,18,17,0,21,3,3,3,3,3,3,22,0,18,17,0,2,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,1,0,18,17,0,0,0,0,0,0,0,0,0,0,18,17,0,2,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,1,0,18,17,0,9,15,15,15,15,15,15,10,0,18,17,0,2,0,0,0,0,0,
|
|
|
+ 5,3,3,3,3,12,0,11,12,0,11,16,16,24,23,16,16,12,0,11,12,0,11,3,3,3,3,6,
|
|
|
+ 1,0,0,0,0,0,0,0,0,0,0,0,0,18,17,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
|
|
+ 1,0,9,15,15,10,0,9,15,15,15,10,0,18,17,0,9,15,15,15,10,0,9,15,15,10,0,2,
|
|
|
+ 1,0,11,16,24,17,0,11,16,16,16,12,0,11,12,0,11,16,16,16,12,0,18,23,16,12,0,2,
|
|
|
+ 1,0,0,0,18,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,17,0,0,0,2,
|
|
|
+ 27,15,10,0,18,17,0,9,10,0,9,15,15,15,15,15,15,10,0,9,10,0,18,17,0,9,15,29,
|
|
|
+ 28,16,12,0,11,12,0,18,17,0,11,16,16,24,23,16,16,12,0,18,17,0,11,12,0,11,16,30,
|
|
|
+ 1,0,0,0,0,0,0,18,17,0,0,0,0,18,17,0,0,0,0,18,17,0,0,0,0,0,0,2,
|
|
|
+ 1,0,9,15,15,15,15,26,25,15,15,10,0,18,17,0,9,15,15,26,25,15,15,15,15,10,0,2,
|
|
|
+ 1,0,11,16,16,16,16,16,16,16,16,12,0,11,12,0,11,16,16,16,16,16,16,16,16,12,0,2,
|
|
|
+ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
|
|
|
+ 7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,
|
|
|
};
|
|
|
|
|
|
const uint8_t gums_model[] = {
|
|
|
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
|
-0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,
|
|
|
-0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,
|
|
|
-0,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,
|
|
|
-0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,
|
|
|
-0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
|
|
|
-0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,
|
|
|
-0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,
|
|
|
-0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
-0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,
|
|
|
-0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,
|
|
|
-0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,
|
|
|
-0,2,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,2,0,
|
|
|
-0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,
|
|
|
-0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,
|
|
|
-0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,
|
|
|
-0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,
|
|
|
-0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,
|
|
|
-0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
|
|
|
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
|
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,
|
|
|
+ 0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,
|
|
|
+ 0,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,2,0,
|
|
|
+ 0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,
|
|
|
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
|
|
|
+ 0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,
|
|
|
+ 0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,
|
|
|
+ 0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,
|
|
|
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,
|
|
|
+ 0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,
|
|
|
+ 0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,
|
|
|
+ 0,2,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,2,0,
|
|
|
+ 0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,
|
|
|
+ 0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,
|
|
|
+ 0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,
|
|
|
+ 0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,
|
|
|
+ 0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,
|
|
|
+ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
|
|
|
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
|
};
|
|
|
|
|
|
-
|
|
|
GameState::GameState() : level(1), map(28, 31, map_data, nullptr, map_texture), cam(-(320-28*8)/2,4),
|
|
|
- p1(4,4), p2(204,228)
|
|
|
-
|
|
|
+ p1(4,4), p2(204,228), L(luaL_newstate()), blinky_ready(false)
|
|
|
{
|
|
|
p1.up = new ButtonInput(K_A);
|
|
|
p1.down = new ButtonInput(K_B);
|
|
|
p1.left = new ButtonInput(K_L);
|
|
|
p1.right = new ButtonInput(K_R);
|
|
|
-
|
|
|
+
|
|
|
p2.up = new ButtonInput(K_UP);
|
|
|
p2.down = new ButtonInput(K_DOWN);
|
|
|
p2.left = new ButtonInput(K_LEFT);
|
|
|
p2.right = new ButtonInput(K_RIGHT);
|
|
|
|
|
|
-
|
|
|
+ luaL_openlibs(L);
|
|
|
+ load_ghost_script("data/blinky.lua", "blinky", blinky_ready);
|
|
|
set_gums();
|
|
|
}
|
|
|
|
|
|
GameState::~GameState()
|
|
|
{
|
|
|
-
|
|
|
+ lua_close(L);
|
|
|
}
|
|
|
|
|
|
void GameState::update(unsigned dt)
|
|
|
@@ -119,6 +120,7 @@ void GameState::update(unsigned dt)
|
|
|
p2.update(dt);
|
|
|
move_player(p1);
|
|
|
move_player(p2);
|
|
|
+ update_ghost("blinky", blinky_ready);
|
|
|
}
|
|
|
|
|
|
void GameState::render(unsigned dt)
|
|
|
@@ -147,7 +149,7 @@ void GameState::render(unsigned dt)
|
|
|
p1.render(dt, cam);
|
|
|
p2.render(dt, cam);
|
|
|
// Borders
|
|
|
-
|
|
|
+
|
|
|
put_rectangle({0, 0, 0u-cam.get_x(), 320}, DarkGray);
|
|
|
put_rectangle({320+cam.get_x(), 0, 0u-cam.get_x(), 320}, DarkGray);
|
|
|
put_rectangle({-cam.get_x(),0, 1, 240}, White);
|
|
|
@@ -171,7 +173,7 @@ void GameState::set_gums()
|
|
|
* Assumes that said Rect as big or smaller than a tile
|
|
|
* (8 x 8 pixels).
|
|
|
* Also assumes that a corner outside the map doesn't collide anything.
|
|
|
- * Assumes that you lost the game and any tile != 0 is solid.
|
|
|
+ * Assumes that you lost the game and any tile != 0 is solid.
|
|
|
*/
|
|
|
bool GameState::does_collide_a_wall(Rect r)
|
|
|
{
|
|
|
@@ -226,4 +228,41 @@ void GameState::move_player(Player &p)
|
|
|
p.x = 224-8;
|
|
|
if(p.x+16 > 232)
|
|
|
p.x = 0;
|
|
|
-}
|
|
|
+}
|
|
|
+
|
|
|
+void GameState::load_ghost_script(const char* filename, const char* ghost_name, bool& ready_flag)
|
|
|
+{
|
|
|
+ int result = luaL_loadfile (L, filename) || lua_pcall(L,0,0,0);
|
|
|
+ if(result != LUA_OK)
|
|
|
+ {
|
|
|
+ Logger::error("Lua : Error while loading %s : %s", filename, lua_tostring(L, -1));
|
|
|
+ lua_pop(L, 1);
|
|
|
+ ready_flag = false;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ Logger::log("Lua : %s correctly loaded.", filename);
|
|
|
+ try {
|
|
|
+ lua_getglobal(L, ghost_name);
|
|
|
+ luwra::Table t = luwra::read<luwra::Table>(L, -1);
|
|
|
+ t.get<luwra::NativeFunction<void>>("init")(t);
|
|
|
+ ready_flag = true;
|
|
|
+ } catch(std::exception e)
|
|
|
+ {
|
|
|
+ Logger::error("Error while loading %s : %s", ghost_name);
|
|
|
+ ready_flag = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void GameState::update_ghost(const char* ghost_name, bool& ready_flag) {
|
|
|
+ if(ready_flag) {
|
|
|
+ try{
|
|
|
+ lua_getglobal(L, ghost_name);
|
|
|
+ luwra::Table t = luwra::read<luwra::Table>(L, -1);
|
|
|
+ t.get<luwra::NativeFunction<void>>("update")(t);
|
|
|
+ }catch(std::exception e) {
|
|
|
+ Logger::error("Error while executing %s: %s", ghost_name, e.what());
|
|
|
+ ready_flag = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|