feat: добавлены сохранения, достижения и локализация #1

Open
k.gold wants to merge 3 commits from feature/save-achievements-localization into main
7 changed files with 29 additions and 87 deletions
Showing only changes of commit d2a9b1d4ce - Show all commits

View File

@@ -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)) {

View File

@@ -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()) {

View File

@@ -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;
}

View File

@@ -2,9 +2,7 @@ package com.mygdx.game;
import com.badlogic.gdx.graphics.Color;
/**
* Конфигурация игры - все цвета, константы и настройки в одном месте.
*/
// Конфигурация игры - все цвета, константы и настройки в одном месте.
public class GameConfig {
// ==================== РАЗМЕРЫ ЭКРАНА ====================

View File

@@ -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());

View File

@@ -1,8 +1,6 @@
package com.mygdx.game;
/**
* Локализация игры - все тексты на русском и английском.
*/
// Локализация игры - все тексты на русском и английском.
public class Localization {
private static String currentLanguage = "ru";

View File

@@ -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;