Skip to content

Commit

Permalink
Merge branch 'lorerada' into daniele
Browse files Browse the repository at this point in the history
  • Loading branch information
dromano32 committed Feb 21, 2024
2 parents fdd4f6c + f715eb1 commit 451c370
Show file tree
Hide file tree
Showing 22 changed files with 650 additions and 830 deletions.
152 changes: 85 additions & 67 deletions src/main/app/src/application/AppController.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class AppController {
// Aggiungi le sottoscrizioni ai topic qui, se necessario
},
onDisconnect: () => {
console.log("Disconnected from STOMP");
console.log("Disconnected from STOMP");
},
// Altri eventi e configurazioni...
});
Expand Down Expand Up @@ -125,75 +125,93 @@ class AppController {
console.error("Client STOMP non connesso");
}
}

subscribeToEsitiPartita(idPartita, nickname) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
this.client.subscribe(`/topic/partite/${idPartita}/${nickname}`, (message) => {
PartitaObserverSingleton.notifyListenersEsiti(JSON.parse(message.body));
console.log("Esito attacco ricevuto:", JSON.parse(message.body));
});
}

unsubscribeToEsitiPartita(idPartita, nickname) {
if (this.client && this.client.connected) {
this.client.unsubscribe(`/topic/partite/${idPartita}/${nickname}`);
} else {
console.error("Client STOMP non connesso");
}
}

setUpPartita(idPartita, territoriAssegnati) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
console.log("territoriAssegnatinellotomp", territoriAssegnati);
// Assicurati che territoriAssegnati sia un array di oggetti che corrispondono
// alla struttura di TerritoryBody, ovvero con i campi `name` e `troops`.

console.log("setUpBodystomp", territoriAssegnati);

// Pubblicazione del messaggio al topic di setup della partita
this.client.publish({
destination: `/app/partite/${idPartita}/confermaSetup`,
body: JSON.stringify(territoriAssegnati),
});

console.log(`Setup per la partita ${idPartita} inviato:`, territoriAssegnati);
}

setUpTurno(idPartita, territoriAssegnati) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
console.log("territoriAssegnati", territoriAssegnati);
this.client.publish({
destination: `/app/partite/${idPartita}/turnAssignation`,
body: JSON.stringify(territoriAssegnati),
});
console.log(`Setup per il turno della partita: ${idPartita} inviato:`, territoriAssegnati);
}

attack(idPartita, attackBody) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
console.log("attackBody", attackBody);
this.client.publish({
destination: `/app/partite/${idPartita}/attack`,
body: JSON.stringify(attackBody),
});
console.log(`Attacco per la partita ${idPartita} inviato:`, attackBody);
}
subscribeToEsitiPartita(idPartita, nickname) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
this.client.subscribe(
`/topic/partite/${idPartita}/${nickname}`,
(message) => {
PartitaObserverSingleton.notifyListenersEsiti(JSON.parse(message.body));
console.log("Esito attacco ricevuto:", JSON.parse(message.body));
}
);
}

}
unsubscribeToEsitiPartita(idPartita, nickname) {
if (this.client && this.client.connected) {
this.client.unsubscribe(`/topic/partite/${idPartita}/${nickname}`);
} else {
console.error("Client STOMP non connesso");
}
}

setUpPartita(idPartita, territoriAssegnati) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
console.log("territoriAssegnatinellotomp", territoriAssegnati);
// Assicurati che territoriAssegnati sia un array di oggetti che corrispondono
// alla struttura di TerritoryBody, ovvero con i campi `name` e `troops`.

console.log("setUpBodystomp", territoriAssegnati);

// Pubblicazione del messaggio al topic di setup della partita
this.client.publish({
destination: `/app/partite/${idPartita}/confermaSetup`,
body: JSON.stringify(territoriAssegnati),
});

console.log(
`Setup per la partita ${idPartita} inviato:`,
territoriAssegnati
);
}


setUpTurno(idPartita, territoriAssegnati) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
console.log("territoriAssegnati", territoriAssegnati);
this.client.publish({
destination: `/app/partite/${idPartita}/turnAssignation`,
body: JSON.stringify(territoriAssegnati),
});
console.log(
`Setup per il turno della partita: ${idPartita} inviato:`,
territoriAssegnati
);
}

