From e58fac54f86b22f3aab431bef75eeb14de5ae679 Mon Sep 17 00:00:00 2001 From: "ProjectKoi-Kalo\\Kalo" Date: Mon, 1 Sep 2025 16:42:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=98=E9=A3=9F=E7=89=A9=E9=9C=80=E6=B1=82?= =?UTF-8?q?=E7=9A=84ability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1.6/1.6/Assemblies/ArachnaeSwarm.dll | Bin 22528 -> 24064 bytes 1.6/1.6/Defs/AbilityDefs/ARA_Abilities.xml | 10 +++ .../Defs/BodyAndPartDefs/ARA_Bodyparts.xml | 8 +- .../Thing_building/ARA_InteractiveEggSac.xml | 71 ++++++++++-------- Source/ArachnaeSwarm/ArachnaeSwarm.csproj | 2 + Source/ArachnaeSwarm/Building_Incubator.cs | 34 +++++++++ .../CompAbilityEffect_NeedCost.cs | 54 +++++++++++++ Source/ArachnaeSwarm/CompSpawnPawnFromList.cs | 52 +++++++------ Source/Documents/Project_Summary.md | 38 ++++++++++ 9 files changed, 212 insertions(+), 57 deletions(-) create mode 100644 Source/ArachnaeSwarm/Building_Incubator.cs create mode 100644 Source/ArachnaeSwarm/CompAbilityEffect_NeedCost.cs create mode 100644 Source/Documents/Project_Summary.md diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 59b7d73fbba8bb9eb689300b593d27e90d13feff..25d3265575cf1c69cffe0d3175d6e6b218cc9e5a 100644 GIT binary patch literal 24064 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 BkK_OV delta 10990 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 ARA_Proj_EggSac +
  • + Food + 4 + 食物不足 +
  • @@ -60,6 +65,11 @@ 3 +
  • + Food + 0.5 + 食物不足 +
  • diff --git a/1.6/1.6/Defs/BodyAndPartDefs/ARA_Bodyparts.xml b/1.6/1.6/Defs/BodyAndPartDefs/ARA_Bodyparts.xml index 6196576..1f1f860 100644 --- a/1.6/1.6/Defs/BodyAndPartDefs/ARA_Bodyparts.xml +++ b/1.6/1.6/Defs/BodyAndPartDefs/ARA_Bodyparts.xml @@ -14,7 +14,7 @@
  • ARA_Dorsum - 0.036 + 0
  • Torso
  • @@ -42,7 +42,7 @@
  • ARA_Sternum - 0.036 + 0
  • Torso
  • @@ -154,7 +154,7 @@
  • ARA_Tail - 0.025 + 0 Bottom Inside @@ -346,6 +346,7 @@ true
  • Hands
  • +
  • HeadClaw
  • @@ -401,6 +402,7 @@ true
  • Hands
  • +
  • HeadClaw
  • diff --git a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml index efd5b1b..47be407 100644 --- a/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml +++ b/1.6/1.6/Defs/Thing_building/ARA_InteractiveEggSac.xml @@ -5,13 +5,13 @@ ARA_InteractiveEggSac 一个黏滑的囊状物,可以通过交互来孵化特定的昆虫。 - Building + ArachnaeSwarm.Building_Incubator Building (1,1) - Things/Building/EggSac - Graphic_Random - (1.5,1.5) + Things/Building/EggSac + Graphic_Random + (1.5,1.5) Building PassThroughOnly @@ -20,39 +20,44 @@ Normal Light - 200 - 0.4 - -6 + 200 + 0.4 + -6 - true - false - false - false - true - true - false + true + false + false + false + true + true + false + + Things/Building/Natural/Hive + Graphic_Random + 1.6 + -
  • - 6 - (113,141,117,0) -
  • -
  • - -
  • Megascarab
  • -
  • Spelopede
  • -
  • Megaspider
  • - - -
  • ARA_ArachnaeQueen
  • -
    - 300 - true - -
  • - CocoonDestroyed -
  • +
  • + 6 + (113,141,117,0) +
  • +
  • + +
  • Megascarab
  • +
  • Spelopede
  • +
  • Megaspider
  • + + +
  • ARA_ArachnaeQueen
  • +
    + 300 + true + +
  • + CocoonDestroyed +
  • diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj index 1ee6c58..08e78d2 100644 --- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj +++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj @@ -73,7 +73,9 @@ + + diff --git a/Source/ArachnaeSwarm/Building_Incubator.cs b/Source/ArachnaeSwarm/Building_Incubator.cs new file mode 100644 index 0000000..ba4158f --- /dev/null +++ b/Source/ArachnaeSwarm/Building_Incubator.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using Verse; + +namespace ArachnaeSwarm +{ + public class Building_Incubator : Building + { + public CompSpawnPawnFromList SpawnComp => GetComp(); + + public GraphicData hatchingGraphicData; + private Graphic hatchingGraphic; + + public override void SpawnSetup(Map map, bool respawningAfterLoad) + { + base.SpawnSetup(map, respawningAfterLoad); + if (hatchingGraphicData != null) + { + hatchingGraphic = hatchingGraphicData.Graphic; + } + } + + public override Graphic Graphic + { + get + { + if (SpawnComp != null && SpawnComp.IsHatching && hatchingGraphic != null) + { + return hatchingGraphic; + } + return base.Graphic; + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompAbilityEffect_NeedCost.cs b/Source/ArachnaeSwarm/CompAbilityEffect_NeedCost.cs new file mode 100644 index 0000000..41613ba --- /dev/null +++ b/Source/ArachnaeSwarm/CompAbilityEffect_NeedCost.cs @@ -0,0 +1,54 @@ +using RimWorld; +using RimWorld.Planet; +using Verse; + +namespace ArachnaeSwarm +{ + public class CompProperties_AbilityNeedCost : CompProperties_AbilityEffect + { + public NeedDef needDef; + public float needCost; + public string failMessage; + + public CompProperties_AbilityNeedCost() + { + compClass = typeof(CompAbilityEffect_NeedCost); + } + } + + public class CompAbilityEffect_NeedCost : CompAbilityEffect + { + public new CompProperties_AbilityNeedCost Props => (CompProperties_AbilityNeedCost)props; + + public override bool GizmoDisabled(out string reason) + { + Pawn caster = parent.pawn; + if (caster != null && caster.needs != null) + { + if (caster.needs.TryGetNeed(Props.needDef, out Need need)) + { + if (need.CurLevel < Props.needCost) + { + reason = Props.failMessage; + return true; + } + } + } + reason = null; + return false; + } + + public override void Apply(LocalTargetInfo target, LocalTargetInfo dest) + { + base.Apply(target, dest); + Pawn caster = parent.pawn; + if (caster != null && caster.needs != null) + { + if (caster.needs.TryGetNeed(Props.needDef, out Need need)) + { + need.CurLevel -= Props.needCost; + } + } + } + } +} \ No newline at end of file diff --git a/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs b/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs index 07027e4..ce05723 100644 --- a/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs +++ b/Source/ArachnaeSwarm/CompSpawnPawnFromList.cs @@ -13,6 +13,7 @@ namespace ArachnaeSwarm private int spawnUntilTick = -1; private PawnKindDef spawningPawnKind; private PawnKindDef selectedPawnKind; + public bool IsHatching => spawnUntilTick > 0; public override IEnumerable CompFloatMenuOptions(Pawn selPawn) { @@ -40,6 +41,7 @@ namespace ArachnaeSwarm } } + public void StartIncubation() { spawningPawnKind = selectedPawnKind; @@ -55,6 +57,8 @@ namespace ArachnaeSwarm } } + + private void SpawnPawn(PawnKindDef pawnKind) { try @@ -71,34 +75,38 @@ namespace ArachnaeSwarm return; } - Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnKind, parent.Faction)); - if (pawn == null) + int count = Props.spawnCount.RandomInRange; + for (int i = 0; i < count; i++) { - Log.Error($"CompSpawnPawnFromList: Failed to generate pawn of kind {pawnKind.defName} for faction {parent.Faction?.Name ?? "null"}."); - return; - } - - if (GenSpawn.Spawn(pawn, parent.Position, parent.Map) == null) - { - Log.Error($"CompSpawnPawnFromList: Failed to spawn pawn {pawn} at {parent.Position}."); - if (!pawn.Destroyed) + Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(pawnKind, parent.Faction)); + if (pawn == null) { - pawn.Destroy(); + Log.Error($"CompSpawnPawnFromList: Failed to generate pawn of kind {pawnKind.defName} for faction {parent.Faction?.Name ?? "null"}."); + continue; } - return; - } - if (Props.lordJob != null) - { - try + if (GenSpawn.Spawn(pawn, parent.Position, parent.Map) == null) { - LordJob lordJobInstance = (LordJob)System.Activator.CreateInstance(Props.lordJob); - Lord lord = LordMaker.MakeNewLord(parent.Faction, lordJobInstance, parent.Map); - lord.AddPawn(pawn); + Log.Error($"CompSpawnPawnFromList: Failed to spawn pawn {pawn} at {parent.Position}."); + if (!pawn.Destroyed) + { + pawn.Destroy(); + } + continue; } - catch (System.Exception e) + + if (Props.lordJob != null) { - Log.Error($"CompSpawnPawnFromList: Error creating LordJob {Props.lordJob?.Name ?? "null"} or assigning pawn {pawn}. Exception: {e}"); + try + { + LordJob lordJobInstance = (LordJob)System.Activator.CreateInstance(Props.lordJob); + Lord lord = LordMaker.MakeNewLord(parent.Faction, lordJobInstance, parent.Map); + lord.AddPawn(pawn); + } + catch (System.Exception e) + { + Log.Error($"CompSpawnPawnFromList: Error creating LordJob {Props.lordJob?.Name ?? "null"} or assigning pawn {pawn}. Exception: {e}"); + } } } @@ -114,6 +122,7 @@ namespace ArachnaeSwarm } } + public override string CompInspectStringExtra() { if (spawnUntilTick > 0) @@ -136,6 +145,7 @@ namespace ArachnaeSwarm base.PostExposeData(); Scribe_Values.Look(ref spawnUntilTick, "spawnUntilTick", -1); Scribe_Defs.Look(ref spawningPawnKind, "spawningPawnKind"); + Scribe_Defs.Look(ref selectedPawnKind, "selectedPawnKind"); } } } \ No newline at end of file diff --git a/Source/Documents/Project_Summary.md b/Source/Documents/Project_Summary.md new file mode 100644 index 0000000..605fe2a --- /dev/null +++ b/Source/Documents/Project_Summary.md @@ -0,0 +1,38 @@ +# 项目:可交互的虫卵囊 + +## 1. 核心目标 + +创建一个可交互的虫卵囊,它允许一个特定的 Pawn(阿拉克涅女皇种)通过右键菜单与它交互,从一个可配置的列表中选择一个 Pawn,并在经过一段可配置的延迟后,生成这个 Pawn。 + +## 2. 已完成的功能 + +* **创建了新的 VS 项目**: [`ArachnaeSwarm.csproj`](Source/ArachnaeSwarm/ArachnaeSwarm.csproj) +* **实现了核心的生成逻辑**: + * `CompProperties_SpawnPawnFromList.cs`: 定义了 XML 中可配置的属性,包括: + * `pawnKinds`: 可生成的 Pawn 列表。 + * `whitelist`: 可以与虫卵囊交互的 Pawn 列表。 + * `delay`: 孵化延迟。 + * `spawnCount`: 生成数量。 + * `destroyOnSpawn`: 生成后是否摧毁自身。 + * `lordJob`: 生成的 Pawn 要执行的集体任务。 + * `CompSpawnPawnFromList.cs`: 实现了核心的生成逻辑,包括: + * 生成右键菜单。 + * 处理孵化倒计时。 + * 生成指定数量的 Pawn。 + * 在检查面板上显示孵化状态和提示信息。 +* **实现了交互的 Job**: + * `ARA_Jobs.xml`: 定义了 `ARA_IncubateJob`。 + * `JobDriver_Incubate.cs`: 实现了让 Pawn 走到虫卵囊旁边并启动孵化过程的逻辑。 +* **实现了动态的图形切换**: + * `Building_Incubator.cs`: 创建了一个新的建筑基类,它会根据虫卵囊是否正在孵化来动态地改变自身的图形。 +* **创建了测试用的 Defs**: + * `ARA_InteractiveEggSac.xml`: 定义了一个可交互的虫卵囊,用于在游戏中测试新功能。 + * `ArachnaeSwarm_Keys.xml`: 定义了相关的本地化 `key`。 + +## 3. 当前状态 + +目前,项目已经基本完成了所有的核心功能,并且能够成功编译。但是,在最后一次构建时,我们遇到了一个编译错误,导致我们无法进行最终的测试。 + +## 4. 下一步计划 + +解决当前的编译错误,并成功构建项目,以便在游戏中进行最终的测试。 \ No newline at end of file