示例#1
0
        // ----------------------------------------------------------
        private void WriteAttribute(string aValue, eAttribType aType, BinaryWriter aWriter)
        {
            switch (aType) {
                case eAttribType.none:
                    break;

                case eAttribType.str:
                    {
                        byte[] chars = Encoding.Default.GetBytes(aValue);
                        if (chars.Length > 255) {
                            Console.WriteLine("String '" + aValue + "' is longer than 255 chars");
                        }
                        // write number of chars
                        aWriter.Write((byte)chars.Length);
                        // write chars
                        aWriter.Write(chars);
                    }
                    break;

                case eAttribType.int8:
                    {
                        int value = int.Parse(aValue);
                        if (value > sbyte.MaxValue || value < sbyte.MinValue) {
                            Console.WriteLine("Value " + value + " is out of int8 range");
                        }
                        aWriter.Write((sbyte)value);
                    }
                    break;

                case eAttribType.uint8:
                    {
                        int value = int.Parse(aValue);
                        if (value > byte.MaxValue || value < byte.MinValue) {
                            Console.WriteLine("Value " + value + " is out of uint8 range");
                        }
                        aWriter.Write((byte)value);
                    }
                    break;

                case eAttribType.int16:
                    {
                        int value = int.Parse(aValue);
                        if (value > short.MaxValue || value < short.MinValue) {
                            Console.WriteLine("Value " + value + " is out of short range");
                        }
                        aWriter.Write((short)value);
                    }
                    break;

                case eAttribType.uint16:
                    {
                        int value = int.Parse(aValue);
                        if (value > ushort.MaxValue || value < ushort.MinValue) {
                            Console.WriteLine("Value " + value + " is out of ushort range");
                        }
                        aWriter.Write((ushort)value);
                    }
                    break;

                case eAttribType.int32:
                    {
                        int value = int.Parse(aValue);
                        aWriter.Write(value);
                    }
                    break;

                case eAttribType.uint32:
                    {
                        int value = int.Parse(aValue);
                        if (value < uint.MinValue) {
                            Console.WriteLine("Value " + value + " is out of uint range");
                        }
                        aWriter.Write((uint)value);
                    }
                    break;

                case eAttribType.fixed1_7:
                    {
                        int value = (int) (float.Parse(aValue, CultureInfo.InvariantCulture) * 128 + 0.5f);
                        if (value > byte.MaxValue || value < byte.MinValue) {
                            Console.WriteLine("Value " + value + " is out of 8bit range needed for fixed1_7");
                        }
                        aWriter.Write((byte)value);
                    }
                    break;

                case eAttribType.fixed8_8:
                    {
                        int value = (int) (float.Parse(aValue, CultureInfo.InvariantCulture) * 256 + 0.5f);
                        if (value > short.MaxValue || value < short.MinValue) {
                            Console.WriteLine("Value " + value + " is out of 16bit range needed for fixed8_8");
                        }
                        aWriter.Write((short)value);
                    }
                    break;

                case eAttribType.fixed16_16:
                    {
                        int value = (int) (float.Parse(aValue, CultureInfo.InvariantCulture) * 65536 + 0.5f);
                        if (value > int.MaxValue || value < int.MinValue) {
                            Console.WriteLine("Value " + value + " is out of 32bit range needed for fixed16_16");
                        }
                        aWriter.Write(value);
                    }
                    break;

                case eAttribType.boolean:
                    {
                        var value = aValue.ToLower() == "true" ? 1 : 0;
                        aWriter.Write((byte) value);
                    }
                    break;

                case eAttribType.curveType:
                    if (aValue == "linear") {
                        aWriter.Write((byte)0);
                    } else if (aValue == "instant") {
                        aWriter.Write((byte)1);
                    } else if (aValue == "quadratic") {
                        aWriter.Write((byte)2);
                    } else if (aValue == "cubic") {
                        aWriter.Write((byte)3);
                    } else {
                        Console.WriteLine("Unknown curve type: " + aValue);
                    }
                    break;

                case eAttribType.objInfoType:
                    if (aValue != "bone" && aValue != "sprite") {
                        Console.WriteLine("Unknown obj_info type type: " + aValue);
                    }
                    aWriter.Write((byte)(aValue == "bone" ? 1 : 0));
                    break;

                case eAttribType.timelineObjType:
                    if (aValue != "bone" && aValue != "sprite") {
                        Console.WriteLine("Unknown timeline object type: " + aValue);
                    }
                    aWriter.Write((byte)(aValue == "bone" ? 1 : 0));
                    break;
            }
        }
