aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/PrimitiveBaseShape.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Framework/PrimitiveBaseShape.cs129
1 files changed, 127 insertions, 2 deletions
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs
index 0a81363..927415e 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -136,6 +136,13 @@ namespace OpenSim.Framework
136 [XmlIgnore] private bool _lightEntry; 136 [XmlIgnore] private bool _lightEntry;
137 [XmlIgnore] private bool _sculptEntry; 137 [XmlIgnore] private bool _sculptEntry;
138 138
139 // Light Projection Filter
140 [XmlIgnore] private bool _projectionEntry;
141 [XmlIgnore] private UUID _projectionTextureID;
142 [XmlIgnore] private float _projectionFOV;
143 [XmlIgnore] private float _projectionFocus;
144 [XmlIgnore] private float _projectionAmb;
145
139 public byte ProfileCurve 146 public byte ProfileCurve
140 { 147 {
141 get { return (byte)((byte)HollowShape | (byte)ProfileShape); } 148 get { return (byte)((byte)HollowShape | (byte)ProfileShape); }
@@ -795,11 +802,57 @@ namespace OpenSim.Framework
795 } 802 }
796 } 803 }
797 804
805 public bool ProjectionEntry {
806 get {
807 return _projectionEntry;
808 }
809 set {
810 _projectionEntry = value;
811 }
812 }
813
814 public UUID ProjectionTextureUUID {
815 get {
816 return _projectionTextureID;
817 }
818 set {
819 _projectionTextureID = value;
820 }
821 }
822
823 public float ProjectionFOV {
824 get {
825 return _projectionFOV;
826 }
827 set {
828 _projectionFOV = value;
829 }
830 }
831
832 public float ProjectionFocus {
833 get {
834 return _projectionFocus;
835 }
836 set {
837 _projectionFocus = value;
838 }
839 }
840
841 public float ProjectionAmbiance {
842 get {
843 return _projectionAmb;
844 }
845 set {
846 _projectionAmb = value;
847 }
848 }
849
798 public byte[] ExtraParamsToBytes() 850 public byte[] ExtraParamsToBytes()
799 { 851 {
800 ushort FlexiEP = 0x10; 852 ushort FlexiEP = 0x10;
801 ushort LightEP = 0x20; 853 ushort LightEP = 0x20;
802 ushort SculptEP = 0x30; 854 ushort SculptEP = 0x30;
855 ushort ProjectionEP = 0x40;
803 856
804 int i = 0; 857 int i = 0;
805 uint TotalBytesLength = 1; // ExtraParamsNum 858 uint TotalBytesLength = 1; // ExtraParamsNum
@@ -823,6 +876,12 @@ namespace OpenSim.Framework
823 TotalBytesLength += 17;// data 876 TotalBytesLength += 17;// data
824 TotalBytesLength += 2 + 4; // type 877 TotalBytesLength += 2 + 4; // type
825 } 878 }
879 if (_projectionEntry)
880 {
881 ExtraParamsNum++;
882 TotalBytesLength += 28;// data
883 TotalBytesLength += 2 + 4;// type
884 }
826 885
827 byte[] returnbytes = new byte[TotalBytesLength]; 886 byte[] returnbytes = new byte[TotalBytesLength];
828 887
@@ -874,8 +933,20 @@ namespace OpenSim.Framework
874 Array.Copy(SculptData, 0, returnbytes, i, SculptData.Length); 933 Array.Copy(SculptData, 0, returnbytes, i, SculptData.Length);
875 i += SculptData.Length; 934 i += SculptData.Length;
876 } 935 }
877 936 if (_projectionEntry)
878 if (!_flexiEntry && !_lightEntry && !_sculptEntry) 937 {
938 byte[] ProjectionData = GetProjectionBytes();
939
940 returnbytes[i++] = (byte)(ProjectionEP % 256);
941 returnbytes[i++] = (byte)((ProjectionEP >> 8) % 256);
942 returnbytes[i++] = (byte)((ProjectionData.Length) % 256);
943 returnbytes[i++] = (byte)((ProjectionData.Length >> 16) % 256);
944 returnbytes[i++] = (byte)((ProjectionData.Length >> 20) % 256);
945 returnbytes[i++] = (byte)((ProjectionData.Length >> 24) % 256);
946 Array.Copy(ProjectionData, 0, returnbytes, i, ProjectionData.Length);
947 i += ProjectionData.Length;
948 }
949 if (!_flexiEntry && !_lightEntry && !_sculptEntry && !_projectionEntry)
879 { 950 {
880 byte[] returnbyte = new byte[1]; 951 byte[] returnbyte = new byte[1];
881 returnbyte[0] = 0; 952 returnbyte[0] = 0;
@@ -893,6 +964,7 @@ namespace OpenSim.Framework
893 const ushort FlexiEP = 0x10; 964 const ushort FlexiEP = 0x10;
894 const ushort LightEP = 0x20; 965 const ushort LightEP = 0x20;
895 const ushort SculptEP = 0x30; 966 const ushort SculptEP = 0x30;
967 const ushort ProjectionEP = 0x40;
896 968
897 switch (type) 969 switch (type)
898 { 970 {
@@ -922,6 +994,14 @@ namespace OpenSim.Framework
922 } 994 }
923 ReadSculptData(data, 0); 995 ReadSculptData(data, 0);
924 break; 996 break;
997 case ProjectionEP:
998 if (!inUse)
999 {
1000 _projectionEntry = false;
1001 return;
1002 }
1003 ReadProjectionData(data, 0);
1004 break;
925 } 1005 }
926 } 1006 }
927 1007
@@ -933,10 +1013,12 @@ namespace OpenSim.Framework
933 const ushort FlexiEP = 0x10; 1013 const ushort FlexiEP = 0x10;
934 const ushort LightEP = 0x20; 1014 const ushort LightEP = 0x20;
935 const ushort SculptEP = 0x30; 1015 const ushort SculptEP = 0x30;
1016 const ushort ProjectionEP = 0x40;
936 1017
937 bool lGotFlexi = false; 1018 bool lGotFlexi = false;
938 bool lGotLight = false; 1019 bool lGotLight = false;
939 bool lGotSculpt = false; 1020 bool lGotSculpt = false;
1021 bool lGotFilter = false;
940 1022
941 int i = 0; 1023 int i = 0;
942 byte extraParamCount = 0; 1024 byte extraParamCount = 0;
@@ -973,6 +1055,11 @@ namespace OpenSim.Framework
973 i += 17; 1055 i += 17;
974 lGotSculpt = true; 1056 lGotSculpt = true;
975 break; 1057 break;
1058 case ProjectionEP:
1059 ReadProjectionData(data, i);
1060 i += 28;
1061 lGotFilter = true;
1062 break;
976 } 1063 }
977 } 1064 }
978 1065
@@ -982,6 +1069,8 @@ namespace OpenSim.Framework
982 _lightEntry = false; 1069 _lightEntry = false;
983 if (!lGotSculpt) 1070 if (!lGotSculpt)
984 _sculptEntry = false; 1071 _sculptEntry = false;
1072 if (!lGotFilter)
1073 _projectionEntry = false;
985 1074
986 } 1075 }
987 1076
@@ -1121,6 +1210,42 @@ namespace OpenSim.Framework
1121 return data; 1210 return data;
1122 } 1211 }
1123 1212
1213 public void ReadProjectionData(byte[] data, int pos)
1214 {
1215 byte[] ProjectionTextureUUID = new byte[16];
1216
1217 if (data.Length - pos >= 28)
1218 {
1219 _projectionEntry = true;
1220 Array.Copy(data, pos, ProjectionTextureUUID,0, 16);
1221 _projectionTextureID = new UUID(ProjectionTextureUUID, 0);
1222
1223 _projectionFOV = Utils.BytesToFloat(data, pos + 16);
1224 _projectionFocus = Utils.BytesToFloat(data, pos + 20);
1225 _projectionAmb = Utils.BytesToFloat(data, pos + 24);
1226 }
1227 else
1228 {
1229 _projectionEntry = false;
1230 _projectionTextureID = UUID.Zero;
1231 _projectionFOV = 0f;
1232 _projectionFocus = 0f;
1233 _projectionAmb = 0f;
1234 }
1235 }
1236
1237 public byte[] GetProjectionBytes()
1238 {
1239 byte[] data = new byte[28];
1240
1241 _projectionTextureID.GetBytes().CopyTo(data, 0);
1242 Utils.FloatToBytes(_projectionFOV).CopyTo(data, 16);
1243 Utils.FloatToBytes(_projectionFocus).CopyTo(data, 20);
1244 Utils.FloatToBytes(_projectionAmb).CopyTo(data, 24);
1245
1246 return data;
1247 }
1248
1124 1249
1125 /// <summary> 1250 /// <summary>
1126 /// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values 1251 /// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values