| @@ 29-115 (lines=87) @@ | ||
| 26 | use \AframeVR\Interfaces\Core\Components\RaycasterCMPTIF; |
|
| 27 | use \AframeVR\Core\Helpers\ComponentAbstract; |
|
| 28 | ||
| 29 | class RaycasterComponent extends ComponentAbstract implements RaycasterCMPTIF |
|
| 30 | { |
|
| 31 | ||
| 32 | /** |
|
| 33 | * Initialize Component |
|
| 34 | * |
|
| 35 | * {@inheritdoc} |
|
| 36 | * |
|
| 37 | * @return bool |
|
| 38 | */ |
|
| 39 | public function initializeComponent(): bool |
|
| 40 | { |
|
| 41 | $this->setDomAttribute('raycaster'); |
|
| 42 | return true; |
|
| 43 | } |
|
| 44 | ||
| 45 | /** |
|
| 46 | * Maximum distance |
|
| 47 | * |
|
| 48 | * Maximum distance under which resulting entities are returned. Cannot be lower then near. |
|
| 49 | * |
|
| 50 | * @param string $distance |
|
| 51 | * @return RaycasterCMPTIF |
|
| 52 | */ |
|
| 53 | public function far(string $distance = 'Infinity'): RaycasterCMPTIF |
|
| 54 | { |
|
| 55 | $this->dom_attributes['far'] = $distance; |
|
| 56 | return $this; |
|
| 57 | } |
|
| 58 | ||
| 59 | /** |
|
| 60 | * Number of milliseconds |
|
| 61 | * |
|
| 62 | * Number of milliseconds to wait in between each intersection test. Lower number is better for faster updates. |
|
| 63 | * Higher number is better for performance. |
|
| 64 | * |
|
| 65 | * @param int $ms |
|
| 66 | * @return RaycasterCMPTIF |
|
| 67 | */ |
|
| 68 | public function interval(int $ms = 100): RaycasterCMPTIF |
|
| 69 | { |
|
| 70 | $this->dom_attributes['interval'] = $ms; |
|
| 71 | return $this; |
|
| 72 | } |
|
| 73 | ||
| 74 | /** |
|
| 75 | * Minimum distance |
|
| 76 | * |
|
| 77 | * Minimum distance over which resuilting entities are returned. Cannot be lower than 0. |
|
| 78 | * |
|
| 79 | * @param int $distance |
|
| 80 | * @return RaycasterCMPTIF |
|
| 81 | */ |
|
| 82 | public function near(int $distance = 0): RaycasterCMPTIF |
|
| 83 | { |
|
| 84 | $this->dom_attributes['near'] = $distance; |
|
| 85 | return $this; |
|
| 86 | } |
|
| 87 | ||
| 88 | /** |
|
| 89 | * Query selector |
|
| 90 | * |
|
| 91 | * Query selector to pick which objects to test for intersection. If not specified, all entities will be tested. |
|
| 92 | * |
|
| 93 | * @param null|string $selector |
|
| 94 | * @return RaycasterCMPTIF |
|
| 95 | */ |
|
| 96 | public function objects(string $selector = null): RaycasterCMPTIF |
|
| 97 | { |
|
| 98 | $this->dom_attributes['objects'] = $selector; |
|
| 99 | return $this; |
|
| 100 | } |
|
| 101 | ||
| 102 | /** |
|
| 103 | * Recursive |
|
| 104 | * |
|
| 105 | * Checks all children of objects if set. Else only checks intersections with root objects. |
|
| 106 | * |
|
| 107 | * @param bool $r |
|
| 108 | * @return RaycasterCMPTIF |
|
| 109 | */ |
|
| 110 | public function recursive(bool $r = true): RaycasterCMPTIF |
|
| 111 | { |
|
| 112 | $this->dom_attributes['recursive'] = $r ? 'true' : 'false'; |
|
| 113 | return $this; |
|
| 114 | } |
|
| 115 | } |
|
| 116 | ||
| @@ 29-114 (lines=86) @@ | ||
| 26 | use \AframeVR\Interfaces\Core\Components\SoundCMPTIF; |
|
| 27 | use \AframeVR\Core\Helpers\ComponentAbstract; |
|
| 28 | ||
| 29 | class SoundComponent extends ComponentAbstract implements SoundCMPTIF |
|
| 30 | { |
|
| 31 | ||
| 32 | /** |
|
| 33 | * Initialize Component |
|
| 34 | * |
|
| 35 | * {@inheritdoc} |
|
| 36 | * |
|
| 37 | * @return bool |
|
| 38 | */ |
|
| 39 | public function initializeComponent(): bool |
|
| 40 | { |
|
| 41 | $this->setDomAttribute('sound'); |
|
| 42 | return true; |
|
| 43 | } |
|
| 44 | ||
| 45 | /** |
|
| 46 | * Autoplay sound |
|
| 47 | * |
|
| 48 | * Whether to automatically play sound once set. |
|
| 49 | * |
|
| 50 | * @param bool $autoplay |
|
| 51 | * @return SoundCMPTIF |
|
| 52 | */ |
|
| 53 | public function autoplay(bool $autoplay = false): SoundCMPTIF |
|
| 54 | { |
|
| 55 | $this->dom_attributes['autoplay'] = $autoplay ? 'true' : 'false'; |
|
| 56 | return $this; |
|
| 57 | } |
|
| 58 | ||
| 59 | /** |
|
| 60 | * Play event |
|
| 61 | * |
|
| 62 | * An event for the entity to listen to before playing sound. |
|
| 63 | * |
|
| 64 | * @param string $event |
|
| 65 | * @return SoundCMPTIF |
|
| 66 | */ |
|
| 67 | public function on(string $event = 'click'): SoundCMPTIF |
|
| 68 | { |
|
| 69 | $this->dom_attributes['on'] = $event; |
|
| 70 | return $this; |
|
| 71 | } |
|
| 72 | ||
| 73 | /** |
|
| 74 | * Loop sound |
|
| 75 | * |
|
| 76 | * Whether to loop the sound once the sound finishes playing. |
|
| 77 | * |
|
| 78 | * @param bool $loop |
|
| 79 | * @return SoundCMPTIF |
|
| 80 | */ |
|
| 81 | public function loop(bool $loop = false): SoundCMPTIF |
|
| 82 | { |
|
| 83 | $this->dom_attributes['loop'] = $loop ? 'true' : 'false'; |
|
| 84 | return $this; |
|
| 85 | } |
|
| 86 | ||
| 87 | /** |
|
| 88 | * Audio source |
|
| 89 | * |
|
| 90 | * Path to sound file. |
|
| 91 | * |
|
| 92 | * @param null|string $src |
|
| 93 | * @return SoundCMPTIF |
|
| 94 | */ |
|
| 95 | public function src(string $src = null): SoundCMPTIF |
|
| 96 | { |
|
| 97 | $this->dom_attributes['src'] = $src; |
|
| 98 | return $this; |
|
| 99 | } |
|
| 100 | ||
| 101 | /** |
|
| 102 | * Volume |
|
| 103 | * |
|
| 104 | * How loud to play the sound. |
|
| 105 | * |
|
| 106 | * @param int|float $vol |
|
| 107 | * @return SoundCMPTIF |
|
| 108 | */ |
|
| 109 | public function volume(float $vol = 1): SoundCMPTIF |
|
| 110 | { |
|
| 111 | $this->dom_attributes['volume'] = $vol; |
|
| 112 | return $this; |
|
| 113 | } |
|
| 114 | } |
|