Allow changing of camera controller

This commit is contained in:
johni0702
2015-11-07 22:18:47 +01:00
parent 305084f874
commit fb5cf01b7f
5 changed files with 80 additions and 1 deletions

View File

@@ -0,0 +1,26 @@
package com.replaymod.replay.camera;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class CameraControllerRegistry {
private final Map<String, Function<CameraEntity, CameraController>> constructors = new ConcurrentHashMap<>();
public void register(String name, Function<CameraEntity, CameraController> constructor) {
Preconditions.checkState(!constructors.containsKey(name), "Controller " + name + " is already registered.");
constructors.put(name, constructor);
}
public Set<String> getControllers() {
return Collections.unmodifiableSet(constructors.keySet());
}
public CameraController create(String name, CameraEntity cameraEntity) {
return constructors.get(name).apply(cameraEntity);
}
}

View File

@@ -1,6 +1,8 @@
package com.replaymod.replay.camera;
import com.replaymod.core.events.SettingsChangedEvent;
import com.replaymod.replay.ReplayModReplay;
import com.replaymod.replay.Setting;
import eu.crushedpixel.replaymod.holders.AdvancedPosition;
import lombok.Getter;
import lombok.Setter;
@@ -39,7 +41,7 @@ public class CameraEntity extends EntityPlayerSP {
public CameraEntity(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandlerPlayClient, StatFileWriter statFileWriter) {
super(mcIn, worldIn, netHandlerPlayClient, statFileWriter);
FMLCommonHandler.instance().bus().register(this);
cameraController = new VanillaCameraController(mc, this);
cameraController = ReplayModReplay.instance.createCameraController(this);
}
/**
@@ -214,4 +216,11 @@ public class CameraEntity extends EntityPlayerSP {
lastControllerUpdate = now;
}
}
@SubscribeEvent
public void onSettingsChanged(SettingsChangedEvent event) {
if (event.getKey() == Setting.CAMERA) {
cameraController = ReplayModReplay.instance.createCameraController(this);
}
}
}