예제 #1
0
        public void testFrame()
        {
            frame testFrame = new frame(1, 2);

            Assert.Equal(1, testFrame.roll1);
            Assert.Equal(2, testFrame.roll2);
        }
예제 #2
0
 void kinect_ReadyFrame(object sender, frame.IKinectFrame e)
 {
     this.Dispatcher.BeginInvoke(new Action(() =>
     {
         kinect.commit(e);
     }));
 }
예제 #3
0
        public void test0Frame()
        {
            frame zeroFrame = new frame(0, 0);

            Assert.Equal(0, zeroFrame.roll1);
            Assert.Equal(0, zeroFrame.roll2);
        }
예제 #4
0
        public void read(FileData f)
        {
            int nameOff = f.ReadInt();

            unknown    = f.ReadInt();
            valueCount = f.ReadInt();
            int frameCount = f.ReadInt();

            unknown2 = f.ReadUShort();
            animType = f.ReadUShort();
            int dataOff = f.ReadInt();

            f.Seek(nameOff);
            name = f.ReadString();
            f.Seek(dataOff);
            for (int i = 0; i < frameCount; i++)
            {
                frame temp = new frame();
                //temp.size = valueCount;
                temp.values = new float[valueCount];
                for (int j = 0; j < valueCount; j++)
                {
                    temp.values[j] = f.ReadFloat();
                }
                frames.Add(temp);
            }
        }
예제 #5
0
        public void read(FileData f)
        {
            int nameOff = f.ReadInt();

            unk1 = (f.ReadInt() != 0);
            int dataOff = f.ReadInt();

            f.Seek(nameOff);
            name = f.ReadString();
            f.Seek(dataOff);
            frameCount = f.ReadInt();
            unk2       = (f.ReadUShort() != 0);
            short keyframeCount  = f.ReadShort();
            int   keyframeOffset = f.ReadInt();

            f.Seek(keyframeOffset);
            frame tempFrame;

            for (int i = 0; i < keyframeCount; i++)
            {
                tempFrame.frameNum = f.ReadShort();
                tempFrame.state    = f.ReadByte();
                tempFrame.unknown  = f.ReadByte();
                frames.Add(tempFrame);
                tempFrame = new frame();
            }
        }
예제 #6
0
        public static id3tag read_id3tag(System.IO.Stream strm, bool createImageObject)
        {
            id3tag tag = new id3tag();

            byte[] id3_header = new byte[10];// ID3タグヘッダ用
            strm.ReadOrThrow(id3_header, 0, 10);
            id3v2header header = read_header(id3_header);

            if (header == null)
            {
                return(null);
            }
            if (header.size >= strm.Length)
            {
                return(null);
            }
            tag.head = header;

            if ((tag.head.flag & FLAG_HEAD_EXTENSION) > 0)// 拡張ヘッダがあるときサイズだけ読んでスキップ
            {
                byte[] ext_header = new byte[4];
                strm.Read(ext_header, 0, 4);
                int size;
                if (tag.head.version == 3) // v2.3
                {
                    size = ((ext_header[0] * 256 + ext_header[1]) * 256 + ext_header[2]) * 256 + ext_header[3];
                }
                else // v2.4
                {
                    size = ((ext_header[0] * 128 + ext_header[1]) * 128 + ext_header[2]) * 128 + ext_header[3] - 4;
                }
                strm.Seek(size, System.IO.SeekOrigin.Current);
            }

            /* frame */
            byte[] frame_buf = new byte[tag.head.size];
            strm.Read(frame_buf, 0, tag.head.size);


            if (((tag.head.flag & FLAG_HEAD_UNSYNC) > 0) && tag.head.version == 3)
            {
                frame_buf = DecodeUnsync(frame_buf);
            }

            MemoryStream tagBodyStream = new MemoryStream(frame_buf, 0, frame_buf.Length);
            int          count         = 0;

            while (true)
            { //offset < tag.head.size
                frame fr = read_frame(tagBodyStream, tag, createImageObject);
                if (fr == null)
                {
                    break;
                }
                count++;
                tag.frame.Add(fr);
            }
            return(tag);
        }
예제 #7
0
    frame generateFrame()
    {
        frame f = new frame();

        f.position        = transform.position;
        f.rotation        = transform.rotation;
        f.velocity        = rB.velocity;
        f.angularVelocity = rB.angularVelocity;
        return(f);
    }
예제 #8
0
        private void Form1_Load(object sender, EventArgs e)
        {
            /*变量初始化*/
            RX_Buffer = new List <byte>(1024);
            Series RX_stream = new Series("RX_stream");

            slv_frame = frame.none;
            err_cnt   = 0;
            PKG       = new byte[128];
            /*波特率多选框comboBox初始话*/
            comboBox1.Items.Add(115200);
            comboBox1.Items.Add(9600);
            comboBox1.Items.Add(230400);
            comboBox1.SelectedIndex = 0;
            /*缓冲buffer区显示初始化*/
            label1.Text = new string(' ', 128 * 3);
            /*数据表格初始化*/
            chart1.Series.Clear();
            RX_stream.ChartType         = SeriesChartType.Column;
            RX_stream.IsVisibleInLegend = false;
            RX_stream.Points.AddXY("raw", "0");
            chart1.Series.Add(RX_stream);
            chart1.ChartAreas[0].AxisY.Maximum = 32768;
            chart1.ChartAreas[0].AxisY.Minimum = -32768;
            /*绘图imagine初始化*/
            Stream_Vec  = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Stream_VecG = Graphics.FromImage(Stream_Vec);
            Stream_VecG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            /*串口扫描和初始化*/
            int valid_COM_cnt = COM_scan();

            groupBox2.Text = valid_COM_cnt.ToString() + " COMs";
            COM_open();
            if (obj.IsOpen)
            {
                /*开始工作*/
                timer1.Enabled           = true;
                button_OpenCOM.BackColor = color_enable;
                button_OpenCOM.Text      = "Close";
                button3.BackColor        = color_disable;
                button3.Text             = "数据流\r\n";
                Stream_EN = false;
            }
            else
            {
                timer1.Enabled           = false;
                button_OpenCOM.BackColor = color_disable;
                button_OpenCOM.Text      = "Open";
            }
        }
예제 #9
0
 public override ImageSource update(frame.IKinectFrame frame)
 {
     if (frame.DepthColor != null)
     {
         _bitmapaDepth.WritePixels(
         new System.Windows.Int32Rect(0, 0,
             _bitmapaDepth.PixelWidth,
             _bitmapaDepth.PixelHeight),
         frame.DepthColor,
         _bitmapaDepth.PixelWidth,
         0);
     }
     return _bitmapaDepth;
 }
예제 #10
0
        private void positionAtFrameChanged(object sender, EventArgs e)
        {
            if (frameChangesAccepted)
            {
                int x = (int)numericUpDownPX.Value;
                int y = (int)numericUpDownPY.Value;
                int z = (int)numericUpDownPZ.Value;
                int d = (int)comboBoxPD.SelectedIndex + 32768;

                frameList[selectedPath][selectedFrame] = new frame(x, y, z, d);

                ec.frameList = frameList[selectedPath];
                ec.redraw();
            }
        }
