def test_compute_player_motion_mount_and_active_floor(): elevator = Movable( type=EntityDBEntry(id=EntityType.ACTIVEFLOOR_ELEVATOR), position_x=0.5, position_y=0.7, velocity_x=-0.1, velocity_y=-0.3, ) poly_elevator = PolyPointer(101, elevator, MemContext()) # Turkey on an elevator mount = Mount( type=EntityDBEntry(id=EntityType.MOUNT_TURKEY), position_x=18, position_y=13, velocity_x=-2, velocity_y=-7, overlay=poly_elevator, ) poly_mount = PolyPointer(102, mount, MemContext()) player = Player(position_x=5, position_y=7, velocity_x=-1, velocity_y=-3, overlay=poly_mount) expected_motion = PlayerMotion(position_x=18.5, position_y=13.7, velocity_x=-2.1, velocity_y=-7.3) run_state = RunState() assert run_state.compute_player_motion(player) == expected_motion
def test_could_tp_mount(mount_type, expected_could_tp): mount = Mount(type=EntityDBEntry(id=mount_type)) poly_mount = PolyPointer(101, mount, MemContext()) player = Player(overlay=poly_mount) run_state = RunState() assert run_state.could_tp(player, set(), set()) == expected_could_tp
def make_player_with_hh_type(entity_map: EntityMapBuilder, hh_type: EntityType): hh_entity_db = EntityDBEntry(id=hh_type) hh_entity = Player(type=hh_entity_db) hh_id = entity_map.add_entity(hh_entity) return Player(linked_companion_child=hh_id)
def test_has_mounted_tame(chain_status, theme, mount_type, mount_tamed, expected_low): mount = Mount(type=EntityDBEntry(id=mount_type), is_tamed=mount_tamed) poly_mount = PolyPointer(101, mount, MemContext()) run_state = RunState() run_state.sunken_chain_status = chain_status run_state.update_has_mounted_tame(theme, poly_mount) is_low = Label.LOW in run_state.run_label._set assert is_low == expected_low
def test_rope_deployed(new_entity_types, theme, expected_no): run_state = RunState() run_state.new_entities = [ poly_pointer_no_mem(Entity(type=EntityDBEntry(id=t))) for t in new_entity_types ] run_state.update_rope_deployed(theme) is_no = Label.NO in run_state.run_label._set assert is_no == expected_no
def test_compute_player_motion_mount(): mount = Mount( type=EntityDBEntry(id=EntityType.MOUNT_TURKEY), position_x=18, position_y=13, velocity_x=-2, velocity_y=-7, ) poly_mount = PolyPointer(101, mount, MemContext()) player = Player(position_x=5, position_y=7, velocity_x=-1, velocity_y=-3, overlay=poly_mount) expected_motion = PlayerMotion(position_x=18, position_y=13, velocity_x=-2, velocity_y=-7) run_state = RunState() assert run_state.compute_player_motion(player) == expected_motion
def test_compute_player_motion_active_floor(): elevator = Movable( type=EntityDBEntry(id=EntityType.ACTIVEFLOOR_ELEVATOR), position_x=0.5, position_y=0.7, velocity_x=-0.1, velocity_y=-0.3, ) poly_elevator = PolyPointer(101, elevator, MemContext()) player = Player(position_x=5, position_y=7, velocity_x=-1, velocity_y=-3, overlay=poly_elevator) expected_motion = PlayerMotion(position_x=5.5, position_y=7.7, velocity_x=-1.1, velocity_y=-3.3) run_state = RunState() assert run_state.compute_player_motion(player) == expected_motion
def test_no_tp( player_x, player_y, player_vx, player_vy, idle_counter, shadow_x, shadow_y, expected_no_tp, ): fx_shadow_type = EntityDBEntry(id=EntityType.FX_TELEPORTSHADOW) new_entities = [] src_shadow = LightEmitter(type=fx_shadow_type, idle_counter=idle_counter, emitted_light=Illumination()) new_entities.append(poly_pointer_no_mem(src_shadow)) dest_illumination = Illumination(light_pos_x=shadow_x, light_pos_y=shadow_y) dest_shadow = LightEmitter(type=fx_shadow_type, idle_counter=idle_counter, emitted_light=dest_illumination) new_entities.append(poly_pointer_no_mem(dest_shadow)) player = Player( position_x=player_x, position_y=player_y, velocity_x=player_vx, velocity_y=player_vy, ) item_set = {EntityType.ITEM_TELEPORTER_BACKPACK} prev_item_set = set() run_state = RunState() run_state.new_entities = new_entities run_state.update_no_tp(player, item_set, prev_item_set) is_no_tp = Label.NO_TELEPORTER in run_state.run_label._set assert is_no_tp == expected_no_tp
def test_new_entities(screen, level_started, entity_types, expected_entity_types): run_state = RunState() run_state.level_started = level_started fake_entity_db = {} for entity_type in entity_types: if entity_type not in fake_entity_db: fake_entity_db[entity_type] = EntityDBEntry(id=entity_type) entity_map = EntityMapBuilder() run_state.prev_next_uid = entity_map.next_uid entity_map.add_trivial_entities(entity_types) game_state = State( screen=screen, next_entity_uid=entity_map.next_uid, instance_id_to_pointer=entity_map.build(), ) run_state.update_new_entities(game_state) got_types = [e.value.type.id for e in run_state.new_entities] assert got_types == expected_entity_types
def add_trivial_entity(self, entity_type: EntityType) -> int: entity = Entity(type=EntityDBEntry(entity_type)) return self.add_entity(entity)