public void testFrame() { frame testFrame = new frame(1, 2); Assert.Equal(1, testFrame.roll1); Assert.Equal(2, testFrame.roll2); }
void kinect_ReadyFrame(object sender, frame.IKinectFrame e) { this.Dispatcher.BeginInvoke(new Action(() => { kinect.commit(e); })); }
public void test0Frame() { frame zeroFrame = new frame(0, 0); Assert.Equal(0, zeroFrame.roll1); Assert.Equal(0, zeroFrame.roll2); }
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); } }
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(); } }
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); }
frame generateFrame() { frame f = new frame(); f.position = transform.position; f.rotation = transform.rotation; f.velocity = rB.velocity; f.angularVelocity = rB.angularVelocity; return(f); }
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"; } }
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; }
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(); } }
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++; } } }
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); }
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); }
/*串口操作与数据收发函数*/ 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);
// 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; } } }
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(); }
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; }
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); }
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; } }
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); }
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); }
void kinect_ReadyFrame(object sender, frame.IKinectFrame e) { kinect.commit(e); }