Skip to content
Merged

Docs #158

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion client/gui/shop_view/shop.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ void shopDisplay::updatePrices(const ShopPricesResponse& response) {
}

ItemSlot shopDisplay::get_ammo_type(int id_slot) {
if (id_slot != 7) {
if (id_slot == 7) {
return ItemSlot::Secondary;
}
return ItemSlot::Primary;
Expand Down
151 changes: 151 additions & 0 deletions docs/classes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
# Protocol Communication Class Diagram

This diagram shows the core protocol communication infrastructure, focusing on the protocol classes, communication threads, and supporting infrastructure. For detailed message types and command/response classes, see [message_classes.md](message_classes.md).

```mermaid
classDiagram
%% Abstract Base Classes
class BaseSocket {
<<interface>>
+sendsome(data, sz) int
+recvsome(data, sz) int
+sendall(data, sz) int
+recvall(data, sz) int
+is_stream_send_closed() bool
+is_stream_recv_closed() bool
+shutdown(how) void
+close() int
}

class BaseProtocol {
<<abstract>>
#socket: shared_ptr~BaseSocket~
+BaseProtocol(skt)
+is_closed() bool
+is_open() bool
+send(message) void
+recv() Message
+close() void
#serialize_message(message)* payload_t
#deserialize_message(type, payload)* Message
+serialize~T~(value) payload_t
+deserialize~T~(payload) T
-serialize(type) payload_t
-deserialize_message_type() MessageType
-deserialize_message_length() uint16_t
-pop(payload, size) payload_t
}

class Thread {
<<abstract>>
+run()* void
+stop() void
}

%% Protocol Implementations
class ClientProtocol {
+ClientProtocol(skt)
+serialize_message(message) payload_t
+serialize_msg~T~(value) payload_t
+deserialize_message(type, payload) Message
+deserialize_msg~T~(payload) T
}

class ServerProtocol {
+ServerProtocol(skt)
-serialize_message(message) payload_t
-serialize_msg~T~(value) payload_t
-deserialize_message(type, payload) Message
-deserialize_msg~T~(payload) T
}

%% Message System (simplified reference)
class Message {
-type: MessageType
-content: Sendable
+Message(value)
+Message()
+get_type() MessageType
+get_content~T~() T
}

%% Communication Threads
class ClientSender {
-queue: Queue~Message~&
-protocol: shared_ptr~ClientProtocol~
+ClientSender(protocol, queue)
+run() void
+stop() void
}

class ClientReceiver {
-queue: Queue~Message~&
-protocol: shared_ptr~ClientProtocol~
+ClientReceiver(protocol, queue)
+run() void
+stop() void
}

class Sender {
-protocol: ServerProtocol&
-queue: shared_ptr~Queue~Message~~
+Sender(protocol, queue)
+run() void
}

class Receiver {
-player_name: string
-protocol: ServerProtocol&
-queue: shared_ptr~Queue~PlayerMessage~~
+Receiver(player_name, protocol, queue)
+run() void
}

%% Queue
class Queue~T~ {
-q: queue~T~
-max_size: unsigned int
-closed: bool
-mtx: mutex
-is_not_full: condition_variable
-is_not_empty: condition_variable
+Queue()
+Queue(max_size)
+push(val) void
+pop() T
+try_push(val) bool
+try_pop() T
+close() void
+is_closed() bool
}

%% Data Structures (supporting protocol)
class PlayerMessage {
+player_name: string
+message: Message
+PlayerMessage(name, msg)
}

%% Relationships
BaseProtocol <|-- ClientProtocol
BaseProtocol <|-- ServerProtocol
BaseProtocol --> BaseSocket : uses
BaseProtocol --> Message : sends/receives

Thread <|-- ClientSender
Thread <|-- ClientReceiver
Thread <|-- Sender
Thread <|-- Receiver

ClientSender --> ClientProtocol : uses
ClientSender --> Queue : reads from
ClientReceiver --> ClientProtocol : uses
ClientReceiver --> Queue : writes to

Sender --> ServerProtocol : uses
Sender --> Queue : reads from
Receiver --> ServerProtocol : uses
Receiver --> Queue : writes to

Receiver --> PlayerMessage : creates
```
26 changes: 8 additions & 18 deletions docs/documentacion_tecnica.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,8 @@
# Documentación técnica

Todas las funcionalidades y mejoras se rastrean mediante issues y pull requests en GitHub. A continuación, se documentan los aspectos más relevantes del desarrollo.
Todas las funcionalidades y mejoras se rastrean mediante issues y pull requests en GitHub.

## Funcionalidades completas

- Lobby (crear / unirse a partidas)
- Implementación de arquitectura cliente-servidor básica
- HUD funcional
- Definición del protocolo de mensajes
- Implementación de cámara
- Switch display entre QT y SDL
- Pre game (selección de equipos y skin)
- Warm up (espera a que todos los usuarios hayan terminado sus selecciones)

## Funcionalidades en progreso o planificadas
## Aspectos más relevantes del desarrollo

### 1. Client

Expand Down Expand Up @@ -47,10 +36,11 @@ Todas las funcionalidades y mejoras se rastrean mediante issues y pull requests

### 1. Server

- Tenemos una constante global meter_size. Estamos en duda de si centralizar el manejo de esta constante en el Physics System, pero, a su vez, queremos guardar atributos como las posiciones de los tiles en el mapa (clase Map) o el máximo rango de las armas (max_range) de acuerdo a la métrica del meter_size. Es por eso que en principio lo pusimos como una constante global.
- Arreglar los parámetros de velocidad del jugador y las configuraciones de las armas para que el juego esté mejor balanceado.
-

## Bugs
## Funcionalidades incompletas

- Movimiento izquierda y/o arriba
- Animación
- El client yaml de config tenga si 1200x 800 o full screen
- Sonidos no varian segun la distancia
- El client animacion de explocion
- El armado del mapa del Editor de niveles no abarca el colocado de armas
Binary file added docs/img/game/game-view.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/img/game/skin-selection.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/img/game/team-selection.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/img/lobby-window.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/img/log-in-window.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 21 additions & 12 deletions docs/manual_de_proyecto.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,32 @@

## 1. Introducción

Este manual documenta el trabajo realizado por el equipo durante el desarrollo del proyecto **Counter-Strike Grupo 8**. Incluye detalles sobre la organización, herramientas utilizadas, problemas enfrentados y aprendizajes obtenidos.
El presente manual documenta el trabajo realizado por el equipo durante el desarrollo del proyecto **Counter-Strike Grupo 8**. En él se detallan aspectos relacionados con la organización del equipo, las herramientas empleadas, los desafíos enfrentados y los aprendizajes adquiridos a lo largo del proceso de desarrollo.

---

## 2. Organización del Equipo

### **Roles y Responsabilidades**

- **Integrante 1**: Logica del Juego, server
- **Integrante 2**: Lobby, Editor de niveles
- **Integrante 3**: Protocolo, arquitectura, server-client
- **Integrante 4**: SDL y client
- **[FernandYu](https://github.com/FernandoYu)**: Desarrollo del lobby y editor de niveles.
- **[Tcorzo](https://github.com/tcorzo)**: Diseño del protocolo de comunicación, arquitectura general y lógica de conexión cliente-servidor.
- **[https://github.com/fnpratto](https://github.com/fnpratto)**: Implementación del cliente utilizando SDL.
- **[jesapugliese](https://github.com/jesapugliese)**: Desarrollo de la lógica del juego, física y funcionalidades del servidor.

### **Plan Semanal**

- **Semana 1**:
- **Semana 2**:
- **Semana 3**:
- **Semana 4**:
- **Semana 5**:
- **Semana 1**: Setapeo del repositorio, interiorizacion con herramientas, se agregaron rules,flags, test al repositorio.
- **Semana 2**: Desarrollo en paralelo del client y server. Se plantearon y establecio un manejo de threads correcto
- **Semana 3**: Protocolo establecido , se empezo a conectar el client con el server
- **Semana 4**: Se tiene una version conectada del client y server pero no se tienen las funcionalidades principales para jugar una roda(disparar, plantar bomba)
- **Semana 5**: Se tiene una version final jugable

### **Diferencias con el Plan Inicial**

- Se planificó tener un juego en la semana 2, pero se extendió hasta la semana 4 debido a problemas con la sincronización entre cliente y servidor.
- Se cambiaron las responsabilidades iniciales ya que se planteo que las fisicas se encargara otra persona y (t -> solo comunicacion y protocolo pero termino ayudando )
- Se planteo para la semana 3 ya tener conectado todo el client con el server pero dado ciertas dificultades y no tener bien establecido el protocolo llevo mas tiempo.

---

Expand All @@ -40,6 +42,10 @@ Este manual documenta el trabajo realizado por el equipo durante el desarrollo d
- `clang-tidy` para análisis estático de código.
- `cppcheck` para detección de errores comunes.

### **GitHubProyect**

- Para la organizacion y gestion del proyecto se uso un template tipo kanban y se asignaban las responsabiolidades semanalmente atravez de issues

### **Documentación**

- Documentación oficial de SDL2.
Expand All @@ -50,10 +56,13 @@ Este manual documenta el trabajo realizado por el equipo durante el desarrollo d

## 5. Problemas Enfrentados

### **Puntos Problemáticos**

### **Errores Conocidos**

- Logica en el cliente al crear el mensaje de plantar la bomba o defusing
- Comprar ammo para arma principal
- Items de viejas rondas no se resetean
- Pick up item

---

## 7. Créditos
Expand Down
Loading