예제 #11
0
 private void OnDrawGizmos()
 {
     if (Application.isPlaying)
     {
         int   i     = 0;
         frame lastF = reel[0];
         foreach (frame f in reel)
         {
             Gizmos.color = Color.HSVToRGB((float)i / reel.Count, 1, 1);
             Gizmos.DrawLine(f.position, (lastF.position - f.position) * 0.3f + f.position);
             lastF = f;
             i++;
         }
     }
 }
예제 #12
0
        private bool PKG_decode()
        {
            float  temp       = 0;
            int    M2006_size = 24;
            uint   id;
            short  rpm;
            ushort mom, cmd, deg;

            byte[] M2006_struct = PKG.Skip(12).Take(M2006_size * 4).ToArray();
            slv_frame = frame.none;

            temp = (float)(PKG[4] + PKG[5] * 256) / 100.0f;
            toolStripStatusLabel9.Text = temp.ToString("F1") + " ℃";
            temp = (float)(PKG[8] + PKG[9] * 256) / 100.0f;
            toolStripStatusLabel7.Text = temp.ToString("F1") + " V";

            id              = M2006_struct[0];
            cmd             = (ushort)(M2006_struct[2] << 8 | M2006_struct[1]);
            rpm             = (short)(M2006_struct[4] << 8 | M2006_struct[3]);
            deg             = (ushort)(M2006_struct[6] << 8 | M2006_struct[5]);
            mom             = (ushort)(M2006_struct[8] << 8 | M2006_struct[7]);
            groupBox4.Text  = "LF ID:";
            groupBox4.Text += id.ToString();
            label6.Text     = cmd.ToString();
            label9.Text     = rpm.ToString();
            label8.Text     = deg.ToString();
            label7.Text     = mom.ToString();


            groupBox6.Text  = "LF ID:";
            groupBox6.Text += M2006_struct[M2006_size].ToString();


            groupBox7.Text  = "LF ID:";
            groupBox7.Text += M2006_struct[M2006_size * 2].ToString();


            groupBox8.Text  = "LF ID:";
            groupBox8.Text += M2006_struct[M2006_size * 3].ToString();



            return(true);
        }
예제 #13
0
    void Start()
    {
        if (pos.Count < 1)
        {
            return;
        }
        float   totalDistance = 0, curDis = 0;
        Vector3 dir;

        particle.transform.position = new Vector3(0, 0, -2);
        for (int i = 1; i < pos.Count; ++i)
        {
            curDis = Vector3.Distance(pos[i], pos[i - 1]);
            dir    = pos[i] - pos[i - 1];
            //dir.Normalize();
            frames.Enqueue(new frame(dir, curDis));

            totalDistance += curDis;
        }
        float time = 0;

        while (frames.Count > 0)
        {
            frame data = frames.Dequeue();
            curveX.AddKey(new Keyframe(time, data.dir.x, float.PositiveInfinity, float.PositiveInfinity));
            curveY.AddKey(new Keyframe(time, data.dir.y, float.PositiveInfinity, float.PositiveInfinity));
            curveZ.AddKey(new Keyframe(time, data.dir.z, float.PositiveInfinity, float.PositiveInfinity));
            time += data.dis / totalDistance;
        }

        var velocity = particle.velocityOverLifetime;

        velocity.enabled = true;

        float scale = 50 / particle.startLifetime;

        velocity.space = ParticleSystemSimulationSpace.Local;
        velocity.x     = new ParticleSystem.MinMaxCurve(1, curveX);
        velocity.y     = new ParticleSystem.MinMaxCurve(1, curveY);
        velocity.z     = new ParticleSystem.MinMaxCurve(1, curveZ);
    }
예제 #14
0
        /*串口操作与数据收发函数*/
        private void COM_RxHandler(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = obj;

            byte[] buffer = new byte[sp.BytesToRead];
            try
            {
                sp.Read(buffer, 0, sp.BytesToRead);
                RX_Buffer.AddRange(buffer);
                RX_RATE_CNTER += buffer.Length;
                /*分流处理*/
                if (obj.IsOpen && (RX_Buffer.Count() == 16) && (RX_Buffer[0] == 0xb1) && (RX_Buffer[1] == 0xb1))
                {
                    slv_frame = frame.Status;
                }
                else if (obj.IsOpen && (RX_Buffer.Count() == 128) && (RX_Buffer[0] == 0x0c) && (RX_Buffer[1] == 0x0c))
                {
                    slv_frame = frame.pkg;
                    PKG       = RX_Buffer.ToArray();
                    RX_Buffer.Clear();
                }
                else if (obj.IsOpen && (RX_Buffer.Count() > 128))
                {
                    /*出现误码,删除0x0c 0x0c前的元素*/
                    int length    = RX_Buffer.Count();
                    int frame_pos = 0;
                    for (int i = 0; i < length - 1; i++)
                    {
                        if (RX_Buffer[i] == 0x0c && RX_Buffer[i + 1] == 0x0c)
                        {
                            frame_pos = i;
                        }
                    }
                    RX_Buffer.RemoveRange(0, frame_pos);
                    err_cnt++;
                }
            }
            catch
            {
            }
        }
 base.PrepareFrame(frame, elapsedTime);
