mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-28 13:09:51 +01:00
feat: better initial posiiton and contorl performance
This commit is contained in:
1 parent
0997e2b089
commit
d7e556e136
1 file changed
+22
-12
+22
-12
@@ -10,7 +10,6 @@ import { Pose, poseEvent } from '../../../../../../core/blitzkit/pose';
|
|||||||
import { Duel } from '../../../../../../stores/duel';
|
import { Duel } from '../../../../../../stores/duel';
|
||||||
import { TankopediaEphemeral } from '../../../../../../stores/tankopediaEphemeral';
|
import { TankopediaEphemeral } from '../../../../../../stores/tankopediaEphemeral';
|
||||||
|
|
||||||
const initialPosition = [0, 4, -18] as const;
|
|
||||||
const poseDistances: Record<Pose, number> = {
|
const poseDistances: Record<Pose, number> = {
|
||||||
[Pose.HullDown]: 15,
|
[Pose.HullDown]: 15,
|
||||||
[Pose.FaceHug]: 5,
|
[Pose.FaceHug]: 5,
|
||||||
@@ -25,20 +24,24 @@ export function Controls() {
|
|||||||
const camera = useThree((state) => state.camera);
|
const camera = useThree((state) => state.camera);
|
||||||
const canvas = useThree((state) => state.gl.domElement);
|
const canvas = useThree((state) => state.gl.domElement);
|
||||||
const orbitControls = useRef<OrbitControlsClass>(null);
|
const orbitControls = useRef<OrbitControlsClass>(null);
|
||||||
const protagonist = Duel.use((state) => state.protagonist);
|
const protagonistTurret = Duel.use((state) => state.protagonist.turret);
|
||||||
const antagonist = Duel.use((state) => state.antagonist);
|
const antagonistTurret = Duel.use((state) => state.antagonist.turret);
|
||||||
|
const protagonistTrack = Duel.use((state) => state.protagonist.track);
|
||||||
|
const protagonistTank = Duel.use((state) => state.protagonist.tank);
|
||||||
|
const antagonistTank = Duel.use((state) => state.antagonist.tank);
|
||||||
|
const protagonistGun = Duel.use((state) => state.protagonist.gun);
|
||||||
const protagonistModelDefinition =
|
const protagonistModelDefinition =
|
||||||
modelDefinitions.models[protagonist.tank.id];
|
modelDefinitions.models[protagonistTank.id];
|
||||||
const protagonistTrackModelDefinition =
|
const protagonistTrackModelDefinition =
|
||||||
modelDefinitions.models[protagonist.tank.id].tracks[protagonist.track.id];
|
modelDefinitions.models[protagonistTank.id].tracks[protagonistTrack.id];
|
||||||
const antagonistModelDefinition = modelDefinitions.models[antagonist.tank.id];
|
const antagonistModelDefinition = modelDefinitions.models[antagonistTank.id];
|
||||||
const protagonistTurretModelDefinition =
|
const protagonistTurretModelDefinition =
|
||||||
protagonistModelDefinition.turrets[protagonist.turret.id];
|
protagonistModelDefinition.turrets[protagonistTurret.id];
|
||||||
const antagonistTurretModelDefinition =
|
const antagonistTurretModelDefinition =
|
||||||
antagonistModelDefinition.turrets[antagonist.turret.id];
|
antagonistModelDefinition.turrets[antagonistTurret.id];
|
||||||
const protagonistGunModelDefinition =
|
const protagonistGunModelDefinition =
|
||||||
protagonistTurretModelDefinition.guns[
|
protagonistTurretModelDefinition.guns[
|
||||||
protagonist.gun.gun_type!.value.base.id
|
protagonistGun.gun_type!.value.base.id
|
||||||
];
|
];
|
||||||
const protagonistHullOrigin = new Vector3(
|
const protagonistHullOrigin = new Vector3(
|
||||||
protagonistTrackModelDefinition.origin.x,
|
protagonistTrackModelDefinition.origin.x,
|
||||||
@@ -60,11 +63,18 @@ export function Controls() {
|
|||||||
antagonistModelDefinition.turret_origin.y +
|
antagonistModelDefinition.turret_origin.y +
|
||||||
antagonistTurretModelDefinition.gun_origin.y;
|
antagonistTurretModelDefinition.gun_origin.y;
|
||||||
const [autoRotate, setAutoRotate] = useState(true);
|
const [autoRotate, setAutoRotate] = useState(true);
|
||||||
|
const initialPosition = [
|
||||||
|
-8,
|
||||||
|
protagonistHullOrigin.y +
|
||||||
|
protagonistTurretOrigin.y +
|
||||||
|
protagonistGunOrigin.y,
|
||||||
|
-13,
|
||||||
|
] as const;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
camera.position.set(...initialPosition);
|
camera.position.set(...initialPosition);
|
||||||
orbitControls.current?.target.set(0, 1.25, 0);
|
orbitControls.current?.target.set(0, initialPosition[1] / 2, 0);
|
||||||
}, [camera]);
|
}, [camera, protagonistTrack, protagonistTank]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const unsubscribeTankopediaEphemeral = tankopediaEphemeralStore.subscribe(
|
const unsubscribeTankopediaEphemeral = tankopediaEphemeralStore.subscribe(
|
||||||
@@ -168,7 +178,7 @@ export function Controls() {
|
|||||||
unsubscribeTankopediaEphemeral();
|
unsubscribeTankopediaEphemeral();
|
||||||
poseEvent.off(handlePoseEvent);
|
poseEvent.off(handlePoseEvent);
|
||||||
};
|
};
|
||||||
}, [camera, protagonist.tank.id, antagonist.tank.id]);
|
}, [camera, protagonistTank.id, antagonistTank.id]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
function handleDisturbance() {
|
function handleDisturbance() {
|
||||||
|
|||||||
Reference in new issue
Block a user