PocketMine-MP 5.30.2 git-98f04176111e5ecab5e8814ffc69d992bfb64939
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 ?CameraPresetAimAssist $aimAssist,
48 private ?ControlScheme $controlScheme,
49 ){}
50
51 public function getName() : string{ return $this->name; }
52
53 public function getParent() : string{ return $this->parent; }
54
55 public function getXPosition() : ?float{ return $this->xPosition; }
56
57 public function getYPosition() : ?float{ return $this->yPosition; }
58
59 public function getZPosition() : ?float{ return $this->zPosition; }
60
61 public function getPitch() : ?float{ return $this->pitch; }
62
63 public function getYaw() : ?float{ return $this->yaw; }
64
65 public function getRotationSpeed() : ?float { return $this->rotationSpeed; }
66
67 public function getSnapToTarget() : ?bool { return $this->snapToTarget; }
68
69 public function getHorizontalRotationLimit() : ?Vector2{ return $this->horizontalRotationLimit; }
70
71 public function getVerticalRotationLimit() : ?Vector2{ return $this->verticalRotationLimit; }
72
73 public function getContinueTargeting() : ?bool{ return $this->continueTargeting; }
74
75 public function getBlockListeningRadius() : ?float{ return $this->blockListeningRadius; }
76
77 public function getViewOffset() : ?Vector2{ return $this->viewOffset; }
78
79 public function getEntityOffset() : ?Vector3{ return $this->entityOffset; }
80
81 public function getRadius() : ?float{ return $this->radius; }
82
83 public function getYawLimitMin() : ?float{ return $this->yawLimitMin; }
84
85 public function getYawLimitMax() : ?float{ return $this->yawLimitMax; }
86
87 public function getAudioListenerType() : ?int{ return $this->audioListenerType; }
88
89 public function getPlayerEffects() : ?bool{ return $this->playerEffects; }
90
91 public function getAimAssist() : ?CameraPresetAimAssist{ return $this->aimAssist; }
92
93 public function getControlScheme() : ?ControlScheme{ return $this->controlScheme; }
94
95 public static function read(PacketSerializer $in) : self{
96 $name = $in->getString();
97 $parent = $in->getString();
98 $xPosition = $in->readOptional($in->getLFloat(...));
99 $yPosition = $in->readOptional($in->getLFloat(...));
100 $zPosition = $in->readOptional($in->getLFloat(...));
101 $pitch = $in->readOptional($in->getLFloat(...));
102 $yaw = $in->readOptional($in->getLFloat(...));
103 $rotationSpeed = $in->readOptional($in->getLFloat(...));
104 $snapToTarget = $in->readOptional($in->getBool(...));
105 $horizontalRotationLimit = $in->readOptional($in->getVector2(...));
106 $verticalRotationLimit = $in->readOptional($in->getVector2(...));
107 $continueTargeting = $in->readOptional($in->getBool(...));
108 $blockListeningRadius = $in->readOptional($in->getLFloat(...));
109 $viewOffset = $in->readOptional($in->getVector2(...));
110 $entityOffset = $in->readOptional($in->getVector3(...));
111 $radius = $in->readOptional($in->getLFloat(...));
112 $yawLimitMin = $in->readOptional($in->getLFloat(...));
113 $yawLimitMax = $in->readOptional($in->getLFloat(...));
114 $audioListenerType = $in->readOptional($in->getByte(...));
115 $playerEffects = $in->readOptional($in->getBool(...));
116 $aimAssist = $in->readOptional(fn() => CameraPresetAimAssist::read($in));
117 $controlScheme = $in->readOptional(fn() => ControlScheme::fromPacket($in->getByte()));
118
119 return new self(
120 $name,
121 $parent,
122 $xPosition,
123 $yPosition,
124 $zPosition,
125 $pitch,
126 $yaw,
127 $rotationSpeed,
128 $snapToTarget,
129 $horizontalRotationLimit,
130 $verticalRotationLimit,
131 $continueTargeting,
132 $blockListeningRadius,
133 $viewOffset,
134 $entityOffset,
135 $radius,
136 $yawLimitMin,
137 $yawLimitMax,
138 $audioListenerType,
139 $playerEffects,
140 $aimAssist,
141 $controlScheme
142 );
143 }
144
145 public function write(PacketSerializer $out) : void{
146 $out->putString($this->name);
147 $out->putString($this->parent);
148 $out->writeOptional($this->xPosition, $out->putLFloat(...));
149 $out->writeOptional($this->yPosition, $out->putLFloat(...));
150 $out->writeOptional($this->zPosition, $out->putLFloat(...));
151 $out->writeOptional($this->pitch, $out->putLFloat(...));
152 $out->writeOptional($this->yaw, $out->putLFloat(...));
153 $out->writeOptional($this->rotationSpeed, $out->putLFloat(...));
154 $out->writeOptional($this->snapToTarget, $out->putBool(...));
155 $out->writeOptional($this->horizontalRotationLimit, $out->putVector2(...));
156 $out->writeOptional($this->verticalRotationLimit, $out->putVector2(...));
157 $out->writeOptional($this->continueTargeting, $out->putBool(...));
158 $out->writeOptional($this->blockListeningRadius, $out->putLFloat(...));
159 $out->writeOptional($this->viewOffset, $out->putVector2(...));
160 $out->writeOptional($this->entityOffset, $out->putVector3(...));
161 $out->writeOptional($this->radius, $out->putLFloat(...));
162 $out->writeOptional($this->yawLimitMin, $out->putLFloat(...));
163 $out->writeOptional($this->yawLimitMax, $out->putLFloat(...));
164 $out->writeOptional($this->audioListenerType, $out->putByte(...));
165 $out->writeOptional($this->playerEffects, $out->putBool(...));
166 $out->writeOptional($this->aimAssist, fn(CameraPresetAimAssist $v) => $v->write($out));
167 $out->writeOptional($this->controlScheme, fn(ControlScheme $v) => $out->putByte($v->value));
168 }
169}