예제 #16
0
    // Update is called once per frame
    void Update()
    {
        if (map == null)
        {
            try
            {
                map = GameObject.FindGameObjectWithTag("Map").GetComponent <AbstractMap>();
            }
            catch (System.Exception)
            {
            }
        }
        if (dataSource != null)
        {
            dataFrame = dataSource.DataFrame;
        }

        if (dataFrame != null)
        {
            tick = dataFrame.tick;
            if (tick != lastTick)
            {
                if (dataFrame.targets.Length > 0)
                {
                    foreach (gpsData target in dataFrame.targets)
                    {
                        if (target.Type != "Train")
                        {
                            GameObject radarTarget = GameObject.Find("DataManager/" + target.id);
                            if (radarTarget != null)
                            {
                                Vector3 pos = map.GeoToWorldPosition(new Mapbox.Utils.Vector2d(target.Latitude, target.Longitude));
                                //Debug.Log(map.QueryElevationInMetersAt(new Mapbox.Utils.Vector2d(target.Latitude, target.Longitude)));
                                if (target.Type == "Sat")
                                {
                                    pos.y += Mathf.Min((target.Elevation * map.WorldRelativeScale * 1000), 10000f * map.WorldRelativeScale);
                                }
                                else
                                {
                                    pos.y += radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y + (target.Elevation * map.WorldRelativeScale);
                                }
                                radarTarget.transform.position = pos;
                                radarTarget.transform.rotation = Quaternion.Euler(0, target.TrueTrack, 0);
                                radarTarget.GetComponent <targetHandler>().metadata.copy(target);
                                if (radarTarget.GetComponent <targetHandler>().lostContact)
                                {
                                    radarTarget.transform.GetChild(0).GetComponent <MeshRenderer>().material.color = radarTarget.GetComponent <targetHandler>().orgColor;

                                    radarTarget.GetComponent <targetHandler>().lostContact = false;
                                }
                                radarTarget.GetComponent <targetHandler>().timeSinceUpdate = tick;
                                if (target.Type == "Aircraft")
                                {
                                    //pos = radarTarget.transform.GetChild(0).Find("node_id33 12").GetComponent<Renderer>().bounds.center;
                                    pos = radarTarget.transform.GetChild(0).Find("node_id33 12").GetComponent <Renderer>().bounds.center;
                                }

                                radarTarget.GetComponent <LineRenderer>().SetPosition(0, new Vector3(pos.x, pos.y - radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y * 2, pos.z));
                                radarTarget.GetComponent <LineRenderer>().SetPosition(1, new Vector3(pos.x, Mathf.Max(-10, pos.y - (radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y + (target.Elevation * map.WorldRelativeScale))), pos.z));
                            }
                            else
                            {
                                if (insideMap(target.Latitude, target.Longitude) && target.Elevation > -10 && target.Type != "Train")
                                {
                                    Vector3 pos = map.GeoToWorldPosition(new Mapbox.Utils.Vector2d(target.Latitude, target.Longitude));
                                    if (target.Type == "Sat")
                                    {
                                        pos.y += Mathf.Min((target.Elevation * map.WorldRelativeScale * 1000), 10000f * map.WorldRelativeScale);
                                    }
                                    else
                                    {
                                        pos.y += (target.Elevation * map.WorldRelativeScale);
                                    }
                                    try
                                    {
                                        radarTarget = Instantiate(Resources.Load("HART/Prefabs/" + target.Type, typeof(GameObject)), pos, Quaternion.Euler(0, target.TrueTrack, 0), transform) as GameObject;
                                    }
                                    catch (System.Exception)
                                    {
                                        radarTarget = Instantiate(targetPrefab, pos, Quaternion.Euler(0, target.TrueTrack, 0), transform);
                                    }


                                    radarTarget.GetComponent <targetHandler>().metadata.copy(target);
                                    radarTarget.name  = target.id;
                                    radarTarget.tag   = "target";
                                    radarTarget.layer = 9;
                                    radarTarget.GetComponent <targetHandler>().timeSinceUpdate = tick;
                                    if (target.Type == "Aircraft")
                                    {
                                        //pos = radarTarget.transform.GetChild(0).Find("node_id33 12").GetComponent<Renderer>().bounds.center;
                                        pos = radarTarget.transform.GetChild(0).Find("node_id33 12").GetComponent <Renderer>().bounds.center;
                                    }
                                    if (radarTarget.GetComponent <LineRenderer>())
                                    {
                                        radarTarget.GetComponent <LineRenderer>().positionCount = 2;
                                        radarTarget.GetComponent <LineRenderer>().SetPosition(0, new Vector3(pos.x, pos.y - radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y * 2, pos.z));
                                        radarTarget.GetComponent <LineRenderer>().SetPosition(1, new Vector3(pos.x, Mathf.Max(-10, pos.y - (radarTarget.transform.GetChild(0).GetComponent <Renderer>().bounds.size.y + (target.Elevation * map.WorldRelativeScale))), pos.z));

                                        radarTarget.GetComponent <LineRenderer>().startWidth = .04f;
                                        radarTarget.GetComponent <LineRenderer>().endWidth   = 0;
                                    }
                                    try
                                    {
                                        Transform dataDisp = radarTarget.transform.Find("DataDisplay");
                                        if (dataDisp.GetComponent <TextMesh>() != null)
                                        {
                                            gpsData tmp = radarTarget.GetComponent <targetHandler>().metadata;
                                            dataDisp.GetComponent <TextMesh>().text = tmp.getTextData();
                                            dataDisp.transform.position            += new Vector3(0, dataDisp.GetComponent <TextMesh>().GetComponent <Renderer>().bounds.size.y);
                                            dataDisp.LookAt(Camera.main.transform);
                                            dataDisp.Rotate(new Vector3(0, 180, 0));
                                        }
                                    }
                                    catch (Exception)
                                    {
                                    }
                                }
                            }
                        }
                        else if (target.Type == "Train")
                        {
                            foreach (station sta in target.stops)
                            {
                                GameObject radarTarget = GameObject.Find("DataManager/" + sta.stationId);
                                if (radarTarget != null)
                                {
                                    radarTarget.GetComponent <targetHandler>().metadata.stops[0]  = sta;
                                    radarTarget.GetComponent <targetHandler>().metadata.Latitude  = sta.Latitude;
                                    radarTarget.GetComponent <targetHandler>().metadata.Longitude = sta.Longitude;
                                    radarTarget.GetComponent <targetHandler>().timeSinceUpdate    = tick;
                                }
                                else
                                {
                                    if (insideMap(sta.Latitude, sta.Longitude))
                                    {
                                        Vector3 pos = map.GeoToWorldPosition(new Mapbox.Utils.Vector2d(sta.Latitude, sta.Longitude));
                                        try
                                        {
                                            radarTarget = Instantiate(Resources.Load("HART/Prefabs/" + target.Type, typeof(GameObject)), pos, Quaternion.Euler(0, target.TrueTrack, 0), transform) as GameObject;
                                        }
                                        catch (System.Exception)
                                        {
                                            Debug.LogError("Failed to create train station, something is really broken");
                                        }

                                        radarTarget.name  = sta.stationId;
                                        radarTarget.tag   = "target";
                                        radarTarget.layer = 9;
                                        radarTarget.GetComponent <targetHandler>().showText = false;
                                        radarTarget.GetComponent <targetHandler>().metadata.copy(target);
                                        radarTarget.GetComponent <targetHandler>().metadata.stops = new station[1] {
                                            sta
                                        };
                                        radarTarget.GetComponent <targetHandler>().metadata.id        = sta.stationId + ":" + sta.stationName;
                                        radarTarget.GetComponent <targetHandler>().metadata.Latitude  = sta.Latitude;
                                        radarTarget.GetComponent <targetHandler>().metadata.Longitude = sta.Longitude;
                                        radarTarget.GetComponent <targetHandler>().timeSinceUpdate    = tick;
                                    }
                                }
                            }
                        }
                    }
                }

                foreach (Transform target in transform)
                {
                    if (target.GetComponent <targetHandler>().timeSinceUpdate != tick && tick - target.GetComponent <targetHandler>().timeSinceUpdate >= dropTime)
                    {
                        colorKey[0].color = target.GetComponent <targetHandler>().orgColor;
                        g.SetKeys(colorKey, alphaKey);
                        //Debug.Log("Lost contact with: " + target.name + " for " + (tick - target.GetComponent<targetHandler>().timeSinceUpdate) + " ticks");
                        target.GetComponent <targetHandler>().lostContact = true;
                        target.transform.GetChild(0).GetComponent <MeshRenderer>().material.color = g.Evaluate((tick - target.GetComponent <targetHandler>().timeSinceUpdate) / dropTime);
                        target.transform.GetComponent <targetHandler>().diff = ((float)(tick - target.GetComponent <targetHandler>().timeSinceUpdate)) / dropTime;
                    }
                    if (tick - target.GetComponent <targetHandler>().timeSinceUpdate > dropTime)
                    {
                        //Debug.Log(target.name + " is gone");
                        target.GetComponent <targetHandler>().removeDelegate();
                        Destroy(target.gameObject);
                    }
                }
                lastTick = tick;
            }
        }
    }
