mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 01:15:52 +01:00
Refactor player managers
This commit is contained in:
@@ -4,6 +4,7 @@ import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.data.excels.TowerLevelData;
|
||||
import emu.grasscutter.game.dungeons.DungeonSettleListener;
|
||||
import emu.grasscutter.game.dungeons.TowerDungeonSettleListener;
|
||||
import emu.grasscutter.game.player.BasePlayerManager;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.server.packet.send.*;
|
||||
|
||||
@@ -11,55 +12,54 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class TowerManager {
|
||||
private Player player;
|
||||
private TowerData towerData;
|
||||
public class TowerManager extends BasePlayerManager {
|
||||
|
||||
public TowerManager(Player player) {
|
||||
setPlayer(player);
|
||||
super(player);
|
||||
}
|
||||
public void setPlayer(Player player) {
|
||||
this.player = player;
|
||||
this.towerData = player.getTowerData();
|
||||
|
||||
public TowerData getTowerData() {
|
||||
return getPlayer().getTowerData();
|
||||
}
|
||||
|
||||
public int getCurrentFloorId() {
|
||||
return towerData.currentFloorId;
|
||||
return getTowerData().currentFloorId;
|
||||
}
|
||||
|
||||
public int getCurrentLevelId(){
|
||||
return towerData.currentLevelId + towerData.currentLevel;
|
||||
return getTowerData().currentLevelId + getTowerData().currentLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* form 1-3
|
||||
*/
|
||||
public int getCurrentLevel(){
|
||||
return towerData.currentLevel + 1;
|
||||
return getTowerData().currentLevel + 1;
|
||||
}
|
||||
private static final List<DungeonSettleListener> towerDungeonSettleListener = List.of(new TowerDungeonSettleListener());
|
||||
|
||||
public Map<Integer, TowerLevelRecord> getRecordMap() {
|
||||
Map<Integer, TowerLevelRecord> recordMap = towerData.recordMap;
|
||||
Map<Integer, TowerLevelRecord> recordMap = getTowerData().recordMap;
|
||||
if(recordMap == null || recordMap.size()==0){
|
||||
recordMap = new HashMap<>();
|
||||
recordMap.put(1001, new TowerLevelRecord(1001));
|
||||
towerData.recordMap = recordMap;
|
||||
getTowerData().recordMap = recordMap;
|
||||
}
|
||||
return recordMap;
|
||||
}
|
||||
|
||||
public void teamSelect(int floor, List<List<Long>> towerTeams) {
|
||||
var floorData = GameData.getTowerFloorDataMap().get(floor);
|
||||
towerData.currentFloorId = floorData.getFloorId();
|
||||
towerData.currentLevel = 0;
|
||||
towerData.currentLevelId = GameData.getTowerLevelDataMap().values().stream()
|
||||
getTowerData().currentFloorId = floorData.getFloorId();
|
||||
getTowerData().currentLevel = 0;
|
||||
getTowerData().currentLevelId = GameData.getTowerLevelDataMap().values().stream()
|
||||
.filter(x -> x.getLevelGroupId() == floorData.getLevelGroupId() && x.getLevelIndex() == 1)
|
||||
.findFirst()
|
||||
.map(TowerLevelData::getId)
|
||||
.orElse(0);
|
||||
|
||||
if (towerData.entryScene == 0){
|
||||
towerData.entryScene = player.getSceneId();
|
||||
if (getTowerData().entryScene == 0){
|
||||
getTowerData().entryScene = player.getSceneId();
|
||||
}
|
||||
|
||||
player.getTeamManager().setupTemporaryTeam(towerTeams);
|
||||
@@ -78,22 +78,22 @@ public class TowerManager {
|
||||
towerDungeonSettleListener);
|
||||
|
||||
// make sure user can exit dungeon correctly
|
||||
player.getScene().setPrevScene(towerData.entryScene);
|
||||
player.getScene().setPrevScene(getTowerData().entryScene);
|
||||
player.getScene().setPrevScenePoint(enterPointId);
|
||||
|
||||
player.getSession().send(new PacketTowerEnterLevelRsp(towerData.currentFloorId, getCurrentLevel()));
|
||||
player.getSession().send(new PacketTowerEnterLevelRsp(getTowerData().currentFloorId, getCurrentLevel()));
|
||||
// stop using skill
|
||||
player.getSession().send(new PacketCanUseSkillNotify(false));
|
||||
// notify the cond of stars
|
||||
player.getSession().send(new PacketTowerLevelStarCondNotify(towerData.currentFloorId, getCurrentLevel()));
|
||||
player.getSession().send(new PacketTowerLevelStarCondNotify(getTowerData().currentFloorId, getCurrentLevel()));
|
||||
}
|
||||
|
||||
public void notifyCurLevelRecordChange(){
|
||||
player.getSession().send(new PacketTowerCurLevelRecordChangeNotify(towerData.currentFloorId, getCurrentLevel()));
|
||||
player.getSession().send(new PacketTowerCurLevelRecordChangeNotify(getTowerData().currentFloorId, getCurrentLevel()));
|
||||
}
|
||||
public void notifyCurLevelRecordChangeWhenDone(int stars){
|
||||
Map<Integer, TowerLevelRecord> recordMap = getRecordMap();
|
||||
int currentFloorId = towerData.currentFloorId;
|
||||
int currentFloorId = getTowerData().currentFloorId;
|
||||
if(!recordMap.containsKey(currentFloorId)){
|
||||
recordMap.put(currentFloorId,
|
||||
new TowerLevelRecord(currentFloorId).setLevelStars(getCurrentLevelId(),stars));
|
||||
@@ -102,7 +102,7 @@ public class TowerManager {
|
||||
recordMap.get(currentFloorId).setLevelStars(getCurrentLevelId(),stars));
|
||||
}
|
||||
|
||||
towerData.currentLevel++;
|
||||
getTowerData().currentLevel++;
|
||||
|
||||
if(!hasNextLevel()){
|
||||
// set up the next floor
|
||||
@@ -113,17 +113,17 @@ public class TowerManager {
|
||||
}
|
||||
}
|
||||
public boolean hasNextLevel(){
|
||||
return towerData.currentLevel < 3;
|
||||
return getTowerData().currentLevel < 3;
|
||||
}
|
||||
public int getNextFloorId() {
|
||||
return player.getServer().getTowerScheduleManager().getNextFloorId(towerData.currentFloorId);
|
||||
return player.getServer().getTowerScheduleManager().getNextFloorId(getTowerData().currentFloorId);
|
||||
}
|
||||
public boolean hasNextFloor(){
|
||||
return player.getServer().getTowerScheduleManager().getNextFloorId(towerData.currentFloorId) > 0;
|
||||
return player.getServer().getTowerScheduleManager().getNextFloorId(getTowerData().currentFloorId) > 0;
|
||||
}
|
||||
|
||||
public void clearEntry() {
|
||||
towerData.entryScene = 0;
|
||||
getTowerData().entryScene = 0;
|
||||
}
|
||||
|
||||
public boolean canEnterScheduleFloor(){
|
||||
|
||||
Reference in New Issue
Block a user