attack(idPartita, attackBody) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
console.log("attackBody", attackBody);
this.client.publish({
destination: `/app/partite/${idPartita}/attack`,
body: JSON.stringify(attackBody),
});
console.log(`Attacco per la partita ${idPartita} inviato:`, attackBody);
}

defend(idPartita, defenceBody) {
if (!this.client || !this.client.connected) {
console.error("Client STOMP non connesso");
return;
}
this.client.publish({
destination: `/app/partite/${idPartita}/defence`,
body: JSON.stringify(defenceBody),
});
console.log("controller difesa");
}
}

// Esporta l'istanza per utilizzarla nell'app
const appController = new AppController();
Expand Down
1 change: 0 additions & 1 deletion src/main/app/src/component/layout/LayoutMappa.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import React from "react";
import Aside from "../layout/Aside";
import MainContent from "./MainContent";

const LayoutMappa = ({ children }) => {
Expand Down
1 change: 0 additions & 1 deletion src/main/app/src/component/layout/TopBar.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import React from "react";
import { Navbar } from "react-bootstrap";
import { useAuth } from "../../auth/AuthContext";
import { MdPerson4 } from "react-icons/md";
import { IoMdPerson } from "react-icons/io";
import { useParams } from "react-router-dom";

Expand Down
126 changes: 75 additions & 51 deletions src/main/app/src/component/mappa/BattleState.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import React, { useEffect, useState } from "react";

import SvgMap from "./SvgMap";
import Console from "../mappa/Console";
import { Alert, Modal, Button } from "react-bootstrap";
import { Alert } from "react-bootstrap";
import PartitaObserverSingleton from "../../application/PartitaObserverSingleton";

import ConsoleDifesa from "./ConsoleDifesa";

function BattleState({ idPlayer, game }) {
const [mappa, setMappa] = useState([]);
Expand All @@ -14,30 +14,37 @@ function BattleState({ idPlayer, game }) {
const [isPlayersTurn, setIsPlayersTurn] = useState(true);
const [territorioAttacante, setTerritorioAttacante] = useState("");
const [territorioDifensore, setTerritorioDifensore] = useState("");
const [territoriVicini, setTerritoriVicini] = useState();

const [sxSelected, setSxSelected] = useState(false); // Aggiungi questo stato
const [territoriAttaccabili, setTerritoriAttaccabili] = useState([]);
const [objective, setObjective] = useState();
const [showAlert, setShowAlert] = useState(true);
const [esiti, setEsiti] = useState({});
const [showEsiti, setShowEsiti] = useState(false);


const handleClose = () => setShowEsiti(false);

const [setEsiti] = useState({});
const [setShowEsiti] = useState(false);
const [isDefenderTerritory, setIsDefenderTerritory] = useState(null);
const [playerUnderAttack, setPlayerUnderAttack] = useState();
const [setCountryUnderAttack] = useState("");
const [IdGioco, setIdGioco] = useState();

// const handleClose = () => setShowEsiti(false);

useEffect(() => {
function updateEsiti(esiti) {
function updateEsiti(esiti) {
console.log("Esiti in console: ", esiti);
setEsiti(esiti);
setShowEsiti(true);
}


setIdGioco(game.id);

PartitaObserverSingleton.addListenerEsiti(updateEsiti);

const pathD = [];
const newTroopAssignments = {};

setIsPlayersTurn(game.currentTurn.player.userName === idPlayer);
const isDifTerr = game.currentTurn.defenderTerritory;
setIsDefenderTerritory(isDifTerr);
console.log("isDifTerr", isDifTerr);

game.players.forEach((player) => {
player.territories.forEach((territory) => {
Expand All @@ -55,44 +62,68 @@ function BattleState({ idPlayer, game }) {

const currentPlayer = game.players.find((p) => p.userName === idPlayer);
setPlayer(currentPlayer);

if (isDefenderTerritory) {
const sottoAttacco = game.currentTurn.defenderTerritory.idOwner;
setPlayerUnderAttack(sottoAttacco);
console.log("player sottoAttacco", sottoAttacco);

const CountrysottoAttacco = game.currentTurn.defenderTerritory.idOwner;
setCountryUnderAttack(CountrysottoAttacco);
console.log("country Under Attack", CountrysottoAttacco);
}

return () => {
PartitaObserverSingleton.removeListenerEsiti(updateEsiti);
};
}, [idPlayer, game,]);
}, [idPlayer, game]);

console.log("playerUnderAttack", playerUnderAttack);

console.log("mappa battle state", mappa);
console.log("truppe assegnate", troopAssignments);
{
player && console.log("player in battleState", player);
}
{
player && console.log("game in battleState", game);
}

const handleTerritoryClick = (territoryName, event) => {
console.log("tipo di evento on click", event);

if (event === "add") {
const territorio = player.territories.find((t) => t.name === territoryName)
const continenteTrovato = territorio.continent;
console.log("Continente trovato", continenteTrovato);
const territorio = player.territories.find(
(t) => t.name === territoryName
);
const continenteTrovato = territorio.continent;
console.log("Continente trovato", continenteTrovato);
console.log("Click sinistro");
setTerritorioAttacante(territoryName);
console.log("Clicked territory attaccante:", territorioAttacante);
const armateDelTerritorio = troopAssignments[territoryName];
console.log("Clicked armate territory:", armateDelTerritorio);
setArmateTerritorio(armateDelTerritorio);
setSxSelected(true);
setTerritorioDifensore("");
setTerritorioDifensore("");
const neighbors = game.continents
.find((c) => c.continentId === continenteTrovato)
.territories.find((t) => t.name === territoryName).neighbors;
.find((c) => c.continentId === continenteTrovato)
.territories.find((t) => t.name === territoryName).neighbors;
console.log("neighbors", neighbors);
const territoriGiocatore = player.territories.map((t) => t.name);
const attackableTerritory = neighbors.filter(neighbor => !territoriGiocatore.includes(neighbor));
const attackableTerritory = neighbors.filter(
(neighbor) => !territoriGiocatore.includes(neighbor)
);
setTerritoriAttaccabili(attackableTerritory);
console.log("territori attaccabili", territoriAttaccabili);

}else if (event === "addNonOwned" && sxSelected && territoriAttaccabili.includes(territoryName)) {
} else if (
event === "addNonOwned" &&
sxSelected &&
territoriAttaccabili.includes(territoryName)
) {
console.log("Click destro");
setTerritorioDifensore(territoryName);
console.log("Clicked territory difensore:", territorioDifensore);
setSxSelected(false);
}
}
};
return (
<div style={{ width: "100%", height: "100%" }}>
Expand All @@ -115,8 +146,8 @@ function BattleState({ idPlayer, game }) {
carriTerritorio={armateTerritorio}
territoryAttack={territorioAttacante}
territoryDefense={territorioDifensore}
game = {game}
player = {player}
game={game}
player={player}
/>
</>
) : (
Expand All @@ -131,32 +162,25 @@ function BattleState({ idPlayer, game }) {
onTerritoryClick={() => {}}
truppeAssegnate={troopAssignments}
/>
<Console
carriTerritorio={armateTerritorio}
game={game}
player = {player}
/>
<Console
carriTerritorio={armateTerritorio}
game={game}
player={player}
/>
</>
)}
{ <Modal show={showEsiti} onHide={handleClose}>
<Modal.Header closeButton>
<Modal.Title>Esito dell'Attacco</Modal.Title>
</Modal.Header>
<Modal.Body>
{esiti.isConquered ? (
<p>Il territorio è stato conquistato.</p>
) : (
<p>Il territorio non è stato conquistato.</p>
)}
<p>Truppe perse dall'attaccante: {esiti.lostAttTroops}</p>
<p>Truppe perse dal difensore: {esiti.lostDefTroops}</p>
</Modal.Body>
<Modal.Footer>
<Button variant="secondary" onClick={handleClose}>
Chiudi
</Button>
</Modal.Footer>
</Modal> }

{isDefenderTerritory &&
player.userName === playerUnderAttack &&
console.log(
"sei tu sotto attacco",
player.userName === playerUnderAttack
)}
{isDefenderTerritory && player.userName === playerUnderAttack && (
<div>
<ConsoleDifesa idPartita={IdGioco} difendente={playerUnderAttack} />
</div>
)}
</div>
);
}
Expand Down
Loading

0 comments on commit 451c370

Please sign in to comment.