File size: 3,305 Bytes
2f6a09b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6d3ffa2
 
2f6a09b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6d3ffa2
 
 
 
 
 
 
 
 
 
 
2f6a09b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
const CELL_SIZE = 50;
let GRID_COLS = 0;
let GRID_ROWS = 0;
let grid = [];

let gameState;

let baseMapImg;
let girlfriendImg;
let clownImg;

let clownSound1Snd;
let clownSound2Snd;
let clownSeesYouSnd;
let gfMoveSnd;
let loseSnd;
let unlockDoorSnd;
let useKnifeSnd;
let messageSnd;

let successSnd;

let isSoundOn = true;
  


const soundIcon = document.getElementById("soundIcon");
const bgMusic = document.getElementById("bgMusic");

const mistralAPI = new MistralAPI();

let chatMessages = [];

let furnitureSprites = {};

function preload() {
  clownSound1Snd = loadSound('/assets/sounds/clownmove1.mp3');
  clownSound2Snd = loadSound('/assets/sounds/clownmove2.mp3');
  clownSeesYouSnd = loadSound('/assets/sounds/clownseesyou.mp3');
  gfMoveSnd = loadSound('/assets/sounds/gfmove.mp3');
  loseSnd = loadSound('/assets/sounds/lose.mp3');
  unlockDoorSnd = loadSound('/assets/sounds/unlockdoor.mp3');
  useKnifeSnd = loadSound('/assets/sounds/useknife.mp3');
  messageSnd = loadSound('/assets/sounds/message.wav');
  successSnd = loadSound('/assets/sounds/success.mp3');
}

async function initializeChat() {
  const firstPrompt = gameState.getFirstPrompt();
  const messages = [
    {
      role: "system",
      content: firstPrompt,
    },
  ];
  try {
    const response = await mistralAPI.sendMessage(messages);
    const jsonResponse = JSON.parse(response);
    addMessageToChat("assistant", jsonResponse.textMessage);
  } catch (error) {
    console.error("Error getting initial message:", error);
  }
}

async function setup() {

         // Vérifier si c'est la première visite
         if (localStorage.getItem("isSoundOn") === null) {
          // Première visite : initialiser avec le son activé
          localStorage.setItem("isSoundOn", "true");
        } else {
          // Visites suivantes : récupérer l'état précédent
          isSoundOn = localStorage.getItem("isSoundOn") == "true";
        }


  setStressLevel('no');

  baseMapImg = loadImage("/assets/img/appartment/basemap.png");
  girlfriendImg = loadImage("/assets/img/gf.png");
  clownImg = loadImage("/assets/img/clown.png");

  gameState = new GameState({
    ...getApt(),
    grid: getGrid(),
    furniture: getFurniture(),
  });

  furnitureSprites = loadFurnitureSprites(gameState.map_data.furniture);

  GRID_COLS = gameState.map_data.gridCols;
  GRID_ROWS = gameState.map_data.gridRows;

  girlfriend = new Girlfriend(gameState, girlfriendImg);
  clown = new Clown(gameState, clownImg);

  // Once loaded, initialize the P5 canvas with correct dims
  let canvas = createCanvas(GRID_COLS * CELL_SIZE, GRID_ROWS * CELL_SIZE);
  canvas.parent("mapWrapper");
  adjustScale();
  
  await initializeChat();
}

function draw() {
  clear();

  if (baseMapImg) {
    image(baseMapImg, 0, 0, GRID_COLS * CELL_SIZE, GRID_ROWS * CELL_SIZE);
  }
  if (furnitureSprites) {
    drawFurniture(gameState.map_data.furniture, furnitureSprites);
  }
  //drawGrid();
  // drawWallsAndDoors();

    drawLabels(gameState.map_data.rooms);



  if (girlfriend) {
    //girlfriend.drawPath(CELL_SIZE);
    girlfriend.draw(CELL_SIZE);
  }
  if (clown) {
    clown.checkForGirlfriend(girlfriend);
    //clown.drawPath(CELL_SIZE);
    clown.draw(CELL_SIZE);
  }

  gameState.update();

  if (gameState.game_over) {
    noLoop();
  }
}