Ejemplo n.º 1
0
    def _init_fow(self):
        for y in range(self._world.height):
            for x in range(self._world.width):
                fow_ref = self._rm.new()
                police_vision_ref = self._rm.new()
                terrorist_vision_ref = self._rm.new()
                self._fows_ref[(x, y)] = fow_ref
                self._police_visions_ref[(x, y)] = police_vision_ref
                self._terrorist_visions_ref[(x, y)] = terrorist_vision_ref

                pos = self._get_scene_position(Position(x=x, y=y))

                self._scene.add_action(
                    scene_actions.InstantiateBundleAsset(
                        ref=fow_ref,
                        asset=scene_actions.Asset(bundle_name='main',
                                                  asset_name='FOW')))
                self._scene.add_action(
                    scene_actions.ChangeTransform(
                        ref=fow_ref,
                        position=scene_actions.Vector3(x=pos['x'],
                                                       y=self.FOW_Y,
                                                       z=pos['z'])))

                self._scene.add_action(
                    scene_actions.InstantiateBundleAsset(
                        ref=police_vision_ref,
                        asset=scene_actions.Asset(bundle_name='main',
                                                  asset_name='PoliceVision')))
                self._scene.add_action(
                    scene_actions.ChangeTransform(
                        ref=police_vision_ref,
                        position=scene_actions.Vector3(x=pos['x'],
                                                       y=self.VISIONS_Y,
                                                       z=pos['z'])))
                self._scene.add_action(
                    scene_actions.ChangeIsActive(ref=police_vision_ref,
                                                 is_active=False))

                self._scene.add_action(
                    scene_actions.InstantiateBundleAsset(
                        ref=terrorist_vision_ref,
                        asset=scene_actions.Asset(
                            bundle_name='main', asset_name='TerroristVision')))
                self._scene.add_action(
                    scene_actions.ChangeTransform(
                        ref=terrorist_vision_ref,
                        position=scene_actions.Vector3(x=pos['x'],
                                                       y=self.VISIONS_Y,
                                                       z=pos['z'])))
                self._scene.add_action(
                    scene_actions.ChangeIsActive(ref=terrorist_vision_ref,
                                                 is_active=False))
Ejemplo n.º 2
0
    def _update_fow(self):
        new_hidden_fows_pos = []
        new_visible_police_visions_pos = []
        new_visible_terrorist_visions_pos = []

        for side in self._sides:
            new_visible_visions_pos = new_visible_police_visions_pos if side == 'Police' else new_visible_terrorist_visions_pos
            visible_visions_pos = self._visible_police_visions_pos if side == 'Police' else self._visible_terrorist_visions_pos
            visions_ref = self._police_visions_ref if side == 'Police' else self._terrorist_visions_ref

            for visible_pos in self._world.visions[side]:
                pos = (visible_pos.x, visible_pos.y)
                new_hidden_fows_pos.append(pos)
                new_visible_visions_pos.append(pos)

                if not pos in self._hidden_fows_pos:
                    self._hidden_fows_pos.append(pos)
                    self._scene.add_action(
                        scene_actions.ChangeIsActive(ref=self._fows_ref[pos],
                                                     is_active=False))

                if not pos in visible_visions_pos:
                    visible_visions_pos.append(pos)
                    self._scene.add_action(
                        scene_actions.ChangeIsActive(ref=visions_ref[pos],
                                                     is_active=True))

        must_remove_pos = []
        for pos in self._hidden_fows_pos:
            if not pos in new_hidden_fows_pos:
                must_remove_pos.append(pos)
        for pos in must_remove_pos:
            self._hidden_fows_pos.remove(pos)
            self._scene.add_action(
                scene_actions.ChangeIsActive(ref=self._fows_ref[pos],
                                             is_active=True))

        for side in self._sides:
            new_visible_visions_pos = new_visible_police_visions_pos if side == 'Police' else new_visible_terrorist_visions_pos
            visible_visions_pos = self._visible_police_visions_pos if side == 'Police' else self._visible_terrorist_visions_pos
            visions_ref = self._police_visions_ref if side == 'Police' else self._terrorist_visions_ref

            must_remove_pos = []
            for pos in visible_visions_pos:
                if not pos in new_visible_visions_pos:
                    must_remove_pos.append(pos)
            for pos in must_remove_pos:
                visible_visions_pos.remove(pos)
                self._scene.add_action(
                    scene_actions.ChangeIsActive(ref=visions_ref[pos],
                                                 is_active=False))
Ejemplo n.º 3
0
 def _remove_bomb(self, bombsite_ref):
     self._pause_sound(bombsite_ref, 'AudioSource',
                       self.EXPLOSION_OFFSET_CYCLES)
     self._scene.add_action(
         scene_actions.ChangeIsActive(ref=bombsite_ref,
                                      child_ref='BombPosition',
                                      cycle=self.EXPLOSION_OFFSET_CYCLES,
                                      is_active=False))