示例#2
0
        // ----------------------------------------------------------
        private void WriteAttribute(string aValue, eAttribType aType, BinaryWriter aWriter)
        {
            switch (aType)
            {
            case eAttribType.none:
                break;

            case eAttribType.str:
            {
                byte[] chars = Encoding.Default.GetBytes(aValue);
                if (chars.Length > 255)
                {
                    Console.WriteLine("String '" + aValue + "' is longer than 255 chars");
                }
                // write number of chars
                aWriter.Write((byte)chars.Length);
                // write chars
                aWriter.Write(chars);
            }
            break;

            case eAttribType.int8:
            {
                int value = int.Parse(aValue);
                if (value > sbyte.MaxValue || value < sbyte.MinValue)
                {
                    Console.WriteLine("Value " + value + " is out of int8 range");
                }
                aWriter.Write((sbyte)value);
            }
            break;

            case eAttribType.uint8:
            {
                int value = int.Parse(aValue);
                if (value > byte.MaxValue || value < byte.MinValue)
                {
                    Console.WriteLine("Value " + value + " is out of uint8 range");
                }
                aWriter.Write((byte)value);
            }
            break;

            case eAttribType.int16:
            {
                int value = int.Parse(aValue);
                if (value > short.MaxValue || value < short.MinValue)
                {
                    Console.WriteLine("Value " + value + " is out of short range");
                }
                aWriter.Write((short)value);
            }
            break;

            case eAttribType.uint16:
            {
                int value = int.Parse(aValue);
                if (value > ushort.MaxValue || value < ushort.MinValue)
                {
                    Console.WriteLine("Value " + value + " is out of ushort range");
                }
                aWriter.Write((ushort)value);
            }
            break;

            case eAttribType.int32:
            {
                int value = int.Parse(aValue);
                aWriter.Write(value);
            }
            break;

            case eAttribType.uint32:
            {
                int value = int.Parse(aValue);
                if (value < uint.MinValue)
                {
                    Console.WriteLine("Value " + value + " is out of uint range");
                }
                aWriter.Write((uint)value);
            }
            break;

            case eAttribType.fixed1_7:
            {
                int value = (int)(float.Parse(aValue, CultureInfo.InvariantCulture) * 128 + 0.5f);
                if (value > byte.MaxValue || value < byte.MinValue)
                {
                    Console.WriteLine("Value " + value + " is out of 8bit range needed for fixed1_7");
                }
                aWriter.Write((byte)value);
            }
            break;

            case eAttribType.fixed8_8:
            {
                int value = (int)(float.Parse(aValue, CultureInfo.InvariantCulture) * 256 + 0.5f);
                if (value > short.MaxValue || value < short.MinValue)
                {
                    Console.WriteLine("Value " + value + " is out of 16bit range needed for fixed8_8");
                }
                aWriter.Write((short)value);
            }
            break;

            case eAttribType.fixed16_16:
            {
                int value = (int)(float.Parse(aValue, CultureInfo.InvariantCulture) * 65536 + 0.5f);
                if (value > int.MaxValue || value < int.MinValue)
                {
                    Console.WriteLine("Value " + value + " is out of 32bit range needed for fixed16_16");
                }
                aWriter.Write(value);
            }
            break;

            case eAttribType.boolean:
            {
                var value = aValue.ToLower() == "true" ? 1 : 0;
                aWriter.Write((byte)value);
            }
            break;

            case eAttribType.curveType:
                if (aValue == "linear")
                {
                    aWriter.Write((byte)0);
                }
                else if (aValue == "instant")
                {
                    aWriter.Write((byte)1);
                }
                else if (aValue == "quadratic")
                {
                    aWriter.Write((byte)2);
                }
                else if (aValue == "cubic")
                {
                    aWriter.Write((byte)3);
                }
                else
                {
                    Console.WriteLine("Unknown curve type: " + aValue);
                }
                break;

            case eAttribType.objInfoType:
                if (aValue != "bone" && aValue != "sprite")
                {
                    Console.WriteLine("Unknown obj_info type type: " + aValue);
                }
                aWriter.Write((byte)(aValue == "bone" ? 1 : 0));
                break;

            case eAttribType.timelineObjType:
                if (aValue != "bone" && aValue != "sprite")
                {
                    Console.WriteLine("Unknown timeline object type: " + aValue);
                }
                aWriter.Write((byte)(aValue == "bone" ? 1 : 0));
                break;
            }
        }