예제 #17
0
    private IEnumerator GetData()
    {
        string request = url;

        request = request.Replace("{ip}", ip).Replace("{port}", port.ToString());
        //WWW www1 = new WWW(request);

        UnityWebRequest www = UnityWebRequest.Get(request);

        if (demoLoop)
        {
            www.SetRequestHeader("demoLoop", "1");
            //request += demoLoopURL;
        }
        if (commercialFlight)
        {
            www.SetRequestHeader("commercialFlights", "1");
            www.SetRequestHeader("lngMin", lngMin.ToString());
            www.SetRequestHeader("lngMax", lngMax.ToString());
            www.SetRequestHeader("latMin", latMin.ToString());
            www.SetRequestHeader("latMax", latMax.ToString());
            //request += string.Format(commericalFlightURL, lngMin, lngMax, latMin, latMax);
        }
        if (satellite)
        {
            www.SetRequestHeader("satellite", "1");
            www.SetRequestHeader("centerLat", latLong.x.ToString());
            www.SetRequestHeader("centerLng", latLong.y.ToString());
            www.SetRequestHeader("satRadius", satRadius.ToString());

            //request += string.Format(satelliteURL, latLong.x, latLong.y, satRadius);
        }
        if (MTA)
        {
            www.SetRequestHeader("publicTransit", "1");
        }
        //request = request.TrimEnd('&');

        /*if (debug)
         *  Debug.Log(request);
         */

        www.chunkedTransfer = false;
#if UNITY_EDITOR
        // otherwise requests don't work in Edit mode, eg geocoding
        // also lot of EditMode tests fail otherwise
#pragma warning disable 0618
        www.Send();
#pragma warning restore 0618
        while (!www.isDone)
        {
            yield return(null);
        }
#else
#pragma warning disable 0618
        yield return(www.Send());

#pragma warning restore 0618
#endif

        if (www.isNetworkError && !string.IsNullOrEmpty(www.error))
        {
            Debug.Log(request + " " + www.responseCode + "\n" + www.error);
            Debug.Log(www);
        }
        else
        {
            if (debug)
            {
                Debug.Log(www.downloadHandler.text);
            }
            dataFrame = JsonUtility.FromJson <frame>(www.downloadHandler.text);
            if (debug)
            {
                Debug.Log(dataFrame);
            }
        }
        www.Dispose();
    }
예제 #18
0
    public ChaFile Parse(string path)
    {
        FileInfo sourceFile = null;
        sourceFile = new FileInfo(path);
        if (sourceFile == null || !sourceFile.Exists)
        {
            Debug.LogError("File not exist or error:" + path);
            return null;
        }

        BinaryReader reader = new BinaryReader(sourceFile.OpenRead());

        ChaFile cf = new ChaFile();

        #region Read ChaFile

        //1.4 bytes,length of the name
        int cfNameLength = reader.ReadInt32();

        //2.name
        char[] name = new char[cfNameLength];
        reader.Read(name, 0, cfNameLength);
        cf.name = new string(name);
        //3.bone count
        int cfBoneNumber = reader.ReadInt32();

        //4.all bone infomation
        for (int i = 0; i < cfBoneNumber; i++)
        {
            BoneS bs = new BoneS();

            #region Read BoneS

            //4.1 bone name Length
            int boneNameLength = reader.ReadInt32();
            #region 其他方法
            //    reader.Read(boneNameLength, 0, 4);
            //    int nameLength = boneNameLength + (boneNameLength[1] << 8) + (boneNameLength[2] << 16) + (boneNameLength[3] << 24);
            #endregion
            bs.nameLength = boneNameLength;

            //bone name
            char[] boneName = new char[boneNameLength];
            reader.Read(boneName, 0, boneNameLength);
            bs.name = new string(boneName);

            //texture name length
            int textureNameLength = reader.ReadInt32();
            bs.textureNameLength = textureNameLength;

            //texture name
            char[] textureName = new char[textureNameLength];
            reader.Read(textureName, 0, textureNameLength);
            bs.textureName = new string(textureName);

            //bone id
            int id = reader.ReadInt32();
            bs.index = id;
            //add
            cf.boneList.Add(bs);
            #endregion
        }

        int cfAniamtionNumber = reader.ReadInt32();

        for (int i = 0; i < cfAniamtionNumber; i++)
        {
            sAnimation sa = new sAnimation();

            #region Read sAnimation

            cf.animationList.Add(sa);

            //name length
            int nameLength = reader.ReadInt32();

            //name
            char[] animationName = new char[nameLength];
            reader.Read(animationName, 0, nameLength);
            sa.name = new string(animationName);

            //4bytes unknovn.0Xc0
            byte[] c = reader.ReadBytes(4);

            //frame count
            int frameCount = reader.ReadInt32();

            //frame
            for (int index = 0; index < frameCount; index++)
            {
                frame f = new frame();

                #region Read frame

                sa.frames.Add(f);

                //frame type
                int ft = reader.ReadInt32();
                f.type = ft;

                #region 处理掉不需要的数据
                if (ft == 1)
                {
                    int ftTag = reader.ReadInt32();
                    int ftNameLength = reader.ReadInt32();
                    if (ft == 0)
                    {
                        byte[] ftName = reader.ReadBytes(4);
                    }
                    else
                    {
                        byte[] ftName = reader.ReadBytes(ftNameLength);
                    }

                    byte[] ftAudioInfo = reader.ReadBytes(32);

                    if (ft == 1)
                    {
                        ftTag = reader.ReadInt32();
                    }
                }
                #endregion

                //bone data count
                int bc = reader.ReadInt32();

                for (int j = 0; j < bc; j++)
                {
                    boneData bd = new boneData();

                    #region Read boneData

                    f.boneList.Add(bd);

                    //bone index
                    byte[] bIndex = reader.ReadBytes(2);
                    bd.boneIndex = (short)(bIndex[0] + (bIndex[1] << 8));

                    //bone transparent
                    bd.transparent = reader.ReadByte();

                    //bone data(float:6)
                    bd.data[0] = reader.ReadSingle();
                    bd.data[1] = reader.ReadSingle();
                    bd.data[2] = reader.ReadSingle();
                    bd.data[3] = reader.ReadSingle();
                    bd.data[4] = reader.ReadSingle();
                    bd.data[5] = reader.ReadSingle();

                    //offset
                    bd.data[1] *= -1.0f;
                    bd.data[2] *= -1.0f;
                    bd.data[4] *= 0.1f * 4f;
                    bd.data[5] *= -0.1f * 4f;

                    #endregion

                }
                #endregion

            }
            #endregion

        }
        #endregion
        return cf;
    }
