Commit 18ef5ee7 authored by Akka's avatar Akka Committed by Melledy
Browse files

fix the dynamic group loading

parent 6dc30e4d
...@@ -519,10 +519,15 @@ public class Scene { ...@@ -519,10 +519,15 @@ public class Scene {
if (!this.getLoadedBlocks().contains(block)) { if (!this.getLoadedBlocks().contains(block)) {
this.onLoadBlock(block, this.getPlayers()); this.onLoadBlock(block, this.getPlayers());
this.getLoadedBlocks().add(block); this.getLoadedBlocks().add(block);
} }else{
this.getPlayers().stream() // dynamic load the groups for players in a loaded block
var toLoad = this.getPlayers().stream()
.filter(p -> block.contains(p.getPos())) .filter(p -> block.contains(p.getPos()))
.forEach(p -> playerMeetGroups(p, block)); .map(p -> playerMeetGroups(p, block))
.flatMap(Collection::stream)
.toList();
onLoadGroup(toLoad);
}
} }
} }
...@@ -539,7 +544,6 @@ public class Scene { ...@@ -539,7 +544,6 @@ public class Scene {
return List.of(); return List.of();
} }
Grasscutter.getLogger().info("Scene {} Block {} loaded {} group(s)", this.getId(), block.id, groups.size());
return groups; return groups;
} }
public void onLoadBlock(SceneBlock block, List<Player> players) { public void onLoadBlock(SceneBlock block, List<Player> players) {
...@@ -548,10 +552,19 @@ public class Scene { ...@@ -548,10 +552,19 @@ public class Scene {
// the groups form here is not added in current scene // the groups form here is not added in current scene
var groups = players.stream() var groups = players.stream()
.filter(player -> block.contains(player.getPos()))
.map(p -> playerMeetGroups(p, block)) .map(p -> playerMeetGroups(p, block))
.flatMap(Collection::stream) .flatMap(Collection::stream)
.toList(); .toList();
onLoadGroup(groups);
Grasscutter.getLogger().info("Scene {} Block {} loaded.", this.getId(), block.id);
}
public void onLoadGroup(List<SceneGroup> groups){
if(groups == null || groups.isEmpty()){
return;
}
for (SceneGroup group : groups) { for (SceneGroup group : groups) {
// We load the script files for the groups here // We load the script files for the groups here
this.getScriptManager().loadGroupFromScript(group); this.getScriptManager().loadGroupFromScript(group);
...@@ -559,6 +572,7 @@ public class Scene { ...@@ -559,6 +572,7 @@ public class Scene {
// Spawn gadgets AFTER triggers are added // Spawn gadgets AFTER triggers are added
// TODO // TODO
var entities = new ArrayList<GameEntity>();
for (SceneGroup group : groups) { for (SceneGroup group : groups) {
if (group.init_config == null) { if (group.init_config == null) {
continue; continue;
...@@ -572,12 +586,16 @@ public class Scene { ...@@ -572,12 +586,16 @@ public class Scene {
do { do {
var suiteData = group.getSuiteByIndex(suite); var suiteData = group.getSuiteByIndex(suite);
getScriptManager().spawnGadgetsInGroup(group,suiteData); entities.addAll(suiteData.sceneGadgets.stream()
getScriptManager().spawnMonstersInGroup(group, suiteData); .map(g -> scriptManager.createGadgets(group.id, group.block_id, g)).toList());
entities.addAll(suiteData.sceneMonsters.stream()
.map(mob -> scriptManager.createMonster(group.id, group.block_id, mob)).toList());
suite++; suite++;
} while (suite < group.init_config.end_suite); } while (suite < group.init_config.end_suite);
} }
Grasscutter.getLogger().info("Scene {} Block {} loaded.", this.getId(), block.id);
scriptManager.meetEntities(entities);
Grasscutter.getLogger().info("Scene {} loaded {} group(s)", this.getId(), groups.size());
} }
public void onUnloadBlock(SceneBlock block) { public void onUnloadBlock(SceneBlock block) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment