From cee525b82ea210d1d62211c96be8c25dec33b3a5 Mon Sep 17 00:00:00 2001 From: wangsj <3305688534@qq.com> Date: Sat, 27 Sep 2025 15:02:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B9=E7=9B=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .trae/rules/project_rules.md | 0 Game/.gitignore | Bin 20 -> 0 bytes Game/README.md | 25 - Game/pom.xml | 114 ----- docs/perf_hotspots.md | 12 - pom.xml | 6 + .../uno/mloluyu/characters/SimpleFighter.java | 210 ++++++-- .../characters/ai/SimpleFighterAI.java | 158 ++++++ .../characters/effects/AttackEffect.java | 44 ++ .../characters/effects/HitParticle.java | 54 +++ .../characters/effects/RadialRing.java | 48 ++ .../characters/effects/SparkParticle.java | 38 ++ .../characters/effects/Untitled-1.html | 19 + .../java/uno/mloluyu/desktop/GameScreen.java | 451 +++++++++++++++++- .../java/uno/mloluyu/desktop/StartScreen.java | 2 +- src/main/java/uno/mloluyu/util/Font.java | 2 +- .../java/uno/mloluyu/util/GameConstants.java | 8 + .../uno/mloluyu/characters/Action.class | Bin 1351 -> 1275 bytes .../mloluyu/characters/ActionStateGuard.class | Bin 1151 -> 1151 bytes .../characters/ActionTransitionMap.class | Bin 1854 -> 1862 bytes .../mloluyu/characters/AdvancedFighter.class | Bin 505 -> 505 bytes .../characters/FighterAnimationManager.class | Bin 6182 -> 6129 bytes .../uno/mloluyu/characters/FighterBase.class | Bin 1817 -> 1817 bytes .../SimpleFighter$AttackPhase.class | Bin 0 -> 1293 bytes .../mloluyu/characters/SimpleFighter.class | Bin 8633 -> 11989 bytes .../ai/SimpleFighterAI$AIState$1.class | Bin 0 -> 2013 bytes .../ai/SimpleFighterAI$AIState$2.class | Bin 0 -> 2376 bytes .../ai/SimpleFighterAI$AIState.class | Bin 0 -> 1532 bytes .../characters/ai/SimpleFighterAI.class | Bin 0 -> 3261 bytes .../characters/effects/AttackEffect.class | Bin 0 -> 1934 bytes .../characters/effects/HitParticle.class | Bin 0 -> 2035 bytes .../characters/effects/RadialRing.class | Bin 0 -> 2022 bytes .../characters/effects/SparkParticle.class | Bin 0 -> 1777 bytes .../characters/effects/Untitled-1.html | 19 + .../uno/mloluyu/desktop/BaseScreen.class | Bin 499 -> 499 bytes .../desktop/CharacterSelectScreen.class | Bin 7567 -> 7567 bytes .../uno/mloluyu/desktop/DesktopLauncher.class | Bin 967 -> 965 bytes .../uno/mloluyu/desktop/GameScreen.class | Bin 16668 -> 28962 bytes .../uno/mloluyu/desktop/MainGame.class | Bin 1130 -> 1130 bytes .../uno/mloluyu/desktop/MainMenuScreen.class | Bin 5285 -> 5284 bytes .../desktop/NetworkSettingsScreen$1.class | Bin 3135 -> 3092 bytes .../desktop/NetworkSettingsScreen.class | Bin 7055 -> 7037 bytes .../uno/mloluyu/desktop/ScreenManager.class | Bin 965 -> 961 bytes .../uno/mloluyu/desktop/SettingsScreen.class | Bin 3560 -> 3556 bytes .../uno/mloluyu/desktop/StartScreen.class | Bin 2215 -> 2215 bytes .../uno/mloluyu/network/ConnectClient.class | Bin 4115 -> 4074 bytes .../uno/mloluyu/network/ConnectServer.class | Bin 6818 -> 6809 bytes .../uno/mloluyu/network/NetworkManager.class | Bin 9448 -> 9433 bytes .../uno/mloluyu/perf/PerfMetrics.class | Bin 1011 -> 1019 bytes .../uno/mloluyu/util/ClearScreen.class | Bin 561 -> 569 bytes target/classes/uno/mloluyu/util/Font.class | Bin 2811 -> 2885 bytes .../uno/mloluyu/util/GameConstants.class | Bin 543 -> 651 bytes .../uno/mloluyu/util/ResourcePaths.class | Bin 536 -> 536 bytes .../uno/mloluyu/util/SimpleFormatter.class | Bin 1399 -> 1397 bytes .../uno/mloluyu/util/TimeStepLimiter.class | Bin 529 -> 529 bytes .../mloluyu/versatile/FighterController.class | Bin 2543 -> 2433 bytes target/game-1.0-SNAPSHOT.jar | Bin 17567769 -> 17582512 bytes .../compile/default-compile/createdFiles.lst | 10 +- .../compile/default-compile/inputFiles.lst | 3 + .../mloluyu/assets/AssetsExistenceTest.class | Bin 2139 -> 2161 bytes .../mloluyu/characters/ActionStateTest.class | Bin 1154 -> 1154 bytes 61 files changed, 1015 insertions(+), 208 deletions(-) delete mode 100644 .trae/rules/project_rules.md delete mode 100644 Game/.gitignore delete mode 100644 Game/README.md delete mode 100644 Game/pom.xml delete mode 100644 docs/perf_hotspots.md create mode 100644 src/main/java/uno/mloluyu/characters/ai/SimpleFighterAI.java create mode 100644 src/main/java/uno/mloluyu/characters/effects/AttackEffect.java create mode 100644 src/main/java/uno/mloluyu/characters/effects/HitParticle.java create mode 100644 src/main/java/uno/mloluyu/characters/effects/RadialRing.java create mode 100644 src/main/java/uno/mloluyu/characters/effects/SparkParticle.java create mode 100644 src/main/java/uno/mloluyu/characters/effects/Untitled-1.html create mode 100644 target/classes/uno/mloluyu/characters/SimpleFighter$AttackPhase.class create mode 100644 target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState$1.class create mode 100644 target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState$2.class create mode 100644 target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState.class create mode 100644 target/classes/uno/mloluyu/characters/ai/SimpleFighterAI.class create mode 100644 target/classes/uno/mloluyu/characters/effects/AttackEffect.class create mode 100644 target/classes/uno/mloluyu/characters/effects/HitParticle.class create mode 100644 target/classes/uno/mloluyu/characters/effects/RadialRing.class create mode 100644 target/classes/uno/mloluyu/characters/effects/SparkParticle.class create mode 100644 target/classes/uno/mloluyu/characters/effects/Untitled-1.html diff --git a/.trae/rules/project_rules.md b/.trae/rules/project_rules.md deleted file mode 100644 index e69de29..0000000 diff --git a/Game/.gitignore b/Game/.gitignore deleted file mode 100644 index 8d9590aab8c74ec8d8a1c7b148bf592afa1acc12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20 bcmezWuY@6yp@<=!A(f$oL7#z_fr|kENfrdl diff --git a/Game/README.md b/Game/README.md deleted file mode 100644 index b9a2ea2..0000000 --- a/Game/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# 有关本项目的说明 - -本项目为AVCEIT2025届软件技术专业软件241班Java实训小组项目 -This project is about Java Project Training 2025, Major.Software Technology - -### 本项目目前需要做的 - -- 实现游戏主界面,添加素材 -- 完成游戏的核心功能,即双人格斗 -- 实现基本的局域网内联机游戏功能 -- *~~打则死路一条~~* - -### 目前正在做的 - -- 编写单个角色并实现其状态 (@wsj) -- 将游戏素材整理为精灵图 (@wsj) -- 给游戏进行界面类添加BUG (@mloluyu) -- 给标题界面类添加BUG (@mloluyu) -- 寻找一个合适的数据处理类编写方法 -- *~~丰矿地打则~~* - -### 参与项目的人 - -- 武术家 [@wsj](varia.mloluyu.uno/wsj) -- 大货车 [@mloluyu](varia.mloluyu.uno/mloluyu) diff --git a/Game/pom.xml b/Game/pom.xml deleted file mode 100644 index 7266d29..0000000 --- a/Game/pom.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - 4.0.0 - - uno.mloluyu - - game - - 1.0-SNAPSHOT - - jar - - - 21 - 21 - UTF-8 - 1.12.1 - - - - - - com.badlogicgames.gdx - gdx - 1.12.1 - - - - - com.badlogicgames.gdx - gdx-freetype - 1.12.1 - - - - - com.badlogicgames.gdx - gdx-freetype-platform - 1.12.1 - natives-desktop - - - com.badlogicgames.gdx - gdx-backend-lwjgl - 1.12.1 - - - com.badlogicgames.gdx - gdx-platform - 1.12.1 - natives-desktop - - - com.badlogicgames.gdx - gdx - ${gdx.version} - - - com.badlogicgames.gdx - gdx-backend-lwjgl3 - ${gdx.version} - - - com.badlogicgames.gdx - gdx-platform - ${gdx.version} - natives-desktop - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.13.0 - - - 17 - 17 - - - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.0 - - - - uno.mloluyu.desktop.Launcher - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.3.0 - - - - true - uno.mloluyu.desktop.Launcher - - - - - - - - - diff --git a/docs/perf_hotspots.md b/docs/perf_hotspots.md deleted file mode 100644 index 984dffb..0000000 --- a/docs/perf_hotspots.md +++ /dev/null @@ -1,12 +0,0 @@ -# 性能热点初稿 - -首轮标记: - -| 区域 | 说明 | 优先级 | 说明 | -|------|------|--------|------| -GameScreen.render | 多次集合遍历 + 远程玩家循环内更新 | 高 | 后续拆分逻辑/渲染阶段 | -SimpleFighter.update | 物理与攻击状态混杂 | 中 | 拆分到组件式(动作/物理) | -网络同步(待补) | sendPosition 每帧发送 | 中 | 引入位置压缩/频率限制 | -清屏/批处理 | 现已静态化 | 已改善 | 继续合并渲染批次 | - -后续收集: 帧时间分布 / GC 次数。 diff --git a/pom.xml b/pom.xml index 4036ec1..52f6a31 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,12 @@ 5.10.2 test + + + com.badlogicgames.gdx + gdx-ai + 1.8.2 + diff --git a/src/main/java/uno/mloluyu/characters/SimpleFighter.java b/src/main/java/uno/mloluyu/characters/SimpleFighter.java index d010d6a..662252a 100644 --- a/src/main/java/uno/mloluyu/characters/SimpleFighter.java +++ b/src/main/java/uno/mloluyu/characters/SimpleFighter.java @@ -23,12 +23,27 @@ public class SimpleFighter extends FighterBase { private Rectangle hitbox = new Rectangle(0, 0, 64, 128); // 碰撞盒 private Rectangle attackbox = new Rectangle(0, 0, 80, 80); // 攻击判定盒 private boolean isFacingRight = true; // 朝向(右/左) - private float speed = GameConstants.MOVE_SPEED; // 水平移动速度 - private int health = 200; // 生命值 - private boolean isAttacking = false; // 是否正在攻击 - private boolean attackJustStarted = false; // 攻击是否刚开始 - private float attackTimer = 0f; // 攻击计时器 - private static final float ATTACK_DURATION = 0.15f; // 攻击持续时间 + private float speed = GameConstants.MOVE_SPEED; // 目标最大水平移动速度 + private float velX = 0f; // 当前水平速度(加入加速度与减速) + private static final int MAX_HEALTH = 200; // 最大生命值 + private int health = MAX_HEALTH; // 当前生命值 + private boolean isAttacking = false; // 是否正在攻击(包含 startup+active+recovery 整体) + private boolean attackJustStarted = false; // 本帧是否刚开始(用于跳过首帧计时扣减) + private float attackTimer = 0f; // 当前阶段剩余时间 + // 分阶段(帧数可按类型定制):startup -> active -> recovery + + private enum AttackPhase { + STARTUP, ACTIVE, RECOVERY + } + + private AttackPhase attackPhase = AttackPhase.STARTUP; + // 基础时长(可后续移出到配置) + // 降低攻击速度:整体各阶段放大(原值约 *1.6~2) + private static final float LIGHT_STARTUP = 0.10f, LIGHT_ACTIVE = 0.10f, LIGHT_RECOVERY = 0.22f; + private static final float HEAVY_STARTUP = 0.18f, HEAVY_ACTIVE = 0.16f, HEAVY_RECOVERY = 0.36f; + private static final float SPECIAL_STARTUP = 0.20f, SPECIAL_ACTIVE = 0.22f, SPECIAL_RECOVERY = 0.42f; + // 当前 attackType 的阶段时长(缓存便于递进) + private float curStartup, curActive, curRecovery; // 新增:连续攻击序号(本地,用于避免重复伤害) private int attackSequence = 0; private String lastAttackType = "light"; // 记录最后一次攻击类型,供伤害判定 @@ -39,6 +54,16 @@ public class SimpleFighter extends FighterBase { private float invulnerableTimer = 0f; // 无敌帧时间(被击中后短暂无敌) private static final float INVULNERABLE_DURATION = 0.3f; private static final float KNOCKBACK_DURATION = 0.12f; + // 死亡淡出 + private float deathFadeTimer = 0f; // 剩余淡出时间(>0 表示正在淡出) + private static final float DEATH_FADE_DURATION = 1.2f; // 完全消失所需时间 + // 防御新增字段 + private boolean defending = false; // 是否防御中 + private static final float DEFEND_DAMAGE_FACTOR = 0.25f; // 防御减伤比例 + private static final float DEFEND_KNOCKBACK_FACTOR = 0.3f; // 防御击退比例 + // 新增:攻击全局冷却(收招结束到允许下一次攻击的最短间隔) + private static final float GLOBAL_ATTACK_COOLDOWN = 0.12f; + private float globalAttackCDTimer = 0f; public SimpleFighter(String name) { super(name); @@ -61,18 +86,39 @@ public class SimpleFighter extends FighterBase { } if (isAttacking) { if (attackJustStarted) { - attackJustStarted = false; + attackJustStarted = false; // 第一帧不扣时间,避免可见阶段提前缩短 } else { attackTimer -= deltaTime; } if (attackTimer <= 0f) { - isAttacking = false; - attackTimer = 0f; - if (currentAction == Action.ATTACK) - changeAction(Action.IDLE); + // 进入下一阶段 + switch (attackPhase) { + case STARTUP: + attackPhase = AttackPhase.ACTIVE; + attackTimer = curActive; + break; + case ACTIVE: + attackPhase = AttackPhase.RECOVERY; + attackTimer = curRecovery; + break; + case RECOVERY: + isAttacking = false; + attackTimer = 0f; + attackPhase = AttackPhase.STARTUP; + globalAttackCDTimer = GLOBAL_ATTACK_COOLDOWN; // 开始冷却 + if (currentAction == Action.ATTACK) + changeAction(Action.IDLE); + break; + } } } else { - updateAttackbox("light"); + updateAttackbox("light"); // 非攻击中保持一个默认攻击盒(或可隐藏) + } + + // 冷却计时 + if (globalAttackCDTimer > 0f) { + globalAttackCDTimer -= deltaTime; + if (globalAttackCDTimer < 0f) globalAttackCDTimer = 0f; } if (!isGrounded) { @@ -85,6 +131,12 @@ public class SimpleFighter extends FighterBase { changeAction(Action.IDLE); } } + // 死亡淡出计时递减 + if (!isAlive() && deathFadeTimer > 0f) { + deathFadeTimer -= deltaTime; + if (deathFadeTimer < 0f) + deathFadeTimer = 0f; + } } public void renderSprite(SpriteBatch batch) { @@ -113,7 +165,7 @@ public class SimpleFighter extends FighterBase { if (keycode == Input.Keys.SPACE || keycode == Input.Keys.UP || keycode == Input.Keys.W) { jump(); } - if (!isAttacking) { + if (!isAttacking && !defending && globalAttackCDTimer <= 0f) { if (keycode == Input.Keys.Z || keycode == Input.Keys.J) { attack("light"); NetworkManager.getInstance().sendAttack("light", getFacingDir()); @@ -125,11 +177,23 @@ public class SimpleFighter extends FighterBase { NetworkManager.getInstance().sendAttack("special", getFacingDir()); } } + // 防御键(C / 左CTRL) + if (keycode == Input.Keys.C || keycode == Input.Keys.CONTROL_LEFT) { + if (!isAttacking && isAlive()) { + defending = true; + changeAction(Action.DEFEND); + } + } } else { if ((keycode == Input.Keys.LEFT || keycode == Input.Keys.RIGHT || keycode == Input.Keys.A || keycode == Input.Keys.D) && getCurrentAction() == Action.MOVE) { changeAction(Action.IDLE); } + if (keycode == Input.Keys.C || keycode == Input.Keys.CONTROL_LEFT) { + defending = false; + if (currentAction == Action.DEFEND) + changeAction(Action.IDLE); + } } } @@ -154,11 +218,37 @@ public class SimpleFighter extends FighterBase { } public void move(float x, float deltaTime) { - if (x != 0) { - isFacingRight = x > 0; - hitbox.x += x * speed * deltaTime; + // x = -1,0,1 方向输入 + float targetSign = x; + float accel = GameConstants.MOVE_ACCEL; + if (!isGrounded) { + accel *= GameConstants.AIR_ACCEL_FACTOR; // 空中降低加速度便于区分地面/空中控制 + } + if (targetSign != 0) { + isFacingRight = targetSign > 0; + // 向目标速度加速 + float targetVel = targetSign * speed; + if (velX < targetVel) { + velX = Math.min(targetVel, velX + accel * deltaTime); + } else if (velX > targetVel) { + velX = Math.max(targetVel, velX - accel * deltaTime); + } + } else { + // 无输入:减速(朝 0 逼近) + float decel = GameConstants.MOVE_DECEL * deltaTime; + if (velX > 0) { + velX = Math.max(0, velX - decel); + } else if (velX < 0) { + velX = Math.min(0, velX + decel); + } + } + // 应用位移 + hitbox.x += velX * deltaTime; + // 状态切换 + if (Math.abs(velX) > 5f && isGrounded && !isAttacking) { changeAction(Action.MOVE); - } else if (isGrounded && !isAttacking) { + } else if (isGrounded && !isAttacking && targetSign == 0 && Math.abs(velX) <= 5f) { + velX = 0f; // 近乎停止直接归零 changeAction(Action.IDLE); } } @@ -215,13 +305,32 @@ public class SimpleFighter extends FighterBase { public void attack(String attackType) { isAttacking = true; - attackTimer = ATTACK_DURATION; + attackPhase = AttackPhase.STARTUP; + switch (attackType) { + case "heavy": + curStartup = HEAVY_STARTUP; + curActive = HEAVY_ACTIVE; + curRecovery = HEAVY_RECOVERY; + break; + case "special": + curStartup = SPECIAL_STARTUP; + curActive = SPECIAL_ACTIVE; + curRecovery = SPECIAL_RECOVERY; + break; + case "light": + default: + curStartup = LIGHT_STARTUP; + curActive = LIGHT_ACTIVE; + curRecovery = LIGHT_RECOVERY; + break; + } + attackTimer = curStartup; attackJustStarted = true; changeAction(Action.ATTACK); updateAttackbox(attackType); lastAttackType = attackType; - attackSequence++; // 本地每次攻击自增 - lastDamageAppliedSeq = -1; // 新一次攻击重置 + attackSequence++; // 本地每次攻击序号自增 + lastDamageAppliedSeq = -1; // 重置伤害标记 } public void takeHit(int damage) { @@ -230,17 +339,28 @@ public class SimpleFighter extends FighterBase { public void takeHit(int damage, int dirSign) { if (invulnerableTimer > 0 || health <= 0) - return; // 无敌或已死亡 - health = Math.max(0, health - damage); - changeAction(health > 0 ? Action.HIT : Action.DEAD); + return; + int finalDamage = damage; + boolean wasDefending = defending && currentAction == Action.DEFEND; + if (wasDefending) { + finalDamage = Math.max(1, Math.round(damage * DEFEND_DAMAGE_FACTOR)); + } + health = Math.max(0, health - finalDamage); + if (!(wasDefending && health > 0)) { + changeAction(health > 0 ? Action.HIT : Action.DEAD); + } invulnerableTimer = INVULNERABLE_DURATION; - // dirSign: -1 表示从右向左击中(目标向左被推), 1 表示从左向右击中(目标向右被推) - if (dirSign == 0) { // 没有提供方向则沿用基于自身面向的旧逻辑 - knockbackX = isFacingRight ? -600f : 600f; + float baseKb = 600f; + if (wasDefending) + baseKb *= DEFEND_KNOCKBACK_FACTOR; + if (dirSign == 0) { + knockbackX = isFacingRight ? -baseKb : baseKb; } else { - knockbackX = dirSign * 600f; + knockbackX = dirSign * baseKb; } knockbackTimer = KNOCKBACK_DURATION; + if (health == 0) + deathFadeTimer = DEATH_FADE_DURATION; } public boolean isAlive() { @@ -267,6 +387,10 @@ public class SimpleFighter extends FighterBase { return health; } + public int getMaxHealth() { + return MAX_HEALTH; + } + public int getAttackSequence() { return attackSequence; } @@ -284,7 +408,8 @@ public class SimpleFighter extends FighterBase { } public boolean canDealDamage() { - return isAttacking && attackSequence != lastDamageAppliedSeq; // 未对当前序号造成过伤害 + // 只有 ACTIVE 阶段且本序号未造成过伤害才允许 + return isAttacking && attackPhase == AttackPhase.ACTIVE && attackSequence != lastDamageAppliedSeq; } public void markDamageApplied() { @@ -323,9 +448,21 @@ public class SimpleFighter extends FighterBase { return attackTimer; } + public boolean isInActivePhase() { + return isAttacking && attackPhase == AttackPhase.ACTIVE; + } + + public boolean isInStartupPhase() { + return isAttacking && attackPhase == AttackPhase.STARTUP; + } + + public boolean isInRecoveryPhase() { + return isAttacking && attackPhase == AttackPhase.RECOVERY; + } + // 重生时重置状态 public void resetForRespawn() { - health = 100; + health = MAX_HEALTH; isAttacking = false; attackTimer = 0f; attackJustStarted = false; @@ -333,5 +470,20 @@ public class SimpleFighter extends FighterBase { invulnerableTimer = 0f; knockbackTimer = 0f; knockbackX = 0f; + deathFadeTimer = 0f; // 重置淡出 + defending = false; + velX = 0f; + globalAttackCDTimer = 0f; + } + + /** 获取当前用于渲染的死亡淡出透明度(1=不透明,0=已完全淡出)。 */ + public float getRenderAlpha() { + if (health > 0) + return 1f; + return deathFadeTimer / DEATH_FADE_DURATION; // 线性 + } + + public boolean isDefending() { + return defending && currentAction == Action.DEFEND; } } diff --git a/src/main/java/uno/mloluyu/characters/ai/SimpleFighterAI.java b/src/main/java/uno/mloluyu/characters/ai/SimpleFighterAI.java new file mode 100644 index 0000000..daf409e --- /dev/null +++ b/src/main/java/uno/mloluyu/characters/ai/SimpleFighterAI.java @@ -0,0 +1,158 @@ +package uno.mloluyu.characters.ai; + +import com.badlogic.gdx.ai.fsm.DefaultStateMachine; +import com.badlogic.gdx.ai.fsm.State; +import com.badlogic.gdx.ai.fsm.StateMachine; +import com.badlogic.gdx.ai.msg.Telegram; +import com.badlogic.gdx.math.MathUtils; +import uno.mloluyu.characters.SimpleFighter; + +/** + * 一个非常简化的 AI: + * - 距离目标远: 向目标靠近 + * - 距离合适: 停下并有概率攻击 + * - 偶尔随机跳一下 + */ +public class SimpleFighterAI { + private final SimpleFighter self; + private SimpleFighter target; // 追踪的目标(本地玩家) + private final StateMachine fsm; + + // 参数(后续可提取到 GameConstants 或配置文件) + private float attackCooldown = 0f; + private float jumpCooldown = 0f; + private static final float ATTACK_COOLDOWN_MIN = 0.6f; + private static final float ATTACK_COOLDOWN_MAX = 1.2f; + private static final float JUMP_COOLDOWN_MIN = 2.5f; + private static final float JUMP_COOLDOWN_MAX = 4.5f; + private static final float DESIRED_DISTANCE = 140f; // 停下的理想距离 + private static final float ATTACK_RANGE = 130f; // 触发攻击的距离 + + public SimpleFighterAI(SimpleFighter self, SimpleFighter target) { + this.self = self; + this.target = target; + this.fsm = new DefaultStateMachine<>(this, AIState.IDLE); + resetAttackCd(); + resetJumpCd(); + } + + private void resetAttackCd() { + attackCooldown = MathUtils.random(ATTACK_COOLDOWN_MIN, ATTACK_COOLDOWN_MAX); + } + + private void resetJumpCd() { + jumpCooldown = MathUtils.random(JUMP_COOLDOWN_MIN, JUMP_COOLDOWN_MAX); + } + + public void update(float delta) { + attackCooldown -= delta; + jumpCooldown -= delta; + fsm.update(); + } + + public void setTarget(SimpleFighter target) { + this.target = target; + } + + private float horizontalDistance() { + if (target == null) + return Float.MAX_VALUE; + return target.getHitbox().x - self.getHitbox().x; + } + + private float absDistance() { + return Math.abs(horizontalDistance()); + } + + enum AIState implements State { + IDLE { + @Override + public void enter(SimpleFighterAI ai) { + } + + @Override + public void update(SimpleFighterAI ai) { + if (ai.target == null || !ai.target.isAlive()) + return; + float dist = ai.absDistance(); + if (dist > DESIRED_DISTANCE * 1.3f) { + ai.fsm.changeState(MOVE); + return; + } + // 在理想距离范围内尝试攻击 + ai.tryAttack(); + ai.tryJump(); + } + + @Override + public void exit(SimpleFighterAI ai) { + } + + @Override + public boolean onMessage(SimpleFighterAI entity, Telegram telegram) { + return false; + } + }, + MOVE { + @Override + public void enter(SimpleFighterAI ai) { + } + + @Override + public void update(SimpleFighterAI ai) { + if (ai.target == null || !ai.target.isAlive()) { + ai.fsm.changeState(IDLE); + return; + } + float distSigned = ai.horizontalDistance(); + float distAbs = Math.abs(distSigned); + if (distAbs < DESIRED_DISTANCE) { + ai.fsm.changeState(IDLE); + return; + } + float dir = Math.signum(distSigned); + ai.self.move(dir, com.badlogic.gdx.Gdx.graphics.getDeltaTime()); + // 攻击机会(接近过程中如果已经够近) + if (distAbs < ATTACK_RANGE * 0.9f) { + ai.tryAttack(); + } + ai.tryJump(); + } + + @Override + public void exit(SimpleFighterAI ai) { + } + + @Override + public boolean onMessage(SimpleFighterAI entity, Telegram telegram) { + return false; + } + }; + } + + private void tryAttack() { + if (attackCooldown <= 0f && self.isAlive() && !self.isAttacking()) { + float dist = absDistance(); + if (dist < ATTACK_RANGE) { + // 轻重攻击随机 + String atkType; + float r = MathUtils.random(); + if (r < 0.7f) + atkType = "light"; + else if (r < 0.9f) + atkType = "heavy"; + else + atkType = "special"; + self.attack(atkType); + resetAttackCd(); + } + } + } + + private void tryJump() { + if (jumpCooldown <= 0f && self.isAlive() && MathUtils.random() < 0.15f) { + self.jump(); + resetJumpCd(); + } + } +} diff --git a/src/main/java/uno/mloluyu/characters/effects/AttackEffect.java b/src/main/java/uno/mloluyu/characters/effects/AttackEffect.java new file mode 100644 index 0000000..e815687 --- /dev/null +++ b/src/main/java/uno/mloluyu/characters/effects/AttackEffect.java @@ -0,0 +1,44 @@ +package uno.mloluyu.characters.effects; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.Rectangle; + +/** 简单攻击特效:在攻击盒区域闪现并淡出。 */ +public class AttackEffect { + private final Rectangle area = new Rectangle(); + private float life; // 剩余寿命 + private final float totalLife; + private final Color color = new Color(); + + public AttackEffect(Rectangle src, float duration, Color base) { + this.area.set(src); + this.life = duration; + this.totalLife = duration; + this.color.set(base); + } + + public boolean isAlive() { + return life > 0f; + } + + public void update(float delta) { + life -= delta; + } + + public void render(ShapeRenderer sr) { + if (!isAlive()) + return; + float alpha = life / totalLife; // 线性淡出 + sr.setColor(color.r, color.g, color.b, alpha * color.a); + sr.rect(area.x, area.y, area.width, area.height); + } + + public void renderOutline(ShapeRenderer sr) { + if (!isAlive()) + return; + float alpha = life / totalLife; + sr.setColor(color.r, color.g, color.b, alpha * 0.6f); + sr.rect(area.x, area.y, area.width, area.height); + } +} diff --git a/src/main/java/uno/mloluyu/characters/effects/HitParticle.java b/src/main/java/uno/mloluyu/characters/effects/HitParticle.java new file mode 100644 index 0000000..8a5f3e3 --- /dev/null +++ b/src/main/java/uno/mloluyu/characters/effects/HitParticle.java @@ -0,0 +1,54 @@ +package uno.mloluyu.characters.effects; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.math.MathUtils; + +/** 单个命中粒子:简单方块/短线喷射,带速度、重力与淡出。 */ +public class HitParticle { + private float x, y; + private float vx, vy; + private float life; // 剩余寿命 + private final float totalLife; + private final float size; + private final Color color = new Color(); + private static final float GRAVITY = 900f; // 轻微下坠 + + public HitParticle(float x, float y, Color base, float speedMin, float speedMax, float lifeMin, float lifeMax, + float sizeMin, float sizeMax) { + this.x = x; + this.y = y; + float ang = MathUtils.random(15f, 165f) * MathUtils.degreesToRadians; // 向上扇形 + float spd = MathUtils.random(speedMin, speedMax); + this.vx = MathUtils.cos(ang) * spd; + this.vy = MathUtils.sin(ang) * spd; + this.life = MathUtils.random(lifeMin, lifeMax); + this.totalLife = life; + this.size = MathUtils.random(sizeMin, sizeMax); + // 基础色随机稍许扰动 + float tint = MathUtils.random(0.85f, 1.05f); + this.color.set(base.r * tint, base.g * tint, base.b * tint, 1f); + } + + public boolean isAlive() { + return life > 0f; + } + + public void update(float dt) { + if (!isAlive()) + return; + life -= dt; + // 运动积分 + x += vx * dt; + y += vy * dt; + vy -= GRAVITY * dt * 0.35f; // 轻微重力 + } + + public void render(ShapeRenderer sr) { + if (!isAlive()) + return; + float a = (life / totalLife); // 线性淡出 + sr.setColor(color.r, color.g, color.b, a); + sr.rect(x - size / 2f, y - size / 2f, size, size); + } +} diff --git a/src/main/java/uno/mloluyu/characters/effects/RadialRing.java b/src/main/java/uno/mloluyu/characters/effects/RadialRing.java new file mode 100644 index 0000000..7fd13ca --- /dev/null +++ b/src/main/java/uno/mloluyu/characters/effects/RadialRing.java @@ -0,0 +1,48 @@ +package uno.mloluyu.characters.effects; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; + +/** + * 攻击进入 ACTIVE 瞬间生成的环形扩散效果:半径扩大+透明衰减。 + */ +public class RadialRing { + private float x, y; + private float radius; + private float maxRadius; + private float life; + private float maxLife; + private Color color; + + public RadialRing(float x, float y, float startRadius, float maxRadius, float life, Color color) { + this.x = x; this.y = y; this.radius = startRadius; this.maxRadius = maxRadius; this.life = life; this.maxLife = life; this.color = new Color(color); + } + + public void update(float dt) { + life -= dt; + float t = 1f - life / maxLife; // 0 -> 1 + radius = (startRadius() + (maxRadius - startRadius()) * t); + } + + private float startRadius() { return 6f; } + + public boolean isAlive() { return life > 0f; } + + public void render(ShapeRenderer sr) { + float alpha = life / maxLife; + sr.setColor(color.r, color.g, color.b, alpha * color.a); + // 使用多段线模拟圆环(填充模式下画薄圆) + int segments = 26; + float lineWidth = 2f; + float step = (float)(Math.PI * 2 / segments); + for (int i = 0; i < segments; i++) { + float a1 = i * step; + float a2 = (i + 1) * step; + float x1 = x + (float)Math.cos(a1) * radius; + float y1 = y + (float)Math.sin(a1) * radius; + float x2 = x + (float)Math.cos(a2) * radius; + float y2 = y + (float)Math.sin(a2) * radius; + sr.rectLine(x1, y1, x2, y2, lineWidth); + } + } +} diff --git a/src/main/java/uno/mloluyu/characters/effects/SparkParticle.java b/src/main/java/uno/mloluyu/characters/effects/SparkParticle.java new file mode 100644 index 0000000..9fe7709 --- /dev/null +++ b/src/main/java/uno/mloluyu/characters/effects/SparkParticle.java @@ -0,0 +1,38 @@ +package uno.mloluyu.characters.effects; + +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; + +public class SparkParticle { + private float x, y; + private float vx, vy; + private float life; + private float maxLife; + private float length; + private Color color; + + public SparkParticle(float x, float y, float speed, float angle, float life, float length, Color base) { + this.x = x; this.y = y; + this.vx = (float)Math.cos(angle) * speed; + this.vy = (float)Math.sin(angle) * speed; + this.life = life; this.maxLife = life; this.length = length; this.color = new Color(base); + } + + public void update(float dt) { + life -= dt; + x += vx * dt; + y += vy * dt; + vy -= 900f * dt; // 轻微重力 + } + + public boolean isAlive() { return life > 0f; } + + public void render(ShapeRenderer sr) { + float t = life / maxLife; + float a = t; // 线性淡出 + sr.setColor(color.r, color.g, color.b, a * color.a); + float nx = x - vx * 0.015f; // 逆向一点形成拖尾 + float ny = y - vy * 0.015f; + sr.rectLine(x, y, nx, ny, Math.max(1.2f, length * t)); + } +} diff --git a/src/main/java/uno/mloluyu/characters/effects/Untitled-1.html b/src/main/java/uno/mloluyu/characters/effects/Untitled-1.html new file mode 100644 index 0000000..aa7c054 --- /dev/null +++ b/src/main/java/uno/mloluyu/characters/effects/Untitled-1.html @@ -0,0 +1,19 @@ + + + + + + + + + +
+ +

+ +

+ +
+ + + \ No newline at end of file diff --git a/src/main/java/uno/mloluyu/desktop/GameScreen.java b/src/main/java/uno/mloluyu/desktop/GameScreen.java index 417a340..d68394a 100644 --- a/src/main/java/uno/mloluyu/desktop/GameScreen.java +++ b/src/main/java/uno/mloluyu/desktop/GameScreen.java @@ -23,8 +23,14 @@ import uno.mloluyu.perf.PerfMetrics; import uno.mloluyu.util.TimeStepLimiter; import uno.mloluyu.util.GameConstants; import uno.mloluyu.versatile.FighterController; +import uno.mloluyu.characters.ai.SimpleFighterAI; +import uno.mloluyu.characters.effects.AttackEffect; +import uno.mloluyu.characters.effects.HitParticle; +import uno.mloluyu.characters.effects.RadialRing; +import uno.mloluyu.characters.effects.SparkParticle; public class GameScreen extends ScreenAdapter { + private final MainGame game; // 保存引用以便切换屏幕(重开/返回主界面) private final SimpleFighter player; private final FighterController controller; private final Map otherPlayers = new HashMap<>(); @@ -65,8 +71,27 @@ public class GameScreen extends ScreenAdapter { private static final boolean SHOW_GROUND_STRIP = true; private static final float GROUND_STRIP_HEIGHT = 14f; // 条带厚度 private static final float GROUND_STRIP_ALPHA = 0.20f; // 透明度 (0~1) + // AI 控制(单人模式自动生成一个 AI 对手) + private SimpleFighterAI aiController; + private SimpleFighter aiEnemy; + private final java.util.List attackEffects = new java.util.ArrayList<>(); + private final java.util.List hitParticles = new java.util.ArrayList<>(); + private final java.util.List radialRings = new java.util.ArrayList<>(); + private final java.util.List sparkParticles = new java.util.ArrayList<>(); + + // ========== Game Over 相关 ========== + private boolean gameOver = false; + private String winnerName = ""; + private com.badlogic.gdx.graphics.g2d.BitmapFont uiFont; + // 按钮区域(屏幕 UI 坐标) + private final int GO_PANEL_W = 640; + private final int GO_PANEL_H = 360; + private final int GO_BUTTON_W = 280; + private final int GO_BUTTON_H = 70; + // 运行时计算位置(在渲染里根据当前窗口尺寸居中) public GameScreen(MainGame game, SimpleFighter player) { + this.game = game; this.player = player; this.controller = new FighterController(player); } @@ -92,6 +117,20 @@ public class GameScreen extends ScreenAdapter { background = new Texture(Gdx.files.internal("innerbg.png")); worldWidth = background.getWidth() * BACKGROUND_SCALE; worldHeight = background.getHeight() * BACKGROUND_SCALE; + // 如果尚未联网,创建一个 AI 敌人 + if (!NetworkManager.getInstance().isConnected()) { + aiEnemy = new SimpleFighter("AI"); + aiEnemy.setPosition(player.getHitbox().x + 400f, GameConstants.GROUND_Y); + aiController = new SimpleFighterAI(aiEnemy, player); + otherPlayers.put("AI_LOCAL", aiEnemy); // 重用现有渲染/碰撞逻辑 + } + // 加载 UI 字体(含中文) + try { + uiFont = uno.mloluyu.util.Font.loadChineseFont(); + uiFont.getData().setScale(1.4f); + } catch (Exception e) { + // 忽略,fallback 在 Font 中已处理 + } } @Override @@ -101,10 +140,23 @@ public class GameScreen extends ScreenAdapter { PerfMetrics.frame(delta); // (原先背景在摄像机更新前绘制,会出现一帧“滞后”错位;已移到摄像机更新后) - // 输入 / 逻辑 - player.update(delta); - controller.update(delta); - if (NetworkManager.getInstance().isConnected()) { + // ================= 主更新(若未 Game Over)================= + if (!gameOver) { + player.update(delta); + controller.update(delta); + if (aiController != null) { + aiController.update(delta); + aiEnemy.update(delta); + } + // 自动朝向(本地玩家朝向最近的一个对手) + autoFace(player, otherPlayers); + // 远程/AI 对手也朝向本地玩家(不在攻击主动阶段时翻转,防止攻击盒跳变) + for (SimpleFighter op : otherPlayers.values()) { + autoFace(op, java.util.Collections.singletonMap("LOCAL", player)); + } + } + boolean connected = NetworkManager.getInstance().isConnected(); + if (!gameOver && connected) { NetworkManager.getInstance().sendPosition(player.getHitbox().x, player.getHitbox().y); Map positions = NetworkManager.getInstance().getPlayerPositions(); if (positions != null) { @@ -245,10 +297,108 @@ public class GameScreen extends ScreenAdapter { } respawns.clear(); } + } else if (!gameOver) { + // 离线模式:本地直接做攻击命中判定(本地玩家 -> AI,AI -> 本地) + if (player.isAttacking() && player.canDealDamage()) { + for (SimpleFighter op : otherPlayers.values()) { + if (op.isAlive() && player.getAttackbox().overlaps(op.getHitbox())) { + int dmg = player.getDamageForAttack(player.getLastAttackType()); + op.takeHit(dmg, player.isFacingRight() ? 1 : -1); + spawnHitParticles(op, player.getLastAttackType(), player.isFacingRight()); + player.markDamageApplied(); + } + } + } + for (SimpleFighter op : otherPlayers.values()) { + if (op.isAttacking() && op.canDealDamage() && player.isAlive() + && op.getAttackbox().overlaps(player.getHitbox())) { + int dmg = op.getDamageForAttack(op.getLastAttackType()); + player.takeHit(dmg, op.isFacingRight() ? 1 : -1); + spawnHitParticles(player, op.getLastAttackType(), op.isFacingRight()); + op.markDamageApplied(); + } + } + } + + if (!gameOver) { + // 监测攻击进入 ACTIVE 阶段的瞬间生成一次特效 + if (player.isInActivePhase() && player.canDealDamage()) { + attackEffects.add(new AttackEffect(new Rectangle(player.getAttackbox()), 0.22f, + new Color(0.3f, 0.6f, 1f, 0.55f))); + spawnActivationFX(player, true); + } + for (SimpleFighter remote : otherPlayers.values()) { + if (remote.isInActivePhase() && remote.canDealDamage()) { + attackEffects.add(new AttackEffect(new Rectangle(remote.getAttackbox()), 0.22f, + new Color(1f, 0.6f, 0.2f, 0.50f))); + spawnActivationFX(remote, false); + } + } + // 更新矩形攻击特效寿命 + if (!attackEffects.isEmpty()) { + for (int i = attackEffects.size() - 1; i >= 0; i--) { + AttackEffect ef = attackEffects.get(i); + ef.update(delta); + if (!ef.isAlive()) + attackEffects.remove(i); + } + } + // 更新粒子 + if (!hitParticles.isEmpty()) { + for (int i = hitParticles.size() - 1; i >= 0; i--) { + HitParticle p = hitParticles.get(i); + p.update(delta); + if (!p.isAlive()) + hitParticles.remove(i); + } + } + // 更新环形与火花 + for (int i = radialRings.size() - 1; i >= 0; i--) { + RadialRing r = radialRings.get(i); + r.update(delta); + if (!r.isAlive()) radialRings.remove(i); + } + for (int i = sparkParticles.size() - 1; i >= 0; i--) { + SparkParticle sp = sparkParticles.get(i); + sp.update(delta); + if (!sp.isAlive()) sparkParticles.remove(i); + } } // 本地与远程玩家之间简单碰撞(防穿人)——放在摄像机更新前 - resolvePlayerCollisions(); + if (!gameOver) { + resolvePlayerCollisions(); + clampToWorld(player); + for (SimpleFighter op : otherPlayers.values()) clampToWorld(op); + } + + // ================== Game Over 判定 ================== + if (!gameOver) { + boolean playerDead = !player.isAlive(); + boolean allOthersDead = true; + for (SimpleFighter op : otherPlayers.values()) { + if (op.isAlive()) { + allOthersDead = false; // 有至少一个活着 + break; + } + } + if (playerDead || (!otherPlayers.isEmpty() && allOthersDead)) { + gameOver = true; + if (playerDead) { + // 找第一个存活的对手 + String wn = "对手"; + for (SimpleFighter op : otherPlayers.values()) { + if (op.isAlive()) { + wn = op.getName(); + break; + } + } + winnerName = wn; + } else { + winnerName = player.getName(); + } + } + } // 摄像机跟随 // 摄像头跟随:若有一个远程玩家,则居中于本地和远程玩家中点 @@ -327,23 +477,69 @@ public class GameScreen extends ScreenAdapter { shapeRenderer.setColor(0.9f, 0.9f, 0.9f, GROUND_STRIP_ALPHA); // 近白轻薄层 shapeRenderer.rect(0f, y, worldWidth, GROUND_STRIP_HEIGHT); } + // 先绘制攻击特效(填充) + for (AttackEffect ef : attackEffects) { + ef.render(shapeRenderer); + } + // 再绘制命中粒子 + for (HitParticle hp : hitParticles) { + hp.render(shapeRenderer); + } + for (RadialRing rr : radialRings) rr.render(shapeRenderer); + for (SparkParticle sp : sparkParticles) sp.render(shapeRenderer); drawHitbox(player, player.getDebugColor()); boolean showPlayerAttack = player.isAttacking() || (player.getCurrentAction() == Action.ATTACK && player.getAttackTimer() > 0); - if (showPlayerAttack) - // 攻击框颜色改为蓝色(原红色) - drawAttackBox(player, 0.0f, 0.45f, 1f, 0.35f); + if (showPlayerAttack) { + // 分阶段颜色:startup=淡青, active=亮蓝, recovery=灰蓝 + if (player.isInStartupPhase()) { + drawAttackBox(player, 0.3f, 0.8f, 1f, 0.18f); + } else if (player.isInActivePhase()) { + drawAttackBox(player, 0.0f, 0.6f, 1f, 0.45f); + } else if (player.isInRecoveryPhase()) { + drawAttackBox(player, 0.2f, 0.45f, 0.8f, 0.25f); + } else { + drawAttackBox(player, 0.0f, 0.45f, 1f, 0.35f); + } + } + // 防御白线(填充 pass 里画一条粗线模拟盾) + if (player.isDefending()) { + float lineX = player.isFacingRight() ? player.getHitbox().x + player.getHitbox().width + 4f + : player.getHitbox().x - 6f; + shapeRenderer.setColor(1f, 1f, 1f, 0.85f); + shapeRenderer.rect(lineX, player.getHitbox().y + 18f, 4f * (player.isFacingRight() ? 1f : -1f), + player.getHitbox().height - 36f); + } for (SimpleFighter remote : otherPlayers.values()) { drawHitbox(remote, remote.getDebugColor()); - if (remote.isAttacking()) - drawAttackBox(remote, 0.0f, 0.45f, 1f, 0.25f); + if (remote.isAttacking()) { + if (remote.isInStartupPhase()) { + drawAttackBox(remote, 1f, 0.75f, 0.25f, 0.18f); + } else if (remote.isInActivePhase()) { + drawAttackBox(remote, 1f, 0.55f, 0.10f, 0.45f); + } else if (remote.isInRecoveryPhase()) { + drawAttackBox(remote, 0.8f, 0.4f, 0.15f, 0.25f); + } else { + drawAttackBox(remote, 1f, 0.6f, 0.2f, 0.30f); + } + } + if (remote.isDefending()) { + float lineX = remote.isFacingRight() ? remote.getHitbox().x + remote.getHitbox().width + 4f + : remote.getHitbox().x - 6f; + shapeRenderer.setColor(1f, 1f, 1f, 0.75f); + shapeRenderer.rect(lineX, remote.getHitbox().y + 18f, 4f * (remote.isFacingRight() ? 1f : -1f), + remote.getHitbox().height - 36f); + } } shapeRenderer.end(); // -------- Sprite pass -------- batch.begin(); + // 角色精灵(当前占位),未来可在这里设置 batch.setColor(alpha) 来影响纹理 + batch.setColor(1f, 1f, 1f, player.getRenderAlpha()); player.renderSprite(batch); + batch.setColor(1f, 1f, 1f, 1f); batch.end(); // -------- Debug line pass -------- @@ -352,6 +548,10 @@ public class GameScreen extends ScreenAdapter { shapeRenderer.setColor(0.65f, 0.65f, 0.65f, 1f); // 浅灰色参考线 shapeRenderer.line(0f, GameConstants.GROUND_Y, worldWidth, GameConstants.GROUND_Y); } + // 攻击特效描边 + for (AttackEffect ef : attackEffects) { + ef.renderOutline(shapeRenderer); + } player.renderDebug(shapeRenderer); for (SimpleFighter remote : otherPlayers.values()) remote.renderDebug(shapeRenderer); @@ -364,31 +564,109 @@ public class GameScreen extends ScreenAdapter { shapeRenderer.setProjectionMatrix(uiCam.combined); shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); // 绘制本地玩家血条(左侧)和所有远程玩家血条(右侧依次排列) - float barWidth = 200f, barHeight = 10f, padding = 10f; + float barWidth = 320f, barHeight = 22f, padding = 18f; // 放大并下移 float screenW = Gdx.graphics.getWidth(), screenH = Gdx.graphics.getHeight(); + float baseY = screenH - padding - barHeight - 20f; // 下移 20 避免贴顶 // 本地玩家血条 - shapeRenderer.setColor(Color.DARK_GRAY); - shapeRenderer.rect(padding, screenH - padding - barHeight, barWidth, barHeight); + shapeRenderer.setColor(0.15f, 0.15f, 0.15f, 0.9f); + shapeRenderer.rect(padding, baseY, barWidth, barHeight); shapeRenderer.setColor(Color.RED); - shapeRenderer.rect(padding, screenH - padding - barHeight, - barWidth * (player.getHealth() / 100f), barHeight); + shapeRenderer.rect(padding, baseY, + barWidth * (player.getHealth() / (float) player.getMaxHealth()), barHeight); // 远程玩家血条 int idx = 0; for (SimpleFighter remote : otherPlayers.values()) { float x = screenW - padding - barWidth - idx * (barWidth + padding); - shapeRenderer.setColor(Color.DARK_GRAY); - shapeRenderer.rect(x, screenH - padding - barHeight, barWidth, barHeight); + shapeRenderer.setColor(0.15f, 0.15f, 0.15f, 0.9f); + shapeRenderer.rect(x, baseY, barWidth, barHeight); shapeRenderer.setColor(Color.GREEN); - shapeRenderer.rect(x, screenH - padding - barHeight, - barWidth * (remote.getHealth() / 100f), barHeight); + float ratio = remote.getHealth() / (float) remote.getMaxHealth(); + shapeRenderer.rect(x, baseY, + barWidth * ratio, barHeight); idx++; } shapeRenderer.end(); + + // ================== Game Over 覆盖层 ================== + if (gameOver) { + // 使用同一 UI 摄像机 + shapeRenderer.setProjectionMatrix(uiCam.combined); + batch.setProjectionMatrix(uiCam.combined); + float screenW2 = screenW; + float screenH2 = screenH; + float panelX = (screenW2 - GO_PANEL_W) / 2f; + float panelY = (screenH2 - GO_PANEL_H) / 2f; + float btnRestartX = panelX + (GO_PANEL_W - GO_BUTTON_W) / 2f; + float btnRestartY = panelY + 110f; + float btnMenuX = btnRestartX; + float btnMenuY = panelY + 25f; + + // 半透明遮罩 + 面板 + 按钮 + shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); + shapeRenderer.setColor(0, 0, 0, 0.55f); + shapeRenderer.rect(0, 0, screenW2, screenH2); + shapeRenderer.setColor(0.12f, 0.12f, 0.12f, 0.92f); + shapeRenderer.rect(panelX, panelY, GO_PANEL_W, GO_PANEL_H); + // 按钮背景 + int mx = Gdx.input.getX(); + int my = Gdx.graphics.getHeight() - Gdx.input.getY(); + boolean hoverRestart = mx >= btnRestartX && mx <= btnRestartX + GO_BUTTON_W && my >= btnRestartY + && my <= btnRestartY + GO_BUTTON_H; + boolean hoverMenu = mx >= btnMenuX && mx <= btnMenuX + GO_BUTTON_W && my >= btnMenuY + && my <= btnMenuY + GO_BUTTON_H; + shapeRenderer.setColor( + hoverRestart ? new Color(0.25f, 0.5f, 0.25f, 0.95f) : new Color(0.18f, 0.38f, 0.18f, 0.9f)); + shapeRenderer.rect(btnRestartX, btnRestartY, GO_BUTTON_W, GO_BUTTON_H); + shapeRenderer + .setColor(hoverMenu ? new Color(0.35f, 0.35f, 0.55f, 0.95f) : new Color(0.25f, 0.25f, 0.45f, 0.9f)); + shapeRenderer.rect(btnMenuX, btnMenuY, GO_BUTTON_W, GO_BUTTON_H); + shapeRenderer.end(); + + // 文本 + batch.begin(); + if (uiFont != null) { + uiFont.draw(batch, "游戏结束", panelX + 180f, panelY + GO_PANEL_H - 60f); + uiFont.draw(batch, "胜者: " + winnerName, panelX + 180f, panelY + GO_PANEL_H - 120f); + uiFont.draw(batch, "重新开始", btnRestartX + 40f, btnRestartY + 48f); + uiFont.draw(batch, "返回主界面", btnMenuX + 20f, btnMenuY + 48f); + } + batch.end(); + + // 按钮交互(鼠标) + if (Gdx.input.justTouched()) { + int mx2 = Gdx.input.getX(); + int my2 = Gdx.graphics.getHeight() - Gdx.input.getY(); + if (mx2 >= btnRestartX && mx2 <= btnRestartX + GO_BUTTON_W && my2 >= btnRestartY + && my2 <= btnRestartY + GO_BUTTON_H) { + restartGame(); + return; // 避免继续处理后续逻辑 + } else if (mx2 >= btnMenuX && mx2 <= btnMenuX + GO_BUTTON_W && my2 >= btnMenuY + && my2 <= btnMenuY + GO_BUTTON_H) { + returnToMenu(); + return; + } + } + // 键盘快捷键:R 重新开始 / M 或 ESC 返回菜单 + if (Gdx.input.isKeyJustPressed(com.badlogic.gdx.Input.Keys.R)) { + restartGame(); + } else if (Gdx.input.isKeyJustPressed(com.badlogic.gdx.Input.Keys.M) + || Gdx.input.isKeyJustPressed(com.badlogic.gdx.Input.Keys.ESCAPE)) { + returnToMenu(); + } + } // 原定期性能日志已移除(日志系统删除) } private void drawHitbox(SimpleFighter fighter, Color color) { - shapeRenderer.setColor(color); + float a = fighter.getRenderAlpha(); + if (a <= 0f) + return; + // 阵营基色:本地玩家=青蓝(#26BFF2),敌方=橙红(#F35A26);半透明以免过亮 + boolean isLocal = fighter == player; + float br = isLocal ? 0.15f : 0.95f; + float bg = isLocal ? 0.75f : 0.35f; + float bb = isLocal ? 0.95f : 0.15f; + shapeRenderer.setColor(br, bg, bb, a * 0.85f); Rectangle r = fighter.getHitbox(); float scale = GameConstants.DEBUG_BOX_SCALE; if (scale <= 1.0001f && scale >= 0.9999f) { // 视为 1 @@ -407,7 +685,19 @@ public class GameScreen extends ScreenAdapter { } private void drawAttackBox(SimpleFighter fighter, float r, float g, float b, float a) { - shapeRenderer.setColor(r, g, b, a); + float alpha = fighter.getRenderAlpha(); + if (alpha <= 0f) + return; + boolean isLocal = fighter == player; + // 阵营色调 + float teamR = isLocal ? 0.2f : 0.9f; + float teamG = isLocal ? 0.9f : 0.3f; + float teamB = isLocal ? 1.0f : 0.2f; + // 将阶段色与阵营色混合:阶段色 55%,阵营色 45% + float cr = r * 0.55f + teamR * 0.45f; + float cg = g * 0.55f + teamG * 0.45f; + float cb = b * 0.55f + teamB * 0.45f; + shapeRenderer.setColor(cr, cg, cb, a * alpha); Rectangle box = fighter.getAttackbox(); float scale = GameConstants.DEBUG_BOX_SCALE; if (scale <= 1.0001f && scale >= 0.9999f) { @@ -442,6 +732,8 @@ public class GameScreen extends ScreenAdapter { shapeRenderer.dispose(); if (background != null) background.dispose(); + if (uiFont != null) + uiFont.dispose(); NetworkManager.getInstance().disconnect(); } @@ -477,4 +769,121 @@ public class GameScreen extends ScreenAdapter { } } } + + /** 限制角色 hitbox 不超出世界边界。 */ + private void clampToWorld(SimpleFighter f) { + if (f == null) return; + Rectangle hb = f.getHitbox(); + if (hb.x < 0) hb.x = 0; + if (hb.x + hb.width > worldWidth) hb.x = worldWidth - hb.width; + // 垂直:地面以上,顶部不超背景 + if (hb.y < GameConstants.GROUND_Y) hb.y = GameConstants.GROUND_Y; + if (hb.y + hb.height > worldHeight) hb.y = worldHeight - hb.height; + } + + private void restartGame() { + // 重新实例化一个同类型的玩家 + SimpleFighter newPlayer; + if (player instanceof AdvancedFighter) { + newPlayer = new AdvancedFighter(player.getName()); + } else { + newPlayer = new SimpleFighter(player.getName()); + } + game.setScreen(new GameScreen(game, newPlayer)); + } + + private void returnToMenu() { + game.setScreen(new MainMenuScreen(game)); + } + + /** + * 让 fighter 朝向 map 中最近的一个对手(按 X 中心差)。 + * 约束:1) 若自身正在攻击 ACTIVE 阶段则不翻转,避免攻击盒闪跳。 + */ + private void autoFace(SimpleFighter self, Map candidates) { + if (self == null || candidates == null || candidates.isEmpty()) + return; + // 若正在攻击:仅允许在 STARTUP 之前或 RECOVERY 后翻转,这里简单:只要在攻击整体期间就不改 + if (self.isAttacking()) + return; + float selfCenter = self.getHitbox().x + self.getHitbox().width * 0.5f; + SimpleFighter nearest = null; + float bestDist = Float.MAX_VALUE; + for (SimpleFighter f : candidates.values()) { + if (f == null || f == self) + continue; + float center = f.getHitbox().x + f.getHitbox().width * 0.5f; + float d = Math.abs(center - selfCenter); + if (d < bestDist) { + bestDist = d; + nearest = f; + } + } + if (nearest != null) { + float targetCenter = nearest.getHitbox().x + nearest.getHitbox().width * 0.5f; + boolean shouldFaceRight = targetCenter >= selfCenter; + self.setFacingRight(shouldFaceRight); + } + } + + /** 根据命中位置和攻击类型生成粒子喷射。 */ + private void spawnHitParticles(SimpleFighter target, String attackType, boolean attackerFacingRight) { + if (target == null) + return; + // 命中点设为目标上半身区域 + float cx = target.getHitbox().x + target.getHitbox().width * 0.5f; + float cy = target.getHitbox().y + target.getHitbox().height * 0.6f; + int count; + Color base; + switch (attackType) { + case "heavy": + count = 28; + base = new Color(1f, 0.55f, 0.20f, 1f); + break; + case "special": + count = 40; + base = new Color(0.9f, 0.25f, 0.95f, 1f); + break; + case "light": + default: + count = 18; + base = new Color(1f, 0.85f, 0.25f, 1f); + break; + } + for (int i = 0; i < count; i++) { + hitParticles.add(new HitParticle(cx, cy, base, + 260f, 520f, // 速度范围 + 0.25f, 0.55f, // 寿命范围 + 4f, 10f // 尺寸范围 + )); + } + // 额外冲击条纹(用 AttackEffect 再叠一层细长)可选:略 + } + + /** 攻击进入 ACTIVE 时的环形+火花特效。 */ + private void spawnActivationFX(SimpleFighter fighter, boolean isLocal) { + Rectangle ab = fighter.getAttackbox(); + float cx = ab.x + ab.width * 0.5f; + float cy = ab.y + ab.height * 0.5f; + // 环颜色区分阵营 + Color ringColor = isLocal ? new Color(0.35f, 0.8f, 1f, 0.9f) : new Color(1f, 0.55f, 0.2f, 0.85f); + radialRings.add(new RadialRing(cx, cy, 6f, Math.max(38f, ab.width * 0.55f), 0.28f, ringColor)); + // 火花数量按攻击盒面积估计 + int sparkCount = 14 + (int) (ab.width * ab.height / 800f); + Color sparkBase = isLocal ? new Color(0.55f, 0.9f, 1f, 1f) : new Color(1f, 0.7f, 0.25f, 1f); + for (int i = 0; i < sparkCount; i++) { + float ang = (float) (Math.random() * Math.PI * 2); + float speed = 420f + (float) Math.random() * 380f; + float life = 0.18f + (float) Math.random() * 0.16f; + float len = 6f + (float) Math.random() * 10f; + // 色彩轻度扰动 + Color c = new Color( + clamp01(sparkBase.r + (float) (Math.random() * 0.15 - 0.075)), + clamp01(sparkBase.g + (float) (Math.random() * 0.15 - 0.075)), + clamp01(sparkBase.b + (float) (Math.random() * 0.15 - 0.075)), 1f); + sparkParticles.add(new SparkParticle(cx, cy, speed, ang, life, len, c)); + } + } + + private float clamp01(float v) { return v < 0f ? 0f : (v > 1f ? 1f : v); } } diff --git a/src/main/java/uno/mloluyu/desktop/StartScreen.java b/src/main/java/uno/mloluyu/desktop/StartScreen.java index 9d278ef..4e04c91 100644 --- a/src/main/java/uno/mloluyu/desktop/StartScreen.java +++ b/src/main/java/uno/mloluyu/desktop/StartScreen.java @@ -34,7 +34,7 @@ public class StartScreen extends BaseScreen { public void render(float delta) { deltaSum += delta; - if (deltaSum >= .01F) { + if (deltaSum >= 3.0F) { if (mainGame != null) { mainGame.showGameScreen(); return; diff --git a/src/main/java/uno/mloluyu/util/Font.java b/src/main/java/uno/mloluyu/util/Font.java index e7c1737..06e7c3d 100644 --- a/src/main/java/uno/mloluyu/util/Font.java +++ b/src/main/java/uno/mloluyu/util/Font.java @@ -16,7 +16,7 @@ public class Font { parameter.color = Color.WHITE; parameter.borderWidth = 1; parameter.borderColor = Color.DARK_GRAY; - parameter.characters = "返回主菜单确认角色选择了角色人游戏加入联机模式 - 等待其他玩家连接...房间创建房间联机设置开始游戏设置联网中国abcdefghijklmnopqrstuvw暂定xyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + parameter.characters = "返回主菜单确退出认角色选择了角色人游戏加入联机模式 - 等待其他玩家连接...房间创建房间联机设置开始游戏设置联网中国重新开始胜者游戏结束返回主界面abcdefghijklmnopqrstuvw暂定xyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; return generator.generateFont(parameter); } catch (Exception e) { diff --git a/src/main/java/uno/mloluyu/util/GameConstants.java b/src/main/java/uno/mloluyu/util/GameConstants.java index 3a17828..f815050 100644 --- a/src/main/java/uno/mloluyu/util/GameConstants.java +++ b/src/main/java/uno/mloluyu/util/GameConstants.java @@ -19,6 +19,14 @@ public final class GameConstants { public static final float JUMP_SPEED = 1500f; public static final float GRAVITY = 3200f; // 加大重力让落地更快 + // ====== 新增:移动手感调优参数 ====== + // 水平加速度(越大越快贴近目标速度) + public static final float MOVE_ACCEL = 6000f; + // 水平减速(松开方向键时朝 0 速度衰减) + public static final float MOVE_DECEL = 8000f; + // 空中加速度系数(降低空中水平掌控) + public static final float AIR_ACCEL_FACTOR = 0.6f; + // 调试命中盒渲染缩放(=1 表示真实大小;之前放大 3.6 现在回归可控) // 调试盒缩放:1 = 实际大小;若想放大显示结构,可调大。 public static final float DEBUG_BOX_SCALE = 1.0f; diff --git a/target/classes/uno/mloluyu/characters/Action.class b/target/classes/uno/mloluyu/characters/Action.class index 7ea2ac597293f5e8279e588d4dbd9193e6232641..cfc786f1f977475b3ba5ff91201f4703cef6f358 100644 GIT binary patch literal 1275 zcmaizZBr6a6vzKp9(I8>iA)nUO-%t!A|HByOcI<(z-AVi*{L_{w&^+xGz;qt-=dFF z_(G>9r`JuNsp;GcDQ^m1aPIHkbN=@{-2M6c>m`6JUP>5Zn0D)pWX*2aZre>7$GW2% zEz@ZxvqsBm)FpTsZk*_+deYYGN6CEMtuc5DxniDSrug63G&#OLD7_(5+OLwoKU=9} zclKzJ%kSpPIR?+GLWPcV`7A*wUp^=;RI|l{yvi{9cA&bPF>I@DwYEqo7O#@fPUF2P z!xsd@sDj%Vqq{Oam$6v!x(>DFSoNcHAzlrT?;Qm`_+>~OCKX5=WDa)~$Q%M3?kNax z2y$3Z5abZzu%sZwLE(^4puo>pD+-2jgJGm-)y=Y7J2ah&erTHvkz&Kp?W*oroW*7k z9*j~Atz)Z6X`kx0Ytmva79Z4!Al9)dVS^#uS7E!^GHVJR;|W7RcO1QKG(NT|z5YJz zAD);-D_!Vo&EGBR4TB`o*#E$=)*seuUwpubcu5%rPw|{#qd$Jf)|<_A-=$ZA*9GvW zMo%cHHeAOrcP-wwQ1?}?axbb%wT|j~%XR1^)hEUyGXqlFN^hrVLLT}OcwJ>eP)iW%Ap`3>Bfd1zwU!L_a)g7fumZ6dv`$H|aVaKGwmqw&zJ)Y8hTc$uoI@wUy6w p(oL_c#;#Hb&J6ID@(+?bCDmJm=nfdiMRt=WhTsJd+R*FyXsis^)l(|JF~LM@HQ+ zn^wJ%(#)pqxe*8mst6%WwU{pz1WcCxJCR`{vWf^Fd9k;(%ZNS|DkrvfDg{PdQ8B=X zuvRW>xtEN(sv^dzd||V&ooCcF6+?^?pBKvvUso~0W%31$H;k#cfpG!SOhqg06?6ep zuX^lH!A(p`7*{ccTLMC+#VqD%)4v-E zu3w{NPYlPmcHRhBNpwx;9HY_5bP;;9Zo7w>?iH8-*H5aL#{xN#wOzZpCSbT*sxw(k zR%C<}vLGoVB14riAR{JYNX7`GS5!Q}Dl>v_sUaYqNcOUV7X8&7%y|do!a&J(t!=-y zZ`I4jzC+B?Uv`u1VX=T%$ukY7V$^M>(vb?fMvW9>myHn+-LjfT-oY;AuV%3TQr?qr5mi{kXi0XYB7$@W(oyLvgsRwr zs8@q6NP0EYB8#ix7W(z7)IwCR$}J4))hJQJ`sI_$$YG-+`@SPcXZI2}Ow-5pni6G@UeYbrlyh z4n_tS2Y-P-#fS%S@xA1od(S!dJt{rm!89g8X?fkJRDGVyY&((<-0E6u73 z**C4EfV^>5^)!SK)uA99yoryPh9pK*3=3Gnl4L15Mlt3euZB%bs7U$uB~p`^@;`Uv zj6jyzrdh6^Hcq_F`r%Q_YidYiM#n7Xf_23;;038f$J`8?(T delta 390 zcmXYs%`OB%5Xb-3GqXKAdUl7wEY{apJM_%DI0!d!lHe|JTy7f&58xSA$ALt`#d%$p zI0#n}kKjqfs%E>BuBu=C>!Sz$z)#+Po?ifLV=aJyBjGA|D0R2eD1eW$M4&JNMM%w^ zNKJ<}D-~2FB85?m5j5lELX^x0h31R)+;Kv~GLtxA5Fo~+LV}t(5*sCnX+k!v=(Yk$ zaCc7I$KB4SPY`D(gr>O_HLi`!rD&VXIXs`@#q1G$c{LDbI9g{*Y(4!5diYD%`L(}b z2$zMk?5Ted<}lAu84Fk(Hn?G>%WPHmA@_^?9$wKa@+XAX*3)l@uMq0j2=PHH?_(nG zvD!i1RNZXX_SRgV@~jj~%()X9SY~UzCNiGmFKKst^|NQ(bfFiz7kPujiJipLz zeK$Ie3f7?+m{w>9%|g)%9p9@5rq^`jzfJQv&GMB9P4G zcLY);|0`R;u)vjWYZWhQ#OE0mn7y=#EL2=kF^;PO>E#adM6TUhEJDdOn@ughlYzjb ziUFiE7{N6a*D=lV>*Z=i;6|UL%9Q6+JRhfQ)^;i~@PdjPabRP6^MMS!sNy9VNEhq% zV(GpNy{zI^94c229yjzSMcN>Uj26)Y!L!y1DOi+T&HNIK9Te-cS*|iO<<$IhaVOkbT z_(1mgp}=%!*fD9zcU@YZ*MSos!abA~lmv#m)}pOcRIp0@k0KVl+v}B1y=QjNbF1j( z)T6*}kSFx1(_FtH5NMg6K(XI6FBe?PKg?niH3eJrbN5``lT*_N_?TDCZXAWjl%FHX z^-9Q)CbiL3)TI#WfgRR@vi-=6+)x3{(xVr_L)gZrDhxa%spWg2>3BTx{eWTo!FS1@7{y;0qpng#sVnbtTSFB16pRfl zoZyWvr4${MUZ$vR0N%peTzxBFLyT|$*x~>r;ZzF~3s10QES}=-30BTfOk%gomW@$Y zF^P$oajKn#k1)+_=3@=(LIclO%q__Tm|K6ZoE43CP2@JH7S{ O-aS^32mCC?fBrACA;M<> literal 1854 zcmah~U31$+6g_J@QS2y98j|z_O3O!EJ85GIg$5K1s_lH$i3@TaoB)F&)I=Rw%E%H- z{sR0Jc)&a)p##HnU;0CMhDV08vNLvuHul3xd-mLO&%L`^Kl}H$KLF_XI)em~3Q{VD zFf1_f#Qe_8yQa6BukJjttx#Zi(ea$HAdt-F>S>H1tstXf6so{%$}lGl(+WG zz_da;XytV)bbPNCm|n|~Z|mm1fTC9_)y;BAV7wBii9*NCb4gQhPT+hGTQOUEh8<=w zf%6I`RlI_!6K`>l9t7q=i{8vu#c9#x_3U;>v(LJg>q{ePS_Wg7k(FK$xRmW%E&8s@ zV(C=N)kkp&mleFK;x$|m80-0p%Si4=Ot{bu@6Y#A2mPcBuHu@4H&ncdw*;np>OB*z zY{YKvhX-r|8m{l={TNJf?FEkyG z`qMA)pW9L}e`+JjUesjK3f>X8a^_xVa2xN+*1jh&)vsN2%~p$DO(T!@ReXSZ0;$zf zr7Uo@a;BsvLq1gTQ5>>ft(PURsN&-oSbMboPy(N*_*4SJdab4xA4urFiee0v%1h;q zl7z}CmL!y1S*^+Wii*`(rc~BT8J_9~Dk@kP7&2Yg|6bsJc7VI>0qeQCK-zG2Ju{2~ zTi~0%^TwVo4hZjKa~B7(3tB;AUyJ^?%rstcJbNQ*?$|-i+;NFaR(#8J>t^7{c^6ED zdk#;+t+S1s`iNzY$ARBuA48w9*9J9#M9cI9^g-P`+k}?e5=ewTkMN@9cJHH%;YWdG zFFCTpi!Zox=H<7AJKWp^FFS$D^3vjSgR=yxNb#Mw9><47@_Y(Dhh`5Ueu*icag@t) z{G6i}en2^<%u9#Gkl1cZ^&DKQStSp3@62(cNMOwh!AU1&eul zmcM_V;&x*)e~3H3LTTgf#PILPH!gLn$Z|)qhK_K+t7^$86~4J(#EoJgf)^z zy6n6EW0OaAm#3ZZh*Fh$R9%i$8A;wkN3WoC^*TH<$RmTNqnQ{) E0spHNQvd(} delta 251 zcmey#{F7Pg)W2Q(7#J8F8N|34m>8JZ8CZB2SQ*$D8B`_;h))dG0}FHTFmQsz*b+-h z5|gvp8Mr6%YO*sjusG+Zq)wbvK3Rs*s2-#r1eh2YK_&o69w5&S$OnnDX=!g~VB83n z=LM1w)oehO>(ah3e;07ATi^DKss9_>N IqnQ{)0aEc5=l}o! diff --git a/target/classes/uno/mloluyu/characters/FighterAnimationManager.class b/target/classes/uno/mloluyu/characters/FighterAnimationManager.class index cf0ed32658e34fb651ef3c7ece6e96c26532dc0f..48859b0a08e632edd2c9efdcfa3afc3160010793 100644 GIT binary patch literal 6129 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 TDCeg9Vbo1A7Tq8+g?oPi$HQiM diff --git a/target/classes/uno/mloluyu/characters/SimpleFighter$AttackPhase.class b/target/classes/uno/mloluyu/characters/SimpleFighter$AttackPhase.class new file mode 100644 index 0000000000000000000000000000000000000000..c936e1b00dae40d1b3f8586847f88f42d9a5fb1d GIT binary patch literal 1293 zcmbVM+fUO_9R3d7)~!^)p;IninX(OJTm&Ds5SBUO;<$v4C5umoTDM}?kzPplU+H*& zXe2)SM;U*oOsEegKp%Sg{rbCn-|2Vy>-V>F042PUF~qRw+ueM}>RNu!&+BdOaNRQ; zH?NtUBg@z{TWx~rlIL;#^KP5FhKvZq$RR)Gd5hbve8u)V46;@)?bY{p8J24|?O0%l zmCE&Mqrwp1tCV*dmAxjzaAkXcE8Qs7_A460%7@$ZjTd#xv`ufFLCRzs43Tp8qY+0` z0mGPzyGYXT;vglJsa@&PJjb+Kg=)5upxk>ZqKL&I3-CaNEI?diobm7?QQF&aDP_Oo4--0tsWp$7`D|Q8?z7Z_vYPCVLB^3etEf;{|C7 z3Fx_=(NQsr3`2rD4)5vRqaH&pEOY1J(9pd?HKhD+h@{hp4VdkGV%Q9q4R$Ac^N%8g z&#TDdl~5ZRTei6C7D9o`8CRNw*~l)6*7Y5o+!<`{KUQ53$)r~^TQ>K6hj#yMsHbR9 zygBK08md-p+i(JwhAZPWL;5;SCnJYW4>^3>aJ_e3*V|Ym&q#C>BO4RKTmY@)t6(Kd z0b`TGP$GjYHVl>W?+`Kwi>vetL>SL<;Udo*}i-OaZG-kyN)h*} zt+uW~MCwA^YL%LZT5W4>Yg=odcG22>dEH-Y?XI@I|GD>@nJ)|ap8lA7@44rmd+*uL z{qptyJo7vemGh^al)_XzJQyw;2!%t#Bg19gecp(-I~IsU%i4kiL!m%Tu(uCGCmBpj zPJn6QRCuESrtIB;NG#ax4Ydsg0)8g0Vag0fYa`*|LB9fQV@m4_#(d$uOp6=4!vkeL zuRj#-4R)9H`uCO%cw>EKt%2^Ccd$1USjUv%jm5m(yA*zQFk0j74i5IV%DI>vQN4?? zI}kb_8#R@mzoV|Yys^CwJJ;hhmEplCD8)Lxq2WL(uKkki9`J@@eN0)wXt|;df=oGj zpUuP3SX;~+iOFHJG^{;15Qrp3Tl&;Z&uBaWKPGXmSnr_L;4;~b^|f{FJKEaITiZLf z7#m)G`I}6p29{U0*LPMk&CdKbR>ej8sMsMw7Sc!XeZcVJ*xc0n1V5J7?mBz-R z*E6wP!;;I73+C*$E!CCv<&8-Kjk5KuI5@t!D-KAme?4;pSlc}uQEV9=f=DnZ?~Vm` zL*QBHLtJ6VeFXG0!`cED4+jRjF+D5fjm9(&+DC=}a5wgQcYDi15N}yqECSYpEqQ`f zUangV?&Exuvq9qP(&pIkVw!FWdy${s7dj#_NyM$*rm`Z?D@? zQ(k4Ga;~D1;Scl#2K`EB@~Wz9s++5JRFyZC*H#0)vc09%*myY+Q@%Bq+*D69&8=;0 zsemZT+uP+Vl`SoeRV`i3Ou4<%hqkFw3%@w>L z?Q&8-(@OhJNrp~#fOa!BDMTmXMwSr^^+A*J=_Kh5nRF_-(h2Uu5fUdQz?ey=(F*D9 zHmOV>ZLdiy^>HsT>2%$@%%n4P?;|FirF)l~bdEmw6(*faX)xu+;9#J6c)%Bkw2SJC zO@-lcJH3&hG6fAZVtv6V(<%QaHw7Cs2EkzH$?%Zh8$-t^QQ~T#8%(-U_T{~qxWUIw z+C(rJqonkL`b==~6DECcea4(U-U`*Uico5omqU&gcbs2OYJ>aDKnHHQtt{Ty# zqe4DS+n}s^(4>b1WYkwRR?AHvG3inIG@LAyVi1nWI>C~X4>>|y>rNsm({q^0?( zZ5lz$sIC*uZJ^JZ^rT|zh*7y(jD_hblaABVU?l=mNO@PV62<_R6N-7o9e^S5!ri-? zyhE1kO>oB_h_nqwf+DpQCDTJ{Z^S#)7wnFf^`7A`(})$`Sa;t#F?)wkx=hReAM4=t z^{!O`-!MYw>JQvBB<72RqR%@NXjO*|M6h)ReTly8q!(xMD2WqShC|_qNnfF_LNFDL z9n~}D43p87*r-Q`zBUV@jqw7>Ml&M|PDp>$b@| zh%6;yavD3qJe;InrI?cJoKjLc$v4cr6#B`WVR9yC>8t3Jwkilo=7GYr{74R#ZSpLh zjg%+~3)0SnY1s^+eERaz&UDTJJCOG79!ck1_!p$j-9c{%Zja}fJXd)_ovz5)PBM8O z7cjYSxys4zckz@P+Tvx>0rPy57bsWSgbWtj?Fx)^Be{Sh3r4p@0@0}C*6IG?h*z9? zCNJS)Cl}#9ALz2-_+o+DVQ<85@=`tpyog1-gVCT44E__kWm|o+ZjyMWAAYjAcFxXCUWH z%DD;2r^&1NOz7r75K&I4ZjIocW%61L_abz>gE#@;I+NEklJZoq4-sAhb&YVt8-c*u zg1th(+ua>ND9+HpPU$=R0R_v|5lL%Z#fUN_I1>L}oC%I^Qh{ZZY?C07)sw8c(pieD z)^y&CrqRhr30=vn=#<_lhbznE25vEVizEl>sG0gyf(c-&$!**YyF-=W4dDipQqmS* zKbX3%bemD}68vGsBKdhse&8963Pew%TwpKUs4`5x$mH$3LzG%Be+jf~sTlrrPcx;m zM0UzvlYO!_3v0K8TN~Z!hI%{5WCH30JgiH?dfJn3+5Zu|XsvMExkjWRb_)^eOS6M@?KG< z)Vlh18DC=ZrAoO_rc@bKbEV#JLL0U4vw9>C)8!OA%pPyFDp|6m$$c7pkaaLxZ!4gn zE6^SsUKQF!u=8nNcnSlx^GYN(76Gfa78l**-CJi3b1>AH$<_d~8O16?ThXJ7>Tf*)<6nc`~SLP)#@zccPP&&#FjEQ7{=XRj)d+rWu*B z$oUqNuB8>&%Zt>0usy6_HNZ;XXmVD`Hd}ZrZen-9dM$7X#44aIP>z7&rLzT_4etmO z45Oru4te*$l7+U;n#w~%eO~BlFey$s6msTGRE|uX?=krZLrcP+P5C-QhF ztQXfg`97wCq)9i2+lIUQYJ!1~zZy9M9)rr^ZQ8=ak#4*Xsrq9Qu@$lu%27Xv+Po5# zeKZht@2^GzwGNJ)xbiWH=(MJ=gX z6p^Y$38`Atg{nnWh_--clM7UG6wHnFs1a2k6{2cUAF3ABp=wdlp)H_!7{}KYU|cw5 zJl{56fcb^C@yQr3vW*vGyu>yx!noKrUW)N4wz1G#W*e8_+;BDOd?=(;i;79Ls5@1Q zQd6}kG*yc-Q?)2ERf`f6Z2_%98^70TjL)=<*I*wMpbBrT4SqJ@C`T21oejPo>o?fO zLT{sOEc8&k61g^uwqpHq?2Tsz{8qtx&4V;k0R5O}`BPNw$r`6xk1+-lS7^e$m*>+D3y);fcJ*ng5lOMl8dpyUeZ=41M5caq) z9;c`$Wt@g(Zjbzo$j_znvrlmLOYguFI8X{*iQnxg?}@6RdUK#;bD>K45bH^(+vm|5 zTy;H^qMQ~`9faRRCsQkCyCAsjsPVgj6+~S>NUJFdChx_HePH4hVA!=_!HrZySAqIm z%>cTZuE7Yb5MKlKFkMF<)oe<+i44Kwn>|m`rCGNfrb5qF^on}q@B+I15T)y@JV_&h za2mj^z_}jno}zx=IC>b4$dVDjMzU_dTQAvzk#CglLgOE$EXBJq$`1U-hC1Br_tkaG$0fyBjSRDTePgJajapD5}FMlE2% zgJWoG6%VA>3V?eY_gNqV_xL#GaS%)I^tPS}nm94IjWjQ&^QXGrkrN(6t`sZ*wWy4TyF&8L8(r(1T5Z#odjB#AQnVzT5W6bmg z`XYYC4O{>>AUgE?@?-SE1iiFe%Sn`1#HE{8bo1&2eFr_LtOwYyTi6|1)zJtx8o@?m zVRwzvNqV_O^A(@_O`oW_+TnWl4|=LW?T125#Gc&sRrgQ&eF6fBbXVpWIb46g#y1^h zf_|FRh81|(Bs`Bf=@xi{TcI1bflaql2i-}R(I_92*ZIrmUTp=-er%JaB?cZ`1jH2s;OdjA-s`Gu~zYI4yLa(PVKT%l{@ zJv6(}m8+ U&*IhTMWk;yMlgloRfldOYsL-`ep{zeb`9N{UQQQ_vq3h&(D6=q!4jiG7K1V80RTh(xNUrN8Jn;SfHrlet962e~b%{Ql{m0>?G&uz#yK9^O7h@VP690 zPjnCX3RcmlFuE7dzW2e^KLAH?6i(nl81X|e)Q4#V27Wc37jLCcL;R0n<}>sZ9t@wS zC+HhAPH%wwzXIgN z@`&q4G^&T1EQgvT}z!|!h0_np3wZix9`3{7clRWu) zU=;WJj`K<+I%7z9)HD{h+NOJsGeRh)H{|l!#TF5vKF5=#7bGy``r9RRy5mz8ZNTG6 z!**;aNdqvC^EvJ}LCE4-9$>KbY%r`)+0{w_z|B$(UxF(gr1^=3a09a?z;3r}E6HG= zO0<6rnfwGy{wbLJGh{=*K4~6Eql|yk+?13paJ27Z3_r{8y&!@PzelAh@6f{c zXfc}nHKzhp5l`cgE@@RRC=$73sT6jMW)uI=778{hu4w?sFAQ#eR zQxLxp6>uev$Le@U6lck!s7X(2MVw^KU5{e9&6+vWrp^wFAafO0TZ@y{S7;qiuU3}K zv&aE1Cy!*ez8bh5xDk2ov}o1I82jfyHxNxTa=CVl(sH?8T#Qbmv{>A>L*>|P47Eab zg_9d_1AJrARQYYlN(z&IKUzSbySo3?!GInD`gegrcF$BYfGtKalA+9Jnq z-uf!q)6BmX=nf|g8e8>6mV?tm$Gtc3-4u1(XI zuo8$@kQXf7z1A^C4Y}L}tn&qHYaB~%jFjRP91%%J#?syB^a!@(pkPIEep`=X$py*> zbS%v`CiucGAa!U8*XKLpxkrAQZ-RH)G-floq2_b(CmZ?Dn0Yjd3(1QI*#P1}KO#Yx z7tvL`7ztnz-N40kGcTpv_!K(E%V->t1V6*Ujp$D^RN>|UK?DuJ{eEG$j zdV{thNSCs+&4uMD#**q3BdSI3=OwrJm6dM_hEa<9bXi4^1;bS!MA*CQ(X8F z%*AED#FBlPCHwWK#znsxxd;YY^6oJ@`&3KtE5}evxlbPFUXL5W><*8+Xq*m>k;mg+ zs(=d=utWjpc-#dFSfGHII)pNad!^37>HIj|y>OWx1e(VroJFNv2^%}5I+eOKY5v<_ zxc#SJCZUONY4* z?}hdBFmI;MfTvG#BT|Saqz%nBdwnq>+!rn3iidNN^F3M(iI`?qUfw&%{~3>&{hHq> z=XHE{dJ0n~c$Xa6?h?*}$7;20;Y@7d3Pj7Nm~?$s!pbNRBh4uzWUaIZ$VoPUt!3A%WudQmY(=Ogg7qgdk zvk%hiMqTEoYhWIuFpNW}&mQ0)JpyhY<6U%|LyDCWo4}+5E1$Ml2^jAKQ{_?XD1QXK zR7B2?^L}_lgLdO1*X3BL<5msLcF}t@mp36u@Xfpl>lS+ zmBUjP-(Xvuc3NV#lADwaM;i)^{GULwIC!Eow^hCK&yDz!}?(dge`Y(KkpGr=TF&goRJXJ$MI03HRNFsk#N^#3vtaDe|U&nGDb`6A#P4Q z#Gww)aOFMfTKK3dQv{&R*9{Ls`~Wrc82;|yA!_GGZLI9Fj)sHatw=Oaj2chx?@@`4 z90=6RpO{HU_>)t0C6s(2t)B)D!R2G1o(7ZteU^~rXDFMWg%f?wcH;cWLZ1uzx1l7N zZqYrDfk*n#I??@tjY{&~wI{%Jzu@-C*Sk8%dG8D ze+|@>_*Im8uOYSiHiGqcAkgp90{$K?;n!&yzd@(+_vv(glh*JLPzL^xHt~;aCoZ?R z%X}~)=SJ(GlFCacH08;9pZn}Vk-4@gtwBG-#y_VF{)LU8y~s%=md|^4&B$0JM4|*b zA(}}Eer=;VRSEFtiJR~!tMzgehmwf7;TRv<`V}%B?>f$hpZ{ED16X=1p7wEz%U_+5I`UyBoib=5Yb2=PZ&uEB!C6AdXu>%1CyCJ50GwK ztyNpPTDRR5h5Deot)bO+l_l|2b!)Y{T6f!BySr_*?Y4Ba)>mz7ch_#&|99@q%;cf{ zt^SyE?z!Lj&iDL(-?@42kB>YKV7+SgAWxw>9g8;%N8{1-p>)H*kd?3oQg$NQ&=(mV ziQ1i!!680+U??noA4->|)k@k5B?s(8Dl%Y2`$lX#te`p-ypiOlL_8e}>xDfEg+q~4 zfBb5NC0zsY;f8)I9E}e~1{wy#S2qk>siB5mdmv@S2BUV9La~)fSp)kueMuzQX$?eT zgS{e`LP63wrEti$qNyPs7gF#=k}Y}*=@jNT+b>QhQ++8bkrEkv&f1R1u$@qt-Lhjx zOWT$!+IRN0>wwh|rQ{8LsRWOw_;ZD--5RzA?Us>|Xv7Ya18uTD7N=5F>_g;~d2mIV6Nw#2 zM`L!v>W|v)T3Kl8uAN<5J9=AMyE-z$8qG&VxWJaJJ#AZBbJZ}`|L)0KXzPn2u}G>} zp{#bgcy+rJjJ9~#_97q4Of13DVkj&(QGi03)tT_1$b))?v;TyvjMi&GW(+Maf@lzC zs}wx7o&2wEmoPimL@~TZ>v3>YIM0L+UYVV5!jw}kP*{{3Wa(5S+OWwQwkQ0NG}^Co zHeY0-#1XOC#4OAfHXBX&Q6#fg6LXwdyNQ59*J+|0vx~5qVH1_`5yFd2RNyR`b(xsw zu-R&2zO!YUiArbIYhnQk87p0pn7uVU+;1m#h;PK{aYp+tD-qGYau$u$P$a2P)0L~u z`z05H#E4Nz`YJsVwo;rJwc2DsTx#MnIaggRGJe>^6}Xb|Igm~y>{zO0AQg$n=$iLC z$02AcMnA$H3@9voAAuY~6SlA~bP_^#4VoB|B_q_{)#0TG`%LUdRKcV+F^04&!P444 zAwu0Q*&QS=<^#!bDQ*d&p>81MVme+tHLIDL}QEzytfctr6Gs zCT$S56MZ9zh!|~U?Q}F5OjsjBk%45x;JM)jhp^R34Gc9&p zrwK1>KJd_}L@=>*$QrSGwXk-AM;GJcxYmPfW=g7z#BK3toaXohuA})|yLNWW2$z$| zo4mLlH+pb`Lc_Fl&5#bxB$kO!;nNC5Njs%aW@Y#w)ijM(C5X?M_;Ybu!NEv4H6(7l z*~DjMg}5x4CQ|){iO&fj7ztv#7~n5W{FUgI-`mk{Y$PTaEh7>HAII$`j>? z!?g3@OA3|Ktfz^px7df0#uEg(VvOP|9-JV+Pb1wFzS_iBaWAboVRLevF6bsVIGcR< z8vfRUuPe-(&den;aX%hl-VNHR_H0Vz*Vc7PV*Q)#-k)5 zT_&X%*3{NbLV%gKGCmcaGVwIN?Wp2Z^Y#cmIhP!!)lU)ZSrh+&=U6h6%peCcSfXaA zX4ALV?JB}|Xb!dq2M!hCA6bvsF$_eks0i|16W_x>EBL8N+hjytGDV#n?9Rc|7fpO$ zqhoi^t`73vZyy?9F(qn6lG_q?GAYeQQ8=Bj1gE|DAzt#}M-=`8QJ5%~vNxrzMA*d3 z_%RhvC9GI7;$VIFeUUb&4{Ms_i|N8o_SN+F)F5UboB;RP;fN${pPeZ<$}-v?y_QMP zkJBc8p>1&S&hBjrr4F(?er-LZLzSr-X0ylGWA8VM05hqFGivt;82k2S8@nRB!IIZo zgts_!dGKrcXliH}Erbj&-o|fD{0{HZ&O=smNO~E4Qb=C?mx=$z|1iqgvsqCVM&+BzPz4e~cB(J(5uUS5(rkKO zPibM<4k?eRie#^kd$+|WeCc(v&*>h0{cNCn_U=suDFv5roOYG5!+fHcx?`_m zB2B}zDF$+&Akz%E4BU=>4w*TxvYofAbxmo$E8Ml|t#$=1D%8{8DM!~_OSiYB+=uj2*8Na^c5h&(&*X! zQ*aKR9mD!y{unmMPmAzrlUYYFuxSjTVBQ$E$YQtr^vKWl2eiz6{Jog>3t$E9SVoJ9 zwiQ@RT^o6wSWEdY;uWHemxs;NtQ(8aOZhLM2A5NVek{WvY7oV8T!nM6gPh78jj$8D z_(a_#aHy}shp^kxTb+QRson~n!gk-SccC)4o3pCDluR!jxdTO7PCoSr!8x2Xl4cLb z?y7zLW1R7^N4E56q9b=YTe|tQ;V2Do3N1(B(-s*;iBPu*wY+Hak$SmfF>S0uHsmuMUhz}7Xm4=T__KM)EM8B zwd+rZs~9~WV)T#Dkf4c+aV`UHHO;$*W<8&s=QHTTq;0>}3C%Mw`>`Mskk@V|Rw|8$aZ zd?D+{m9!S{VQO^+Q{YOhghey;(*|McY~z#IOMeXF5sr`XCMtGX>{uXUr^j&@?xuY{ zO5Yx*7xExpXaw!Qvoe%-2DQldKzVR|9t`=-;~MdAVy(bg6GMLyf6ZSai#ozX46-@B z;3yuh^q1X@;!6L*{h6wxS+0h&0%$WAl1uV`Z3Gz_nC9@19N@+zrs&icI=Li z(7;jl7SN`b-_J>&#s(*+4(kI=hrm5h$)^i#}lk25w~r9pMMD+gOZlXW==Pqy2pMEXj&|sCi_~tD<|< zWAsQqUxccBw;si+Acwo)F-BqVw6&7GMCv_NoHXsLcFG20MFiC0|%<_6)~`$&=-g!kvTp}!Ha^U;y5QBfpW)b8SaqHt zN%K69Ak*)Up=}fqJ`l(FP&$gs_(0U-L+>bh0`GMO-dkq`{;;mlk=`vghpED{1M3P# z(HZ#P&cGi@a%O_WPfFIj!-02Lo{E+o2)wgb2&H|X`Vy7$wp3y7C<;rJS|>2EW?6+X zuJSICsY9`+qF|y(RTTD*tHMjNQR1|A-=O^-V{7*W^Xr?eQ{Q5JdW!YvX?7Fe#x?8{ zuH*NK8}J+s<9Xan&^v(_7*F3L#f$hZzK_=lb5gl3BcjllnP`7Q73&b;2PvBA7=&RJ2872weDI8eyU8qE!2Q{K1$B81>&c4*1NY^=_FHl zr8P~nvL(-0)ShR|ZPn$^lOZ9I-0b){$c>~Mc)YANN(yZV2Fj%AJV1g+7U{(v(7kool^7L%9Q7Qf6s?Z@oXeu8=;=PDv!w(n`oSf$am zisH?7mMhW*S0qocGJjmn&K~4s%4w?qiyUU23^R`k=n5mu=D1PK3mVx0HY0%D^PR-5 zQ&@i|j0b}GGOG+fq)O#RAP;w;_@tW05IU(Ai0*+!?6DUdBR2Cb1Fg7Jovj0GG4BV` zCoQT`v0%ZdD1!k^)li-sGfqTzcvTry~=sxq55QhE_Yl3(9y zW)kI04wI6}qWGv*wOU3VRpgQ@O5>F7K;`Ff$%;}lyd3Y&aPs;oMqt)T z%une{RPBtLJEm@)J>%xOOby7@IW$%5(it}gXFPe!)RQY_++3eY&`Fgn2MBb2^4n5@ zTA(>Nx7(abrdGK5c}^w{LT((CGY)ur5uoqjzb$uThJa9K=SWsQIUv{{sFj(n>U@`N zv1D$?B)D>K95#ZZm9 zf=Dv*1I-^$OSt#>e8hC6&YdYP)at2mu_j05Y%UbB^>7lYn=*;Yf)9;V)e|K$r&Ceu z;8hoBHV$A-V1!(TCmK4R{9#XApw7#n4fNPq2MFDbQfuhauB zY?mMXS*SZ(m~;hHoB2nu5Pa%l_|+DasV*!~-B_ZwqDJ-bkLufUWLV*9l1Fn=Qgwm4 PkfU^)f1{eHd-4AP$C3r6 diff --git a/target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState$1.class b/target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState$1.class new file mode 100644 index 0000000000000000000000000000000000000000..99852b6fc10d270849ad3b99bde43afa0864c516 GIT binary patch literal 2013 zcmb7FU2oe|7=DhE%}wgkE_B_1F~$fbX-2)!b_3FlX8qW*C2b+45|g+%ag5{5u`An| z)*r$R7l#jva2vj%N!Lnt>&~ zZ5g_1p9-^a&y55YnrCKJtkwk1**<*~m@S=NK~3@1q$^N41BgKw>~tB%940ZP4)bhyUDihNF-#q^bn`T34ctVP&amix$4&?dTra(z zGLx<%F=t>N3j(<~+^xs4w4NqWO3rQ@_*9+gJbO6k@6e|%gC!u=1jcB`dfJjZ|JSYk z+~rX&@LP5iNr&;=JWCC}l5Ib7%q`oqoly2`<;N@-mbV-43XH_5n4X>t6}Wi#oo;lV z*jAiGKw!nd8yFY3{fZkWYgY9naNock+*PZFfdaXCs(r8nOW2BF37qn`Zak@~DR zW>xcGZ&>v$FNoMYT6WwEx&lVS_w8`mlTl=|9q4JxqT}m!6h8=}czy+ZXE z?scxJlq$JCQ@QdRMqY5KAL+MCqfV#ip=Rc!EeZK8rUOl)BeUni`t?b|zGHJ`GNoJ|~|V^^PEO z0srE%Mz+iiM-{K34u5lk!%TUqVu`bISj+sZ#zWEm_7FYofS!gglAx)(OZ*4ZChE+< zy;NJ7Qk8++Oyw_3?qT_OCivD9Ga&2^R#VsvDJT;81a@N&YsbkP#ubK|d+<7Qi$h@# lhr*C$29>KVW)R#dmK*#Elx5h2HdjXI1Aj{s_>z-`$(Ny4uf_lX literal 0 HcmV?d00001 diff --git a/target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState$2.class b/target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState$2.class new file mode 100644 index 0000000000000000000000000000000000000000..f8ad00956505a54dc8cd49a0bb30d24dca079a2d GIT binary patch literal 2376 zcmb7FTUQ%Z6#h;UIwTB*BBl0fDNqxrq|jn(gOwBrO$AyFqEf9rnGBPGxnO2e!R3R$ z!UtD>f-miIq4mM#lMntBe?xWoogpF@Qy^>2%sFSDefz$>cmDYMmtO(ov8Ev=aINn7 zS=aHM`bIr#RAo&Xp;-&E($1D_cg-;iwpHaxzSy5HmO>et{i7NZ0wYIO6gW0+dv{tBRwly3Tw7!<%*d_fyAU=F;j>msiOtQ1UhDI&z!HjWwW**%Z@3~HR~JF zS(G(f?Hh-QuxbYaW3xw&s(&;m&|-SbQD8WIcmp{VZ%o<(Lq|{|2=%oJVN9YMJsM65 zWDXs(j#GG@7D8FG%uwKRGsnBA%cXDz=QNxZ=x^d`*L@x5aX~<{gS=xuA>#3LW=Vy6 zQAaN>alah6%DLgY*|MxSzGWL(tFo?&h9VNm{N|)lC3U$Z=vK!7E|cBj)a*2Cu36a4 zi!RrOGzK+fXzVaf5yobDo34!i?`OQ?;b=<+EK&w@gYgOBz`Lp|TnP~_K)-+}`6a-H1H`chM z~=fcAe>?2n6+`Rs=&#eW9xo-#WcdG zW(3MQj-x~1#{b+n*m7nm#V#>*Jj7>eW$EZbhg#V>mXzI8$*gK*+1oy7Tn03`WvI`w6YjxQwv^5M2Nsqm65wmwAQXc7E9o=xC^qaUWA>dlijHv1d!zP*kd& zIKelYZrj95`fs5LW9Ub`_B-0uXA`HtM<-WrJV)OPycxr@p-sFs-TyO23Ikm?zI(by zO2N&W2`c1HC7$E<3rq=YqBzhs$EzB3=lOi7f{aJm-C_=a#bBzOf;KK-6@73xd|VC% z4>|Z4$CvEJ8cGOBP92Z%70OtT61%?L|*M1s8Yt+;3k<~Ij`$#QC#nBZ5@8H@j*-aDB5HnMSXOS&C*44+4Y zsJoBw1!A3fBJ;RmEyGjAZgOzwH*{}8?q!*iH*y22J%rIv8>ABzL@H9dvWd#xV0P+t vHFdZADtAjw)v8U^NWn@J?<%PVcPdJkPZ!gSbL@Fjt;~VHiB1-P0;T&OoU#of literal 0 HcmV?d00001 diff --git a/target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState.class b/target/classes/uno/mloluyu/characters/ai/SimpleFighterAI$AIState.class new file mode 100644 index 0000000000000000000000000000000000000000..4b2d4e3c688a8ed0d8e8657d5e556bd1bc2b1fae GIT binary patch literal 1532 zcmbVMT~8BH5IvWcZd+DbTdYt(QLDBES<9!|hS1QejRj0rnl!$+-7aOxc9-l2u|LCq zqVNEbNPPB38RwP?jfqCO$?n`ccjnBQ*_r#}=ht%pMdSqxG2}eclG=u4cpXnt_Y_-E zUCnkRMVDl~ePC!W_0}F~ij`EcBD;#K3Gg$F?kk6iWGH4!Dw|$gK!9Odwc1icX&P2b zSEW|-BL~@a+EUkz!Cxs=%M6RvYlqB}^X7JqoJY!AJDaImvAR>18J6A;gcU5PhHmQa z8iOyLsS)^w)ug*vY2HEDYmV2RO_I_knJzbc4J>t z-F&65R=-tLEC!)VZF`sDRli%Wo|yp}fTu2rn8Q zmS?Lp9K5_^e@x0eH>Z?ky=5w{XOqdNK2#1-7=ZU$zWUDzy9Q={jdF;;)$F$Jx>{5A z8Y<77cYs(iP0j9>LURN>W61pXOwixzT@nnzEzNOXTaH_rq2Bb-I}G3Y1n+x*BsDD% zP4bqd>&Q<#5jV(cly)`R^Jo4Hk$UW=?*y@9B+f8ik0t#lm^{YR@Heo!?+6LG?mxnm ze2hC^$YTgI^c|&mK#A}^Ac+m!>z?pan$TX19NBOyAv-&Dg8Ns_0Wv_(N$jo#Jm6%B zataT7?khYU(j|^?r~by5J+BuyqfOuBDIU#zrjrXQ7ijE~LWuhANe?4SHau21# z5Gdx%(6nJ1#o1ygHL2#+l%?ehAyp3z>(eua7T2?r+=(P)xFoEcQZK0?L(OGFLlaY4 z%97wJXhufD&VdS+7MTf4a9e6VtMOuWrZ6q;rOfHjgqk+Ytey&G(^rIVszSq-YH3L| zHL2$`-m4qdvpLl&<~0e|mvyPTQbUnM%A*^)WxW28fo)#PJ$Gd zpiC8~XBM`aA|oS_=&|wW(9l3^Xl!sinHZGN5H)iJOU+rMs!`Njy&E1pl(6(@5zHe(xk_XkGn=ySUQ1r1`gLqVgn+NGcd zZm}0oAj2)ARYGf}3W;eMwP;x7g;Iw$gk;ZRP&81EDca1+D4~UK8Oq%^nc>VFfXg!W%K*li%z9shlrTrBg z7TMOMHN#Rl3W&x?X^I4vS+JrMy_05MziQ?z)rje$`BIFB99-wA+}SVlxVG2Ckk_Ei5f{MIF1t@XvoUQa8@nkC)iRj37zTlmO~0j zsvhAk(r9NarJQU3ePtc+!8hB62n`9XV@&} zQ+)f0E?T{a<49tUaK%BI$mO(r)KCirjTp+M7Xx7#)CyKo6Ma~aagVd4LhV!@CBAkU z-~F$P9oR-Ds`-wuhgVEfuByZ=<(GPq9Dv37VN@yw8DoF zcA$r+njK&0MIR-4wXu=xl|ZM8A5Pm+Y+XDpbV|^>%G>k;5k|M**Tb`bp9lwR+lq6x zWV=et=B0Mlc-Pr>e6QNsO*?J>Vn^cCJ5sW9p798uTY_hvpk;eTfW?(htbD;I*#8R> z5*93biHXS3gLZP(LCiaC4{IGO^C)aV(q>4)Acji5dU!_oatkK>3pSms4-mJ5WwzY& zw%m4=NxaLsQ?hlAlEATmM;&|$N42bwi5Exo$=Asb^*E%o;w z;kXms#RrHxEAt_`X*?g>?%j0%2kdZfO+ToqGg{u_Y-uIH?+U{rg zK-8^3(aEoaJqKJTBR5#3pRSroG0m`;{P*}^B_Y3CR=xlvC*O^Y1PW?ULU!jNW!|&ORkID$}FJ^KV e!@Es4RZRa5pW;>0#_!!&ErB4X)VC3iZ~p<(+uGOw literal 0 HcmV?d00001 diff --git a/target/classes/uno/mloluyu/characters/effects/AttackEffect.class b/target/classes/uno/mloluyu/characters/effects/AttackEffect.class new file mode 100644 index 0000000000000000000000000000000000000000..5f56c20334464d90ae3b7f012ec23387947f23d5 GIT binary patch literal 1934 zcmbVMYjfK~6g~1Ywv{GvNlH^_p0s|Dib83Cl(Zp@dAUu~-gEi>?ql^_u2cWWw2BBo*VK-?FGBbs$%y?VeL4Kd+aLc>hi zbPtWHs5x%kHjR4ifpI8;hOx;craRUWQyqKX(x8 zn9vbNB8is=?Rg$DjdS6i3p&!s$P%yWxQHp@`WEH9efqib{pUI%wIns8BZ(pD&FM&C zNFu)`p)L&ud7kIe0FV1h;-P16zY`WP{^1 z%LzE43D0WQEY8`r0TTDlR(INg?fAx4L$s_-wZrn3@|84&T-0#|Mv6kdtK&Tkag;q7 z-O%yAis~}DspFQ4sxtaO$Eu1%8f*A42@b!}H&`!**YOcPrW70ybq}aPuEbxylH&Y) zs-vtB9?0mfj&&71l+kB8Hf0q5-mV1=xw5TeN3J9qmR)ZIlGLt_&t?6Xr!I8Fr$$%% zXY9os*|4~9S`7+4916YO4jj%$?B@9&A8AN$xoyw1O12!6v1dOlSL8PZGt@WAPg9H> zd70=%j>|JW+^nw^Pyci=-{@@7(c=%p}7;9jnHg$P?6NaV@|5p zUSw;hNMV|~&XB|`wyCvLcRD1|qq>7V+#|&-Z_yV@-L4#x|Cc@XzjWDe{A>2vul^75 kOC)}oG;$=AXKM?*Y{h4YZ}f<7^oTF_6aShgjo_QV0hec>LjV8( literal 0 HcmV?d00001 diff --git a/target/classes/uno/mloluyu/characters/effects/HitParticle.class b/target/classes/uno/mloluyu/characters/effects/HitParticle.class new file mode 100644 index 0000000000000000000000000000000000000000..19665dbeb34f9c6382bd525c3207fd5df1ed93d8 GIT binary patch literal 2035 zcmb7EU31e$6g_ejJ9ZR448%YRAtWJ*fCw-tgaC;fFwo`$l3*Iz(ynFMkx?X9k~7ff zPG8FOjn0&Z{(ufIOi5tcnf`$Oq&{?dc9ltapr!SUbrz$=KryV)CQf@29fT$bw@)s4r1ZWDXd5CR~+iJ11|_Q49wZVx>Xf5FKD>7)u=tP z8lh;dxprjD$|X}8GB=h=m0K&T8hT~}KZ=DPSA^Gg^lJjpkiP8tZhTe4snK%zo#D#r zH&!9J*`Vg+(1Bh9c@#8sjE+?@IHaNf9h`DFh~6wyzh|HayCgblpc83{jv2@xt(RJ0 zhG8IwA)Lry_-$d=MZ9Ls^K&FmnLhnZy`E)J zR}D-f%~K4eS2FN{@*2{+X5hN=s>m^MKzcpH73QF zj433?Iw)&dSF6T=vFo$Ej2o3acY~oRk^7Y4axCnJ^P;uQHr;O3M9gVb< zSkHl)NfLDS1(prGS;CT$QC*Y4cL5%2KGx^0Lt$#%}t|L7c)~=)`&K<99#bgDRu< zaOR2m3J1(zad7n&4sW8*9Nfeab7&L&`GNfL*BH!?H8180dZCl}Vz*hyy@pxnZf;^+ z;WG*s%|g16;fhU6nC44NY~q4h=qhB@&}4ope_3ufIMsLhC9V{VCe2J@W@(Hql<&Pz zOh4rJlBz&*-o+~Rk@0>U!T}7U7vm^!{vgU6xx*?~(Z^#yf^{6lx9G=5-2Zh_8|E-i zk5#H(Y6{72rW9IWblK}CSmcX9w-%A=&)Pq(Pte(4tTdk35O&zoFb zlr2vf991Qr;CF;2j#4Tn#ds2D_?*t*v|`qqB;9Fi312AY+Z?;dPN2HY@hA3Cc6V`y zBPo)}1^@a&G;~LgZwf$OUCEOxJa(& gv49E1_E?gBhwUOf9*(>OSKxDR3UBZZ7%GLKA6#ix}Gq4P(2rQr|1kk-iCqQCIFa*OzO+XVM7|6}p-PzsQ47=3qtOZqh zG?#~%@+Ggae9DWlDpdlhq$-u?{3WYmzSD!igHg9?`h0!*bf2%!rT3qI|M&~QB~%PV zG^88VnzioLyvA0;%9m~5&IgWPx13_p$p>|7(Jr{Qx9C<&24WhHR_t50<=NGebv;+1 zg$8Yt-yFX!4Z2VBMqNYmy1gk|1;;$M=x8vgnpY^EuX#0J!@zvLwr=I@f>$fKd8<^| zv`W6cQFilnYg$Yuc;ZF3>IRb}nwpc}3%8_K=yAGMa1w~3-9#IXYlx=OE6vc*X(A3? zP|}1Eq8<}XAv$5AIYfOX5+OQmq6NBv0S%{Lz&3$?42r`c4MVAyASyi0m@v_*;mEvO zb*?qmbB@1k=RC%%eZH2ry%pPcWxl731!b2Z&Cb7c+8D!@dSLs(({$*Kje;G}K`b?w zUP+LHWg?5$RFs&l)^akNHZh}Sb^>#_ zV&F2l|9?`R>D0tkysx3D?gXmDctcfK=@osdXW;Sj%(?CauHi!i*EO^qRQrM*ludku zMFt{Yld4Y5q-Vr**~G_6U3aU(>xPL>uu2y`+e5NS7}lrOQw1??&u&7+4KZXqa>Qax}ssCMbb9+6>`!=|7u88&6Q#UZg&YxsF*&Xqbl za?s-E<-QnT+M|3T_&!Lt5JjX{lw_wU$v#n%U7{p=L`l{%Wt=Cp;Rwg0oZUx^`+>2{ zE{&35IWiw=_LLN|%^D60M8k^5A$7*TG!(8=ov z)rj=q9tEKy*NC={J*0?0A|Nb*6Y4lKT;4m5&4)Lrkzh~JTI^bda?4LYBOZGYeLzL@ z&>?+?4r$#x0^Xf>xiY99sAupW_Sq z9K|>IlDZf@e2tq#alUJtu(_(!TLC#rgFe@gCu*YS%hc*D(k-UbAxe4MhNfwpU~fZ~KnaDIv>~Y*iqn>)1X9Y!c)hmQ-PqRJ zj#B;uf)^gj1HYgzNO4<%!~>6rU%-z+oSBUpA(a*^?cQ@dckaDs?w$Spub+Pfu!?FD zhQNHU*>d)RR?xfObKJTNrQ7wwj^kCUp4;s>+ie-%yCuV}?*?8Hrod=J?n@_-&6;zw z+@O#NCo%Sk%)qaD0?9pjP|_$7c+Fb3E)aKHK`RuPF1f8erz|T$tLD2- zt#aVhLfNkSZpT?uF3SRmg5UJJD*|?|sDCfqliy+PwN}MTA%>F{M)0ygESKLo0f8|K zaU>KvZ6S$73KN)2;*7xXv93+oty_2nXSvU9br>$Uo?lm+&RH0UHl4RHqa8YaQ?1Ne zI1vSY)j}#lc?*LPx?sUVB8k@ore2^qg?Tut>emIbx&NS6Wq-rM5QYUtN`BM3(c3F~ z;cZzCc>L*7%ay^741L9q{xrLFpRyK8|EK$GM!eJZyb3M5uY#Lp*`Z1F+7;PVJXg%` znClWO$*6ELl7443@b|gI2HX)C+U`pC-ll9H6_NGlBx^6-@Y|3KX~wi8mUh$?1Fk@9DW`beey+>^{$1_@dX2fyf~^?gwb59 zsWm!0iN)u%{FybeFM>yHG}Xmx^5UhoTfNZrioWjuKW^}X8gfjtJu!X+24JY$KxC-9 zpe@H+TMo0f9A#}e$l7v@wdJ_cnv67pQNCXy`-6OdcEf&*v^~?uDLdOo#?F}EJi+*P zvyDEcA~LN>*3QKHnA7i^ok{dz+rMCbcRcwR3wu8~rvv~A!W=15Z0yI4L__BFj# zj3s;b5OXtCRW;Em`w&wzjj~conjy_= z#-a>QH7wyh*2Csv1(%QNxI!PLYKWQU2EYFiar0s9A^(U$9g}hgCUrO~ay$xmMf-?B z{<(_x`Bwe>6t123wT=QzSc!6N?5NnYsM&^Ur$d($9aFb9APk-E~UNXtFZq4Fq zw_40(%uGDJLu6+gPw>eje0F>aXL-876i?wCKa0~?z + + + + + + + + +
+ +

+ +

+ +
+ + + \ No newline at end of file diff --git a/target/classes/uno/mloluyu/desktop/BaseScreen.class b/target/classes/uno/mloluyu/desktop/BaseScreen.class index a6a87087cd70678a30b6f59c40f734aaa3195e2c..10bae5cf43c33868fea1fdb6ba62ad8c3203b42b 100644 GIT binary patch delta 163 zcmey&{Fzzc)W2Q(7#J8F8N}Ebm>3!4CN_vn=40eyW@liTD6Y)GlAf5G3KCu@$H~aR zW|NthSz`48JZ8CZB2SQ*$R8Y)Y%*<|Krme?^eFl%UraWZf) zaI!OS@i1^R@J!@Y5cc1_lO4#zb}oCPoI$$sf5zCeL6K-Dnvm3jn#33IPBB delta 33 pcmeCT?za{=^>5cc1_lOO#zb}oCPoI$$sf5zCeL6K-Dnvm3jn!43H<;7 diff --git a/target/classes/uno/mloluyu/desktop/DesktopLauncher.class b/target/classes/uno/mloluyu/desktop/DesktopLauncher.class index 14c04bc5a0f73b3fee31584786d414e1f30caba8..4fe9ab63aea95a1568d26e787c3722d1a36ecbd2 100644 GIT binary patch delta 398 zcmXX=yG{a85IwWI>}A(QkyTNA@DNd16^x;zFk)e1YoV1W8$eA=05!4DP75n?Kfy1s zAS9C5851l06TiSXckxa#XXc)nbLK<5i^%8i>l=V=6a_T-OgUY^=*BbS1Y_s2=G)L= zIS9d&UvzB>Fj1DrR6ei~g=JKJ0E??h2UCa>LO0D?r$L}Sqw+YU5)Nh+Wj6d~z0pzA z^9~k}Bv>uK-Mp=yT==|kB#`cYmuOK6N=GuVY^0D=-pjH?=QdwdZPnWZS8i&qJk{>* ziLX;n13SayEVwH$5@RUeNBAY6ZO)1YMmPXxIKUX;&cZ0h_(v^2u%r?#4iG);Bew7C zdNDV9_SD0K7n=@>8BgzFZU8qmK!%61ULQ;UM)FEeZWWLSY*IrhtYDQT!;E=&Y-A&c NHLM4BZ!n{w@CN`hHiG~F delta 415 zcmYL^y-osA5QV?HyRfh7v7}3PU-k(kb0n|jJL=ziJO{@r|&tPFe zNF=c{Ccc6%;S(5Vq43`1%*;J!?wt8BKh5~p@7p`DN!da}H!*BHcsm<8uZd4l>0WA; z0}B(~sQ!RoGTSD|n8I`0s{8xlz13*8U3JtZ#-zf3RljcC9iN=n zrQ^tCN>P^2%Q7?BeNow90^K6cjB6m>{Z?nfWIDlusW7%KYV}U*rn{p(-_MFs_h^U( zyn50eQ;?-3c$h#w9}h-%vDliL3um6l~8gpUXoQNb7~Stv__HIhRMnb8;)SrV;} TqFhHzSn{&W%5bMuVKhpA2}3mG diff --git a/target/classes/uno/mloluyu/desktop/GameScreen.class b/target/classes/uno/mloluyu/desktop/GameScreen.class index 4b3f60da09cd9593b0fad514ff59bd37909a65ff..da86a7244570713371d2e31e4e96a759b557fc31 100644 GIT binary patch literal 28962 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 f(wL6>z{}_5Sf5uG%^ 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 LPvLyNCAX|0-wi3 zG||LMFMJxG!1%A}VK7#`*?X@&YyIC^|DNwZKYs=A1P@b4C>WvZnazgR2;YWg-S)2n z@7g@F9CzPp+9_xXQ#G$?R;_x&yKrjeMg5H_pA?4Ao;@#@&d&}@rw0mZPa(7Gxqe`| zLB(o>wpRK9DCq69gQti42d7%;o!kvGs}-EoTDI*fBx4&Zc)B( zku)A>v2O5@<2u1(g=As9qM+@1bvunDCUlHqOkuR_xb|__tlF(ptJ>gL<7KaAH7Zui zk+^fI1(%Mmko_xEED;<>vI6=xr?B{+snVE*A#E(sg2KO**DFJ`ZBfTC^b~Rm%l*WE zpFWKx7*dwkk-p(%Jw^&Mz2XbvC2yLl-)X**KBTxiT9hPaA^j(IEyWd7$aFz1apRG%n57D`#gqQLfDnl;M_ zZemVClcA(_EaRR)yvq;6ns#-ZeJFc7_35WxM*uLwq29Dn_JAtKCeggvf(Cz5O@!`>_ zQu!#)lzq3&_9d#eW1R%urqw?+n;o7ct8UBeG|av&?eI|XFKtgCduNh^ZgCpeVbiBd z+`Dw&$-`k942)%OUDeE9sHoN5px?3%Y{`t>G<@%k`PRf1%M{@hDp=uuo6+8<6~PYe z2V?dw&o~u>J9cI8LdbFDiySS3f5HD$@hilqfm@!dyyhVaT=j5Y#6wyFk8U4d5HI~o z#qUsGQ(^WRI`>JrU%E!>cK-z{#o}k^{Er}M0>C_U#2HzFvCmU{VGLTr4YYI%J!eJ| znvsGjDNNm;NDSrIi-IvoMierUA!7+MNRg1{x6IjE8DnHZ#@^tKSfe=Sh^s7*7s7HA yAQC_1GKx*fO^vu&P9$UGy3XvfSi~k)*(uqpU1mBeY;KINAhMVw+Thy=9{&ZI)#F_N diff --git a/target/classes/uno/mloluyu/desktop/MainMenuScreen.class b/target/classes/uno/mloluyu/desktop/MainMenuScreen.class index 55edc9f63208e644b646a906cc5d05106fe6c465..464d161226996e70b30c1911cb5b8eaff52677a7 100644 GIT binary patch literal 5284 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 literal 5285 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 Uknt|w!v|=fv!!R91`(-$0ET+_WB>pF delta 1509 zcmZWpTT@$A6#jND=f(j-$|YchP@xS;Y}#6(luD%(+h_u@Eof0|4kV_5Bqt;%EqF`S zR?*g0+*q-WGrlvI+?TgUVGiXwZ65p?D^W$ z_QT(6HvtUcT^TmmML1MAAut5ECNwU+-(>6By;SZSQy@VWp{S^V%HW#O&S;^GmP>`k zre>1U27_=Qol6^o40d17gn~NMi*TuEfcszO$BjZdm*O8YZ+9IURWzZQK};7%vUy{{ za-LM+L92*16?b4O|DAR7R$G6+2kk04tZ1pE5z(i$Oe~`!JK^i0UuiI9k0 zDt2QJL*ulb4NYl@jGjtQhf<08(2>MERiWkc4DFHITE1f6;u(;zmuekN8fW#wtee{2 ztD+D4_>g_1W2mi#rC+NZbDp5oDq!~S(JErSdHyC=|MAcyxBY1#P z6-qgVVIPkRO+**p=V+7m8N18+Dc zVw4X#TX;!ms+AGL!y=BUIF1u^8&nt^DJ`3%I?UMoE2mtiAc_fd1Ri1Nv{KS_?cOL( zs+h!M3~uUUw3IQ@d5fB;o*;jRZ_=EICvZx{lPcoS81YKuMa~j$69R&WX$Bu3lAD*Z zjZ5G3@&*=fbw!iLX+06s3WUN)7K#kcbS_^q_Ew(gu*!@3>`1g*j4KxB7EjyLa zx-9#yU3^41Z(qRE{3pTFA&n-B#!qgNiX!&ZcqJ-!9k76r3$Ja&gHW$=- zCtgyh-RD&lND}a}f>*F8;#HHn*Z5z;4kyEkFT&^KZmvrM{Ib|zcS*tPxGds|iZ`&t zYo%`9C;dXhr-pO6WMMd?6^qHDh-E$~huGUZC;J`mn2ny3+spKnBDy|X%EL>EB_ezZ z%;hqlC5?=Oz8WM*lcdui?KavKf8cX4|0={!NwVQ7S_Se1G^A*4u3F(V(j<|+6^&tr z&V(Q5Tx2|pAgyIH?$5B(4~Pf8#i>9AwH0i+h7&i?5)D>x=XdZ1Z@^o@_6mAF!`<$C z%-c2G3w(ioJAzf0gO6}0v|48X5o0z?%anrzM zkhRdqZ=;VR2c4ki$*KmnKhZ0~^9Ma|hB>ITnk5X7yV-zR3xxY23)p6NOj3cfWIk_o z$aEv)YL2qYX41V8DNd10WAB%Up7dV_yN_6zl3&1!^u0;i Vwhe%Eq*>v3OOSCDE4YT%e*pN_G4KEY diff --git a/target/classes/uno/mloluyu/desktop/NetworkSettingsScreen.class b/target/classes/uno/mloluyu/desktop/NetworkSettingsScreen.class index 14617b8cc9286aecdbe7187e582035373acdd93e..2cae82930d5b9e3e0ec159cf77e0a3098d283066 100644 GIT binary patch literal 7037 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 Nbo`ScK3wEd{C`sxRXYFx literal 7055 zcmb7J3w%@8dH;X5>?_;XV9N#q24cW~ZEPz%LI@57Kd`OD25Os!Nn3JlUu#`uHYsV{AiyNBwb|0O-MV+zZQWK@@z}B@+qy05n$rKdSF(jI zNXqXQ`J8jV^S!_S`OeArel>ayK%Inhk%3GNE*)9O7R>Dl4SKtc-ax3&-{bA;-Q(@( ziI`@vuGa`#W<-#Ehd=1I)(SGqE4JjojT{ZRI`W_kDu#j~?_eMl7}`7J?KPtVRw(S< zU|RQwA_Edc7Ut zh~F~n4XdX=7x~CkN)_txph%F_t(FB#T0b-o%A6+f-he(ZWcdS8Z%4loHrvf$uNg5T zxhQrd-=t$EW(o46shbM!Df@!IaQW|)hLP1L~H4rj-8~Xi0 zGio|3Rpk{o5=NKR`>jDEtf*_1x900ufHKBpr_HhQH`%=ii#3$%s6eIQ=IeW{AruHP zeX_Q;_&V1M=G{PsO-l2tP_3axhZna9%CFB_CBe8w0(aE365`6rKTuA^7A0w!j^$V( z(E3cP(Xb3b?Qh`4vT^ZhGj(5y+cd1waXVHEZu_vhPvGO2($QlCSShaZCZ*~fSfgRB zjyqMg&YqML4FS`LBx@|IN6m6jhk6YSIvPRG7f({Axpxl(;}3?1m`*oMc9>6nsm((( zS~U1{+=aUZ(WPcTMlYW@cj=82uEwo^t8xB5sN#A+$8X_5 z#zt`!1a7FODrN=RwXM61`wVZu2=;j!`kB<`?jbYSW7ak`eGt4g2lj^hTaCRTrmY*F zq;B!yr{iZwFAkr-^5knO#QSu73ZE8C8Mjk~pJ`q0OOe}QMR;b>H*S1Zae3s~`2H6i zE^Zv4XD*+ABL4I?+k9q0~MlFLT2^JA- zK6n?SK8#0od>)Sp3do=}L~Pg;F!q`e9}}vWT*jT2P~MF%P+IxLV_%C8AGosra78Yj zz!x=qNyn3_U11#e6l%dn7Qg( zm~0LFQU3X=j<4Zm8sU$&grW>78VLrWK=6CYUBAyh zpgf&JUG?uO>G{~L!0-=r{Gn~uuA!*a85-*8H(9Q3d{@UG;d_jb^38qhTbMMOs%~G! zb_Lcy(DBFk6S~X@hgEMj3FYd-;eelkqA{$jKjrR3d*{ZV^EgT^vx|owzVd|=m!E(6 z(x=bF51yTuhrh&MY4~d$Kf>RT_C~y^0UJ=k;xq}6CMAgG!}wbrf2W`+m;I_?neCy_ zU@m@wf6(xcI{pbiO(wAI+RdANjU&auR)Y#J3iK0E5Lsn|Ec4@@N*_BEomDH zSpKk$CT*c!qLQn8yQ2CZ{I7=hbo?KFF`?y{$W+z7nb3u#X>i`r(?--^s)R{F)QJhB z;a6dbA}_dU94z zUQuf15mK-0+ZR7LI>}vQ4pi7}@+H+fd%`Kffn%nET z)N+w7#cDaHv9A4YdsX!s)vm_13S_^_pZaGN)D+7sT}os&(eWx3%_?6O>9SZAuh#32hC@+PZC|8hETW(5H+Ob! z+^}P-ud%a5AU=X*@{rhK1cuB^Kv<#q3A&c`${sFa6U#QSxQ+9S_tehz^>v-=ceHQZ z*tVlf?PT)j-L=uTA!UiJO7{9~zD|e0MGG73dYIbETh@l5!EQ6sX>_Zm++$b&79-+U z^TeXd>i6^XT9UT@(r2K;`Th`lqim-a<+0jp2Glh~nz%R^8j70qo-^nYWCRBVW!DG@ zrfoE8N$V%ddnTt7ozY<#Jp(+1Y{fO@+3Dkld}`ChW2Yw_;9SqjwCF@#WG`dfpFDbG zJMFgYzAH=pp@sHe8Yp|Hc(?t-Ex8?`p-7L(#+g2!mDYtdN^ypAgBi8jOcf%AprAe! zve=3k;WpFi5A{afN@U)}W3RAN^);?8WhH-UTyJ6(da zXwy#3mV0x>kZw(Sco+-aS~l)3fAGH0fa!JW*=c8*2+*Mj^?xe$P)HCu8nxJ0jA&VF zC^Rq>zA-Rdvr*k8(vaVi66cNGyI7dDsU1^-MS~FtbnwxH5z&2Ydm;@1BN{d7u_@Qy zWLdmpHy2I(>8|0|!8kf_67Fdd5GxVx{+%V2vIHVkYE7y+uSuDEIlm=kzLfK2Df8u=uSl8S%K6Ha`EAsI zIgEEHVHG7bQ4d?M%2SZaB`2YM)0TTXf2Tk}R0&*s=E=bvS!}O zXOSJ~wmi(I&;^)7CoRT8EaL&76j4GcBB6-LTC7fp|2)OJ_|1D7wIf(}2E?Z|BWOLN z(AHkqEa+WZIeShF+bU!Ds6E;-E_yCBZeKz+)f7{MxwwVGm!h1)Yba8QuXIF=`N1o9 z$~vmVcPgo)zcaY2Q0h6#E`)F3=b*YJfCp}F3)}rPUB$fk{AxRC3jW51-Iw%<0!1k zEO1xFaO5X8G*|A$9+b@=>O!v|Yv^0Baer^VAf*=Uzb*4J=QSk{k(!4 zK?`1o58uIEDZYC%;k#A5CpSnVL%IeBWxcRaq?vqQfOeJdMSPHUYZ%sesm#z&r6K>S zdf6Rcq4>g_1!G9k|UsB?Ow!}(j=l>_T ztUHVMy9hv6izK5+T%OOIk?brS$I|33GNGRH?OjEZYj0EB&x-B{l_?Z6o&xRc2Z1(% z$42^X6BhB!t`hC6-VWT#ce^{WnX|1dg>4u>7k0BkAE3uR!IeYUfv4!dZ*lf*d=fvz zL-;9QVpP?ypeHK{BPua6xpS)AC3o9MaABB6~rM%rG&PwbkVvQ(_BZ9Ga^%uBYQ+VF`1?oi)4Dqfg<7Gn_@C^++>ff z#(w7h0ixzXz7-FTsZ7Pk)LS8~1SN$CD-uAZMh;NvD3>Y-?*z!5z{vlTHVOI2`DYhgrU!i}}mgTZhRVa7Nkxc~ROzta`k8tGT zDqj>5>h0qfRSXMC<~)a+OXd{HWB0y*>9eP~o)~SP%*NB8Rtz@iNPp2yiVzSV2SULa9 zh)Kmne|(9E_9PGGr!WmiZDpJ@aC$-+mux1l4A~-l*`(dV%jPzY_`iK*2PJmdzxUX` q9}|;bD(Q=ryvOY1@!rF$Oy9bhc%SS1C;hxf?#j-Q0U4AKX8sy0%u^-+ diff --git a/target/classes/uno/mloluyu/desktop/ScreenManager.class b/target/classes/uno/mloluyu/desktop/ScreenManager.class index d833a70988ff56ad4ccefe4e40e4ca12108a9526..ecba573add4c70edc9a2c73e789f10cdaca2fae8 100644 GIT binary patch delta 525 zcmX|7!AcuZ6g_Wdl9!BQ5)-2_)`>}LI?kwRbt?fkf{PNw(*2kOJ87AU4#i#kg)mE{ z+k!hmBe)P;w9x*NAf7h?H}AfC?>Xn5d;iEsS@{2a{{UbIn-ZEpJ$@4PISE6cFz|o+ zt?zz#)ao1#`rT+Wa7LHwS%LI+5C%~@{w2Js2_4fGvd9VO&gz#e$h43`I{qil%POr{ zkjR**;*G?jfIYgh9Sci}VtfsHebuU2SXKqu3r>%JoU+!yJBhb(P1I5rR?v*w!kaST zz?E1PD8>6)$+qArR{r=T2&03@?|%Dy;&=NL4*O?Oyr*B#xF7m)@%*4{KzK20;eau|YE}%4MLJI}(n;K_8fF`1k_dc|z*| delta 556 zcmYLF%TC)s6g?9g#xYI^Qo;wL_bi+*60-v7 zcT;Ss94x-}xg6v0_63-+wo(6Qp`I%T| zmiv!}jWRRxqUnOuDsWzBUK68TvguTAk@$l#6$Wo1r&JOwNoRl$H!wD<1I+cw1?K6g zNL8g?qNeg7`RqwL&vKJVq>0HBm0>?e&56j>Y{bz~MJ@8@z%IQSbnua6fjWm7(6U<+ MMV_O;|iv9SErslWZ~oc`3wfBo)sPIf=GkZ@m}@+=Fk7} zpV>J8O}L`MBF5C>@dE{R6$(SCD0396O9c`y#!muP%U;?e8R>Sd0nW4Pr9t+ zP~lKf%@8)N6E<(H3&EWAR*pPy7gpmo6=4Q%I*|+?j3?vi!|8B36^n->$wZ1{4c3Y) zti{bx%i)B}i8|b=;tsLRQeop*k9sj=S?z2BBDEgY7D|i8*W8 z8jgEq8EnzG-Z$(-Cw8gW$*?4vJQ(ip)8fg2STsDKjfPvbQI7l2C7jCg4ZCr_iXMid z|GBj%hSK!P2hdAl2lUi#v&8KZc@M{4>=QAi#@-K2MO2(p0;@Q5>FXrlHa#{ln99R$ z3~&rCAoMt~A8{227}n31y^M-+5D8IkYxf2*#Bm72^oD+YAeLZg40g=>Rqd<;C6h)y z1=!rwxpi-AXH$=CSz{jhK@U1Cqc|vbcT7tSO3Py$NANf$KdeVn3~De!zv?a*4M2wD zNjxRoc3)>5p5b^_;<`H8TibS-z_OJ`Ii8nlMMhGZe*leKFCERt0SSMc<7IR1s1F_M+bGyEI762eOi;1?kRjAC%xE(5Al(Tv*J%xR_|kcA_^Qe!sYA@s9J1f zC^Dk{6SG$xX7C&}pJjOy@0x5TQ60qOMG621`RV(+GTJ0+-TRV5a1Q0zWNL0A-{r z%DH11%1M${lIb$~SCCf@^bp-+WLp=ygvy>7ET6^-VuQqnrco2RfK}6EJdbr*+-_il zzKKqGEX9Jk+0y?tT zaS`1N8?$)uBKjCi#X}5QBZaNWB4!{-T!z>Y0}o4OUY_av2*c5ZTSpB%8VZ!SHMdrX zU)&J`Pt+;W*Q-pxnZ?s*Vb9{Zc>vEb`oG|LQC=b+11}L-Vc-=a^4%*uuX>IxK)XjZ zLhpO6`?~Rs8^%JMm)4t%Z+YJKoSfGXx9IqJ&_*M&AUR3T9!9 znyw;vjr^}GETm9T_csJ-X^nFY!5GC?>He~ezhnvle~H(&?=+SKyvh^`==9o2v?=GT z=W?miDQ603Hap#xyS$Jv(X2Vr1cty+Ib5}%|A%=pSp)z8 delta 1884 zcmZ8h>vL085dWRzCO40hl7^&(z9|&av@`;x%BvQNO+!H*#X=E*kb7yPX;ab^iXicc zFA(Yh6?sTOMG+AyO?e1{<0t(W9LEnZ)EURmI?jlDZdzbWX3p-}J?FQ3e!F|`6pj|= z|Mc&*n*bK$2M0_rt57&Bunx?fT5Mey>yD-B8O;95Hal#vt8j2Q!5PX2B3_}Iat7M` zbSFoYnQB}vnB}Ql4i6>{?5!h*Pi!*Py1ZG(B#y}_7#Lkz;Xo0JRg`d)qKv`U*PRG< z#S`(qU46m6R4g8BN_3~hkETYC4donDF^xglMmC0kxMVIA2hBOT3+$MV87ll7l?X7D ziioMe(wK-RlA_*RlT(eEDrz`_c#Od>W+{Gg+FWa^#%zu`s1?7OmpSY3xQZt@=3&05 zQRbI2*n0I;YcvwqDWborvdw{oSfrw!<4IV>A*HmM!4i$@k))kSTcV zu|`EJ$67kO-BL7@!A@tJ^;kz|%83x#IM$&hi_mUIJ2t3zmSZEHW0*$-1Rc{_J0m^% z+Fd=m_{$Qud9j&e3nC(HZAni@ltYtb*_SR})3Q0VW^ua%Ud(i2H99ytCA5tKu8V1@ zPU(4`;|0ViUQ&+|`>MZ*ev%a%x;YZ)A*fhyb7F^{)HTxmVdGc1K^7;;(JO;FmWM;l zYd42n6i(XvICfAW%hX9BFLrb6ftAS6yEO+~*elbu+VC><#ps2b_ikJ$^WQyi>duV= z_m1rU{lw`?2deQZ$7^_<($bQVoeXht(Og7LVG*a)6>OjQQ>~x+7K3&4`@?sSom3k0 z0HrY(kodbLjR!d1!$GmqmZuCD%{8$o>m@ z1~n`W)A}VLG*KKG*O3m4fCZ|CphL#W80N^0p0X1Ow$`!IR| z;Q?iYKZT-}qnPG?22n8^6-Fj9D#aMfgy9>^&&FpzL!~EzS*~Eg5E`zciDA(YmS4px z2E*_SgH}&r^M|lLgH5ERN!^-(E{#s7ad;cUzVTc8GKd9=irt!9%f&D5rVP636nWOC z9EE)d+t0!}gwz;-XD9vpJ-g&3I+MYRB-|OiL_)sX?MZufjzhcqHA0WPvhIQNjfc)$ zT$bKPoNs#G_PjG@A;@=)_v~lXj0G|mAEBt%aj0F&5xk$l5lN{T=fp(5GA&D3n$k5FI%=gg+iwc{GF)F$W?|nM|z+fVS zis}DAkd?j$*@Do{OeF!z(}l%@C@C!VS+<-(UXf23gqv2MmA0yK7K-_NHd$I_HvvnG zS~q8}kEcxCFk&<{LE?&$ved2`DNF4dX^ISp>!eXHkoFyEn$>uR1*WnF*|RjPV<|2t zDdXkI@?>yK79)d`B&d9!JnTx3fg7THnrS}5@X=>nlA7(tJei@mCaqshNTQ`1hv If4gDwe=dJ=N&o-= diff --git a/target/classes/uno/mloluyu/desktop/StartScreen.class b/target/classes/uno/mloluyu/desktop/StartScreen.class index bca2b1dc61e13279a25af6f692012deda51f9b95..fed408b14c7ef6026a689b8a8cace726f75adcd8 100644 GIT binary patch literal 2215 zcma)7ZBr9h6n<_91j2%vB4U*{BbXOuky^2ZRs;l616rY2`o767o0ZLO+-wT=2eiMS zpZY6w1O_|PkACQ{=}fg&+9(`+=CxOL}0MyxN6yU z?b`F2svFfU->s;tzUKL>Mb9vt7@`6L#~ICPRU@8=?&e$AtKGGBDdYC+SvYZX;f-%(9ZtCXx_RjnJ*r?sH@#gahw1Z#6bS63^ZPlQv0 z?!X0HjG<4Ur^$9v-%;>BE-|l7%QmV4ea(3-$djoU`ro0y=3BP<*r>WSuV_5d{8F_Y zgUnU3I#zMaP7EU%!xe$vri%ki1y?ab2g~sd&(Umw$yENS_M@iSnqyLX&vMMEbaO;O ztg6IV(j473rsC+qHAzoOU^MkV9MbEO$Bcp)+GDsbkZuaGA^tmZ#*xLCyh{~mNrgZ+ z6?7mja3*g##!9VRFuXObV6&zZfDb$v7Hmn?EUe609KN}iPyt(M$v8S5Pd zolsaip5f?*$CK1TdObQb1H|zO?#94+x_nZ_E0~cncS}UsAz{nN@|aaHhk1dBNezaY z>1$B2n4cJ*>cj$;VpwE3{5NURQb7)%2`HvLXB(O~=h`mgj-?j(ORr0qyn`-P208u*q*5s@zgXAxQ1!N|f4Mph5Uc3Sck;r9$zF0CUR zvzhEZ&StW^NMwFT&&EsiCI${L6u~}5cai31c4Hqmb}{}U0Gr^qm(Jn$0H-N=0e8?3q2*M&|xDB;_`7K^8c-EHb+{NS}ZafHSfF6SZmJ(Xku>?NC$906i zX%i)am)UrQ$z*{r8BP*Yzy8KVULo-YopRX2^oy6cr|@@x`>o*o+zbxzAOaqb@8MzM zF(>Igtp2>&<=js^30Ggr)q*sU>#HMs_*yRZ@V$(-1(Jo^q!UPzfe}hIic7eLD@bwY zIy1e&SXKUu8^=T3WDQQ>DRX+pTqH}GF!}~d9tspm&^C!8XAydwht63GjNnF*mBJOJe0Hc&SgA{Fi5yG+0Xfa%GFFaU(qHFD Qvdkvx?jpR$c?8ve0q_LPUH||9 literal 2215 zcma)7-BuG<6#h;K41@tSrHEBTj9^GCL(yt$sDB_oHU894EVZ^yGKb0FWF}4~75f0~ z6ZEQ2p-XVluGLE~`T~88uGRalerF~iOHyqv&e{8%y}!NZ+k2n<@z1Zn1GtJXg#2f$89Qp$t6J6}XTsuAASRhHHAZQ3?ac zvkMdZGm3IGR9=gwXSuSFLLW}3>WvDFXa9#oT$qfGQy3HIRVlaV63FcLf0I+Paav$v z-xuxL+0&L$ss~OeubE+`n!-3HRDL;uj%*zKjE)a6N#@JSLLmQ^uy4Q>R98*u_z2Ua z&ysFvmYOvIF`t~t{FzGOW1QD;LB}U5;IVc+x6`5m{f(;sM0IQ2fvR0D>L_4FAYrp6 zC*G3RLUDSk(2GmBtl^5zQM$$+`EOQ~xqxoFv#vCQS>N>o0WCYv-^7Z7nbUC{^E_*r z2qd#h6Dx|oMIB4(YdXu)cD&@=Ux2E5QO8Z(A`7+*?>SaTB1!O4a_*=2{tF#<)qM}| z7o}rYIqc(D*6}4)h;9Yu6M<}-mf0<3t1k*FN9FsKj@77+(zBF)U&l8}*DR+|_Zw1W zb)V3)z9j_?6dh0AYSzj!ST@TpPtrxdV!A74;3&Oym<+29r*E|F#P4|@3Ita5;u{n& zz9fIiEE6LyQ5&!aILzXyKp(v-k8YavRs`BNoF5p!GrL4exj%{N5=#WDM%3`IZZ;b< zQr68Hg=E!HpOGp>Q?5o%;NYHwCe^%Rl>M0CTbks`caBm*O;)tC$)lak%Do#5f-bJ# zQu8S*zkDwL5+ax1gqHgaeXGxLAbofnM-q66kxiWB;rQxHWH*t27J+@ob&$^SdYG*+ zgb^G;j&IJx=rn?bi83_?h|(f6sL&=3evY99@49lmn=oGEs(%CEIMGKUEIqbrVF_4} zErh>mlca5sTYUi|QzlG~Li+5_zaULXdxc)LZQ_@tC+%Vz7`Kyf_0q5W1Ne=EEi|L%Tjqb-;-tiVUyU z@u)?><>(L)uh~!%N(NqKEel-6KMPk=vmc+ diff --git a/target/classes/uno/mloluyu/network/ConnectClient.class b/target/classes/uno/mloluyu/network/ConnectClient.class index a0502957351e0b424b68861397da07ea6198d2bf..8104defb49ed953a4de1964f05bf2a2e163f266f 100644 GIT binary patch literal 4074 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 diff --git a/target/classes/uno/mloluyu/network/ConnectServer.class b/target/classes/uno/mloluyu/network/ConnectServer.class index c56c7a34f719467bc7ff077ecd896de4359e4e94..5dcc81f0d92e34635da980ef118a82c6d4f56e29 100644 GIT binary patch literal 6809 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 OVzT6Z+$z@lCj1YuV?oCN literal 6818 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 PdE`C$?P8T^#qd7^se<}n literal 9448 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 diff --git a/target/classes/uno/mloluyu/perf/PerfMetrics.class b/target/classes/uno/mloluyu/perf/PerfMetrics.class index 803cb017a47d13d8d75d028b87d7635e845492d5..95401d99f11c8b0e57826d42f32f55d8d972262a 100644 GIT binary patch literal 1019 zcmaJ_c^`o^#rGB8%6if^R5>mvZgoL>9F-+^=Ob4eOB7ecP ziHQrhZWR_16a4}HDC2q42^1GD=FPqD-E+@9_uk)se*6OP439L#1g3(HS92ZD2@ZqW zzU8-SFLNFF8WIBeJ$WE&j_kB+8#{ZJ*%Q!PzI3f6FX+$_YXTW*nt{7%yB7Ur zfwU{%t*9893#Mat?A}v>c%`}}kXZ6|tqcTm1~Nzs3^(kK^*nHQEPqq(IK&hho++Iz z>D$VWE>jC(8Xa+r8W_P4Q}tfkU4fa#|3uUUl3~4!uPj%$6!k>|Nu-o@*?^{sNbXur zPYPt4J!!sKm-`W`)(u=&`iBBzm1^Ux6-_p%)2^p+l{v!n-Nn*wQ697xOLOzBA{!7I zI;s0@{Ie0&AlsFj`p~Bv3JR9aY@YFnewa%U-~)DEw`KaY`B} ztN%va9PVnUox}A@HgFI31yU`~cO}R7q%r`HRJ|Oy>d(ABND@VHpp?sPXnKKfS}V31 zU4CGF=9FU6F_0S2`^Vw^t0q%My!d4x-4^O(mGvL8P~ zD@S$2!#XA?LPV*m8@xgafm6h&EQJJ_Lf2v+hek2K74|f`+^}d z(tYo(7K*8#h;PT~o#0w?J5fGCrMaDCCCWI#ov&e1)et?*GeSLuQ}S_c+k;c`Bx1%Y LE5JO%V|e%%Z*#}U literal 1011 zcmaJ=TW=CU6#j+<7PeaowA5;$q7|f7yI!i%(3+T%Hfg9ep&=o@I4lcp-DT^-Huf+0 zY+~YrufA$|keKKX@JAWXECiRN@#V~%IhXG{m-+qY$1ecS@JK-jl8ms52%-$hV}8mt zi+4NPVe{C~`wY=7vupOBGDxMhdK@vtWhg3UpfY5=uA|wOV|izuc4D|~?FESgqwkt} zk3ng>+%|R`uSsL?aUUB{}78!8GYPQ}%zY=IkXJFd;C{^o$6jMK?I&$hXH#;{Pjkex)spiyn<)_6ITn&Y{;v1^LPB?DWqA=-|6 zG~f_zoCHN|4&4;72mVP@r!x$qgDALA+ohb zgqVoS5ZAs=h={)kq>w>+0-nJt?oYrY2&sD#F?}%URL&2gP9?@gu|TI};i5QV>+CQTEs_Qz`5B>uD&Q8!uW11MRD;96HMYEyy`3A*aeX9(H)5_KaH z^Z|S*aT389xMvP?=A64SOSAL+^YH~-FtsrhL2<2uhK-pICS8RYW%0tLfupf#7M{92 zaOlvpk!^pTJ%;zQIL(rWd6>k@@G@R%HtFYgXU!p=%_x5zTN?Wk`&{5n*0Lh5hUIK delta 277 zcmX|*OHKko5Qe`RdTa-Jc=;G*5Ck^L#s%(-iH4OI(6vV5hQ#OvJVR$r0vj?eOx$`0 zu41UxgsP>Elb<6 z$9|E?ptzR2+vL!ZaU|H6`E)*ed>72w-TA$x!&B%VhJ+LC-2W0i`br6>TZ1b#3z09e?NqbwN*XbWts6=XB7&{- T2)=bHS{)5iI!eMoIbyg0Y(E|% diff --git a/target/classes/uno/mloluyu/util/Font.class b/target/classes/uno/mloluyu/util/Font.class index f3d87825d99de923206f32ba83cdc7e834daa394..52b8039cf4c3d8c26a405cfe183a99d78f768845 100644 GIT binary patch delta 1075 zcmZWo-*XdH6#j0qyLYoJ5P z5r4>^D;z}Z6x*bAxkEnxYE*JmFjVxK{YKBxc*^Wc_8NWh5u+tOqQi?dxhp|dmAhN3 zRO3mGn%sjbS;som3YE2}ZmhSJ{i2ISqzw$6wyu~`>irr5aJk5A)Dgla+RIRKG{L}H zU5KELW3wnRKS^zYA=W##WCPfy<7pTSa<7>(({^sXj%Tr*VMULbjwjMx$@uUwl4!Oi zp4ah$9qroP&>214(%H~$XS}Fmr;Yxd(P%5Fc!@Eub!VdR&9{rQ^Va#v!nun}-(O!I z8!L>@S=X;x*DhG%p5xQH)8 z<;y>ac4xC1z$-dU<5e-~+(6yft)mIe;+}J&#*IBXTA?uTcyj23Ih1f=HKICVXcIYU zlXowJW>3r4lunyz4IS9eseyx%m%8#g-VpbtkkX~&Ep%Uyo0PY4h~uExC)X1F4h{=b zu9uE7gs9~qS;G;y#6xAT_)y7;HojlgZ~|$LL2;jN)NGX@hOa|0@v9mX0d+9AN`a~3 zBtv!Ki|?$3g~i#a;-&Gz)K`lOqHy)5_0x|#d`wKJA7vRGAp3EEW&?#RrIFGFnJ&$K1(|9hA9TCs2JYEh*ZlSR~{2O@q7Fz0V#HR6@r=7rkb9fWD zjRQ{1;|OW>{3ojIpM=eKs4fQ$FG{Vq{UB{9ioUXU!Y<|jT>yv*tuK93#Ls9VJ2^u^s6_A~$h delta 984 zcmZ8f?@wD*7=F%e?>)EWFh(ao*3}j#NNItN$#g$Z*D;EPGLp^d>_%q?XYSk!@oc$%YKpaah^_~;OBebCBV1^J`aTXMrM(4``JN`Z(^V=8+UiE-~Rp62h|6kRqx%bu9W{+UinRyY|FCS9x>f`Uf?K>$t8O`wRb{b058bT z?YE9_yd-cE1_Mv$igQ*m!*PmX-*j>z8OkSTv!S8IRAz2IXU!^YPYVnoA}92&)|VNa z5o>n7ZKzPN3QoG25rI*}LtRE9eWl`YU)Y5M0OcvA}oWfpxsty%sBD&^1h8^dZK8O}u8q7UIN}_)pfEe+zoH zVWXbHq;$CE-=zbMA`9hhP|ZxxghLKHqcnaCIDjR1YK^r~+(Qbakfw%WG_e_6q(6-^ zvbaQ*Ir@%4-$j&zbGSL;k0^oBN}2FqYSzR5L#KCPf)b{QK2HQ1W-v?Mgpbjw7%W_& TrHcY?N?RnEui`y?fc=jFze2+h diff --git a/target/classes/uno/mloluyu/util/GameConstants.class b/target/classes/uno/mloluyu/util/GameConstants.class index e35d632566e74ca9651836e23edaa359c6485e61..daa02ce0260352d197c95bd7525f655cc208a57a 100644 GIT binary patch delta 234 zcmbQw(#^_s>ff$?3=9m845|~kCR=g&`iHs3J32eN`mng}ZeU?LQ;nm9XzO^$~_ia~nf*BVC7$wiEz^=v@Z>_Eer7=#!k8H5=S zd=VgD6p1ee1|=YmlaWCgNHH;}0087lAKCx_ delta 127 zcmeBXozKE`>ff$?3=9mm4Du7XCQrN>#3sSRAi^Lz*^se@k!|ui#?S~M21W*Upb{nq zVIYeMBnza)fFi~~nh{8|YHeo_-w0MB2_(6IiWnH=7+4tO8Ki(L9*80aX$Bb}kC8zZ JNHQ_V0RVL-4y*tG diff --git a/target/classes/uno/mloluyu/util/ResourcePaths.class b/target/classes/uno/mloluyu/util/ResourcePaths.class index 758f2ae3557982daca12957d5a02c57cf9f9ef44..b0072b3a2a3d49ec555d3ff029b3044140874759 100644 GIT binary patch delta 225 zcmbQiGJ{3n)W2Q(7#J8F8RXa*m>3!4COa_7iLo=VFfs^aC6*=X=OpH(>-#5Vr6!k5 zjMZc0oY*7D$TM-70VDs!>vBdyj0}9Gnfj%f#o3v8dRfK!d5jEfHko;uC3cJq%o>_u zj0`N!`6;Pf49pDTJPg7NB9r+T%aVa|Ks#9&BpFy4*cccY*nvDI1`Z&f3yIGS8JZ8CZB2SQ*$R8j1?A*<|Krme?^eFl%Uru`_T? zG-Mh3ppO#RZ# z;_S>ky{zK=JVpi<=lqn^$$X4u$?QOz7#LU>BpEmvxEL52xPd$-1|A@v4~fqY`p`!XgWdZ4*f8=gMg-w@<6$GZ-)J|Z z)pjRt#(O@FqtJa;Ethb@#i$^ARI=9DYqgs`${6c@SvDJLp_0aFOu3l+zwYsaPQ2q| z8Z%~5Dzkz!J_ZnYIEOhGkzlY7ZS6+)NbHasH&}lj7tB|w8ly&)w9G5DlJamJH(bme^Ky!>aGc$vf0#+27)B6rLe?(SLbBQeAe6h!p+-9L+lA~bs0spLYtU*kJKAF z3LaORw*E1${$T-ahEduo<{#UMtKUZIx9rT(A=hP)m>k&p}-m;2c(xJsMi{G0r4;Wi_WULDI=LE#TUR8?jG delta 587 zcmY+9OK(z95XXP#+zS_OFY;&s0R`HMt*uJ6_^wsj5N$MZ(YSC)QX~+?q!Od6Zn|_s z&c?k9mp&GXP4olk%I{&^857f}bExq#$-HO&^PjK&H$VH~$Ig48&Q%|co+Z%{8K(9DUoZ5z*v4fX~&$}!2Jma|ms z@|ply&~#x358QX?TTXt+*!qy<3u*iVwuL`J%j|7%Tuxg_voInNf(yFN9!H4*&oF diff --git a/target/classes/uno/mloluyu/util/TimeStepLimiter.class b/target/classes/uno/mloluyu/util/TimeStepLimiter.class index 0700958c8fb2cb497870145cedf503b3fa5179c6..804154af68a63d3df4c09d239ee072539d9c9512 100644 GIT binary patch delta 321 zcmYL@J4*vW6ot>s&hAb&lNd)`-y#tqu}NVkQSgCQVrM_mpa~kAMeJ;~a}ZlwJHaYq z;ScafiDy(uap%rCocrDDl~h!xOg@0IH zRh#0ZuQeMwAC-r_44}$CSPes2)M8x+&4m5-j&dsXT^|aFHjaJBo==FGhil{ delta 323 zcmYLEJ4*vW7@XbP%idi!FN+9prH&x6a*^$>?UhnWy6csNvGdE%LNMU z-msVN3IvVjsYc{V>zisP8s8--!f2EX%9s);Po5rU`6c~>>{cLbq-isC>6#W$2iNCa zci(xaiM^5LWm#ZGk+$`VV*3; z0&4#OM|AoCTetD!6CxWwBdQnQw~@S14&dYbHt;)>D9c_|YD=6D(j5AfWfF;%ABzws A!T36hupb1P7=gxN!*yB@jw_J+T#AAWN<+rQ}OG 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 delta 1005 zcmZ9KOH5p46vuzxojY?cGq*5YKne(=l<7c$k@}!Kq*{d9I)y4)h5DLKhvC9-FV3AY zCN9{x*U7i3dlPq>));|Uqf0e0x_0BnN8GtHO?;d?n3%fw&UaqlIsgAT-|y)k(igw} z>+o~n3H&4mF$>cnPC}91D!ft1RSJGNw{mT(RIDiybDr2b~ga7O&U5N-pn(QrZYM6zf_2 zj&VZHl%3`thi;DRZ;i}eFMSsGI`lK3aQ}OHp;oFEYC%ABd{+0%;S&APr9kbyqTBNmT3OmRlhad+O5B!~J|>|A2TVU{_4 zC$^ZH=d8u!j;!OHUNndFj+q&=c~WSF)uPRk@YyMNzRgpLmTD;s>eXT?jF4T7Ci`^b z$9YR~7J};~omC?(W^L0871?|vozYtL8ERL5WA^Ef%mMwId0Bs`rc<)TxniZcS$!rx zo3SY<+J5=$@Td20{`$$=KOeq3GpO1U6q8)1WU&#!E$g@9C*z76*}UFO4D0XXuj{Lc zt-XwVB2cmb8J=h{(d9dd%!`$iTge?C{S)%u)<}r;2DV;&BtG1 zN+~$+T5gM*a*yrPmOphsm*Udc0X>TM*c%t^KE)RdE#G2z{D4yiGiHw&yUpZ24~-u( z4f{Oy!QbCS{mo|oUg-gC(z{)D?=mT)T%eOBx|*0qC2vyv&k7||GWuENIiV(4{>2%M z~dxy7(g6SLL>Osi_}LD5416?n3-FLu)a2 xadpjf&#&%t;bVp)%tBY>(achU;$^W6Ug1@_du$0`lk*yzVkSlN*k*^Ge*jd=zNY{H diff --git a/target/test-classes/uno/mloluyu/characters/ActionStateTest.class b/target/test-classes/uno/mloluyu/characters/ActionStateTest.class index 7d5a884e823ab4c719cf28a565c700ed34d71dc2..cc5f746cd25a533de5b7d3c75ed02419d95745ca 100644 GIT binary patch delta 531 zcmZvYO-lk%7=_QhevC7Y)%a~{nO1&fQx<{LCbC7~t_XrQLLx;Nm9%LgxNJAvmi>uZ zsD026=wI{;+O&?|n_>pd;=J#jIdh)FZL4k7^Y-=h3Sbkf3b=S@S(^g86-pWm_N}v{ zng$zG9S%5!!LP+5FOk7(ZDfmna_rSEn;HxRr6a@;$W%_MS5@=0+Nhhm&5PqkeLcIc zB7&%bN$W1*&=Eu2dda&COzTKs#`;*JJ*8t7bE3dX&NQ+LGUA-2$ecr7+_I9m;imZH z2}4FL=~zab=;iIrvhdr|Ek-5fV*`^-NfkPoG#O1tt_#;aEgTxD{4CW?s`m{vJ#+%b z=sm|cZPGPCQwAMUFsB)NhH>EabrGoK9}wyP<6>Rh!KVlN%%(^q=pS5g9Z#m I`iEoX8!lr&QUCw| delta 550 zcmZvYOG^S#6vzK}d|c;Yz9z?K+Kg#wW-kJf7LqOkqeT$}(JE^bw5Xksxu|jw53ri+ORNIHIFeEfoPc26BjyRijyNaO4^C(yU)rITd%V&f5LU zj+dQNT~g$Lepc&$)Wo}D3)5BTF3>jeae>KwC>H2cq0A_IibJq_`cSY)QC`cqM9~-v zP(+DNz%td9QS%9zNz>Fb_;FYrLT{BGFf)Kju{1#J5vgy_F6f82NvuMnHv}C?vX+48 z*kl6GNLR)RK`V482U(>ItWB{O6Rh(KYZG=#xBt+A-6(Ah1V`);F=B|ohWTRxXF5Ur Mp9vV&sb9gy7iR=O8UO$Q