예제 #19
0
        static frame read_frame(Stream strm, id3tag tag, bool createImageObject)
        {
            int i;
            int headsize = (tag.head.version == 2) ? 6 : 10;

            if (strm.Length < headsize)
            {
                return(null);
            }
            byte[] buf = new byte[headsize];
            strm.Read(buf, 0, headsize);
            frame fr = new frame();

            fr.id_x = 0; // どれでもない
            uint _size;

            switch (tag.head.version)
            {
            case 2:
                fr.id   = Encoding.ASCII.GetString(buf, 0, 3);
                _size   = ((uint)buf[3] * 256 + buf[4]) * 256 + buf[5];
                fr.flag = 0;
                for (i = 0; i < FRAMES.Length; i++)
                {
                    if (fr.id == FRAMES[i].name2)
                    {
                        fr.id_x = i; break;
                    }
                }
                break;

            case 3:
                fr.id   = Encoding.ASCII.GetString(buf, 0, 4);
                _size   = (((uint)buf[4] * 256 + buf[5]) * 256 + buf[6]) * 256 + buf[7];
                fr.flag = ((uint)buf[8] << 7) + (((uint)buf[9] >> 4) & 0x0F) + (((uint)buf[9] << 1) & 0x40);
                for (i = 0; i < FRAMES.Length; i++)
                {
                    if (fr.id == FRAMES[i].name3)
                    {
                        fr.id_x = i; break;
                    }
                }
                break;

            case 4:
                fr.id   = Encoding.ASCII.GetString(buf, 0, 4);
                _size   = (((uint)buf[4] * 128 + buf[5]) * 128 + buf[6]) * 128 + buf[7];
                fr.flag = ((uint)buf[8] << 8) + buf[9];
                for (i = 0; i < FRAMES.Length; i++)
                {
                    if (fr.id == FRAMES[i].name4)
                    {
                        fr.id_x = i; break;
                    }
                }
                break;

            default:
                return(null);
            }
            if (_size > strm.Length)
            {
                return(null);
            }
            fr.size = (int)_size;
            if ((fr.flag & FLAG_FRAME_CRYPTED) > 0)
            {
                return(null);                                    // 暗号化なんて知りませんよっと
            }
            if ((fr.flag & FLAG_FRAME_COMPRESSED) > 0)
            {
                return(null);                                       // 圧縮は実装してない
            }
            if (fr.size == 0)
            {
                return(null);
            }
            if (fr.id == "")
            {
                return(null);
            }

            int readsize = headsize + fr.size;

            if (readsize > strm.Length)
            {
                return(null);
            }
            int offset = 0;

            byte[] tmp = new byte[fr.size]; // + 2

            strm.Read(tmp, 0, fr.size);
            if (((fr.flag & FLAG_FRAME_UNSYNC) > 0) && tag.head.version == 4)
            {
                tmp = DecodeUnsync(tmp);
            }

            if ((fr.flag & FLAG_FRAME_DATALENGTH) > 0)  // 元サイズ情報を飛ばす
            {
                offset   = 4;
                fr.size -= 4;
            }

            /*
             * if ((fr.flag & FLAG_FRAME_CRYPTED) > 0) // 暗号方式を飛ばす
             * {
             *  offset += 1;
             *  fr.size -= 1;
             * }
             */

            MemoryStream frameBodyStream = new MemoryStream(tmp, offset, tmp.Length - offset);

            readFrameBody(frameBodyStream, fr, createImageObject);
            return(fr);
        }
예제 #20
0
        static void readFrameBody(Stream sr, frame fr, bool createImageObject)
        {
            byte[] tmp;
            switch ((FRAME_TYPE)FRAMES[fr.id_x].type)
            {
            case FRAME_TYPE.FR_BIN:
                tmp = new byte[sr.Length];
                sr.Read(tmp, 0, (int)sr.Length);

                if (tmp[0] < 0x04)
                {
                    int mimepos     = 1;
                    int filenamepos = tmp.IndexOf(mimepos, 0) + 1;
                    int contentdescpos;
                    int bodypos = 0;
                    fr.geob_mime = Encoding.ASCII.GetString(tmp, mimepos, filenamepos - mimepos - 1);
                    switch ((eEncode)tmp[0])
                    {
                    case eEncode.ISO_8859_1:
                        contentdescpos      = tmp.IndexOf(filenamepos, 0) + 1;
                        bodypos             = tmp.IndexOf(contentdescpos, 0) + 1;
                        fr.geob_filename    = Encoding.Default.GetString(tmp, filenamepos, contentdescpos - filenamepos - 1);
                        fr.geob_contentDesc = Encoding.Default.GetString(tmp, contentdescpos, bodypos - contentdescpos - 1);
                        break;

                    case eEncode.UTF_16:
                        contentdescpos      = tmp.IndexOf2B(filenamepos, 0, 0) + 2;
                        bodypos             = tmp.IndexOf2B(contentdescpos, 0, 0) + 2;
                        fr.geob_filename    = Encoding.Unicode.GetString(tmp, filenamepos, contentdescpos - filenamepos - 2);
                        fr.geob_contentDesc = Encoding.Default.GetString(tmp, contentdescpos, bodypos - contentdescpos - 2);
                        break;

                    case eEncode.UTF_16_BE:
                        contentdescpos      = tmp.IndexOf2B(filenamepos, 0, 0) + 2;
                        bodypos             = tmp.IndexOf2B(contentdescpos, 0, 0) + 2;
                        fr.geob_filename    = Encoding.BigEndianUnicode.GetString(tmp, filenamepos, contentdescpos - filenamepos - 2);
                        fr.geob_contentDesc = Encoding.Default.GetString(tmp, contentdescpos, bodypos - contentdescpos - 2);
                        break;

                    case eEncode.UTF_8:
                        contentdescpos      = tmp.IndexOf(filenamepos, 0) + 1;
                        bodypos             = tmp.IndexOf(contentdescpos, 0) + 1;
                        fr.geob_filename    = Encoding.UTF8.GetString(tmp, filenamepos, contentdescpos - filenamepos - 1);
                        fr.geob_contentDesc = Encoding.Default.GetString(tmp, contentdescpos, bodypos - contentdescpos - 1);
                        break;

                    default: return;
                    }
                    fr.geob_binarydata = new byte[tmp.Length - bodypos];
                    Buffer.BlockCopy(tmp, bodypos, fr.geob_binarydata, 0, tmp.Length - bodypos);
                }
                break;

            case FRAME_TYPE.FR_APIC:
                if (!createImageObject)
                {
                    return;
                }
                tmp = new byte[sr.Length];
                sr.Read(tmp, 0, (int)sr.Length);
                fr.value = null;

                string imgtype = Encoding.ASCII.GetString(tmp, 1, 3);
                if ((imgtype == "JPG") || (imgtype == "PNG"))
                {
                    fr.picture_type = tmp[4];
                    int          imgbodyOfset = tmp.IndexOf(5, 0) + 1;
                    MemoryStream ms           = new MemoryStream(tmp, imgbodyOfset, tmp.Length - imgbodyOfset);
                    try
                    {
                        fr.value = System.Drawing.Image.FromStream(ms);
                    }
                    catch { }
                }
                else     // mime
                {
                    int pictureTypeIndex = tmp.IndexOf(1, 0) + 1;
                    fr.picture_type = tmp[pictureTypeIndex];
                    int          imgbodyOfset = tmp.IndexOf(pictureTypeIndex + 1, 0) + 1;
                    MemoryStream ms           = new MemoryStream(tmp, imgbodyOfset, tmp.Length - imgbodyOfset);
                    try
                    {
                        fr.value = System.Drawing.Image.FromStream(ms);
                    }
                    catch { }
                }
                break;

            default:
                tmp = new byte[sr.Length];
//                    fr.imagebody = null;
                fr.picture_type = 0;

                sr.Read(tmp, 0, (int)sr.Length);

                if (tmp[0] < 0x04)
                {
                    int offset = 1;
                    if (FRAMES[fr.id_x].type == FRAME_TYPE.FR_TXT_EX_LNG)
                    {
                        offset = 4;
                    }
                    switch ((eEncode)tmp[0])
                    {
                    case eEncode.ISO_8859_1:
                        fr.value = Encoding.Default.GetString(tmp, offset, tmp.Length - offset).Trim();          // ほんとはASCIIにするところなんだけど
                        break;

                    case eEncode.UTF_16:
                        fr.value = Encoding.Unicode.GetString(tmp, offset, tmp.Length - offset).Trim();
                        break;

                    case eEncode.UTF_16_BE:
                        fr.value = Encoding.BigEndianUnicode.GetString(tmp, offset, tmp.Length - offset).Trim();
                        break;

                    case eEncode.UTF_8:
                        fr.value = Encoding.UTF8.GetString(tmp, offset, tmp.Length - offset).Trim();
                        break;
                    }

                    /*
                     * if (FRAMES[fr.id_x].name4 == "TCON") //genreのとき
                     * {
                     *  var re = new System.Text.RegularExpressions.Regex(@"^\((?<1>\d+)\)(?<2>.*)$");
                     *  var match = re.Match((string)fr.value);
                     *  if (match.Success)
                     *  {
                     *      var genrestr = ID3.GetGenreString(int.Parse(match.Groups[1].Value));
                     *      fr.value = (genrestr != null ? genrestr : match.Groups[2].Value);
                     *  }
                     * }
                     */
                }
                else
                {
                    fr.value = Encoding.ASCII.GetString(tmp);
                }

                if (FRAMES[fr.id_x].type == FRAME_TYPE.FR_TXT_EX || FRAMES[fr.id_x].type == FRAME_TYPE.FR_TXT_EX_LNG)
                {     /* TXXX,COMMなどのとき */
                    int idx = ((string)fr.value).IndexOf('\0');
                    fr.extid    = ((string)fr.value).Substring(0, idx).ToUpper();
                    fr.extvalue = ((string)fr.value).Substring(idx + 1).TrimEnd(new char[] { '\0' }).Replace("\0", "\r\n");     // FIXME?: foobar2kでいうmultiple Valueの時、区切りの\0を改行で置換(暫定処置)
                    fr.value    = fr.extvalue;
                }
                else
                {
                    fr.value = ((string)fr.value).TrimEnd(new char[] { '\0' });
                    fr.extid = fr.extvalue = null;
                }

                break;
            }
        }
