Ejemplo n.º 1
0
    def on_zone_load(self):
        global _ocean_object
        if _ocean_object is None:
            beach_locator_def = OceanTuning.get_beach_locator_definition()
            if beach_locator_def is None:
                return
            locator_manager = services.locator_manager()
            locators = locator_manager.get(beach_locator_def.id)
            if not locators:
                return

            def move_ocean(ocean):
                zone = services.current_zone()
                terrain_center = zone.lot.center
                location = sims4.math.Location(
                    sims4.math.Transform(
                        translation=terrain_center,
                        orientation=sims4.math.Quaternion.IDENTITY()),
                    routing_surface=SurfaceIdentifier(
                        zone.id, 0, SurfaceType.SURFACETYPE_WORLD))
                ocean.location = location

            from objects.system import create_object
            _ocean_object = create_object(
                TerrainService.OCEAN_DEFINITION,
                post_add=move_ocean,
                loc_type=ItemLocation.FROM_OPEN_STREET)
Ejemplo n.º 2
0
 def on_finalize_load(self):
     super().on_finalize_load()
     portal_component = self.get_component(PORTAL_COMPONENT)
     if portal_component is None:
         return
     locator_manager = services.locator_manager()
     locators = locator_manager.get(
         OceanTuning.get_beach_locator_definition().id)
     initial_transforms = [locator.transform for locator in locators]
     street_instance = services.current_zone().street
     if street_instance is not None:
         for beach_data in street_instance.beaches:
             beach_forward = Vector3(beach_data.forward.x, 0,
                                     beach_data.forward.y)
             orientation = Quaternion.from_forward_vector(beach_forward)
             transform = Transform(translation=beach_data.position,
                                   orientation=orientation)
             initial_transforms.append(transform)
     if not initial_transforms:
         self._off_lot_portals_created = False
         return
     off_lot_portal_ids = []
     self._create_all_transforms_and_portals_for_initial_transforms(
         initial_transforms, store_portal_ids=off_lot_portal_ids)
     self._off_lot_portals_created = bool(off_lot_portal_ids)
     self._lot_locator_transforms = self._get_lot_locator_transforms()
     if self._lot_locator_transforms:
         self._create_all_transforms_and_portals_for_initial_transforms(
             self._lot_locator_transforms,
             lot_transforms=True,
             prior_lengths=self._lot_constraint_starts_base_lengths,
             store_portal_ids=self._lot_portals)
     if self._off_lot_portals_created or self._lot_portals:
         services.object_manager().add_portal_to_cache(self)
Ejemplo n.º 3
0
 def _draw_locators(self):
     locator_manager = services.locator_manager()
     ocean = services.terrain_service.ocean_object()
     with Context(self.layer) as layer:
         for (obj_def_guid, locators) in locator_manager.items():
             point_color = LocatorVisualizer.LOCATOR_COLORS.get(
                 obj_def_guid, Color.WHITE)
             for locator in locators:
                 layer.add_arrow_for_transform(locator.transform,
                                               length=locator.scale,
                                               color=point_color,
                                               altitude=0.1)
                 layer.set_color(Color.WHITE)
                 layer.add_text_world(locator.transform.translation,
                                      'Locator: {}'.format(obj_def_guid))
         if ocean is not None:
             species = [Species.HUMAN, Species.DOG]
             age = [Age.TODDLER, Age.CHILD, Age.ADULT]
             interval = {
                 WaterDepthIntervals.WET: Color.BLUE,
                 WaterDepthIntervals.WADE: Color.YELLOW,
                 WaterDepthIntervals.SWIM: Color.RED
             }
             for s in species:
                 for a in age:
                     for (i, c) in interval.items():
                         key = (s, a, i)
                         if key not in ocean._constraint_starts:
                             continue
                         transforms = ocean._constraint_starts[(s, a, i)]
                         for transform in transforms:
                             layer.add_circle(transform.translation,
                                              radius=0.1,
                                              num_points=6,
                                              color=c,
                                              altitude=0.1)
Ejemplo n.º 4
0
 def stop(self):
     locator_manager = services.locator_manager()
     locator_manager.unregister_locators_changed_callback(
         self._draw_locators)
Ejemplo n.º 5
0
 def _start(self):
     locator_manager = services.locator_manager()
     locator_manager.register_locators_changed_callback(self._draw_locators)
     self._draw_locators()
Ejemplo n.º 6
0
def c_api_setup_sim_spawner_data(zone_id, locator_data):
    locator_manager = services.locator_manager()
    locator_manager.set_up_locators(locator_data)
    return SUCCESS_CODE