PocketMine-MP 5.28.1 git-88cdc2eb67c40075559c3ef51418b418cd5488e9
Loading...
Searching...
No Matches
CameraPreset.php
1<?php
2
3/*
4 * This file is part of BedrockProtocol.
5 * Copyright (C) 2014-2022 PocketMine Team <https://github.com/pmmp/BedrockProtocol>
6 *
7 * BedrockProtocol is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 */
12
13declare(strict_types=1);
14
15namespace pocketmine\network\mcpe\protocol\types\camera;
16
20use pocketmine\network\mcpe\protocol\types\ControlScheme;
21
22final class CameraPreset{
23 public const AUDIO_LISTENER_TYPE_CAMERA = 0;
24 public const AUDIO_LISTENER_TYPE_PLAYER = 1;
25
26 public function __construct(
27 private string $name,
28 private string $parent,
29 private ?float $xPosition,
30 private ?float $yPosition,
31 private ?float $zPosition,
32 private ?float $pitch,
33 private ?float $yaw,
34 private ?float $rotationSpeed,
35 private ?bool $snapToTarget,
36 private ?Vector2 $horizontalRotationLimit,
37 private ?Vector2 $verticalRotationLimit,
38 private ?bool $continueTargeting,
39 private ?float $blockListeningRadius,
40 private ?Vector2 $viewOffset,
41 private ?Vector3 $entityOffset,
42 private ?float $radius,
43 private ?float $yawLimitMin,
44 private ?float $yawLimitMax,
45 private ?int $audioListenerType,
46 private ?bool $playerEffects,
47 private ?bool $alignTargetAndCameraForward,
48 private ?CameraPresetAimAssist $aimAssist,
49 private ?ControlScheme $controlScheme,
50 ){}
51
52 public function getName() : string{ return $this->name; }
53
54 public function getParent() : string{ return $this->parent; }
55
56 public function getXPosition() : ?float{ return $this->xPosition; }
57
58 public function getYPosition() : ?float{ return $this->yPosition; }
59
60 public function getZPosition() : ?float{ return $this->zPosition; }
61
62 public function getPitch() : ?float{ return $this->pitch; }
63
64 public function getYaw() : ?float{ return $this->yaw; }
65
66 public function getRotationSpeed() : ?float { return $this->rotationSpeed; }
67
68 public function getSnapToTarget() : ?bool { return $this->snapToTarget; }
69
70 public function getHorizontalRotationLimit() : ?Vector2{ return $this->horizontalRotationLimit; }
71
72 public function getVerticalRotationLimit() : ?Vector2{ return $this->verticalRotationLimit; }
73
74 public function getContinueTargeting() : ?bool{ return $this->continueTargeting; }
75
76 public function getBlockListeningRadius() : ?float{ return $this->blockListeningRadius; }
77
78 public function getViewOffset() : ?Vector2{ return $this->viewOffset; }
79
80 public function getEntityOffset() : ?Vector3{ return $this->entityOffset; }
81
82 public function getRadius() : ?float{ return $this->radius; }
83
84 public function getYawLimitMin() : ?float{ return $this->yawLimitMin; }
85
86 public function getYawLimitMax() : ?float{ return $this->yawLimitMax; }
87
88 public function getAudioListenerType() : ?int{ return $this->audioListenerType; }
89
90 public function getPlayerEffects() : ?bool{ return $this->playerEffects; }
91
92 public function getAlignTargetAndCameraForward() : ?bool{ return $this->alignTargetAndCameraForward; }
93
94 public function getAimAssist() : ?CameraPresetAimAssist{ return $this->aimAssist; }
95
96 public function getControlScheme() : ?ControlScheme{ return $this->controlScheme; }
97
98 public static function read(PacketSerializer $in) : self{
99 $name = $in->getString();
100 $parent = $in->getString();
101 $xPosition = $in->readOptional($in->getLFloat(...));
102 $yPosition = $in->readOptional($in->getLFloat(...));
103 $zPosition = $in->readOptional($in->getLFloat(...));
104 $pitch = $in->readOptional($in->getLFloat(...));
105 $yaw = $in->readOptional($in->getLFloat(...));
106 $rotationSpeed = $in->readOptional($in->getLFloat(...));
107 $snapToTarget = $in->readOptional($in->getBool(...));
108 $horizontalRotationLimit = $in->readOptional($in->getVector2(...));
109 $verticalRotationLimit = $in->readOptional($in->getVector2(...));
110 $continueTargeting = $in->readOptional($in->getBool(...));
111 $blockListeningRadius = $in->readOptional($in->getLFloat(...));
112 $viewOffset = $in->readOptional($in->getVector2(...));
113 $entityOffset = $in->readOptional($in->getVector3(...));
114 $radius = $in->readOptional($in->getLFloat(...));
115 $yawLimitMin = $in->readOptional($in->getLFloat(...));
116 $yawLimitMax = $in->readOptional($in->getLFloat(...));
117 $audioListenerType = $in->readOptional($in->getByte(...));
118 $playerEffects = $in->readOptional($in->getBool(...));
119 $alignTargetAndCameraForward = $in->readOptional($in->getBool(...));
120 $aimAssist = $in->readOptional(fn() => CameraPresetAimAssist::read($in));
121 $controlScheme = $in->readOptional(fn() => ControlScheme::fromPacket($in->getByte()));
122
123 return new self(
124 $name,
125 $parent,
126 $xPosition,
127 $yPosition,
128 $zPosition,
129 $pitch,
130 $yaw,
131 $rotationSpeed,
132 $snapToTarget,
133 $horizontalRotationLimit,
134 $verticalRotationLimit,
135 $continueTargeting,
136 $blockListeningRadius,
137 $viewOffset,
138 $entityOffset,
139 $radius,
140 $yawLimitMin,
141 $yawLimitMax,
142 $audioListenerType,
143 $playerEffects,
144 $alignTargetAndCameraForward,
145 $aimAssist,
146 $controlScheme
147 );
148 }
149
150 public function write(PacketSerializer $out) : void{
151 $out->putString($this->name);
152 $out->putString($this->parent);
153 $out->writeOptional($this->xPosition, $out->putLFloat(...));
154 $out->writeOptional($this->yPosition, $out->putLFloat(...));
155 $out->writeOptional($this->zPosition, $out->putLFloat(...));
156 $out->writeOptional($this->pitch, $out->putLFloat(...));
157 $out->writeOptional($this->yaw, $out->putLFloat(...));
158 $out->writeOptional($this->rotationSpeed, $out->putLFloat(...));
159 $out->writeOptional($this->snapToTarget, $out->putBool(...));
160 $out->writeOptional($this->horizontalRotationLimit, $out->putVector2(...));
161 $out->writeOptional($this->verticalRotationLimit, $out->putVector2(...));
162 $out->writeOptional($this->continueTargeting, $out->putBool(...));
163 $out->writeOptional($this->blockListeningRadius, $out->putLFloat(...));
164 $out->writeOptional($this->viewOffset, $out->putVector2(...));
165 $out->writeOptional($this->entityOffset, $out->putVector3(...));
166 $out->writeOptional($this->radius, $out->putLFloat(...));
167 $out->writeOptional($this->yawLimitMin, $out->putLFloat(...));
168 $out->writeOptional($this->yawLimitMax, $out->putLFloat(...));
169 $out->writeOptional($this->audioListenerType, $out->putByte(...));
170 $out->writeOptional($this->playerEffects, $out->putBool(...));
171 $out->writeOptional($this->alignTargetAndCameraForward, $out->putBool(...));
172 $out->writeOptional($this->aimAssist, fn(CameraPresetAimAssist $v) => $v->write($out));
173 $out->writeOptional($this->controlScheme, fn(ControlScheme $v) => $out->putByte($v->value));
174 }
175}