feat: добавлены сохранения, достижения и локализация #1
@@ -1,8 +1,6 @@
|
||||
package com.mygdx.game;
|
||||
|
||||
/**
|
||||
* Перечисление всех достижений в игре.
|
||||
*/
|
||||
// Перечисление всех достижений в игре.
|
||||
public enum Achievement {
|
||||
// Строительство
|
||||
FIRST_BUILDING("first_building",
|
||||
@@ -82,9 +80,7 @@ public enum Achievement {
|
||||
return titleEn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Найти достижение по ID
|
||||
*/
|
||||
// Найти достижение по ID
|
||||
public static Achievement fromId(String id) {
|
||||
for (Achievement a : values()) {
|
||||
if (a.id.equals(id)) {
|
||||
|
||||
@@ -35,9 +35,7 @@ public class AchievementPopup {
|
||||
Achievements.clearNewUnlock();
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновить таймер
|
||||
*/
|
||||
// Обновить таймер
|
||||
public void update(float deltaTime) {
|
||||
if (active) {
|
||||
timer -= deltaTime;
|
||||
@@ -48,16 +46,12 @@ public class AchievementPopup {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Активен ли попап
|
||||
*/
|
||||
// Активен ли попап
|
||||
public boolean isActive() {
|
||||
return active && currentAchievement != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Отрисовать попап достижения
|
||||
*/
|
||||
// Отрисовать попап достижения
|
||||
public void render(SpriteBatch batch, BitmapFont font, GlyphLayout layout,
|
||||
Texture whitePixel, int screenWidth, int screenHeight) {
|
||||
if (!isActive()) {
|
||||
|
||||
@@ -3,9 +3,7 @@ package com.mygdx.game;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Менеджер достижений - проверка условий и разблокировка.
|
||||
*/
|
||||
// Менеджер достижений - проверка условий и разблокировка.
|
||||
public class Achievements {
|
||||
private static Set<Achievement> unlocked = new HashSet<>();
|
||||
private static Achievement lastUnlocked = null;
|
||||
@@ -13,9 +11,7 @@ public class Achievements {
|
||||
private static final float POPUP_DURATION = 3.0f;
|
||||
private static boolean hasNewUnlockFlag = false;
|
||||
|
||||
/**
|
||||
* Проверить все условия достижений
|
||||
*/
|
||||
// Проверить все условия достижений
|
||||
public static void check(AbsurdCityBuilder1 game) {
|
||||
// Строительство
|
||||
int total = GameSave.getTotalBuildings();
|
||||
@@ -58,18 +54,14 @@ public class Achievements {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Попробовать разблокировать достижение
|
||||
*/
|
||||
// Попробовать разблокировать достижение
|
||||
private static void tryUnlock(Achievement achievement) {
|
||||
if (!unlocked.contains(achievement)) {
|
||||
unlock(achievement);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Разблокировать достижение
|
||||
*/
|
||||
// Разблокировать достижение
|
||||
public static void unlock(Achievement achievement) {
|
||||
if (unlocked.contains(achievement)) {
|
||||
return;
|
||||
@@ -84,30 +76,22 @@ public class Achievements {
|
||||
GameSave.saveSettings();
|
||||
}
|
||||
|
||||
/**
|
||||
* Отметить посещение планеты
|
||||
*/
|
||||
// Отметить посещение планеты
|
||||
public static void visitPlanet(Planet planet) {
|
||||
GameSave.onVisitPlanet(planet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Есть ли новое непоказанное достижение
|
||||
*/
|
||||
// Есть ли новое непоказанное достижение
|
||||
public static boolean hasNewUnlock() {
|
||||
return hasNewUnlockFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Сбросить флаг нового достижения
|
||||
*/
|
||||
// Сбросить флаг нового достижения
|
||||
public static void clearNewUnlock() {
|
||||
hasNewUnlockFlag = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновить таймер попапа
|
||||
*/
|
||||
// Обновить таймер попапа
|
||||
public static void update(float deltaTime) {
|
||||
if (popupTimer > 0) {
|
||||
popupTimer -= deltaTime;
|
||||
@@ -117,44 +101,32 @@ public class Achievements {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверить, разблокировано ли достижение
|
||||
*/
|
||||
// Проверить, разблокировано ли достижение
|
||||
public static boolean isUnlocked(Achievement achievement) {
|
||||
return unlocked.contains(achievement);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить количество разблокированных достижений
|
||||
*/
|
||||
// Получить количество разблокированных достижений
|
||||
public static int getUnlockedCount() {
|
||||
return unlocked.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить общее количество достижений
|
||||
*/
|
||||
// Получить общее количество достижений
|
||||
public static int getTotalCount() {
|
||||
return Achievement.values().length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить последнее разблокированное достижение (для показа попапа)
|
||||
*/
|
||||
// Получить последнее разблокированное достижение (для показа попапа)
|
||||
public static Achievement getLastUnlocked() {
|
||||
return lastUnlocked;
|
||||
}
|
||||
|
||||
/**
|
||||
* Показывается ли сейчас попап
|
||||
*/
|
||||
// Показывается ли сейчас попап
|
||||
public static boolean isShowingPopup() {
|
||||
return popupTimer > 0 && lastUnlocked != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить прогресс попапа (0-1)
|
||||
*/
|
||||
// Получить прогресс попапа (0-1)
|
||||
public static float getPopupProgress() {
|
||||
return popupTimer / POPUP_DURATION;
|
||||
}
|
||||
|
||||
@@ -2,9 +2,7 @@ package com.mygdx.game;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
|
||||
/**
|
||||
* Конфигурация игры - все цвета, константы и настройки в одном месте.
|
||||
*/
|
||||
// Конфигурация игры - все цвета, константы и настройки в одном месте.
|
||||
public class GameConfig {
|
||||
|
||||
// ==================== РАЗМЕРЫ ЭКРАНА ====================
|
||||
|
||||
@@ -90,9 +90,7 @@ public class GameSave {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверить, есть ли сохранение
|
||||
*/
|
||||
// Проверить, есть ли сохранение
|
||||
public static boolean hasSave() {
|
||||
Preferences prefs = Gdx.app.getPreferences(PREF_NAME);
|
||||
// Есть сохранение если есть здания ИЛИ статистика
|
||||
@@ -101,9 +99,7 @@ public class GameSave {
|
||||
return !buildings.isEmpty() || totalBuilt > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Удалить сохранение
|
||||
*/
|
||||
// Удалить сохранение
|
||||
public static void deleteSave() {
|
||||
Preferences prefs = Gdx.app.getPreferences(PREF_NAME);
|
||||
prefs.clear();
|
||||
@@ -112,9 +108,7 @@ public class GameSave {
|
||||
resetAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Сбросить всю статистику (для новой игры)
|
||||
*/
|
||||
// Сбросить всю статистику (для новой игры)
|
||||
public static void resetAll() {
|
||||
totalBuildings = 0;
|
||||
earthBuildings = 0;
|
||||
@@ -139,9 +133,7 @@ public class GameSave {
|
||||
prefs.flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* Загрузить только настройки (язык) при старте
|
||||
*/
|
||||
// Загрузить только настройки (язык) при старте
|
||||
public static void loadSettings() {
|
||||
Preferences prefs = Gdx.app.getPreferences(PREF_NAME);
|
||||
String language = prefs.getString(KEY_LANGUAGE, "ru");
|
||||
@@ -161,9 +153,7 @@ public class GameSave {
|
||||
visitedVenus = prefs.getBoolean(KEY_VISITED_VENUS, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохранить настройки и статистику
|
||||
*/
|
||||
// Сохранить настройки и статистику
|
||||
public static void saveSettings() {
|
||||
Preferences prefs = Gdx.app.getPreferences(PREF_NAME);
|
||||
|
||||
@@ -185,9 +175,7 @@ public class GameSave {
|
||||
prefs.flush();
|
||||
}
|
||||
|
||||
/**
|
||||
* Сохранить текущую планету
|
||||
*/
|
||||
// Сохранить текущую планету
|
||||
public static void savePlanet(Planet planet) {
|
||||
Preferences prefs = Gdx.app.getPreferences(PREF_NAME);
|
||||
prefs.putString(KEY_PLANET, planet.name());
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package com.mygdx.game;
|
||||
|
||||
/**
|
||||
* Локализация игры - все тексты на русском и английском.
|
||||
*/
|
||||
// Локализация игры - все тексты на русском и английском.
|
||||
public class Localization {
|
||||
private static String currentLanguage = "ru";
|
||||
|
||||
|
||||
@@ -106,9 +106,7 @@ public class MenuRenderer {
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Обновить тексты кнопок меню (при смене языка).
|
||||
*/
|
||||
// Обновить тексты кнопок меню (при смене языка).
|
||||
public void refreshMenuTexts() {
|
||||
createMainMenuButtons();
|
||||
createPlanetSelectButtons();
|
||||
@@ -278,9 +276,7 @@ public class MenuRenderer {
|
||||
font.getData().setScale(1.0f);
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверить клик на переключатель языка.
|
||||
*/
|
||||
// Проверить клик на переключатель языка.
|
||||
public boolean checkLanguageClick(float mouseX, float mouseY) {
|
||||
float langX = width - 80;
|
||||
float langY = height - 50;
|
||||
|
||||
Reference in New Issue
Block a user