diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll
index 24cac34..47bdf0a 100644
Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/Constant/Constant.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/Constant/Constant.xml
deleted file mode 100644
index 2e801bb..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/Constant/Constant.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
- ArachnaeNode_normal
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- normal
- normal
- normal
- normal
-
-
- 0
-
-
- ArachnaeNode_eyeMoving
- ArachnaeNode_Race_Myrmecocystus
-
-
- 15
- (-0.005,0,0)
-
-
- 1002
- 30
- 500
-
-
- ArachnaeNode_eyeMoving2
- ArachnaeNode_Race_Myrmecocystus
-
-
- 15
- (0.005,0,0)
-
-
- 1001
- 30
- 500
-
-
- ArachnaeNode_eyeFlicker
- ArachnaeNode_Race_Myrmecocystus
-
-
- 3
-
-
- 1001
- 10
- 30
-
-
- ArachnaeNode_blink
- ArachnaeNode_Race_Myrmecocystus
-
-
- 3
- (0,0,-0.005)
- (0,0,-0.005)
- normal
-
-
- 12
- (0,0,-0.01)
- close
-
-
- 3
- (0,0,-0.005)
- (0,0,-0.005)
- normal
-
-
- 30
- 500
- 1000
-
-
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/Constant/Thoughts.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/Constant/Thoughts.xml
deleted file mode 100644
index 0e3bc26..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/Constant/Thoughts.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/AttackMelee.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/AttackMelee.xml
deleted file mode 100644
index 88e7398..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/AttackMelee.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
- ArachnaeNode_AttackMelee
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- angled
- open
- (0,0,-0.00875)
- (0.0,0,-0.005)
-
-
-
- AttackMelee
-
- 10200
-
-
-
- AttackMelee2
-
-
- 1
- angled
- normal
-
-
-
- AttackMelee
-
- 10201
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/AttackStatic.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/AttackStatic.xml
deleted file mode 100644
index 3acb48e..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/AttackStatic.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
- ArachnaeNode_AttackStatic
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- angled
- open
- (0,0,-0.00875)
- (0.0,0,-0.005)
-
-
-
- AttackStatic
-
- 10200
-
-
-
- AttackStatic2
-
-
- 1
- angled
- normal
-
-
-
- AttackStatic
-
- 10201
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/DoBill.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/DoBill.xml
deleted file mode 100644
index c0bee2d..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/DoBill.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
- ArachnaeNode_DoBill
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- (0,0,-0.00625)
- (0.0,0,-0.0075)
- (0,0,-0.0007)
- normal
- (0,0,-0.00325)
- (0,0,-0.00125)
-
-
- 0
- 0
-
- DoBill
-
- 10000
- true
-
-
-
- ArachnaeNode_DoBill2
- ArachnaeNode_Race_Myrmecocystus
-
-
- 3
- (0,0,-0.0035)
- (0.0,0,-0.00375)
- (0,0,-0.0035)
- normal
- (0,0,-0.00025)
- (0,0,-0.000625)
-
-
- 6
- (0,0,-0.007)
- (0.0,0,-0.00525)
- (0,0,-0.0075)
- normal
- (0,0,-0.00375)
- (0,0,-0.00125)
-
-
- 3
- (0,0,-0.0035)
- (0.0,0,-0.00375)
- (0,0,-0.0035)
- normal
- (0,0,-0.00025)
- (0,0,-0.000625)
-
-
- 100
- 200
-
- DoBill
-
- 10001
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Goto.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Goto.xml
deleted file mode 100644
index 4fe2805..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Goto.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
- ArachnaeNode_Goto
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- angled
- normal
- (0.0,0,-0.0025)
-
-
-
- Goto
-
- 10300
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Ingest.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Ingest.xml
deleted file mode 100644
index 3cdcc4c..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Ingest.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
- ArachnaeNode_Ingest
- ArachnaeNode_Race_Myrmecocystus
-
-
- 4
- (0.0,0,0.0025)
- open
-
-
- 4
- (0.0,0,0.005)
- open
-
-
- 6
- (0.0,0,0)
- normal
-
-
- 0
- 30
-
- Ingest
-
- 10
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/LayDown.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/LayDown.xml
deleted file mode 100644
index a7fb6bf..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/LayDown.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-
-
- ArachnaeNode_laydown
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- flat
- close
- normal
-
-
- 0
- 0
-
- LayDown
-
- 10001
- true
-
-
-
- ArachnaeNode_laydown2
- ArachnaeNode_Race_Myrmecocystus
-
-
- 240
- open
-
-
- 100
- 500
-
- LayDown
-
- 10002
- true
-
-
-
- ArachnaeNode_laydown3
- ArachnaeNode_Race_Myrmecocystus
-
-
- 15
- (0.0,0,0.0015)
- (0,0,0.0035)
- (0,0,0.00025)
- (0,0,0.000625)
-
-
- 60
- (0.0,0,0.00275)
- (0,0,0.0075)
- (0,0,0.00375)
- (0,0,0.00125)
-
-
- 10
- (0.0,0,0.0015)
- (0,0,0.0035)
- (0,0,0.00025)
- (0,0,0.000625)
-
-
- 40
- 200
-
- LayDown
-
- 10003
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Lovin.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Lovin.xml
deleted file mode 100644
index 23e8c77..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Lovin.xml
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
- ArachnaeNode_Lovin
- ArachnaeNode_Race_Myrmecocystus
-
-
- 8
- s-shaped
- (0.0,0,0.00125)
- (0.0,0,-0.005)
- close
- (0.0,0,-0.001)
- (0.0,0,0.0075)
- open
- blush
-
-
- 8
- s-shaped
- (0.0,0,-0.00375)
- (0.0,0,-0.0075)
- close
- (0.0,0,-0.0015)
- (0.0,0,0.0075)
- open
- (0,0,-0.002)
- blush
-
-
- 8
- s-shaped
- (0.0,0,0.0075)
- (0.0,0,0.00125)
- close
- (0.0,0,0.001)
- (0.0,0,0.0075)
- open
- (0,0,-0.001)
- blush
-
-
- true
-
- Lovin
- MLI_Jobs_MassLoveIn
- MLI_Jobs_SingleLoveIn
-
- 10400
-
-
-
- ArachnaeNode_Lovin2
- ArachnaeNode_Race_Myrmecocystus
-
-
- 240
- s-shaped
- (0.0,0,0.01)
- (0.0,0,-0.00)
- normal
- (0.0,0,-0.001)
- (0,0,-0.001)
- (0.0,0,0.005)
- normal
- blush
-
-
- 240
- 240
- true
-
- Lovin
- MLI_Jobs_MassLoveIn
- MLI_Jobs_SingleLoveIn
-
- 10500
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Mine.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Mine.xml
deleted file mode 100644
index 0e168f9..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Mine.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
- ArachnaeNode_Mine
- ArachnaeNode_Race_Myrmecocystus
-
-
- 10
- (0,0,0.005)
- (0,0,0)
- angled
- (0,0,0.0025)
- open
-
-
- 5
- (0,0,0.01)
- (0,0,-0.01)
- angled
- (0,0,-0.0025)
- open
-
-
- 0
- 0
-
- Mine
-
- 10000
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/RemoveApparel.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/RemoveApparel.xml
deleted file mode 100644
index 4bceab1..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/RemoveApparel.xml
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
- ArachnaeNode_RemoveApparel
- ArachnaeNode_Race_Myrmecocystus
-
-
- 10
- (0,0,0.0)
- (-0.005,0,0.005)
- open
- blush
-
-
- 10
- (0,0,0.0)
- (0.005,0,0.005)
- open
- blush
-
-
- 10
- (0,0,0.0)
- (0,0,0.005)
- open
- blush
-
-
-
- RemoveApparel
-
- 105
- true
- 30
- 300
-
-
-
- ArachnaeNode_RemoveApparel2
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- s-shaped
- normal
- (0.0,0,0.005)
- blush
-
-
-
- RemoveApparel
-
- 104
- true
-
-
-
- ArachnaeNode_RemoveApparel3
- ArachnaeNode_Race_Myrmecocystus
-
-
- 120
- flat
- close
- (0.0,0,0.005)
- blush
-
-
-
- RemoveApparel
-
- 110
- true
- 30
- 300
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Research.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Research.xml
deleted file mode 100644
index 84c987e..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Research.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
- ArachnaeNode_Research
- ArachnaeNode_Race_Myrmecocystus
-
-
- 10
- (0,0,-0.005)
- (0,0,-0.01)
- flat
- normal
- (0,0,-0.00375)
-
-
-
- Research
-
- 10001
- true
-
-
-
- ArachnaeNode_Research2
- ArachnaeNode_Race_Myrmecocystus
-
-
- 4
- (0,0,0.00325)
- (0,0,0.00625)
- (0,0,0.005)
- normal
- open
-
-
- 40
- (0,0,0.00625)
- (0,0,0.00875)
- (0,0,0.01)
- normal
- (0,0,0.0025)
- open
-
-
- 3
- (0,0,0.00625)
- (0,0,0.00875)
- (0,0,0.01)
- close
- normal
- (0,0,0.0025)
- open
-
-
- 20
- (0,0,0.00625)
- (0,0,0.00875)
- (0,0,0.01)
- normal
- (0,0,0.0025)
- open
-
-
- 3
- (0,0,0.00625)
- (0,0,0.00875)
- (0,0,0.01)
- close
- normal
- (0,0,0.0025)
- open
-
-
- 40
- (0,0,0.00625)
- (0,0,0.00875)
- (0,0,0.01)
- normal
- (0,0,0.0025)
- open
-
-
- 8
- (0,0,0.00325)
- (0,0,0.00625)
- (0,0,0.005)
- normal
- open
-
-
- 900
- 1200
-
- Research
-
- 10002
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/SocialRelax.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/SocialRelax.xml
deleted file mode 100644
index fff8b13..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/SocialRelax.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- ArachnaeNode_SocialRelax
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- normal
- close
-
-
-
- SocialRelax
-
- 10200
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/StandAndBeSociallyActive.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/StandAndBeSociallyActive.xml
deleted file mode 100644
index cfdbbbd..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/StandAndBeSociallyActive.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
- ArachnaeNode_StandAndBeSociallyActive
- ArachnaeNode_Race_Myrmecocystus
-
-
- 3
- normal
- (0.0,0,-0.0025)
- open
-
-
- 3
- normal
- (0.0,0,-0.005)
- open
-
-
- 3
- normal
- (0.0,0,0)
- normal
-
-
- 0
- 100
-
- StandAndBeSociallyActive
-
- 10
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Strip.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Strip.xml
deleted file mode 100644
index 38c6499..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Strip.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
- ArachnaeNode_Strip
- ArachnaeNode_Race_Myrmecocystus
-
-
- 10
- (0,0,0.0)
- (-0.005,0,0.005)
- blush
-
-
- 10
- (0,0,0.0)
- (0.005,0,0.005)
- blush
-
-
- 10
- (0,0,0.0)
- (0,0,0.005)
- blush
-
-
-
- Strip
-
- 105
- true
- 30
- 300
-
-
-
- Strip2
-
-
- 1
- s-shaped
- normal
- open
- blush
-
-
-
- Strip
-
- 106
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/WaitCombat.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/WaitCombat.xml
deleted file mode 100644
index 3a6a2a7..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/WaitCombat.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
- ArachnaeNode_WaitCombat
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- angled
- normal
-
-
-
- Wait_Combat
-
- 10200
-
-
-
- ArachnaeNode_Wait_Combat_Rare
- ArachnaeNode_Race_Myrmecocystus
-
-
- 15
- normal
-
-
- 4
- (0,0,-0.00375)
- flat
- close
- (0,0,-0.0025)
- (0,0,-0.00625)
- open
-
-
- 45
- (0,0,-0.01)
- s-shaped
- close
- (0,0,-0.005)
- (0,0,-0.0175)
- open
- (0,0,-0.005)
-
-
- 30
- (0,0,-0.01)
- s-shaped
- close
- (0,0,-0.005)
- (0,0,-0.015)
- open
- (0,0,-0.005)
-
-
- 7
- (0,0,-0.00375)
- s-shaped
- close
- (0,0,-0.0025)
- (0,0,-0.0085)
- open
-
-
- 4
- flat
- close
- normal
-
-
- 30
- normal
-
-
-
- Wait_Combat
-
- 10301
- 1000
- 2000
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Wait_Downed.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Wait_Downed.xml
deleted file mode 100644
index b5dab76..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Wait_Downed.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
-
-
- ArachnaeNode_Wait_Downed
- ArachnaeNode_Race_Myrmecocystus
-
-
- 30
- (0,0,0.015)
- (0,0,0.01)
- (0,0,0.01)
- flat
- (0,0,0.0025)
- open
-
-
- 3
- (0,0,0.0075)
- (0,0,0.005)
- (0,0,0.005)
- flat
- normal
-
-
- 0
- 100
-
- Wait_Downed
-
- 10000
- true
-
-
-
- Wait_Downed2
-
-
- 3
- (0,0,0.005)
- flat
-
-
-
- Wait_Downed
-
- 10001
- true
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Wear.xml b/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Wear.xml
deleted file mode 100644
index 03d1202..0000000
--- a/1.6/1.6/Defs/AnimationDefs/ArachnaeNode_Race/ForJobs/Wear.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
- ArachnaeNode_Wear
- ArachnaeNode_Race_Myrmecocystus
-
-
- 10
- (0,0,0.0)
- (-0.005,0,0.005)
- open
- blush
-
-
- 10
- (0,0,0.0)
- (0.005,0,0.005)
- open
- blush
-
-
- 10
- (0,0,0.0)
- (0,0,0.005)
- open
- blush
-
-
-
- Wear
-
- 105
- true
- 30
- 300
-
-
-
- ArachnaeNode_Wear2
- ArachnaeNode_Race_Myrmecocystus
-
-
- 1
- s-shaped
- normal
- (0.0,0,0.005)
- blush
-
-
-
- Wear
-
- 104
- true
-
-
-
- Wear3
-
-
- 120
- flat
- close
- (0.0,0,0.005)
- blush
-
-
-
- Wear
-
- 110
- true
- 30
- 300
-
-
\ No newline at end of file
diff --git a/1.6/1.6/Defs/AnimationDefs/WULA_Mech_Flyer_Anim.xml b/1.6/1.6/Defs/AnimationDefs/WULA_Mech_Flyer_Anim.xml
new file mode 100644
index 0000000..34824ca
--- /dev/null
+++ b/1.6/1.6/Defs/AnimationDefs/WULA_Mech_Flyer_Anim.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+ WULA_Mech_Flyer_North
+ 4
+ true
+
+
+ ARA_Flight_Attachment
+
+
+ WULA_Mech_Flyer_Flying_north_0_gs0
+ WULA_Mech_Flyer_Flying_north_1_gs2
+
+
+
+
+
+
+
+
+ WULA_Mech_Flyer_East
+ 4
+ true
+
+
+ ARA_Flight_Attachment
+
+
+ WULA_Mech_Flyer_Flying_east_0_gs0
+ WULA_Mech_Flyer_Flying_east_1_gs2
+
+
+
+
+
+
+
+
+ WULA_Mech_Flyer_South
+ 4
+ true
+
+
+ ARA_Flight_Attachment
+
+
+ WULA_Mech_Flyer_Flying_south_0_gs0
+ WULA_Mech_Flyer_Flying_south_1_gs2
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/1.6/1.6/Defs/GraphicStateDefs/WULA_Mech_Flyer_Graphics.xml b/1.6/1.6/Defs/GraphicStateDefs/WULA_Mech_Flyer_Graphics.xml
new file mode 100644
index 0000000..92aadc2
--- /dev/null
+++ b/1.6/1.6/Defs/GraphicStateDefs/WULA_Mech_Flyer_Graphics.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+ WULA_Mech_Flyer_Flying_north_0_gs
+
+ Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_north_0
+ 1.35
+
+
+
+ WULA_Mech_Flyer_Flying_north_1_gs
+
+ Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_north_1
+ 1.35
+
+
+
+
+
+ WULA_Mech_Flyer_Flying_east_0_gs
+
+ Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_east_0
+ 1.35
+
+
+
+ WULA_Mech_Flyer_Flying_east_1_gs
+
+ Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_east_1
+ 1.35
+
+
+
+
+
+ WULA_Mech_Flyer_Flying_south_0_gs
+
+ Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_south_0
+ 1.35
+
+
+
+ WULA_Mech_Flyer_Flying_south_1_gs
+
+ Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_south_1
+ 1.35
+
+
+
+
\ No newline at end of file
diff --git a/1.6/1.6/Defs/HeadType_Defs/ARA_HeadTypeDefs.xml b/1.6/1.6/Defs/HeadType_Defs/ARA_HeadTypeDefs.xml
index ea612ad..3b0e85e 100644
--- a/1.6/1.6/Defs/HeadType_Defs/ARA_HeadTypeDefs.xml
+++ b/1.6/1.6/Defs/HeadType_Defs/ARA_HeadTypeDefs.xml
@@ -12,7 +12,7 @@
ARA_QUEEN_Female_AverageNormalA
- Textures/Pawns/General/Invisible/Inv
+ ArachnaeSwarm/Things/General/Invisible/Inv
diff --git a/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml b/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml
index 2087809..8bf5e9b 100644
--- a/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml
+++ b/1.6/1.6/Defs/PawnKindDef/ARA_PawnKinds.xml
@@ -169,7 +169,7 @@
0
-
+
ArachnaeNode_Race_Facehugger
ArachnaeNode_Race_Facehugger
@@ -219,6 +219,11 @@
ArachnaeNode_Race_Skyraider
PlayerColony
0
+ Things/Pawn/Animal/Goose/Goose_Flying_
+ 1.35
+ 2
+ 2
+ false
diff --git a/1.6/1.6/Defs/PawnRenderNodeTagDefs/ARA_NodeTagDefs.xml b/1.6/1.6/Defs/PawnRenderNodeTagDefs/ARA_NodeTagDefs.xml
new file mode 100644
index 0000000..f5ee0bc
--- /dev/null
+++ b/1.6/1.6/Defs/PawnRenderNodeTagDefs/ARA_NodeTagDefs.xml
@@ -0,0 +1,6 @@
+
+
+
+ ARA_Flight_Attachment
+
+
\ No newline at end of file
diff --git a/1.6/1.6/Defs/PawnRenderTreeDefs/ARA_RenderTree.xml b/1.6/1.6/Defs/PawnRenderTreeDefs/ARA_RenderTree.xml
new file mode 100644
index 0000000..1973a1d
--- /dev/null
+++ b/1.6/1.6/Defs/PawnRenderTreeDefs/ARA_RenderTree.xml
@@ -0,0 +1,153 @@
+
+
+
+ ARA_ArachnaeRenderTree
+
+ Root
+ Root
+
+
+ Body
+ PawnRenderNode_Body
+ PawnRenderNodeWorker_Body
+ Body
+ Body
+ Skin
+ true
+ true
+
+
+ Body tattoo
+ PawnRenderNode_Tattoo_Body
+ PawnRenderNodeWorker_Body_Tattoo
+ Skin
+ true
+ 2
+ Fresh, Rotting
+
+
+ Wounds - pre apparel
+ PawnRenderNodeWorker_OverlayWounds
+ Body
+ 8
+
+
+ Baby swaddle
+ PawnRenderNode_Swaddle
+ PawnRenderNodeWorker_Swaddle
+ Things/Pawn/Humanlike/Apparel/SwaddledBaby/Swaddled_Child
+ 0.1
+ 0.6~0.89
+ 10
+
+
+
+
+ Arachnae Flight Attachment
+ ARA_Flight_Attachment
+ ArachnaeSwarm/Things/General/Invisible/Inv
+ -10
+
+
+
+
+ Apparel root
+ ApparelBody
+ 20
+
+
+ Wounds - post apparel
+ PawnRenderNodeWorker_OverlayWounds
+ true
+ Body
+ 30
+
+
+ Firefoam
+ PawnRenderNodeWorker_OverlayFirefoam
+ Body
+ 40
+
+
+
+
+ Head stump
+ PawnRenderNode_Stump
+ PawnRenderNodeWorker_Stump
+ Things/Pawn/Humanlike/Heads/None_Average_Stump
+ 50
+ Skin
+ Head
+ true
+ true
+ Fresh, Rotting
+
+
+ Head
+ PawnRenderNode_Head
+ PawnRenderNodeWorker_Head
+ Head
+ Head
+ 50
+ Skin
+ true
+ true
+
+
+ Head tattoo
+ PawnRenderNode_Tattoo_Head
+ PawnRenderNodeWorker_Tattoo_Head
+ Fresh, Rotting
+ Skin
+ 52
+
+
+ Beard
+ PawnRenderNode_Beard
+ PawnRenderNodeWorker_Beard
+ Fresh, Rotting
+ Hair
+ Beard
+ 60
+
+
+ Hair
+ PawnRenderNode_Hair
+ PawnRenderNodeWorker_FlipWhenCrawling
+ Fresh, Rotting
+ Hair
+ Hair
+ 62
+
+
+ Head wounds
+ PawnRenderNodeWorker_OverlayWounds
+ Head
+ 65
+
+
+ Apparel root
+ ApparelHead
+ 70
+
+
+ Firefoam
+ PawnRenderNodeWorker_OverlayFirefoam
+ Head
+ 85
+
+
+ Status overlay
+ PawnRenderNodeWorker_OverlayStatus
+ 100
+
+
+
+
+ Weapon/carried thing
+ PawnRenderNodeWorker_Carried
+
+
+
+
+
\ No newline at end of file
diff --git a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml
index 7f0bbaf..b0491f2 100644
--- a/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml
+++ b/1.6/1.6/Defs/ThingDef_Races/ARA_RaceNodeSwarm.xml
@@ -1169,85 +1169,20 @@
true
+
-
-
-
-
+
-
- Wula/Things/WULA_Mech_Flyer/WULA_Mech_Flyer_Flying_
+
+ Drafted
-
- 2
-
-
- 2
-
-
-
-
-
-
- 1.35
-
-
- (0, 0.1, -0.2)
-
-
- false
-
-
- Body
-
-
- 90
-
-
-
-
-
-
- 40
-
-
- 40
-
-
- 15
-
-
- 10
-
-
- 1.0
-
-
-
-
-
-
-
-
- (0, 0)
- (0.5, 0.6)
- (1, 1)
-
-
-
-
-
-
- (0, 1)
- (0.5, 0.4)
- (1, 0)
-
-
+
+ WULA_Mech_Flyer_North
+ WULA_Mech_Flyer_East
+ WULA_Mech_Flyer_South
-
-
@@ -1255,6 +1190,9 @@
4.5
+ 9999
+ 0
+
@@ -1295,6 +1233,8 @@
ArachnaeFighter_Body
+ ARA_ArachnaeRenderTree
+ 1.0
0.85
2
5
diff --git a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
index 0b17708..1129ebc 100644
--- a/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
+++ b/Source/ArachnaeSwarm/ArachnaeSwarm.csproj
@@ -141,8 +141,6 @@
-
-
diff --git a/Source/ArachnaeSwarm/CompPawnFlight.cs b/Source/ArachnaeSwarm/CompPawnFlight.cs
index 31e8b76..58d39e2 100644
--- a/Source/ArachnaeSwarm/CompPawnFlight.cs
+++ b/Source/ArachnaeSwarm/CompPawnFlight.cs
@@ -1,132 +1,14 @@
-using UnityEngine;
using Verse;
-using Verse.AI;
-using RimWorld;
-using System.Collections.Generic;
namespace ArachnaeSwarm
{
+ ///
+ /// A marker component that holds custom flight properties.
+ /// The actual flight logic is handled by Harmony patches that check for this component
+ /// and use its properties to override or trigger vanilla flight behavior.
+ ///
public class CompPawnFlight : ThingComp
{
- private enum FlightState { Grounded, TakingOff, Flying, Landing }
-
- private FlightState flightState;
- private int flightTicks = -1;
- private int flightCooldownTicks;
- private int lerpTick;
-
- private Dictionary> cachedGraphics = new Dictionary>();
- private PawnRenderNode_AnimatedAttachment activeWingNode;
-
- private Pawn Pawn => (Pawn)parent;
public CompProperties_PawnFlight Props => (CompProperties_PawnFlight)props;
-
- public bool Flying => flightState != FlightState.Grounded;
- public bool ShouldShowWings => flightState != FlightState.Grounded;
-
- // Hardcoded curves, similar to vanilla Pawn_FlightTracker
- private static readonly SimpleCurve TakeoffCurve = new SimpleCurve { new CurvePoint(0f, 0f), new CurvePoint(0.5f, 0.6f), new CurvePoint(1f, 1f) };
- private static readonly SimpleCurve LandingCurve = new SimpleCurve { new CurvePoint(0f, 1f), new CurvePoint(0.5f, 0.4f), new CurvePoint(1f, 0f) };
-
-
- public override void CompTick()
- {
- base.CompTick();
- if (!parent.Spawned) return;
-
- FlightState oldState = flightState;
-
- switch (flightState)
- {
- case FlightState.TakingOff:
- lerpTick++;
- if (lerpTick >= Props.takeoffDurationTicks) { flightState = FlightState.Flying; lerpTick = 0; }
- break;
- case FlightState.Landing:
- lerpTick++;
- if (lerpTick >= Props.landingDurationTicks) { flightState = FlightState.Grounded; lerpTick = 0; flightCooldownTicks = (int)(Props.flightCooldownSeconds * 60f); }
- break;
- case FlightState.Flying:
- flightTicks++;
- if (flightTicks >= Props.maxFlightTimeSeconds * 60f) { flightState = FlightState.Landing; }
- break;
- case FlightState.Grounded:
- if (flightCooldownTicks > 0) { flightCooldownTicks--; }
- break;
- }
-
- if (oldState != flightState)
- {
- StateChanged();
- }
- }
-
- private void StateChanged()
- {
- Pawn.Drawer.renderer.SetAllGraphicsDirty();
- }
-
- public void Notify_JobStarted(Job job)
- {
- bool isFlyingOrTakingOff = flightState == FlightState.Flying || flightState == FlightState.TakingOff;
- bool wantsToFly = (job.def.tryStartFlying || (job.def.ifFlyingKeepFlying && isFlyingOrTakingOff));
- if (wantsToFly && flightState == FlightState.Grounded && flightCooldownTicks <= 0 && Rand.Chance(Props.flightStartChanceOnJobStart))
- {
- flightState = FlightState.TakingOff;
- flightTicks = 0;
- lerpTick = 0;
- StateChanged();
- }
- else if (!wantsToFly && isFlyingOrTakingOff)
- {
- flightState = FlightState.Landing;
- lerpTick = 0;
- StateChanged();
- }
- }
-
- public void LinkToRenderNode(PawnRenderNode_AnimatedAttachment node)
- {
- activeWingNode = node;
- }
-
- public int GetCurrentFrame(int totalFrames)
- {
- if (totalFrames == 0) return 0;
- int currentTickInAnim = (flightState == FlightState.Flying) ? flightTicks : lerpTick;
- return (currentTickInAnim / Props.ticksPerFrame) % totalFrames;
- }
-
- public List GetGraphicsForRotation(Rot4 rot)
- {
- if (cachedGraphics.TryGetValue(rot, out var graphics)) return graphics;
-
- var newGraphics = new List();
- bool isFemale = Pawn.gender == Gender.Female && !string.IsNullOrEmpty(Props.flyingAnimationFramePathPrefixFemale);
- string prefix = isFemale ? Props.flyingAnimationFramePathPrefixFemale : Props.flyingAnimationFramePathPrefix;
- string suffix = (rot == Rot4.North) ? "_north" : (rot == Rot4.South) ? "_south" : "_east";
-
- if (rot == Rot4.West) suffix = "_east";
-
- for (int i = 1; i <= Props.flyingAnimationFrameCount; i++)
- {
- string path = prefix + i + suffix;
- Color color = Props.inheritColors ? Pawn.story.SkinColor : Color.white;
- var graphic = GraphicDatabase.Get(path, ShaderDatabase.Transparent, Vector2.one * Props.drawSize, color);
- newGraphics.Add(graphic);
- }
-
- cachedGraphics[rot] = newGraphics;
- return newGraphics;
- }
-
- public override void PostExposeData()
- {
- base.PostExposeData();
- Scribe_Values.Look(ref flightTicks, "flightTicks", -1);
- Scribe_Values.Look(ref flightCooldownTicks, "flightCooldownTicks", 0);
- Scribe_Values.Look(ref lerpTick, "lerpTick", 0);
- Scribe_Values.Look(ref flightState, "flightState", FlightState.Grounded);
- }
}
}
\ No newline at end of file
diff --git a/Source/ArachnaeSwarm/CompProperties_PawnFlight.cs b/Source/ArachnaeSwarm/CompProperties_PawnFlight.cs
index fd10f65..26da5b6 100644
--- a/Source/ArachnaeSwarm/CompProperties_PawnFlight.cs
+++ b/Source/ArachnaeSwarm/CompProperties_PawnFlight.cs
@@ -1,33 +1,45 @@
using Verse;
using RimWorld;
-using UnityEngine;
namespace ArachnaeSwarm
{
+ public enum FlightCondition
+ {
+ Drafted
+ }
+
public class CompProperties_PawnFlight : CompProperties
{
- // --- Animation ---
+ // --- Custom Flight Logic ---
+ public FlightCondition flightCondition = FlightCondition.Drafted;
+
+ // --- Vanilla PawnKindDef Flight Parameters ---
+ [NoTranslate]
public string flyingAnimationFramePathPrefix;
+
+ [NoTranslate]
public string flyingAnimationFramePathPrefixFemale;
- public int flyingAnimationFrameCount = 1;
- public int ticksPerFrame = 2;
-
- // --- Render Node Properties (Defined directly here) ---
- public Vector3 offset = Vector3.zero;
- public float drawSize = 1f;
- public bool inheritColors = false;
- public PawnRenderNodeTagDef parentTagDef; // e.g., "Body"
- public float baseLayer = 85f;
- // --- Flight Mechanics ---
- public int takeoffDurationTicks = 50;
- public int landingDurationTicks = 50;
- public float maxFlightTimeSeconds = 5f;
- public float flightCooldownSeconds = 2f;
- public float flightStartChanceOnJobStart = 0.5f;
+ public int flyingAnimationFrameCount;
+
+ public int flyingAnimationTicksPerFrame = -1;
+
+ public float flyingAnimationDrawSize = 1f;
+
+ public bool flyingAnimationDrawSizeIsMultiplier;
+
+ public bool flyingAnimationInheritColors;
+
+ // --- Vanilla PawnKindLifeStage Flight Parameters ---
+ // Note: These are normally defined per lifestage, we define them once here for simplicity.
+ // The harmony patch will need to inject these into the correct lifestage at runtime.
+ public AnimationDef flyingAnimationEast;
+ public AnimationDef flyingAnimationNorth;
+ public AnimationDef flyingAnimationSouth;
+ public AnimationDef flyingAnimationEastFemale;
+ public AnimationDef flyingAnimationNorthFemale;
+ public AnimationDef flyingAnimationSouthFemale;
- // takeoffCurve and landingCurve are removed as they cannot be loaded directly from XML.
- // They will be hardcoded in the CompPawnFlight class.
public CompProperties_PawnFlight()
{
diff --git a/Source/ArachnaeSwarm/DynamicPawnRenderNodeSetup_FlightWings.cs b/Source/ArachnaeSwarm/DynamicPawnRenderNodeSetup_FlightWings.cs
deleted file mode 100644
index 150205e..0000000
--- a/Source/ArachnaeSwarm/DynamicPawnRenderNodeSetup_FlightWings.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Verse;
-using RimWorld;
-using HarmonyLib; // Required for AccessTools
-
-namespace ArachnaeSwarm
-{
- public class DynamicPawnRenderNodeSetup_FlightWings : DynamicPawnRenderNodeSetup
- {
- public override bool HumanlikeOnly => false;
-
- public override IEnumerable<(PawnRenderNode node, PawnRenderNode parent)> GetDynamicNodes(Pawn pawn, PawnRenderTree tree)
- {
- CompPawnFlight flightComp = pawn.GetComp();
- if (flightComp != null && flightComp.ShouldShowWings)
- {
- // Create properties directly from CompProperties
- var nodeProps = new PawnRenderNodeProperties
- {
- nodeClass = typeof(PawnRenderNode_AnimatedAttachment),
- workerClass = AccessTools.TypeByName("Verse.PawnRenderNodeWorker_Flip"),
- parentTagDef = flightComp.Props.parentTagDef ?? PawnRenderNodeTagDefOf.Body,
- baseLayer = flightComp.Props.baseLayer
- };
-
- // Create a new DrawData struct and set its offset, then assign it.
- DrawData drawData = new DrawData();
- typeof(DrawData).GetField("offset").SetValueDirect(__makeref(drawData), flightComp.Props.offset);
- nodeProps.drawData = drawData;
-
- if (tree.ShouldAddNodeToTree(nodeProps))
- {
- var newNode = (PawnRenderNode_AnimatedAttachment)Activator.CreateInstance(
- nodeProps.nodeClass, pawn, nodeProps, tree
- );
-
- flightComp.LinkToRenderNode(newNode);
- yield return (node: newNode, parent: null);
- }
- }
- yield break;
- }
- }
-}
\ No newline at end of file
diff --git a/Source/ArachnaeSwarm/HarmonyPatches.cs b/Source/ArachnaeSwarm/HarmonyPatches.cs
index f2a9aa8..db53363 100644
--- a/Source/ArachnaeSwarm/HarmonyPatches.cs
+++ b/Source/ArachnaeSwarm/HarmonyPatches.cs
@@ -1,70 +1,100 @@
using HarmonyLib;
using Verse;
-using System.Reflection;
using RimWorld;
+using Verse.AI;
namespace ArachnaeSwarm
{
- [StaticConstructorOnStartup]
- public static class HarmonyPatches
+ // Note: We are no longer patching PawnGenerator.
+ // We will inject/override flight logic at more precise points.
+ [HarmonyPatch]
+ public static class FlightHarmonyPatches
{
- private static readonly FieldInfo flightField = AccessTools.Field(typeof(Pawn), "flight");
-
- static HarmonyPatches()
+ // Patch 1: Override the animation selection
+ [HarmonyPrefix]
+ [HarmonyPatch(typeof(Pawn_FlightTracker), "GetBestFlyAnimation")]
+ public static bool GetBestFlyAnimation_Prefix(Pawn_FlightTracker __instance, Pawn ___pawn, Rot4? facingOverride, ref AnimationDef __result)
{
- var harmony = new Harmony("com.arachnaeswarm.flightcomp");
-
- harmony.Patch(AccessTools.Method(typeof(PawnComponentsUtility), nameof(PawnComponentsUtility.AddComponentsForSpawn)),
- postfix: new HarmonyMethod(typeof(HarmonyPatches), nameof(DisableVanillaFlightTracker)));
-
- harmony.Patch(AccessTools.PropertyGetter(typeof(Pawn), nameof(Pawn.Flying)),
- postfix: new HarmonyMethod(typeof(HarmonyPatches), nameof(OverrideFlyingProperty)));
-
- harmony.Patch(AccessTools.Method(typeof(Pawn), nameof(Pawn.ExposeData)),
- prefix: new HarmonyMethod(typeof(HarmonyPatches), nameof(PreventVanillaFlightTrackerSave_Prefix)),
- postfix: new HarmonyMethod(typeof(HarmonyPatches), nameof(PreventVanillaFlightTrackerSave_Postfix)));
- }
-
- public static void DisableVanillaFlightTracker(Pawn pawn)
- {
- if (pawn.TryGetComp() != null)
+ var flightComp = ___pawn.TryGetComp();
+ if (flightComp == null)
{
- flightField?.SetValue(pawn, null);
+ return true; // Let original method run for non-comped pawns
}
- }
- public static void OverrideFlyingProperty(Pawn __instance, ref bool __result)
- {
- var comp = __instance.TryGetComp();
- if (comp != null)
+ var compProps = flightComp.Props;
+ bool isFemale = ___pawn.gender == Gender.Female;
+
+ // Determine which animation to use based on rotation and gender
+ AnimationDef selectedAnim = null;
+ switch ((facingOverride ?? ___pawn.Rotation).AsInt)
{
- __result = comp.Flying;
+ case 0: // North
+ selectedAnim = isFemale ? compProps.flyingAnimationNorthFemale : compProps.flyingAnimationNorth;
+ break;
+ case 1: // East
+ selectedAnim = isFemale ? compProps.flyingAnimationEastFemale : compProps.flyingAnimationEast;
+ break;
+ case 2: // South
+ selectedAnim = isFemale ? compProps.flyingAnimationSouthFemale : compProps.flyingAnimationSouth;
+ break;
+ case 3: // West - Use East animation as fallback if West is not defined
+ selectedAnim = isFemale ? (compProps.flyingAnimationEastFemale ?? compProps.flyingAnimationEast) : compProps.flyingAnimationEast;
+ break;
}
- }
-
- // Correct fix: Use 'object' to store the instance, avoiding direct type reference at compile time.
- private static object tempFlightTracker;
- public static void PreventVanillaFlightTrackerSave_Prefix(Pawn __instance)
- {
- if (__instance.TryGetComp() != null)
+ // If we have a valid animation from our comp, use it and stop the original method.
+ if (selectedAnim != null)
{
- object flightTrackerInstance = flightField?.GetValue(__instance);
- if (flightTrackerInstance != null)
+ __result = selectedAnim;
+ return false; // Stop original method
+ }
+
+ return true; // Fallback to original if no animation is found in comp
+ }
+
+
+ // Patch 2: Decide whether to fly when a new job starts
+ [HarmonyPrefix]
+ [HarmonyPatch(typeof(Pawn_FlightTracker), "Notify_JobStarted")]
+ public static bool Notify_JobStarted_Prefix(Job job, Pawn_FlightTracker __instance, Pawn ___pawn)
+ {
+ var flightComp = ___pawn.TryGetComp();
+ if (flightComp == null || !__instance.CanEverFly || ___pawn.Dead)
+ {
+ return true; // Let original method run
+ }
+
+ var compProps = flightComp.Props;
+ bool shouldBeFlying = false;
+
+ // Check our custom condition
+ if (compProps.flightCondition == FlightCondition.Drafted)
+ {
+ if (___pawn.Drafted)
{
- tempFlightTracker = flightTrackerInstance;
- flightField.SetValue(__instance, null);
+ shouldBeFlying = true;
}
}
- }
- public static void PreventVanillaFlightTrackerSave_Postfix(Pawn __instance)
- {
- if (tempFlightTracker != null)
+ // Apply the decision
+ if (shouldBeFlying)
{
- flightField?.SetValue(__instance, tempFlightTracker);
- tempFlightTracker = null;
+ if (!__instance.Flying)
+ {
+ __instance.StartFlying();
+ }
+ job.flying = true; // Mark the job as a flying job
}
+ else
+ {
+ if (__instance.Flying)
+ {
+ __instance.ForceLand();
+ }
+ job.flying = false;
+ }
+
+ return false; // We have handled the logic, stop the original method.
}
}
}
\ No newline at end of file
diff --git a/Source/ArachnaeSwarm/PawnRenderNode_AnimatedAttachment.cs b/Source/ArachnaeSwarm/PawnRenderNode_AnimatedAttachment.cs
deleted file mode 100644
index 8a954a6..0000000
--- a/Source/ArachnaeSwarm/PawnRenderNode_AnimatedAttachment.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-using System.Collections.Generic;
-using UnityEngine;
-using Verse;
-
-namespace ArachnaeSwarm
-{
- public class PawnRenderNode_AnimatedAttachment : PawnRenderNode
- {
- private CompPawnFlight flightComp;
- private List cachedGraphics;
-
- public PawnRenderNode_AnimatedAttachment(Pawn pawn, PawnRenderNodeProperties props, PawnRenderTree tree) : base(pawn, props, tree)
- {
- flightComp = pawn.GetComp();
- }
-
- public override Graphic GraphicFor(Pawn pawn)
- {
- if (flightComp == null) return null;
-
- if (cachedGraphics == null)
- {
- cachedGraphics = flightComp.GetGraphicsForRotation(pawn.Rotation);
- }
-
- if (cachedGraphics.NullOrEmpty()) return null;
-
- int frame = flightComp.GetCurrentFrame(cachedGraphics.Count);
- return cachedGraphics[frame];
- }
-
- // We might need to override this if west-facing graphics need to be flipped.
- // public override Mesh GetMesh(PawnDrawParms parms)
- // {
- // return base.GetMesh(parms);
- // }
- }
-}
\ No newline at end of file