GithubHelp home page GithubHelp logo

godot-mvp's Introduction

codecov

A Brazilian Odissey

Game Design Document aqui...

Model-View-Presenter em C#

Para mais detalhes sobre MVP (e suas diferenças em relação ao MVC), siga este ótimo artigo da Baeldung: https://www.baeldung.com/mvc-vs-mvp-pattern

PT-BR

O diagrama abaixo mostra o controle de fluxo do padrão arquitetural MVP:

MVP

E você pode entendê-lo como:

  1. Usuário interage com a View
  2. Presenter é notificado sobre a interação
  3. Presenter atualiza o estado do Model
  4. Model retorna a mudança de estado para o Presenter
  5. Presenter faz o display do Model alterado na View
  6. Volta para o item 1

Mas como isso fica na prática em um jogo real na Godot Engine?

Se você navegar até ./src/game, vai encontrar alguns pacotes/diretórios que implementam esse padrão, com alguma pequena adaptação.

Primeira adaptação é a criação da classe SceneManager. Essa seria a classe Main ou o index.js se fosse numa aplicação. É o Entry Point dessa Scene. Responsável por instanciar e injetar as dependências das Presenters:

public override void _Ready()
{
    var camera = GetNode<Camera2D>("Camera");
    this.cameraService = new GodotCameraService(camera);

    this.playerView = GetNode<PlayerView>("Player");
    this.player = new Player("Leandro Vieira");
    var playerPresenter = new PlayerPresenter(this.cameraService, this.player, this.playerView);
    playerPresenter.Start();
    
    this.sceneView = GetNode<MapView>("Map");
    this.scene = new Map();
    var scenePresenter = new MapPresenter(this.cameraService, this.scene, this.sceneView);
    scenePresenter.Start();
}

Classes do tipo Manager serão associadas sempre ao Node root da Scene, nesse caso Lisbon:

Scene

Map e Player, os outros Nodes principais dessa Scene, terão, respectivamente, GodotMapView e GodotPlayerView.

As classes Presenter, tanto MapPresenter quanto PlayerPresenter, servem para orquestrar as ações de Map e Player oriundas das suas View.

Player

Responsável pelas ações do Player, como por exemplo a movimentação (andar/correr/parar) e a animação.

Responsável pelos atributos, estado e lógica de um Player.

Responsável por orquestrar os Inputs da View e as mudanças de estado do Model, incluindo alterar a posição da câmera para posição atual do Player.

Map

Responsável pelas ações do Mapa, como por exemplo o redimensionamento da tela.

Responsável pelos atributos, estado e lógica de um Mapa.

Responsável por orquestrar os Inputs da View e as mudanças de estado do Model, incluindo a definição dos limites da câmera quando ocorre um redimensionamento.

CameraService

Como tanto a PlayerPresenter quanto a MapPresenter interagem com a câmera, CameraService serve para unificar ações em uma câmera. Player chama o método UpdatePosition de GodotCameraService.cs, enquanto o Map chama o método SetLimits de GodotCameraService.cs

godot-mvp's People

Contributors

lepsistemas avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.