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))
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))
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))
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))
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)
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))
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])