예제 #21
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        EditorUtility.SetDirty(target);
        animationComponent ac = (animationComponent)target;

        int numAnims = 0;

        if (ac.animations != null)
        {
            numAnims = ac.animations.Length;
        }
        numAnims = EditorGUILayout.IntField("Animation count", numAnims);

        if (numAnims < 0)
        {
            numAnims = 0;
        }
        if (ac.animations == null || (ac.animations != null && numAnims != ac.animations.Length))
        {
            animation[] newA = new animation[numAnims];
            for (int i = 0; i < newA.Length; i++)
            {
                if (i < ac.animations.Length)
                {
                    newA[i] = ac.animations[i];
                }
                else
                {
                    newA[i] = new animation(ac.transform.parent.gameObject.GetComponent <charComponent>(), i);
                }
            }

            ac.animations = newA;
        }

        if (GUILayout.Button("Add a Animation"))
        {
            animation[] newA = new animation[ac.animations.Length + 1];
            for (int i = 0; i < ac.animations.Length; i++)
            {
                newA[i] = ac.animations[i];
            }

            newA[ac.animations.Length] = new animation(ac.transform.parent.gameObject.GetComponent <charComponent>(), ac.animations.Length);

            ac.animations = newA;
        }

        if (ac.animations != null)
        {
            foldAnimations = EditorGUILayout.Foldout(foldAnimations, "Show Animations");
            EditorGUI.indentLevel++;
            for (int i = 0; i < ac.animations.Length; i++)
            {
                ac.animations[i].fold = EditorGUILayout.Foldout(ac.animations[i].fold, ac.animations[i].name);
                if (ac.animations[i].fold)
                {
                    EditorGUI.indentLevel++;
                    EditorGUILayout.LabelField("Index " + ac.animations[i].index);
                    ac.animations[i].name = EditorGUILayout.TextField("Name", ac.animations[i].name);

                    int numFrameLists = 0;
                    if (ac.animations[i].frames != null)
                    {
                        numFrameLists = ac.animations[i].frames.Length;
                    }
                    EditorGUILayout.LabelField("Frame Count " + numFrameLists);

                    if (GUILayout.Button("Add a Frame"))
                    {
                        frameList[]           newf        = new frameList[numFrameLists + 1];
                        int[]                 times       = new int[numFrameLists + 1];
                        int[]                 nexts       = new int[numFrameLists + 1];
                        bool[]                xFlips      = new bool[numFrameLists + 1];
                        bool[]                yFlips      = new bool[numFrameLists + 1];
                        bool[]                foldFrames  = new bool[numFrameLists + 1];
                        charComponentAction[] StartAction = new charComponentAction[numFrameLists + 1];
                        charComponentAction[] EndAction   = new charComponentAction[numFrameLists + 1];
                        for (int j = 0; j < numFrameLists; j++)
                        {
                            newf[j]        = ac.animations[i].frames[j];
                            times[j]       = ac.animations[i].times[j];
                            nexts[j]       = ac.animations[i].nexts[j];
                            xFlips[j]      = ac.animations[i].xFlips[j];
                            yFlips[j]      = ac.animations[i].yFlips[j];
                            foldFrames[j]  = ac.animations[i].foldFrames[j];
                            StartAction[j] = ac.animations[i].StartAction[j];
                            EndAction[j]   = ac.animations[i].EndAction[j];
                        }

                        newf[numFrameLists]        = new frameList();
                        times[numFrameLists]       = 1;
                        nexts[numFrameLists]       = numFrameLists + 1;
                        xFlips[numFrameLists]      = false;
                        yFlips[numFrameLists]      = false;
                        foldFrames[numFrameLists]  = false;
                        StartAction[numFrameLists] = default(charComponentAction);
                        EndAction[numFrameLists]   = default(charComponentAction);

                        ac.animations[i].frames      = newf;
                        ac.animations[i].times       = times;
                        ac.animations[i].nexts       = nexts;
                        ac.animations[i].xFlips      = xFlips;
                        ac.animations[i].yFlips      = yFlips;
                        ac.animations[i].foldFrames  = foldFrames;
                        ac.animations[i].StartAction = StartAction;
                        ac.animations[i].EndAction   = EndAction;
                    }

                    if (ac.animations[i].frames != null)
                    {
                        selectedGC = (graphicComponent)EditorGUILayout.ObjectField(selectedGC, typeof(graphicComponent), true);

                        if (selectedGC != null && selectedGC.allFrames != null && selectedGC.allFrames.Length > 0)
                        {
                            string[] names = new string[selectedGC.allFrames.Length];
                            for (int k = 0; k < selectedGC.allFrames.Length; k++)
                            {
                                names[k] = selectedGC.allFrames[k].name;
                            }
                            selectedFrame = EditorGUILayout.Popup("Frames", selectedFrame, names);
                            EditorGUILayout.ObjectField(selectedGC.allFrames[selectedFrame].mainSprite, typeof(Sprite), true, GUILayout.Width(112), GUILayout.Height(64));
                            EditorGUILayout.LabelField("X: " + selectedGC.allFrames[selectedFrame].mainPosX + " Y: " + selectedGC.allFrames[selectedFrame].mainPosY);
                            EditorGUILayout.LabelField("Flip X: " + selectedGC.allFrames[selectedFrame].GlobalFlipX + " Flip Y: " + selectedGC.allFrames[selectedFrame].GlobalFlipX);
                        }
                        for (int j = 0; j < ac.animations[i].frames.Length; j++)
                        {
                            ac.animations[i].foldFrames[j] = EditorGUILayout.Foldout(ac.animations[i].foldFrames[j], "Frame " + (j + 1));
                            if (ac.animations[i].foldFrames[j])
                            {
                                EditorGUI.indentLevel++;
                                if (GUILayout.Button("Add"))
                                {
                                    ac.animations[i].frames[j].frames.Add(selectedGC.allFrames[selectedFrame]);
                                }

                                foreach (frame f in ac.animations[i].frames[j].frames)
                                {
                                    f.fold = EditorGUILayout.Foldout(f.fold, f.name);
                                    if (f.fold)
                                    {
                                        EditorGUI.indentLevel++;

                                        EditorGUILayout.ObjectField(f.mainSprite, typeof(Sprite), true, GUILayout.Width(128), GUILayout.Height(64));
                                        EditorGUILayout.LabelField("X: " + f.mainPosX + " Y: " + f.mainPosY);
                                        EditorGUILayout.LabelField("Flip X: " + f.GlobalFlipX + " Flip Y: " + f.GlobalFlipX);
                                        int ind = ac.animations[i].frames[j].frames.IndexOf(f);
                                        if (GUILayout.Button("Change"))
                                        {
                                            ac.animations[i].frames[j].frames[ind] = selectedGC.allFrames[selectedFrame];
                                        }
                                        if (GUILayout.Button("Refresh"))
                                        {
                                            ac.animations[i].frames[j].frames[ind] = selectedGC.allFrames[ac.animations[i].frames[j].frames[ind].index];
                                        }
                                        if (GUILayout.Button("Delete"))
                                        {
                                            ac.animations[i].frames[j].frames.RemoveAt(ind);
                                            break;
                                        }
                                        if (ind != 0 && GUILayout.Button("Up"))
                                        {
                                            frame faux = ac.animations[i].frames[j].frames[ind - 1];
                                            ac.animations[i].frames[j].frames[ind - 1] = f;
                                            ac.animations[i].frames[j].frames[ind]     = faux;
                                        }
                                        if (ind != ac.animations[i].frames[j].frames.Count - 1 && GUILayout.Button("Down"))
                                        {
                                            frame faux = ac.animations[i].frames[j].frames[ind + 1];
                                            ac.animations[i].frames[j].frames[ind + 1] = f;
                                            ac.animations[i].frames[j].frames[ind]     = faux;
                                        }
                                        if (GUILayout.Button("Use"))
                                        {
                                            f.Use();
                                        }

                                        EditorGUI.indentLevel--;
                                    }
                                }

                                EditorGUI.indentLevel--;
                                ac.animations[i].nexts[j]  = EditorGUILayout.IntField("Next", ac.animations[i].nexts[j]);
                                ac.animations[i].times[j]  = EditorGUILayout.IntField("Time", ac.animations[i].times[j]);
                                ac.animations[i].xFlips[j] = EditorGUILayout.Toggle("X Flip", ac.animations[i].xFlips[j]);
                                ac.animations[i].yFlips[j] = EditorGUILayout.Toggle("Y Flip", ac.animations[i].yFlips[j]);
                            }
                        }
                    }


                    EditorGUI.indentLevel--;
                }
            }
            EditorGUI.indentLevel--;
        }
        EditorUtility.SetDirty(target);
    }
