Link Search Menu Expand Document

Teleporter

Creates a teleporter.

import random

from arena import *

USER_HEIGHT = 1.6
UPDATE_INTERVAL = 100
TELEPORT_THRES = 1.0

def rando():
    return float(random.randint(-100000, 100000)) / 3000

class Teleporter(Object):
    def __init__(self, scene, pos_src: Position, pos_dest: Position):
        self.scene = scene

        self.pos_src = pos_src
        self.pos_dest = pos_dest
        self.pos_src.y = USER_HEIGHT
        self.pos_dest.y = USER_HEIGHT

        # create objects
        self.teleporter_src = Cylinder(
                                object_id="teleporter1",
                                scale=(1,2.5,1),
                                color=(255,255,0),
                                material=Material(transparent=True, opacity=0.5),
                                position=self.pos_src
                            )
        self.teleporter_dest = Cylinder(
                                object_id="teleporter2",
                                scale=(1,2.5,1),
                                color=(255,0,255),
                                material=Material(transparent=True, opacity=0.5),
                                position=self.pos_dest
                            )
        self.src_text = Text(value="Teleporter source", position=(0,0.8,0), parent=self.teleporter_src)
        self.dest_text = Text(value="Teleporter destination", position=(0,0.8,0), parent=self.teleporter_dest)

        # add objects to scene
        self.scene.add_object(self.teleporter_src)
        self.scene.add_object(self.teleporter_dest)
        self.scene.add_object(self.src_text)
        self.scene.add_object(self.dest_text)

scene = Scene(host="arenaxr.org", scene="example")

teleporter = Teleporter(
                    scene=scene,
                    pos_src=Position(rando(),USER_HEIGHT,rando()),
                    pos_dest=Position(rando(),USER_HEIGHT,rando())
                )

@scene.run_forever(interval_ms=UPDATE_INTERVAL)
def teleporter_handler():
    for user in scene.get_user_list():
        if user.data.position.distance_to(teleporter.pos_src) <= TELEPORT_THRES:
            print("teleported!")
            scene.manipulate_camera(
                user,
                position=teleporter.pos_dest,
            )

scene.run_tasks()