Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
P PVJCs2021
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Ing. Lukáš Hruška
  • PVJCs2021
  • Wiki
  • merlin2d

Last edited by Ing. Lukáš Hruška Jan 02, 2022
Page history
This is an old version of this page. You can view the most recent version or browse the history.

merlin2d

Merlin2d reference

1. Initial setup

Knižnica je dostupná ako NuGet package na http://hades.cit.fei.tuke.sk:8080/v3/index.json

prvé spustenie:

//namespace Merlin2d.Game
GameContainer container = new GameContainer("window name", windowWidth, windowHeight);
container.SetMap("path to the .tmx file");
container.Run();

2. Basics

Pre jednoduchosť je knižnica naprogramovaná tak, aby sa za sekundu vykonal Update() 60x. Ak potrebujete niekde merať čas, môžete sa spoľahnúť na tento údaj, nepotrebujete používať časovače.

Inicializačná logika (automaticky vykonáva engine po zavolaní Run()):

  • načítaj mapu
    • ručne pridané veci do sveta sú zmazané, vypíše sa do konzoly upozornenie
    • ak je nastavená IFactory, použi ju na vytvorenie načítaných actorov z mapy
  • vykonaj definované inicializačné akcie (pridané cez AddInitAction())
    • (tu si môžete pridať do sveta actorov na testovanie, pri finálnej odovzdávke ale musia byť pridaní cez načítanie mapy, tu môžete robiť len špecifické nastavenia, napr. kamera, inventár...)
  • nastav spôsob sledovania kamery
  • spusti Update / render slučku

Nezabudnite použiť IWorld.SetFactory, IWorld.SetMap, IWorld.ShowInventory

3. InitAction

Kód, ktorý potrebujete vykonať pred samotným spustením hry, si viete pripraviť vo forme anonymných funkcií (napr. lambda expression) a pomocou IWorld.AddInitAction(System.Action<IWorld> action) ho uložiť. Kód je automaticky vykonaný na začiatku Container.Run().

Kamera:

//step 1:
container.SetCameraFollowStyle(CameraFollowStyle._Something_); //use code completion to see available options

//step 2:
IWorld.CenterOn(IActor); //needs to be done in an init action as actors are not available before (can be used when the game is already running to switch between multiple actors) 

4. End game condition

IWorld.SetEndCondition(Func<IWorld, MapStatus> condition) umožňuje zvoliť vlastnú podmienku pre skončenie hry:

  • parameter je funkcia s IWorld vstupným parametrom a vracia MapStatus:
    • Ak sa hra ešte nemá skončiť, vráťte MapStatus.Unfinished
    • Ak sa má hra skončiť, vráťte MapStatus.Finished (výhra) alebo MapStatus.Failed (prehra)

Správu, ktorá sa zobrazí pri skončení hry viete nastaviť pomocou:

GameContainer.SetEndGameMessage(IMessage, MapStatus) (o správach sa dočítate nižšie)

5. Messages

Správu viete zobraziť na obrazovke pomocou IWorld.AddMessage(IMessage message).

Trieda Message (namespace Merlin2d.Game) už implementuje IMessage, takže si nemusíte implementovať vlastnú (ak potrebujete niečo navyše, čo neponúka Merlin2d.Game.Message, tak si ju implementujte podľa potreby)

public Message(string text, int x, int y, int fontSize, Color color, MessageDuration messageDuration)
  • x, y - súradnice na obrazovke
  • fontSize - hmm... čo to asi bude?
  • Color - farba textu, trieda v sebe definuje viacero farieb ako static properties (code completion is your friend here) alebo môžete použiť vlastné RGB / RGBA
  • MessageDuration - enum, dĺžka trvania správy - Short, Long, Indefinite
    • ak použijete Indefinite, správa sa sama neodstráni zo sveta (užitočné napr. na zobrazenie života postavičiek); musíte ju odstrániť ručne cez IWorld.RemoveMessage(IMessage)
    • ak chcete správu aktualizovať, nemusíte vytvárať novú inštanciu, stačí zavolať IMessage.SetText(string new Text)

Správy môžete uchytiť nad IActor pomocou IMessage.SetAnchorPoint(IActor actor); v tomto prípade budú súradnice počítané od polohy actora a správa sa bude hýbať spolu s ním.

6. Multiple levels

Engine podporuje pridanie viacerých levelov, v takomto prípade bude postup nasledovný:

  • nepoužijete GameContainer.SetMap(path) ale GameContainer.AddWorld("path to .tmx")
  • GameContainer.GetWorld() bude vyhadzovať chybu, musíte špecifikovať index - GameContainer.GetWorld(0)
    • svety sú zoradené v poradí, v akom ste ich pridali
  • úspešné dokončenie mapy (EndCondition vráti MapStatus.Finished) automaticky prepne mapu na ďalšiu v poradí
  • keďže sa podmienky medzi mapami môžu líšiť, každú treba inicializovať osobitne
Clone repository
  • assignment 1
  • assignment 2
  • cv10
  • cv2
  • cv3
  • cv4
  • cv5
  • cv7
  • cv8
  • cv9
  • exam 0
  • exam 1
  • exam 2
  • exam 3
  • exam 4
View All Pages