예제 #22
0
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        graphicComponent gc = (graphicComponent)target;

        GUILayout.Label("Frames");
        EditorGUI.indentLevel++;

        int numFrames = 0;

        if (gc.allFrames != null)
        {
            numFrames = gc.allFrames.Length;
        }
        numFrames = EditorGUILayout.IntField("Frame count", numFrames);

        if (numFrames < 0)
        {
            numFrames = 0;
        }
        if (gc.allFrames != null && numFrames != gc.allFrames.Length)
        {
            frame[] newf = new frame[numFrames];
            for (int i = 0; i < newf.Length; i++)
            {
                if (i < gc.allFrames.Length)
                {
                    newf[i] = gc.allFrames[i];
                }
                else
                {
                    newf[i] = new frame(gc, i);
                }
            }

            gc.allFrames = newf;
        }

        if (GUILayout.Button("Add a Frame"))
        {
            frame[] newf;
            if (gc.allFrames != null)
            {
                newf = new frame[gc.allFrames.Length + 1];

                for (int i = 0; i < gc.allFrames.Length; i++)
                {
                    newf[i] = gc.allFrames[i];
                }
            }
            else
            {
                newf = new frame[1];
            }

            newf[newf.Length - 1] = new frame(gc, newf.Length - 1);

            gc.allFrames = newf;
        }

        foldFrames = EditorGUILayout.Foldout(foldFrames, "Show Frames");
        if (foldFrames)
        {
            EditorGUI.indentLevel++;
            for (int i = 0; i < gc.allFrames.Length; i++)
            {
                gc.allFrames[i].fold = EditorGUILayout.Foldout(gc.allFrames[i].fold, gc.allFrames[i].name);
                if (gc.allFrames[i].fold)
                {
                    EditorGUILayout.LabelField("Index " + gc.allFrames[i].index);
                    gc.allFrames[i].name            = EditorGUILayout.TextField("Name", gc.allFrames[i].name);
                    gc.allFrames[i].canChangeSprite = EditorGUILayout.Toggle("Change Sprite?", gc.allFrames[i].canChangeSprite);
                    gc.allFrames[i].haveBlaxVersion = EditorGUILayout.Toggle("Blax Version?", gc.allFrames[i].haveBlaxVersion);
                    if (gc.allFrames[i].canChangeSprite)
                    {
                        EditorGUI.indentLevel++;
                        EditorGUILayout.LabelField("Main Sprite");
                        EditorGUI.indentLevel++;
                        EditorGUILayout.LabelField("Not Flipped");
                        gc.allFrames[i].mainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].mainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));

                        gc.allFrames[i].specialXFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialXFlipSprite, "X Flipped Sprite");
                        if (gc.allFrames[i].specialXFlipSprite)
                        {
                            gc.allFrames[i].xfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].xfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                        }

                        gc.allFrames[i].specialYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialYFlipSprite, "Y Flipped Sprite");
                        if (gc.allFrames[i].specialYFlipSprite)
                        {
                            gc.allFrames[i].yfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].yfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                        }

                        gc.allFrames[i].specialXYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].specialXYFlipSprite, "XY Flipped Sprite");
                        if (gc.allFrames[i].specialXYFlipSprite)
                        {
                            gc.allFrames[i].xyfMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].xyfMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                        }
                        EditorGUI.indentLevel--;
                        if (gc.allFrames[i].haveBlaxVersion)
                        {
                            EditorGUILayout.LabelField("Blax Version Sprite");
                            gc.allFrames[i].blaxVersion = EditorGUILayout.Foldout(gc.allFrames[i].blaxVersion, "Blax Version");
                            if (gc.allFrames[i].blaxVersion)
                            {
                                EditorGUI.indentLevel++;
                                EditorGUILayout.LabelField("Not Flipped");
                                gc.allFrames[i].blaxMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));

                                gc.allFrames[i].blaxSpecialXFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialXFlipSprite, "X Flipped Sprite");
                                if (gc.allFrames[i].blaxSpecialXFlipSprite)
                                {
                                    gc.allFrames[i].blaxXFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxXFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                                }

                                gc.allFrames[i].blaxSpecialYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialYFlipSprite, "Y Flipped Sprite");
                                if (gc.allFrames[i].blaxSpecialYFlipSprite)
                                {
                                    gc.allFrames[i].blaxYFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxYFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                                }

                                gc.allFrames[i].blaxSpecialXYFlipSprite = EditorGUILayout.Foldout(gc.allFrames[i].blaxSpecialXYFlipSprite, "XY Flipped Sprite");
                                if (gc.allFrames[i].blaxSpecialXYFlipSprite)
                                {
                                    gc.allFrames[i].blaxXYFMainSprite = (Sprite)EditorGUILayout.ObjectField(gc.allFrames[i].blaxXYFMainSprite, typeof(Sprite), false, GUILayout.Width(128), GUILayout.Height(64));
                                }
                                EditorGUI.indentLevel--;
                            }
                        }

                        EditorGUI.indentLevel--;
                    }
                    gc.allFrames[i].GlobalFlipX = EditorGUILayout.Toggle("Flip X", gc.allFrames[i].GlobalFlipX);
                    gc.allFrames[i].GlobalFlipY = EditorGUILayout.Toggle("Flip Y", gc.allFrames[i].GlobalFlipY);
                    gc.allFrames[i].canChangeX  = EditorGUILayout.Toggle("Change X?", gc.allFrames[i].canChangeX);
                    if (gc.allFrames[i].canChangeX)
                    {
                        gc.allFrames[i].mainPosX = EditorGUILayout.FloatField("X", gc.allFrames[i].mainPosX);
                    }
                    gc.allFrames[i].canChangeY = EditorGUILayout.Toggle("Change Y?", gc.allFrames[i].canChangeY);
                    if (gc.allFrames[i].canChangeY)
                    {
                        gc.allFrames[i].mainPosY = EditorGUILayout.FloatField("Y", gc.allFrames[i].mainPosY);
                    }
                    if (GUILayout.Button("Use"))
                    {
                        gc.allFrames[i].Use();
                    }
                }
            }
        }
        EditorGUI.indentLevel = 0;
        if (txt != null)
        {
            txt = (Texture2D)EditorGUILayout.ObjectField(txt, typeof(Texture2D), false, GUILayout.Width(304), GUILayout.Height((304f / txt.width) * txt.height));
        }
        else
        {
            txt = (Texture2D)EditorGUILayout.ObjectField(txt, typeof(Texture2D), false, GUILayout.Width(288), GUILayout.Height(96));
        }
        sprites = null;
        if (txt != null)
        {
            string path = AssetDatabase.GetAssetPath(txt);
            sprites = AssetDatabase.LoadAllAssetsAtPath(path).OfType <Sprite>().ToArray();
        }
        gi            = (GraphicImport)EditorGUILayout.EnumPopup("Graphic Import", gi);
        startNum      = EditorGUILayout.IntField("Start Index", startNum);
        endNum        = EditorGUILayout.IntField("End Index", endNum);
        startingIndex = EditorGUILayout.IntField("Starting Index", startingIndex);

        if (txt != null && GUILayout.Button("Get All Sprites"))
        {
            if (startNum < 0)
            {
                startNum = 0;
            }
            if (startNum >= sprites.Length)
            {
                startNum = sprites.Length - 1;
            }
            if (endNum < startNum)
            {
                endNum = startNum;
            }
            if (endNum >= sprites.Length)
            {
                endNum = sprites.Length - 1;
            }
            if (startingIndex < 0)
            {
                startingIndex = 0;
            }

            frame[] allf = new frame[Mathf.Max(startingIndex + endNum + 1 - startNum, gc.allFrames.Length)];
            frame   faux;
            for (int i = startNum, j = 0, k = 0; j < allf.Length; j++, k++)
            {
                if (j < startingIndex || j > startingIndex + endNum - startNum)
                {
                    allf[j] = gc.allFrames[j];
                    k++;
                }
                else
                {
                    faux                 = new frame(gc, j);
                    faux.name            = txt.name + j;
                    faux.canChangeSprite = true;

                    allf[j] = faux;

                    switch (gi)
                    {
                    case GraphicImport.Main:
                        allf[j].mainSprite = sprites[i];
                        break;

                    case GraphicImport.XFlipped:
                        allf[j].xfMainSprite = sprites[i];
                        break;

                    case GraphicImport.YFlipped:
                        allf[j].yfMainSprite = sprites[i];
                        break;

                    case GraphicImport.XYFlipped:
                        allf[j].xyfMainSprite = sprites[i];
                        break;

                    case GraphicImport.BlaxMain:
                        allf[j].blaxMainSprite = sprites[i];
                        break;

                    case GraphicImport.BlaxXFlipped:
                        allf[j].blaxXFMainSprite = sprites[i];
                        break;

                    case GraphicImport.BlaxYFlipped:
                        allf[j].blaxYFMainSprite = sprites[i];
                        break;

                    case GraphicImport.BlaxXYFlipped:
                        allf[j].blaxXYFMainSprite = sprites[i];
                        break;
                    }
                    i++;
                }
            }
            gc.allFrames = allf;
        }
        EditorUtility.SetDirty(target);
    }
예제 #23
0
 void kinect_ReadyFrame(object sender, frame.IKinectFrame e)
 {
     kinect.commit(e);
 }