- Added `owned_regions` attribute to the Avatar class to track regions owned by avatars. - Introduced `occupy_region` and `release_region` methods for managing region ownership and ensuring proper relationship handling. - Updated AvatarManager to clear relationships when an avatar is released, ensuring no lingering references. - Refactored region ownership logic in the Occupy action and Simulator to utilize the new methods for better clarity and maintainability. - Enhanced game loading process to establish ownership relationships correctly during game state restoration.
108 lines
3.4 KiB
Python
108 lines
3.4 KiB
Python
|
|
import pytest
|
|
from src.classes.death_reason import DeathReason, DeathType
|
|
from src.classes.death import handle_death
|
|
from src.classes.region import CultivateRegion, EssenceType
|
|
|
|
def test_death_releases_region(base_world, dummy_avatar):
|
|
"""测试死亡时释放占领的洞府"""
|
|
# 1. 创建一个修炼区域
|
|
region = CultivateRegion(
|
|
id=1001,
|
|
name="Test Cave",
|
|
desc="A test cave",
|
|
essence_type=EssenceType.GOLD,
|
|
essence_density=10
|
|
)
|
|
# 将区域添加到地图
|
|
base_world.map.regions[region.id] = region
|
|
|
|
# 2. 让角色占领该区域
|
|
dummy_avatar.occupy_region(region)
|
|
|
|
# 验证占领成功
|
|
assert region.host_avatar == dummy_avatar
|
|
assert region in dummy_avatar.owned_regions
|
|
|
|
# 3. 角色死亡
|
|
reason = DeathReason(DeathType.OLD_AGE)
|
|
handle_death(base_world, dummy_avatar, reason)
|
|
|
|
# 4. 验证洞府已被释放
|
|
assert region.host_avatar is None
|
|
assert len(dummy_avatar.owned_regions) == 0
|
|
assert dummy_avatar.is_dead is True
|
|
|
|
def test_occupy_region_logic(base_world, dummy_avatar):
|
|
"""测试占领逻辑的双向绑定和抢夺"""
|
|
from src.classes.avatar import Avatar, Gender
|
|
from src.classes.age import Age
|
|
from src.classes.cultivation import Realm
|
|
from src.utils.id_generator import get_avatar_id
|
|
from src.classes.root import Root
|
|
from src.classes.alignment import Alignment
|
|
from src.classes.calendar import create_month_stamp, Year, Month
|
|
|
|
# 创建第二个角色
|
|
other_avatar = Avatar(
|
|
world=base_world,
|
|
name="Other",
|
|
id=get_avatar_id(),
|
|
birth_month_stamp=create_month_stamp(Year(2000), Month.JANUARY),
|
|
age=Age(20, Realm.Qi_Refinement),
|
|
gender=Gender.MALE,
|
|
pos_x=0, pos_y=0,
|
|
root=Root.WOOD,
|
|
alignment=Alignment.RIGHTEOUS
|
|
)
|
|
|
|
region = CultivateRegion(
|
|
id=1002,
|
|
name="Test Cave 2",
|
|
desc="Another test cave",
|
|
essence_type=EssenceType.WOOD,
|
|
essence_density=10
|
|
)
|
|
|
|
# 1. dummy_avatar 占领
|
|
dummy_avatar.occupy_region(region)
|
|
assert region.host_avatar == dummy_avatar
|
|
assert region in dummy_avatar.owned_regions
|
|
|
|
# 2. other_avatar 抢夺
|
|
other_avatar.occupy_region(region)
|
|
|
|
# 验证所有权转移
|
|
assert region.host_avatar == other_avatar
|
|
assert region in other_avatar.owned_regions
|
|
|
|
# 验证旧主已释放
|
|
assert region not in dummy_avatar.owned_regions
|
|
|
|
def test_remove_avatar_releases_region(base_world, dummy_avatar):
|
|
"""测试彻底删除角色时释放占领的洞府"""
|
|
# 1. 创建一个修炼区域
|
|
region = CultivateRegion(
|
|
id=1003,
|
|
name="Test Cave 3",
|
|
desc="Yet another test cave",
|
|
essence_type=EssenceType.WATER,
|
|
essence_density=10
|
|
)
|
|
base_world.map.regions[region.id] = region
|
|
|
|
# 2. 注册并占领
|
|
base_world.avatar_manager.register_avatar(dummy_avatar)
|
|
dummy_avatar.occupy_region(region)
|
|
|
|
assert region.host_avatar == dummy_avatar
|
|
|
|
# 3. 彻底删除角色
|
|
base_world.avatar_manager.remove_avatar(dummy_avatar.id)
|
|
|
|
# 4. 验证洞府已被释放
|
|
assert region.host_avatar is None
|
|
# 注意:此时 dummy_avatar 对象可能还在内存中,但已经从管理器移除
|
|
# 它的 owned_regions 应该被清空了
|
|
assert len(dummy_avatar.owned_regions) == 0
|