aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/AvatarAppearance.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/AvatarAppearance.cs387
1 files changed, 217 insertions, 170 deletions
diff --git a/OpenSim/Framework/AvatarAppearance.cs b/OpenSim/Framework/AvatarAppearance.cs
index 024eeeb..b7a0adf 100644
--- a/OpenSim/Framework/AvatarAppearance.cs
+++ b/OpenSim/Framework/AvatarAppearance.cs
@@ -40,8 +40,17 @@ namespace OpenSim.Framework
40 /// </summary> 40 /// </summary>
41 public class AvatarAppearance 41 public class AvatarAppearance
42 { 42 {
43 // SL box diferent to size
44 const float AVBOXAJUST = 0.2f;
45 // constrains for ubitode physics
46 const float AVBOXMINX = 0.2f;
47 const float AVBOXMINY = 0.3f;
48 const float AVBOXMINZ = 1.2f;
49
43 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 50 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44 51
52 // this is viewer capabilities and weared things dependent
53 // should be only used as initial default value ( V1 viewers )
45 public readonly static int VISUALPARAM_COUNT = 218; 54 public readonly static int VISUALPARAM_COUNT = 218;
46 55
47 public readonly static int TEXTURE_COUNT = 21; 56 public readonly static int TEXTURE_COUNT = 21;
@@ -53,7 +62,12 @@ namespace OpenSim.Framework
53 protected AvatarWearable[] m_wearables; 62 protected AvatarWearable[] m_wearables;
54 protected Dictionary<int, List<AvatarAttachment>> m_attachments; 63 protected Dictionary<int, List<AvatarAttachment>> m_attachments;
55 protected float m_avatarHeight = 0; 64 protected float m_avatarHeight = 0;
56 protected UUID[] m_texturehashes; 65 protected Vector3 m_avatarSize = new Vector3(0.45f, 0.6f, 1.9f); // sl Z cloud value
66 protected Vector3 m_avatarBoxSize = new Vector3(0.45f, 0.6f, 1.9f);
67 protected float m_avatarFeetOffset = 0;
68 protected float m_avatarAnimOffset = 0;
69 protected WearableCacheItem[] m_cacheitems;
70 protected bool m_cacheItemsDirty = true;
57 71
58 public virtual int Serial 72 public virtual int Serial
59 { 73 {
@@ -67,6 +81,21 @@ namespace OpenSim.Framework
67 set { m_visualparams = value; } 81 set { m_visualparams = value; }
68 } 82 }
69 83
84 public virtual Vector3 AvatarSize
85 {
86 get { return m_avatarSize; }
87 }
88
89 public virtual Vector3 AvatarBoxSize
90 {
91 get { return m_avatarBoxSize; }
92 }
93
94 public virtual float AvatarFeetOffset
95 {
96 get { return m_avatarFeetOffset + m_avatarAnimOffset; }
97 }
98
70 public virtual Primitive.TextureEntry Texture 99 public virtual Primitive.TextureEntry Texture
71 { 100 {
72 get { return m_texture; } 101 get { return m_texture; }
@@ -88,6 +117,18 @@ namespace OpenSim.Framework
88 get { return m_avatarHeight; } 117 get { return m_avatarHeight; }
89 set { m_avatarHeight = value; } 118 set { m_avatarHeight = value; }
90 } 119 }
120
121 public virtual WearableCacheItem[] WearableCacheItems
122 {
123 get { return m_cacheitems; }
124 set { m_cacheitems = value; }
125 }
126
127 public virtual bool WearableCacheItemsDirty
128 {
129 get { return m_cacheItemsDirty; }
130 set { m_cacheItemsDirty = value; }
131 }
91 132
92 public AvatarAppearance() 133 public AvatarAppearance()
93 { 134 {
@@ -97,10 +138,9 @@ namespace OpenSim.Framework
97 SetDefaultWearables(); 138 SetDefaultWearables();
98 SetDefaultTexture(); 139 SetDefaultTexture();
99 SetDefaultParams(); 140 SetDefaultParams();
100 SetHeight(); 141// SetHeight();
142 SetSize(new Vector3(0.45f,0.6f,1.9f));
101 m_attachments = new Dictionary<int, List<AvatarAttachment>>(); 143 m_attachments = new Dictionary<int, List<AvatarAttachment>>();
102
103 ResetTextureHashes();
104 } 144 }
105 145
106 public AvatarAppearance(OSDMap map) 146 public AvatarAppearance(OSDMap map)
@@ -108,7 +148,35 @@ namespace OpenSim.Framework
108// m_log.WarnFormat("[AVATAR APPEARANCE]: create appearance from OSDMap"); 148// m_log.WarnFormat("[AVATAR APPEARANCE]: create appearance from OSDMap");
109 149
110 Unpack(map); 150 Unpack(map);
111 SetHeight(); 151// SetHeight(); done in Unpack
152 }
153
154 public AvatarAppearance(AvatarWearable[] wearables, Primitive.TextureEntry textureEntry, byte[] visualParams)
155 {
156// m_log.WarnFormat("[AVATAR APPEARANCE] create initialized appearance");
157
158 m_serial = 0;
159
160 if (wearables != null)
161 m_wearables = wearables;
162 else
163 SetDefaultWearables();
164
165 if (textureEntry != null)
166 m_texture = textureEntry;
167 else
168 SetDefaultTexture();
169
170 if (visualParams != null)
171 m_visualparams = visualParams;
172 else
173 SetDefaultParams();
174
175// SetHeight();
176 if(m_avatarHeight == 0)
177 SetSize(new Vector3(0.45f,0.6f,1.9f));
178
179 m_attachments = new Dictionary<int, List<AvatarAttachment>>();
112 } 180 }
113 181
114 public AvatarAppearance(AvatarAppearance appearance) : this(appearance, true) 182 public AvatarAppearance(AvatarAppearance appearance) : this(appearance, true)
@@ -125,11 +193,10 @@ namespace OpenSim.Framework
125 SetDefaultWearables(); 193 SetDefaultWearables();
126 SetDefaultTexture(); 194 SetDefaultTexture();
127 SetDefaultParams(); 195 SetDefaultParams();
128 SetHeight(); 196// SetHeight();
197 SetSize(new Vector3(0.45f, 0.6f, 1.9f));
129 m_attachments = new Dictionary<int, List<AvatarAttachment>>(); 198 m_attachments = new Dictionary<int, List<AvatarAttachment>>();
130 199
131 ResetTextureHashes();
132
133 return; 200 return;
134 } 201 }
135 202
@@ -145,10 +212,6 @@ namespace OpenSim.Framework
145 SetWearable(i,appearance.Wearables[i]); 212 SetWearable(i,appearance.Wearables[i]);
146 } 213 }
147 214
148 m_texturehashes = new UUID[AvatarAppearance.TEXTURE_COUNT];
149 for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++)
150 m_texturehashes[i] = new UUID(appearance.m_texturehashes[i]);
151
152 m_texture = null; 215 m_texture = null;
153 if (appearance.Texture != null) 216 if (appearance.Texture != null)
154 { 217 {
@@ -160,7 +223,8 @@ namespace OpenSim.Framework
160 if (appearance.VisualParams != null) 223 if (appearance.VisualParams != null)
161 m_visualparams = (byte[])appearance.VisualParams.Clone(); 224 m_visualparams = (byte[])appearance.VisualParams.Clone();
162 225
163 m_avatarHeight = appearance.m_avatarHeight; 226// m_avatarHeight = appearance.m_avatarHeight;
227 SetSize(appearance.AvatarSize);
164 228
165 // Copy the attachment, force append mode since that ensures consistency 229 // Copy the attachment, force append mode since that ensures consistency
166 m_attachments = new Dictionary<int, List<AvatarAttachment>>(); 230 m_attachments = new Dictionary<int, List<AvatarAttachment>>();
@@ -183,37 +247,6 @@ namespace OpenSim.Framework
183 } 247 }
184 } 248 }
185 249
186 public void ResetTextureHashes()
187 {
188 m_texturehashes = new UUID[AvatarAppearance.TEXTURE_COUNT];
189 for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++)
190 m_texturehashes[i] = UUID.Zero;
191 }
192
193 public UUID GetTextureHash(int textureIndex)
194 {
195 return m_texturehashes[NormalizeBakedTextureIndex(textureIndex)];
196 }
197
198 public void SetTextureHash(int textureIndex, UUID textureHash)
199 {
200 m_texturehashes[NormalizeBakedTextureIndex(textureIndex)] = new UUID(textureHash);
201 }
202
203 /// <summary>
204 /// Normalizes the texture index to the actual bake index, this is done to
205 /// accommodate older viewers that send the BAKE_INDICES index rather than
206 /// the actual texture index
207 /// </summary>
208 private int NormalizeBakedTextureIndex(int textureIndex)
209 {
210 // Earlier viewer send the index into the baked index array, just trying to be careful here
211 if (textureIndex < BAKE_INDICES.Length)
212 return BAKE_INDICES[textureIndex];
213
214 return textureIndex;
215 }
216
217 public void ClearWearables() 250 public void ClearWearables()
218 { 251 {
219 m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES]; 252 m_wearables = new AvatarWearable[AvatarWearable.MAX_WEARABLES];
@@ -237,7 +270,12 @@ namespace OpenSim.Framework
237 m_serial = 0; 270 m_serial = 0;
238 271
239 SetDefaultTexture(); 272 SetDefaultTexture();
240 ResetTextureHashes(); 273
274 //for (int i = 0; i < BAKE_INDICES.Length; i++)
275 // {
276 // int idx = BAKE_INDICES[i];
277 // m_texture.FaceTextures[idx].TextureID = UUID.Zero;
278 // }
241 } 279 }
242 280
243 protected virtual void SetDefaultParams() 281 protected virtual void SetDefaultParams()
@@ -249,6 +287,21 @@ namespace OpenSim.Framework
249// } 287// }
250 } 288 }
251 289
290 /// <summary>
291 /// Invalidate all of the baked textures in the appearance, useful
292 /// if you know that none are valid
293 /// </summary>
294 public virtual void ResetBakedTextures()
295 {
296 SetDefaultTexture();
297
298 //for (int i = 0; i < BAKE_INDICES.Length; i++)
299 // {
300 // int idx = BAKE_INDICES[i];
301 // m_texture.FaceTextures[idx].TextureID = UUID.Zero;
302 // }
303 }
304
252 protected virtual void SetDefaultTexture() 305 protected virtual void SetDefaultTexture()
253 { 306 {
254 m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE)); 307 m_texture = new Primitive.TextureEntry(new UUID(AppearanceManager.DEFAULT_AVATAR_TEXTURE));
@@ -313,22 +366,33 @@ namespace OpenSim.Framework
313 // made. We determine if any of the visual parameters actually 366 // made. We determine if any of the visual parameters actually
314 // changed to know if the appearance should be saved later 367 // changed to know if the appearance should be saved later
315 bool changed = false; 368 bool changed = false;
316 for (int i = 0; i < AvatarAppearance.VISUALPARAM_COUNT; i++) 369
370 int newsize = visualParams.Length;
371
372 if (newsize != m_visualparams.Length)
373 {
374 changed = true;
375 m_visualparams = (byte[])visualParams.Clone();
376 }
377 else
317 { 378 {
318 if (visualParams[i] != m_visualparams[i]) 379
380 for (int i = 0; i < newsize; i++)
319 { 381 {
320// DEBUG ON 382 if (visualParams[i] != m_visualparams[i])
321// m_log.WarnFormat("[AVATARAPPEARANCE] vparams changed [{0}] {1} ==> {2}", 383 {
322// i,m_visualparams[i],visualParams[i]); 384 // DEBUG ON
323// DEBUG OFF 385 // m_log.WarnFormat("[AVATARAPPEARANCE] vparams changed [{0}] {1} ==> {2}",
324 m_visualparams[i] = visualParams[i]; 386 // i,m_visualparams[i],visualParams[i]);
325 changed = true; 387 // DEBUG OFF
388 m_visualparams[i] = visualParams[i];
389 changed = true;
390 }
326 } 391 }
327 } 392 }
328
329 // Reset the height if the visual parameters actually changed 393 // Reset the height if the visual parameters actually changed
330 if (changed) 394// if (changed)
331 SetHeight(); 395// SetHeight();
332 396
333 return changed; 397 return changed;
334 } 398 }
@@ -344,6 +408,7 @@ namespace OpenSim.Framework
344 /// </summary> 408 /// </summary>
345 public virtual void SetHeight() 409 public virtual void SetHeight()
346 { 410 {
411/*
347 // Start with shortest possible female avatar height 412 // Start with shortest possible female avatar height
348 m_avatarHeight = 1.14597f; 413 m_avatarHeight = 1.14597f;
349 // Add offset for male avatars 414 // Add offset for male avatars
@@ -356,6 +421,35 @@ namespace OpenSim.Framework
356 + 0.07f * (float)m_visualparams[(int)VPElement.SHOES_PLATFORM_HEIGHT] / 255.0f 421 + 0.07f * (float)m_visualparams[(int)VPElement.SHOES_PLATFORM_HEIGHT] / 255.0f
357 + 0.08f * (float)m_visualparams[(int)VPElement.SHOES_HEEL_HEIGHT] / 255.0f 422 + 0.08f * (float)m_visualparams[(int)VPElement.SHOES_HEEL_HEIGHT] / 255.0f
358 + 0.076f * (float)m_visualparams[(int)VPElement.SHAPE_NECK_LENGTH] / 255.0f; 423 + 0.076f * (float)m_visualparams[(int)VPElement.SHAPE_NECK_LENGTH] / 255.0f;
424*/
425 }
426
427 public void SetSize(Vector3 avSize)
428 {
429 if (avSize.X > 32f)
430 avSize.X = 32f;
431 else if (avSize.X < 0.1f)
432 avSize.X = 0.1f;
433
434 if (avSize.Y > 32f)
435 avSize.Y = 32f;
436 else if (avSize.Y < 0.1f)
437 avSize.Y = 0.1f;
438 if (avSize.Z > 32f)
439 avSize.Z = 32f;
440 else if (avSize.Z < 0.1f)
441 avSize.Z = 0.1f;
442
443 m_avatarSize = avSize;
444 m_avatarBoxSize = avSize;
445 m_avatarBoxSize.Z += AVBOXAJUST;
446 if (m_avatarBoxSize.X < AVBOXMINX)
447 m_avatarBoxSize.X = AVBOXMINX;
448 if (m_avatarBoxSize.Y < AVBOXMINY)
449 m_avatarBoxSize.Y = AVBOXMINY;
450 if (m_avatarBoxSize.Z < AVBOXMINZ)
451 m_avatarBoxSize.Z = AVBOXMINZ;
452 m_avatarHeight = m_avatarSize.Z;
359 } 453 }
360 454
361 public virtual void SetWearable(int wearableId, AvatarWearable wearable) 455 public virtual void SetWearable(int wearableId, AvatarWearable wearable)
@@ -386,7 +480,8 @@ namespace OpenSim.Framework
386 } 480 }
387 481
388 s += "Visual Params: "; 482 s += "Visual Params: ";
389 for (uint j = 0; j < AvatarAppearance.VISUALPARAM_COUNT; j++) 483 // for (uint j = 0; j < AvatarAppearance.VISUALPARAM_COUNT; j++)
484 for (uint j = 0; j < m_visualparams.Length; j++)
390 s += String.Format("{0},",m_visualparams[j]); 485 s += String.Format("{0},",m_visualparams[j]);
391 s += "\n"; 486 s += "\n";
392 487
@@ -402,18 +497,16 @@ namespace OpenSim.Framework
402 /// </remarks> 497 /// </remarks>
403 public List<AvatarAttachment> GetAttachments() 498 public List<AvatarAttachment> GetAttachments()
404 { 499 {
405 List<AvatarAttachment> alist = new List<AvatarAttachment>();
406
407 lock (m_attachments) 500 lock (m_attachments)
408 { 501 {
502 List<AvatarAttachment> alist = new List<AvatarAttachment>();
409 foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments) 503 foreach (KeyValuePair<int, List<AvatarAttachment>> kvp in m_attachments)
410 { 504 {
411 foreach (AvatarAttachment attach in kvp.Value) 505 foreach (AvatarAttachment attach in kvp.Value)
412 alist.Add(new AvatarAttachment(attach)); 506 alist.Add(new AvatarAttachment(attach));
413 } 507 }
414 } 508 return alist;
415 509 }
416 return alist;
417 } 510 }
418 511
419 internal void AppendAttachment(AvatarAttachment attach) 512 internal void AppendAttachment(AvatarAttachment attach)
@@ -557,7 +650,6 @@ namespace OpenSim.Framework
557 return kvp.Key; 650 return kvp.Key;
558 } 651 }
559 } 652 }
560
561 return 0; 653 return 0;
562 } 654 }
563 655
@@ -607,12 +699,6 @@ namespace OpenSim.Framework
607 data["serial"] = OSD.FromInteger(m_serial); 699 data["serial"] = OSD.FromInteger(m_serial);
608 data["height"] = OSD.FromReal(m_avatarHeight); 700 data["height"] = OSD.FromReal(m_avatarHeight);
609 701
610 // Hashes
611 OSDArray hashes = new OSDArray(AvatarAppearance.TEXTURE_COUNT);
612 for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++)
613 hashes.Add(OSD.FromUUID(m_texturehashes[i]));
614 data["hashes"] = hashes;
615
616 // Wearables 702 // Wearables
617 OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES); 703 OSDArray wears = new OSDArray(AvatarWearable.MAX_WEARABLES);
618 for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++) 704 for (int i = 0; i < AvatarWearable.MAX_WEARABLES; i++)
@@ -634,12 +720,14 @@ namespace OpenSim.Framework
634 OSDBinary visualparams = new OSDBinary(m_visualparams); 720 OSDBinary visualparams = new OSDBinary(m_visualparams);
635 data["visualparams"] = visualparams; 721 data["visualparams"] = visualparams;
636 722
637 // Attachments 723 lock (m_attachments)
638 List<AvatarAttachment> attachments = GetAttachments(); 724 {
639 OSDArray attachs = new OSDArray(attachments.Count); 725 // Attachments
640 foreach (AvatarAttachment attach in GetAttachments()) 726 OSDArray attachs = new OSDArray(m_attachments.Count);
641 attachs.Add(attach.Pack()); 727 foreach (AvatarAttachment attach in GetAttachments())
642 data["attachments"] = attachs; 728 attachs.Add(attach.Pack());
729 data["attachments"] = attachs;
730 }
643 731
644 return data; 732 return data;
645 } 733 }
@@ -653,29 +741,11 @@ namespace OpenSim.Framework
653 if ((data != null) && (data["serial"] != null)) 741 if ((data != null) && (data["serial"] != null))
654 m_serial = data["serial"].AsInteger(); 742 m_serial = data["serial"].AsInteger();
655 if ((data != null) && (data["height"] != null)) 743 if ((data != null) && (data["height"] != null))
656 m_avatarHeight = (float)data["height"].AsReal(); 744// m_avatarHeight = (float)data["height"].AsReal();
745 SetSize(new Vector3(0.45f,0.6f, (float)data["height"].AsReal()));
657 746
658 try 747 try
659 { 748 {
660 // Hashes
661 m_texturehashes = new UUID[AvatarAppearance.TEXTURE_COUNT];
662 if ((data != null) && (data["hashes"] != null) && (data["hashes"]).Type == OSDType.Array)
663 {
664 OSDArray hashes = (OSDArray)(data["hashes"]);
665 for (int i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++)
666 {
667 UUID hashID = UUID.Zero;
668 if (i < hashes.Count && hashes[i] != null)
669 hashID = hashes[i].AsUUID();
670 m_texturehashes[i] = hashID;
671 }
672 }
673 else
674 {
675 for (uint i = 0; i < AvatarAppearance.TEXTURE_COUNT; i++)
676 m_texturehashes[i] = UUID.Zero;
677 }
678
679 // Wearables 749 // Wearables
680 SetDefaultWearables(); 750 SetDefaultWearables();
681 if ((data != null) && (data["wearables"] != null) && (data["wearables"]).Type == OSDType.Array) 751 if ((data != null) && (data["wearables"] != null) && (data["wearables"]).Type == OSDType.Array)
@@ -1505,81 +1575,58 @@ namespace OpenSim.Framework
1505 SHAPE_EYELID_INNER_CORNER_UP = 214, 1575 SHAPE_EYELID_INNER_CORNER_UP = 214,
1506 SKIRT_SKIRT_RED = 215, 1576 SKIRT_SKIRT_RED = 215,
1507 SKIRT_SKIRT_GREEN = 216, 1577 SKIRT_SKIRT_GREEN = 216,
1508 SKIRT_SKIRT_BLUE = 217, 1578 SKIRT_SKIRT_BLUE = 217,
1509 /// Breast_Physics_UpDown_Controller - -1-+1 1579
1510 PHYSICS_BREAST_UPDOWN_CONTROLLER = 218, 1580 /// <summary>
1511 /// Breast_Physics_InOut_Controller -1-+1 1581 /// Avatar Physics section. These are 0 type visual params which get transmitted.
1512 PHYSICS_BREAST_PHYSICS_INOUT_CONTROLLER = 219, 1582 /// </summary>
1513 /// Belly_Physics_UpDown_Controller - -1-+1 1583
1514 PHYSICS_BELLY_PHYSICS_UPDOWN_CONTROLLER = 220, 1584 /// <summary>
1515 /// Butt_Physics_UpDown_Controller - -1-+1 1585 /// Breast Part 1
1516 PHYSICS_BUTT_PHYSICS_UPDOWN_CONTROLLER = 221, 1586 /// </summary>
1517 /// Breast_Physics_LeftRight_Controller -1-+1 1587 BREAST_PHYSICS_MASS = 218,
1518 PHYSICS_BREAST_PHYSICS_LEFTRIGHT_CONTROLLER = 222, 1588 BREAST_PHYSICS_GRAVITY = 219,
1519 /// Breast_Physics_Mass - +0.1-+1 1589 BREAST_PHYSICS_DRAG = 220,
1520 PHYSICS_BREAST_PHYSICS_MASS = 223, 1590 BREAST_PHYSICS_UPDOWN_MAX_EFFECT = 221,
1521 /// Breast_Physics_Gravity - 0-+30 1591 BREAST_PHYSICS_UPDOWN_SPRING = 222,
1522 PHYSICS_BREAST_PHYSICS_GRAVITY = 224, 1592 BREAST_PHYSICS_UPDOWN_GAIN = 223,
1523 /// Breast_Physics_Drag - 0-+10 1593 BREAST_PHYSICS_UPDOWN_DAMPING = 224,
1524 PHYSICS_BREAST_PHYSICS_DRAG = 225, 1594 BREAST_PHYSICS_INOUT_MAX_EFFECT = 225,
1525 /// Breast_Physics_UpDown_Max_Effect - 0-+3 1595 BREAST_PHYSICS_INOUT_SPRING = 226,
1526 PHYSICS_BREAST_UPDOWN_MAX_EFFECT = 226, 1596 BREAST_PHYSICS_INOUT_GAIN = 227,
1527 /// Breast_Physics_UpDown_Spring - 0-+100 1597 BREAST_PHYSICS_INOUT_DAMPING = 228,
1528 PHYSICS_BREAST_UPDOWN_SPRING = 227, 1598 /// <summary>
1529 /// Breast_Physics_UpDown_Gain - +1-+100 1599 /// Belly
1530 PHYSICS_BREAST_UPDOWN_GAIN = 228, 1600 /// </summary>
1531 /// Breast_Physics_UpDown_Damping - 0-+1 1601 BELLY_PHYISCS_MASS = 229,
1532 PHYSICS_BREAST_UPDOWN_DAMPING = 229, 1602 BELLY_PHYSICS_GRAVITY = 230,
1533 /// Breast_Physics_InOut_Max_Effect - 0-+3 1603 BELLY_PHYSICS_DRAG = 231,
1534 PHYSICS_BREAST_INOUT_MAX_EFFECT = 230, 1604 BELLY_PHYISCS_UPDOWN_MAX_EFFECT = 232,
1535 /// Breast_Physics_InOut_Gain = +1-+100 1605 BELLY_PHYSICS_UPDOWN_SPRING = 233,
1536 PHYSICS_BREAST_INOUT_GAIN = 231, 1606 BELLY_PHYSICS_UPDOWN_GAIN = 234,
1537 /// Breast_Physics_InOut_Damping - 0-+1 1607 BELLY_PHYSICS_UPDOWN_DAMPING = 235,
1538 PHYSICS_BREAST_INOUT_DAMPING = 232, 1608
1539 /// Belly_Physics_Mass - +0.1-+1 1609 /// <summary>
1540 PHYSICS_BELLY_PHYSICS_MASS = 233, 1610 /// Butt
1541 /// Belly_Physics_Gravity - 0-+30 1611 /// </summary>
1542 PHYSICS_BELLY_PHYSICS_GRAVITY = 234, 1612 BUTT_PHYSICS_MASS = 236,
1543 /// Belly_Physics_Drag - 0-+10 1613 BUTT_PHYSICS_GRAVITY = 237,
1544 PHYSICS_BELLY_PHYSICS_DRAG = 235, 1614 BUTT_PHYSICS_DRAG = 238,
1545 /// Belly_Physics_UpDown_Max_Effect - 0-+3 1615 BUTT_PHYSICS_UPDOWN_MAX_EFFECT = 239,
1546 PHYSICS_BELLY_PHYSICS_UPDOWN_MAX_EFFECT = 236, 1616 BUTT_PHYSICS_UPDOWN_SPRING = 240,
1547 /// Belly_Physics_UpDown_Spring - 0-+100 1617 BUTT_PHYSICS_UPDOWN_GAIN = 241,
1548 PHYSICS_BELLY_PHYSICS_UPDOWN_SPRING = 237, 1618 BUTT_PHYSICS_UPDOWN_DAMPING = 242,
1549 /// Belly_Physics_UpDown_Gain - +1-+100 1619 BUTT_PHYSICS_LEFTRIGHT_MAX_EFFECT = 243,
1550 PHYSICS_BELLY_PHYSICS_UPDOWN_GAIN = 238, 1620 BUTT_PHYSICS_LEFTRIGHT_SPRING = 244,
1551 /// Belly_Physics_UpDown_Damping - 0-+1 1621 BUTT_PHYSICS_LEFTRIGHT_GAIN = 245,
1552 PHYSICS_BELLY_PHYSICS_UPDOWN_DAMPING = 239, 1622 BUTT_PHYSICS_LEFTRIGHT_DAMPING = 246,
1553 /// Butt_Physics_Mass - +0.1-+1 1623 /// <summary>
1554 PHYSICS_BUTT_PHYSICS_MASS = 240, 1624 /// Breast Part 2
1555 /// Butt_Physics_Gravity - 0-+30 1625 /// </summary>
1556 PHYSICS_BUTT_PHYSICS_GRAVITY = 241, 1626 BREAST_PHYSICS_LEFTRIGHT_MAX_EFFECT = 247,
1557 /// Butt_Physics_Drag - 0-+10 1627 BREAST_PHYSICS_LEFTRIGHT_SPRING= 248,
1558 PHYSICS_BUTT_PHYSICS_DRAG = 242, 1628 BREAST_PHYSICS_LEFTRIGHT_GAIN = 249,
1559 /// Butt_Physics_UpDown_Max_Effect - 0-+30 1629 BREAST_PHYSICS_LEFTRIGHT_DAMPING = 250
1560 PHYSICS_BUTT_PHYSICS_UPDOWN_MAX_EFFECT = 243,
1561 /// Butt_Physics_UpDown_Spring - 0-+100
1562 PHYSICS_BUTT_PHYSICS_UPDOWN_SPRING = 244,
1563 /// Butt_Physics_UpDown_Gain - +1-+100
1564 PHYSICS_BUTT_PHYSICS_UPDOWN_GAIN = 245,
1565 /// Butt_Physics_UpDown_Damping - 0-+1
1566 PHYSICS_BUTT_PHYSICS_UPDOWN_DAMPING = 246,
1567 /// Butt_Physics_LeftRight_Max_Effect - 0-+3
1568 PHYSICS_BUTT_PHYSICS_LEFTRIGHT_MAX_EFFECT = 247,
1569 /// Butt_Physics_LeftRight_Spring - 0-+100
1570 PHYSICS_BUTT_PHYSICS_LEFTRIGHT_SPRING = 248,
1571 /// Butt_Physics_LeftRight_Gain - +1-+100
1572 PHYSICS_BUTT_PHYSICS_LEFTRIGHT_GAIN = 249,
1573 /// Butt_Physics_LeftRight_Damping - 0-+1
1574 PHYSICS_BUTT_PHYSICS_LEFTRIGHT_DAMPING = 250,
1575 /// Breast_Physics_LeftRight_Max_Effect = 0-+3
1576 PHYSICS_BREAST_PHYSICS_LEFTRIGHT_MAX_EFFECT = 251,
1577 /// Breast_Physics_LeftRight_Spring - 0-+100
1578 PHYSICS_BREAST_PHYSICS_LEFTRIGHT_SPRING = 252,
1579 /// Breast_Physics_LeftRight_Gain - +1-+100
1580 PHYSICS_BREAST_PHYSICS_LEFT_RIGHT_GAIN = 253,
1581 /// Breast_Physics_LeftRight_Damping - 0-+1
1582 PHYSICS_BREAST_LEFTRIGHT_DAMPING = 254
1583 } 1630 }
1584 #endregion 1631 #endregion
1585 } 1632 }