/*
* This file is part of the Illarion project.
*
* Copyright © 2015 - Illarion e.V.
*
* Illarion is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Illarion is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
package illarion.common.data;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* This class contains the list of people who helped to create Illarion.
*
* @author Martin Karing <nitram@illarion.org>
*/
public final class Credits {
/**
* The list of entries that are assigned to a single person always.
*/
@Nonnull
private final List<CreditsList> singlePosList;
/**
* The list of entries that are assigned to multiple persons.
*/
@Nonnull
private final List<CreditsList> multiPosList;
/**
* The singleton instance of this credits class.
*/
@Nullable
@SuppressWarnings("RedundantFieldInitialization")
private static volatile Credits instance = null;
/**
* Get the singleton instance of the credits class.
* <p/>
* The class instance is created upon the first call of this function.
*
* @return the credits instance
*/
@Nullable
public static Credits getInstance() {
if (instance == null) {
synchronized (Credits.class) {
if (instance == null) {
instance = new Credits();
}
}
}
return instance;
}
/**
* The constructor of the credits.
* <p/>
* Be aware, this class will load all the text and objects required to display the credits. Only do so in case
* you really want to display this stuff.
*/
@SuppressWarnings("OverlyLongMethod")
private Credits() {
singlePosList = new ArrayList<>();
multiPosList = new ArrayList<>();
CreditsList projectManager = new CreditsList("Projektleiter", "Project Manager");
CreditsList chiefContent = new CreditsList("Leitender Entwickler für Spielinhalte",
"Chief Game Content Developer");
CreditsList chiefClient = new CreditsList("Leitender Entwickler für den Client",
"Chief Client Developer");
CreditsList chiefGraphics = new CreditsList("Leitender Grafiker", "Chief Graphics Designer");
CreditsList chiefMusic = new CreditsList("Original-Soundtrack", "Original Soundtrack");
CreditsList chiefMap = new CreditsList("Leitender Gestalter für die Karte", "Chief Map Designer");
CreditsList chiefServer = new CreditsList("Leitender Entwickler für den Server",
"Chief Server Developer");
CreditsList presentedBy = new CreditsList("Präsentiert vom", "Presented by the");
CreditsList gameplay = new CreditsList("Spielmechanik", "Gameplay");
CreditsList content = new CreditsList("Spielinhalte", "Game Content");
CreditsList client = new CreditsList("Client");
CreditsList graphics = new CreditsList("Grafiken", "Graphics");
CreditsList maps = new CreditsList("Karten", "Maps");
CreditsList website = new CreditsList("Website");
CreditsList easyNPC = new CreditsList("easyNPC-Editor", "easyNPC Editor");
CreditsList easyQuest = new CreditsList("easyQuest-Editor", "easyQuest Editor");
CreditsList mapEditor = new CreditsList("Karten-Editor", "Map Editor");
CreditsList server = new CreditsList("Server");
CreditsList gameMaster = new CreditsList("Spielleiter", "Game Master");
CreditsList communityManager = new CreditsList("Community-Manager", "Community Manager");
CreditsList qualityAssurance = new CreditsList("Qualitätsprüfung", "Quality Assurance");
CreditsList specialThanks = new CreditsList("Besonderen Dank", "Special Thanks");
CreditsPerson.create("Andreas", "Vilarion", "Grob",
projectManager, chiefServer, gameplay, client, website, easyNPC, easyQuest, server, qualityAssurance);
CreditsPerson.create("Lennart", "Estralis", "Stutz", chiefContent, gameplay, content, website,
qualityAssurance);
CreditsPerson.create("Martin", "Nitram", "Karing",
chiefClient, gameplay, client, website, easyNPC, easyQuest, mapEditor, server, qualityAssurance);
CreditsPerson.create("Martin", "Polak",
chiefGraphics, gameplay, client, graphics, website, easyNPC, easyQuest, server, qualityAssurance);
CreditsPerson.create("Oganalp", "Canatan", chiefMusic);
CreditsPerson.create("Marvin", "Kopp", chiefMusic);
CreditsPerson.create("Zot", content, graphics, maps, qualityAssurance);
CreditsPerson.create("Teflon", gameMaster);
CreditsPerson.create("Silverwing", qualityAssurance, gameMaster);
CreditsPerson.create("Slightly", gameMaster);
CreditsPerson.create("Ruben", "Zephyrius", "Garza", gameMaster);
CreditsPerson.create("Kristen", "Obsydien", "Stewart", gameMaster);
CreditsPerson.create("Djironnyma", communityManager);
CreditsPerson.create("Achae Eanstray", communityManager, graphics);
CreditsPerson.create("Andreas", "Caldarion", "Gahr", gameplay, content, qualityAssurance);
CreditsPerson.create("Merung", gameplay, content, qualityAssurance);
CreditsPerson.create("Ardian", gameplay);
CreditsPerson.create("Esther", "Kadiya", "Sense", gameplay, graphics, website);
CreditsPerson.create("Jan", "Mattner", gameplay, qualityAssurance);
CreditsPerson.create("Wolfgang", "Müller", content);
CreditsPerson.create("Thomas", "Messerschmidt", content);
CreditsPerson.create("Faladron", content);
CreditsPerson.create("Henry", "Mill", content, maps);
CreditsPerson.create("Lisa", "Maletzki", gameplay, content, qualityAssurance);
CreditsPerson.create("Marion", "Miriam", "Herstell", content, client, qualityAssurance);
CreditsPerson.create("Vitoria", content);
CreditsPerson.create("Nikolaus", "Nalcaryos", "Tauß", content);
CreditsPerson.create("Grokk", content, qualityAssurance);
CreditsPerson.create("Kawan", "Regallo", "Baxter", content);
CreditsPerson.create("Alex", "Flux", "Rose", content);
CreditsPerson.create("Llama", content);
CreditsPerson.create("Dominic", "Dyluck", "W.", content);
CreditsPerson.create("Martin", "Skamato", "Großmann", content, qualityAssurance);
CreditsPerson.create("Tiim", client, mapEditor);
CreditsPerson.create("Fredrik K", client, mapEditor);
CreditsPerson.create("Smjert", client);
CreditsPerson.create("Samaras", graphics);
CreditsPerson.create("Drakon Gerwulf", graphics);
CreditsPerson.create("Karl", "Salameh", graphics);
CreditsPerson.create("Matt", "Raelith", "Hollier", website);
CreditsPerson.create("Jaime", "Quinasa", "Hughes", qualityAssurance);
CreditsPerson.create("H.-Robert", "Damien", "Matthes", qualityAssurance);
CreditsPerson.create("Rakaya", qualityAssurance);
CreditsPerson.create("Larissa", "Soraja", "Falkenbach", qualityAssurance);
CreditsPerson.create("Alrik", qualityAssurance);
CreditsPerson.create("Katharina", qualityAssurance);
CreditsPerson.create("Mike", "Salathe", "Hudak", qualityAssurance);
CreditsPerson.create("Slightly", qualityAssurance);
CreditsPerson.create("PurpleMonkeys", qualityAssurance);
CreditsPerson.create("GolfLima", qualityAssurance);
CreditsPerson.create("Victor", "Vigalf", "Becker", qualityAssurance);
CreditsPerson.create("Cindy", "Elynah", "Ludwig", qualityAssurance);
CreditsPerson.create("Mesha", maps);
CreditsPerson.create("Oliver", "Herzog", maps);
CreditsPerson.create("Evie", chiefMap, content, maps);
CreditsPerson.create("Quirkily", content, maps);
CreditsPerson.create("Arien Edhel", specialThanks);
CreditsPerson.create("Jan", "Alatar", "Falke", specialThanks);
CreditsPerson.create("Aragon ben Galwan", specialThanks);
CreditsPerson.create("void256", specialThanks);
CreditsPerson.create("Illarion", "e.V.", presentedBy);
singlePosList.add(projectManager);
singlePosList.add(chiefContent);
singlePosList.add(chiefClient);
singlePosList.add(chiefGraphics);
singlePosList.add(chiefMusic);
singlePosList.add(chiefMap);
singlePosList.add(chiefServer);
singlePosList.add(presentedBy);
multiPosList.add(gameplay);
multiPosList.add(content);
multiPosList.add(client);
multiPosList.add(maps);
multiPosList.add(website);
multiPosList.add(easyNPC);
multiPosList.add(easyQuest);
multiPosList.add(mapEditor);
multiPosList.add(server);
multiPosList.add(gameMaster);
multiPosList.add(communityManager);
multiPosList.add(qualityAssurance);
multiPosList.add(specialThanks);
}
/**
* Get the iterator over the list of entries that are assigned to a single person.
*
* @return the single person entries
*/
@Nonnull
public Iterator<CreditsList> getSingleLists() {
return singlePosList.iterator();
}
/**
* Get the iterator over the list of entries that are assigned to multiple persons.
*
* @return the multi person entries
*/
@Nonnull
public Iterator<CreditsList> getMultiLists() {
return multiPosList.iterator();
}
}