Ejemplo n.º 4
0
 def _add_bomb(self, bombsite_ref):
     self._scene.add_action(
         scene_actions.ChangeIsActive(ref=bombsite_ref,
                                      child_ref='BombPosition',
                                      is_active=True))
     self._scene.add_action(
         scene_actions.ChangeAnimatorState(ref=bombsite_ref,
                                           child_ref='BombPosition/Bomb',
                                           state_name='BombBeep',
                                           normalized_time=0))
Ejemplo n.º 5
0
 def _add_explosion(self, bombsite_ref):
     self._scene.add_action(
         scene_actions.ChangeIsActive(ref=bombsite_ref,
                                      child_ref='Explosion',
                                      cycle=self.EXPLOSION_OFFSET_CYCLES,
                                      is_active=True))
     self._play_sound(bombsite_ref, 'AudioSource',
                      self.EXPLOSION_OFFSET_CYCLES, 'bomb_explosion_sfx')
     self._pause_sound(
         bombsite_ref, 'AudioSource',
         self.EXPLOSION_OFFSET_CYCLES + self.EXPLOSION_SOUND_CYCLES)
Ejemplo n.º 6
0
 def _change_is_active(self, reference, child_ref, cycle, is_active):
     self._scene.add_action(
         scene_actions.ChangeIsActive(ref=reference,
                                      child_ref=child_ref,
                                      cycle=cycle,
                                      is_active=is_active))
Ejemplo n.º 7
0
    def _draw_agents(self):
        for side in self._sides:
            agents = self._world.polices if side == 'Police' else self._world.terrorists
            skins = self.POLICE_SKINS if side == 'Police' else self.TERRORIST_SKINS
            material_offsets = self.POLICE_MATERIAL_OFFSETS if side == 'Police' else self.TERRORIST_MATERIAL_OFFSETS
            heads = self.POLICE_HEADS if side == 'Police' else self.TERRORIST_HEADS
            items = self.POLICE_ITEMS if side == 'Police' else self.TERRORIST_ITEMS

            for agent in agents:
                reference = self._rm.new()
                self._agents_ref[side][agent.id] = reference

                self._scene.add_action(
                    scene_actions.InstantiateBundleAsset(
                        ref=reference,
                        asset=scene_actions.Asset(bundle_name='main',
                                                  asset_name=side)))

                # set ID
                self._scene.add_action(
                    scene_actions.ChangeText(
                        ref=reference,
                        child_ref=
                        'Root/Hips/Spine_01/Spine_02/Spine_03/Neck/Head/Canvas/ID',
                        text=str(agent.id)))

                # set appearance
                skin = skins[agent.id % len(skins)]
                self._scene.add_action(
                    scene_actions.ChangeIsActive(
                        ref=reference,
                        child_ref='Skin/{0}'.format(skin),
                        is_active=True))

                material_num = (
                    ((agent.id // len(material_offsets)) +
                     material_offsets[agent.id % len(material_offsets)]) %
                    self.TOTAL_SKINS_MATERIALS) + 1
                self._scene.add_action(
                    scene_actions.ChangeMaterial(
                        ref=reference,
                        child_ref='Skin/{0}'.format(skin),
                        material_asset=scene_actions.Asset(
                            bundle_name='main',
                            asset_name='Material{:d}'.format(material_num)),
                        index=0))

                for head in heads[agent.id % len(heads)]:
                    if head == None:
                        continue
                    self._scene.add_action(
                        scene_actions.ChangeIsActive(
                            ref=reference,
                            child_ref=
                            'Root/Hips/Spine_01/Spine_02/Spine_03/Neck/Head/HeadMask/{0}'
                            .format(head),
                            is_active=True))

                for item in items[agent.id % len(items)]:
                    if item == None:
                        continue
                    self._scene.add_action(
                        scene_actions.ChangeIsActive(
                            ref=reference,
                            child_ref='Root/Hips/Items/{0}'.format(item),
                            is_active=True))

                self._scene.add_action(
                    scene_actions.ChangeIsActive(
                        ref=reference,
                        child_ref=
                        'Root/Hips/Spine_01/Spine_02/Spine_03/Clavicle_R/Shoulder_R/Elbow_R/Hand_R/{0}'
                        .format(side + 'Rifle'),
                        is_active=True))

                # set position
                self._agents_direction[side][agent.id] = agent.init_direction
                self._move_xz(reference, None, None, agent.position)
                self._turn_y(reference, None, None,
                             self.DIR_TO_ANGLE[agent.init_direction.name])