PocketMine-MP 5.35.1 git-e32e836dad793a3a3c8ddd8927c00e112b1e576a
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
17use pmmp\encoding\Byte;
18use pmmp\encoding\ByteBufferReader;
19use pmmp\encoding\ByteBufferWriter;
20use pmmp\encoding\LE;
24use pocketmine\network\mcpe\protocol\types\ControlScheme;
25
26final class CameraPreset{
27 public const AUDIO_LISTENER_TYPE_CAMERA = 0;
28 public const AUDIO_LISTENER_TYPE_PLAYER = 1;
29
30 public function __construct(
31 private string $name,
32 private string $parent,
33 private ?float $xPosition,
34 private ?float $yPosition,
35 private ?float $zPosition,
36 private ?float $pitch,
37 private ?float $yaw,
38 private ?float $rotationSpeed,
39 private ?bool $snapToTarget,
40 private ?Vector2 $horizontalRotationLimit,
41 private ?Vector2 $verticalRotationLimit,
42 private ?bool $continueTargeting,
43 private ?float $blockListeningRadius,
44 private ?Vector2 $viewOffset,
45 private ?Vector3 $entityOffset,
46 private ?float $radius,
47 private ?float $yawLimitMin,
48 private ?float $yawLimitMax,
49 private ?int $audioListenerType,
50 private ?bool $playerEffects,
51 private ?CameraPresetAimAssist $aimAssist,
52 private ?ControlScheme $controlScheme,
53 ){}
54
55 public function getName() : string{ return $this->name; }
56
57 public function getParent() : string{ return $this->parent; }
58
59 public function getXPosition() : ?float{ return $this->xPosition; }
60
61 public function getYPosition() : ?float{ return $this->yPosition; }
62
63 public function getZPosition() : ?float{ return $this->zPosition; }
64
65 public function getPitch() : ?float{ return $this->pitch; }
66
67 public function getYaw() : ?float{ return $this->yaw; }
68
69 public function getRotationSpeed() : ?float { return $this->rotationSpeed; }
70
71 public function getSnapToTarget() : ?bool { return $this->snapToTarget; }
72
73 public function getHorizontalRotationLimit() : ?Vector2{ return $this->horizontalRotationLimit; }
74
75 public function getVerticalRotationLimit() : ?Vector2{ return $this->verticalRotationLimit; }
76
77 public function getContinueTargeting() : ?bool{ return $this->continueTargeting; }
78
79 public function getBlockListeningRadius() : ?float{ return $this->blockListeningRadius; }
80
81 public function getViewOffset() : ?Vector2{ return $this->viewOffset; }
82
83 public function getEntityOffset() : ?Vector3{ return $this->entityOffset; }
84
85 public function getRadius() : ?float{ return $this->radius; }
86
87 public function getYawLimitMin() : ?float{ return $this->yawLimitMin; }
88
89 public function getYawLimitMax() : ?float{ return $this->yawLimitMax; }
90
91 public function getAudioListenerType() : ?int{ return $this->audioListenerType; }
92
93 public function getPlayerEffects() : ?bool{ return $this->playerEffects; }
94
95 public function getAimAssist() : ?CameraPresetAimAssist{ return $this->aimAssist; }
96
97 public function getControlScheme() : ?ControlScheme{ return $this->controlScheme; }
98
99 public static function read(ByteBufferReader $in) : self{
100 $name = CommonTypes::getString($in);
101 $parent = CommonTypes::getString($in);
102 $xPosition = CommonTypes::readOptional($in, LE::readFloat(...));
103 $yPosition = CommonTypes::readOptional($in, LE::readFloat(...));
104 $zPosition = CommonTypes::readOptional($in, LE::readFloat(...));
105 $pitch = CommonTypes::readOptional($in, LE::readFloat(...));
106 $yaw = CommonTypes::readOptional($in, LE::readFloat(...));
107 $rotationSpeed = CommonTypes::readOptional($in, LE::readFloat(...));
108 $snapToTarget = CommonTypes::readOptional($in, CommonTypes::getBool(...));
109 $horizontalRotationLimit = CommonTypes::readOptional($in, CommonTypes::getVector2(...));
110 $verticalRotationLimit = CommonTypes::readOptional($in, CommonTypes::getVector2(...));
111 $continueTargeting = CommonTypes::readOptional($in, CommonTypes::getBool(...));
112 $blockListeningRadius = CommonTypes::readOptional($in, LE::readFloat(...));
113 $viewOffset = CommonTypes::readOptional($in, CommonTypes::getVector2(...));
114 $entityOffset = CommonTypes::readOptional($in, CommonTypes::getVector3(...));
115 $radius = CommonTypes::readOptional($in, LE::readFloat(...));
116 $yawLimitMin = CommonTypes::readOptional($in, LE::readFloat(...));
117 $yawLimitMax = CommonTypes::readOptional($in, LE::readFloat(...));
118 $audioListenerType = CommonTypes::readOptional($in, Byte::readUnsigned(...));
119 $playerEffects = CommonTypes::readOptional($in, CommonTypes::getBool(...));
120 $aimAssist = CommonTypes::readOptional($in, fn() => CameraPresetAimAssist::read($in));
121 $controlScheme = CommonTypes::readOptional($in, fn() => ControlScheme::fromPacket(Byte::readUnsigned($in)));
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 $aimAssist,
145 $controlScheme
146 );
147 }
148
149 public function write(ByteBufferWriter $out) : void{
150 CommonTypes::putString($out, $this->name);
151 CommonTypes::putString($out, $this->parent);
152 CommonTypes::writeOptional($out, $this->xPosition, LE::writeFloat(...));
153 CommonTypes::writeOptional($out, $this->yPosition, LE::writeFloat(...));
154 CommonTypes::writeOptional($out, $this->zPosition, LE::writeFloat(...));
155 CommonTypes::writeOptional($out, $this->pitch, LE::writeFloat(...));
156 CommonTypes::writeOptional($out, $this->yaw, LE::writeFloat(...));
157 CommonTypes::writeOptional($out, $this->rotationSpeed, LE::writeFloat(...));
158 CommonTypes::writeOptional($out, $this->snapToTarget, CommonTypes::putBool(...));
159 CommonTypes::writeOptional($out, $this->horizontalRotationLimit, CommonTypes::putVector2(...));
160 CommonTypes::writeOptional($out, $this->verticalRotationLimit, CommonTypes::putVector2(...));
161 CommonTypes::writeOptional($out, $this->continueTargeting, CommonTypes::putBool(...));
162 CommonTypes::writeOptional($out, $this->blockListeningRadius, LE::writeFloat(...));
163 CommonTypes::writeOptional($out, $this->viewOffset, CommonTypes::putVector2(...));
164 CommonTypes::writeOptional($out, $this->entityOffset, CommonTypes::putVector3(...));
165 CommonTypes::writeOptional($out, $this->radius, LE::writeFloat(...));
166 CommonTypes::writeOptional($out, $this->yawLimitMin, LE::writeFloat(...));
167 CommonTypes::writeOptional($out, $this->yawLimitMax, LE::writeFloat(...));
168 CommonTypes::writeOptional($out, $this->audioListenerType, Byte::writeUnsigned(...));
169 CommonTypes::writeOptional($out, $this->playerEffects, CommonTypes::putBool(...));
170 CommonTypes::writeOptional($out, $this->aimAssist, fn(ByteBufferWriter $out, CameraPresetAimAssist $v) => $v->write($out));
171 CommonTypes::writeOptional($out, $this->controlScheme, fn(ByteBufferWriter $out, ControlScheme $v) => Byte::writeUnsigned($out, $v->value));
172 }
173}