private void btnVideoGoToFrame_Click(object sender, EventArgs e) { int FrameID; int FramesCount; if (int.TryParse(tbxVideoGoToFrame.Text, out FrameID)) { picVideo.Image = cam.GetFrame(VideoHandle, FrameID); tbxVideoCurrentFrame.Text = FrameID.ToString(); FramesCount = int.Parse(tbxVideoTotalFrames.Text); if (FramesCount >= 2) { pbrVideo.Value = 100 * FrameID / (FramesCount - 1); } else { pbrVideo.Value = 100; } } else { MessageBox.Show("Wrong frame number!", "ERROR!", MessageBoxButtons.OK); tbxVideoGoToFrame.Text = ""; } }
public Frame this[FrameID id] { get { return(this[FrameIDFactory2.GetID(id, Header.Version)]); } }
internal static string GetID(FrameID id, ID3Version version) { var entry = Frames.Where((x) => x.ID == id); if (entry != null && entry.Count() > 0) { var e = entry.First(); string sid = null; if (version == ID3Version.ID3v2_2) { sid = e.ID3v2ID; } else if (version == ID3Version.ID3v2_3) { sid = e.ID3v3ID; } else if (version == ID3Version.ID3v2_4) { sid = e.ID3v4ID; } else { throw new InvalidOperationException(String.Format("FrameID {0} is not supported on version {1}", id, version)); } if (sid == null) { throw new InvalidOperationException(String.Format("FrameID {0} is not supported on version {1}", id, version)); } return(sid); } throw new ArgumentException("Invalid FrameID: " + id.ToString()); }
public override bool Equals(object obj) { if (!(obj is FrameID)) { return(false); } FrameID myFrameID = (FrameID)obj; return(this.chainIndex == myFrameID.chainIndex && this.frameIndex == myFrameID.frameIndex); }
public Sprite GetFrameView(FrameID frameID) { foreach (FrameInfo frameInfo in frameInfos) { if (frameInfo.frameID == frameID) { return(frameInfo.frameView); } } throw new System.Exception("無効なFrameIDが入力されました。"); }
public List <string> GetNGWords(FrameID frameID) { foreach (FrameInfo frameInfo in frameInfos) { if (frameInfo.frameID == frameID) { return(frameInfo.ngWords); } } throw new System.Exception("無効なFrameIDが入力されました。"); }
public SituationID GetSituation(FrameID frameID) { foreach (FrameInfo frameInfo in frameInfos) { if (frameInfo.frameID == frameID) { return(frameInfo.situationID); } } throw new System.Exception("無効なFrameIDが入力されました。"); }
///<summary> ///Determines whether the specified <see cref="T:HFM.Core.DataTypes.UnitFrame"></see> is equal to the current <see cref="T:HFM.Core.DataTypes.UnitFrame"></see>. ///</summary> ///<returns> ///true if the specified <see cref="T:HFM.Core.DataTypes.UnitFrame"></see> is equal to the current <see cref="T:HFM.Core.DataTypes.UnitFrame"></see>; otherwise, false. ///</returns> ///<param name="other">The <see cref="T:HFM.Core.DataTypes.UnitFrame"></see> to compare with the current <see cref="T:HFM.Core.DataTypes.UnitFrame"></see>.</param> public bool Equals(UnitFrame other) { if (other == null) { return(false); } return(FrameID.Equals(other.FrameID) && TimeOfFrame.Equals(other.TimeOfFrame) && FrameDuration.Equals(other.FrameDuration)); }
public void OnChoiseFrame(int handIndex) { timer.TImerStop(); choosenFrameSituation.Add(handIndex); FrameID frameID = GlobalHand.GetHand(currentPlayerID, handIndex); fourFrames.AddFrame(frameID); if (choosenFrameSituation.Count >= 4) { FinalizeFourFramesMaker(); return; } currentPlayerID = PlayerIDOffset(currentPlayerID, 1); displayPlayerID = currentPlayerID; StartCoroutine("WaitTap", frameRepository.GetNGWords(frameID)); }
public void RenderToTarget(GraphicsDevice device, IEnumerable <KeyValuePair <CompositeFrame, FrameID> > currentFrames) { if (HasChanged) { if (Target == null || Target.IsDisposed || Target.GraphicsDevice.IsDisposed) { return; } device.SetRenderTarget(Target); device.Clear(ClearOptions.Target, Color.Transparent, 1.0f, 0); try { DwarfGame.SafeSpriteBatchBegin(SpriteSortMode.Deferred, BlendState.NonPremultiplied, SamplerState.PointClamp, DepthStencilState.None, RasterizerState.CullNone, null, Matrix.Identity); foreach (KeyValuePair <CompositeFrame, FrameID> framePair in currentFrames) { CompositeFrame frame = framePair.Key; FrameID currentOffset = framePair.Value; List <NamedImageFrame> images = frame.GetFrames(); for (int i = 0; i < images.Count; i++) { int y = FrameSize.Y - images[i].SourceRect.Height; int x = (FrameSize.X / 2) - images[i].SourceRect.Width / 2; DwarfGame.SpriteBatch.Draw(images[i].Image, new Rectangle(currentOffset.Offset.X * FrameSize.X + x, currentOffset.Offset.Y * FrameSize.Y + y, images[i].SourceRect.Width, images[i].SourceRect.Height), images[i].SourceRect, frame.Cells[i].Tint); } } } finally { DwarfGame.SpriteBatch.End(); } device.SetRenderTarget(null); HasRendered = true; HasChanged = false; } }
public void AddFrame(FrameID frameID) { switch (frameRepository.GetSituation(frameID)) { case SituationID.Ki: if (kiFrameViews.sprite == null) { kiFrameViews.sprite = blackFrame; frameIDs[0] = frameID; } break; case SituationID.Sho: if (shoFrameViews.sprite == null) { shoFrameViews.sprite = blackFrame; frameIDs[1] = frameID; } break; case SituationID.Ten: if (tenFrameViews.sprite == null) { tenFrameViews.sprite = blackFrame; frameIDs[2] = frameID; } break; case SituationID.Ketsu: if (ketsuFrameViews.sprite == null) { ketsuFrameViews.sprite = blackFrame; frameIDs[3] = frameID; } break; } }
///<summary> ///Compares the current object with another object of the same type. ///</summary> ///<returns> ///A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has the following meanings: Value Meaning Less than zero This object is less than the other parameter.Zero This object is equal to other. Greater than zero This object is greater than other. ///</returns> ///<param name="other">An object to compare with this object.</param> public int CompareTo(UnitFrame other) { if (other == null) { return(1); } if (FrameID.Equals(other.FrameID)) { if (TimeOfFrame.Equals(other.TimeOfFrame)) { if (FrameDuration.Equals(other.FrameDuration)) { return(0); } return(FrameDuration.CompareTo(other.FrameDuration)); } return(TimeOfFrame.CompareTo(other.TimeOfFrame)); } return(FrameID.CompareTo(other.FrameID)); }
internal static string GetID(FrameID id, ID3Version version) { var entry = Frames.Where((x) => x.ID == id); if (entry != null && entry.Count() > 0) { var e = entry.First(); string sid = null; if (version == ID3Version.ID3v2_2) sid = e.ID3v2ID; else if (version == ID3Version.ID3v2_3) sid = e.ID3v3ID; else if (version == ID3Version.ID3v2_4) sid = e.ID3v4ID; else throw new InvalidOperationException(String.Format("FrameID {0} is not supported on version {1}", id, version)); if (sid == null) throw new InvalidOperationException(String.Format("FrameID {0} is not supported on version {1}", id, version)); return sid; } throw new ArgumentException("Invalid FrameID: " + id.ToString()); }
public FrameID GetFrame(FramesRoleID roleID, SituationID situationID) { FrameID retID = frameRepository.GetCurrentFramesPart(roleID, rotationIndexs[currentRotation], situationID); return(retID); }
public Rectangle GetFrameRect(FrameID frame) { return(Pages[frame.Page].GetFrameRect(frame.Offset)); }
public Texture2D GetTarget(FrameID frame) { return(Pages[frame.Page].Target); }
public FrameID PushFrame(CompositeFrame frame) { foreach (var page in Pages.Where(p => p.Target.IsContentLost)) { page.Initialize(); } if (!CurrentFrames.ContainsKey(frame)) { Point nextFreeCell = new Point(-1, -1); Page page = null; int k = -1; foreach (var pages in Pages) { k++; var result = pages.GetNextFreeCell(out nextFreeCell); if (result != Page.AddCellResult.PageFull) { page = pages; if (result == Page.AddCellResult.PageGrown) { EraseFrames(k); } break; } } Point newFrameSize = new Point(1, 1); foreach (var layer in frame.Cells) { newFrameSize = new Point(Math.Max(layer.Sheet.FrameWidth, newFrameSize.X), Math.Max(layer.Sheet.FrameHeight, newFrameSize.Y)); } if (page == null) { page = new Page() { TargetSizeFrames = new Point(4, 4), FrameSize = newFrameSize }; page.Initialize(); Pages.Add(page); page.GetNextFreeCell(out nextFreeCell); k = Pages.Count - 1; } if (page.FrameSize.X < newFrameSize.X || page.FrameSize.Y < newFrameSize.Y) { EraseFrames(k); if (page.ValidateFrameSizeChange(newFrameSize)) { page.FrameSize = newFrameSize; page.Initialize(); page.HasChanged = true; } else { page.FrameSize = newFrameSize; if (!page.Grow()) { var newPage = new Page() { TargetSizeFrames = new Point(4, 4), FrameSize = newFrameSize }; newPage.Initialize(); Pages.Add(newPage); page = newPage; newPage.GetNextFreeCell(out nextFreeCell); k++; } else { page.GetNextFreeCell(out nextFreeCell); EraseFrames(k); } } } FrameID toReturn = new FrameID(k, nextFreeCell.X, nextFreeCell.Y); CurrentFrames[frame] = toReturn; page.HasChanged = true; return(toReturn); } else { return(CurrentFrames[frame]); } }
public static string GetID(FrameID frameId, ID3Version version) { if (version == ID3Version.ID3v1) { throw new ArgumentOutOfRangeException("ID3v1 does not support frames"); } string id = String.Empty; //http://id3.org/id3v2.3.0 switch (frameId) { case FrameID.AudioEnctryption: id = "AENC"; break; case FrameID.AttachedPicutre: id = "APIC"; break; case FrameID.Comments: id = "COMM"; break; case FrameID.CommercialFrame: id = "COMR"; break; case FrameID.EncryptionMethodRegistration: id = "ENCR"; break; case FrameID.Equalization: id = "EQUA"; break; case FrameID.EventTimeingCodes: id = "ETCO"; break; case FrameID.GeneralEncapsulatedObject: id = "GEOB"; break; case FrameID.GroupIdentificationRegistration: id = "GRID"; break; case FrameID.InvolvedPeopleList: if (version == ID3Version.ID3v2_4) { id = "TIPL"; } break; id = "IPLS"; break; case FrameID.LinkedInformation: id = "LINK"; break; case FrameID.MusicCDIdentifier: id = "MCDI"; break; case FrameID.MPEGLocationLookupTable: id = "MLLT"; break; case FrameID.OwnershipFrame: id = "OWNE"; break; case FrameID.PrivateFrame: id = "PRIV"; break; case FrameID.PlayCounter: id = "PCNT"; break; case FrameID.Popularimeter: id = "POPM"; break; case FrameID.PositionSynchronisationFrame: id = "POSS"; break; case FrameID.RecommendedBufferSize: id = "RBUF"; break; case FrameID.RelativeVolumeAdjustment: id = "RVAD"; break; case FrameID.Reverb: id = "RVRB"; break; case FrameID.SynchronizedLyrics: id = "SYLT"; break; case FrameID.SynchronizedTempoCodes: id = "SYTC"; break; case FrameID.Album: id = "TALB"; break; case FrameID.BeatsPerMinute: id = "TBPM"; break; case FrameID.Composer: id = "TCOM"; break; case FrameID.ContentType: id = "TCON"; break; case FrameID.CopyrightMessage: id = "TCOP"; break; case FrameID.Date: id = "TDAT"; break; case FrameID.PlaylistDelay: id = "TDLY"; break; case FrameID.EncodedBy: id = "TENC"; break; case FrameID.TextWriter: id = "TEXT"; break; case FrameID.FileType: id = "TFLT"; break; case FrameID.Time: id = "TIME"; break; case FrameID.ContentGroupDescription: id = "TIT1"; break; case FrameID.Title: id = "TIT2"; break; case FrameID.Subtitle: id = "TIT3"; break; case FrameID.InitialKey: id = "TKEY"; break; case FrameID.Languages: id = "TLAN"; break; case FrameID.Length: id = "TLEN"; break; case FrameID.MediaType: id = "TMED"; break; case FrameID.OriginalAlbum: id = "TOAL"; break; case FrameID.OriginalFileName: id = "TOFN"; break; case FrameID.OriginalTextWriter: id = "TOLY"; break; case FrameID.OriginalArtist: id = "TOPE"; break; case FrameID.OriginalReleaseYear: id = "TORY"; break; case FrameID.FileOwner: id = "TOWN"; break; case FrameID.LeadPerformers: id = "TPE1"; break; case FrameID.Band: id = "TPE2"; break; case FrameID.Conductor: id = "TPE3"; break; case FrameID.Interpreted: id = "TPE4"; break; case FrameID.PartOfASet: id = "TPOS"; break; case FrameID.Publisher: id = "TPUB"; break; case FrameID.TrackNumber: id = "TRCK"; break; case FrameID.RecordingDates: id = "TRDA"; break; case FrameID.InternetRadioStationName: id = "TRSN"; break; case FrameID.InternetRadioStationOwner: id = "TRSO"; break; case FrameID.Size: id = "TSIZ"; break; case FrameID.ISRC: id = "TSRC"; break; case FrameID.EncodingSettings: id = "TSSE"; break; case FrameID.Year: id = "TYER"; break; case FrameID.UserTextInformation: id = "TXXX"; break; case FrameID.UniqueFileIdentifier: id = "UFID"; break; case FrameID.TermsOfUse: id = "USER"; break; case FrameID.UnsynchronizedLyris: id = "USLT"; break; case FrameID.CommercialInformationURL: id = "WCOM"; break; case FrameID.CopyrightURL: id = "WCOP"; break; case FrameID.OfficialAudioFileWebpage: id = "WOAF"; break; case FrameID.OfficialArtistWebpage: id = "WOAR"; break; case FrameID.OfficialAudioSourceWebpage: id = "WOAS"; break; case FrameID.InternetRadioStationWebpage: id = "WORS"; break; case FrameID.PaymentURL: id = "WPAY"; break; case FrameID.PublishersOfficialWebpage: id = "WPUB"; break; case FrameID.UserURLLinkFrame: id = "WXXX"; break; case FrameID.MusicicanCreditsList: id = "TMCL"; break; case FrameID.Mood: id = "TMOO"; break; case FrameID.ProducedNotice: id = "TPRO"; break; case FrameID.AlbumSortOrder: id = "TSOA"; break; case FrameID.PerformerSortOrder: id = "TSOP"; break; case FrameID.TitleSortOrder: id = "TSOT"; break; case FrameID.SetSubtitle: id = "TSST"; break; default: throw new ArgumentOutOfRangeException("frameid", "Invalid FrameID"); } if (version == ID3Version.ID3v2_2) { id = ConvertVersion3IDToVersion2(id); } return(id); }
private Frame GetFrame(string id, ID3Version version, FrameHeader header) { FrameID frameID = FrameIDFactory.GetFrameEntry(id, version).ID; switch (frameID) { case FrameID.Length: case FrameID.EncodedBy: //--- case FrameID.Album: case FrameID.Composer: case FrameID.ContentType: case FrameID.CopyrightMessage: case FrameID.TextWriter: case FrameID.FileType: case FrameID.ContentGroupDescription: case FrameID.Title: case FrameID.Subtitle: case FrameID.InitialKey: case FrameID.Languages: case FrameID.MediaType: case FrameID.OriginalAlbum: case FrameID.OriginalFileName: case FrameID.OriginalTextWriter: case FrameID.OriginalArtist: case FrameID.FileOwner: case FrameID.LeadPerformers: //-- case FrameID.Band: case FrameID.Conductor: case FrameID.Interpreted: //remixed case FrameID.PartOfASet: case FrameID.Publisher: case FrameID.TrackNumber: case FrameID.RecordingDates: case FrameID.InternetRadioStationName: case FrameID.InternetRadioStationOwner: case FrameID.ISRC: case FrameID.EncodingSettings: case FrameID.MusicicanCreditsList: case FrameID.InvolvedPeopleList: case FrameID.Mood: case FrameID.ProducedNotice: case FrameID.AlbumSortOrder: case FrameID.PerformerSortOrder: case FrameID.TitleSortOrder: case FrameID.SetSubtitle: return(new MultiStringTextFrame(header)); //multistringtextframe case FrameID.Size: //--- case FrameID.BeatsPerMinute: case FrameID.Date: case FrameID.PlaylistDelay: case FrameID.Time: case FrameID.OriginalReleaseYear: case FrameID.Year: return(new NumericTextFrame(header)); //numerictextframe case FrameID.RecordingTime: case FrameID.OriginalReleaseTime: case FrameID.EncodingTime: case FrameID.ReleaseTime: case FrameID.TaggingTime: return(new TimestampTextFrame(header)); //Timestamptextframe case FrameID.CommercialInformationURL: case FrameID.CopyrightURL: case FrameID.OfficialAudioFileWebpage: case FrameID.OfficialArtistWebpage: case FrameID.OfficialAudioSourceWebpage: case FrameID.InternetRadioStationWebpage: case FrameID.PaymentURL: case FrameID.PublishersOfficialWebpage: return(new TextFrame(header)); //textframe case FrameID.PrivateFrame: case FrameID.UniqueFileIdentifier: return(new DataFrame(header)); case FrameID.MusicCDIdentifier: case FrameID.RecommendedBufferSize: //--- case FrameID.EncryptedMetaData: case FrameID.AudioSeekPointIndex: case FrameID.MPEGLocationLookupTable: case FrameID.SynchronizedTempoCodes: case FrameID.RelativeVolumeAdjustment: case FrameID.RelativeVolumeAdjustmentOld: case FrameID.Equalization: case FrameID.EqualizationOld: return(new BinaryFrame(header)); case FrameID.UserTextInformation: case FrameID.UserURLLinkFrame: return(new UserDefiniedTextFrame(header)); case FrameID.AttachedPicutre: return(new PictureFrame(header, version)); case FrameID.UnsynchronizedLyris: case FrameID.Comments: return(new CommentAndLyricsFrame(header)); case FrameID.TermsOfUse: return(new TermsOfUseFrame(header)); case FrameID.OwnershipFrame: return(new OwnershipFrame(header)); case FrameID.CommercialFrame: return(new CommercialFrame(header)); case FrameID.Popularimeter: return(new Popularimeter(header)); } return(null); }
public static string GetID(FrameID frameId, ID3Version version) { if (version == ID3Version.ID3v1) throw new ArgumentOutOfRangeException("ID3v1 does not support frames"); string id = String.Empty; //http://id3.org/id3v2.3.0 switch (frameId) { case FrameID.AudioEnctryption: id = "AENC"; break; case FrameID.AttachedPicutre: id = "APIC"; break; case FrameID.Comments: id = "COMM"; break; case FrameID.CommercialFrame: id = "COMR"; break; case FrameID.EncryptionMethodRegistration: id = "ENCR"; break; case FrameID.Equalization: id = "EQUA"; break; case FrameID.EventTimeingCodes: id = "ETCO"; break; case FrameID.GeneralEncapsulatedObject: id = "GEOB"; break; case FrameID.GroupIdentificationRegistration: id = "GRID"; break; case FrameID.InvolvedPeopleList: if (version == ID3Version.ID3v2_4) id = "TIPL"; break; id = "IPLS"; break; case FrameID.LinkedInformation: id = "LINK"; break; case FrameID.MusicCDIdentifier: id = "MCDI"; break; case FrameID.MPEGLocationLookupTable: id = "MLLT"; break; case FrameID.OwnershipFrame: id = "OWNE"; break; case FrameID.PrivateFrame: id = "PRIV"; break; case FrameID.PlayCounter: id = "PCNT"; break; case FrameID.Popularimeter: id = "POPM"; break; case FrameID.PositionSynchronisationFrame: id = "POSS"; break; case FrameID.RecommendedBufferSize: id = "RBUF"; break; case FrameID.RelativeVolumeAdjustment: id = "RVAD"; break; case FrameID.Reverb: id = "RVRB"; break; case FrameID.SynchronizedLyrics: id = "SYLT"; break; case FrameID.SynchronizedTempoCodes: id = "SYTC"; break; case FrameID.Album: id = "TALB"; break; case FrameID.BeatsPerMinute: id = "TBPM"; break; case FrameID.Composer: id = "TCOM"; break; case FrameID.ContentType: id = "TCON"; break; case FrameID.CopyrightMessage: id = "TCOP"; break; case FrameID.Date: id = "TDAT"; break; case FrameID.PlaylistDelay: id = "TDLY"; break; case FrameID.EncodedBy: id = "TENC"; break; case FrameID.TextWriter: id = "TEXT"; break; case FrameID.FileType: id = "TFLT"; break; case FrameID.Time: id = "TIME"; break; case FrameID.ContentGroupDescription: id = "TIT1"; break; case FrameID.Title: id = "TIT2"; break; case FrameID.Subtitle: id = "TIT3"; break; case FrameID.InitialKey: id = "TKEY"; break; case FrameID.Languages: id = "TLAN"; break; case FrameID.Length: id = "TLEN"; break; case FrameID.MediaType: id = "TMED"; break; case FrameID.OriginalAlbum: id = "TOAL"; break; case FrameID.OriginalFileName: id = "TOFN"; break; case FrameID.OriginalTextWriter: id = "TOLY"; break; case FrameID.OriginalArtist: id = "TOPE"; break; case FrameID.OriginalReleaseYear: id = "TORY"; break; case FrameID.FileOwner: id = "TOWN"; break; case FrameID.LeadPerformers: id = "TPE1"; break; case FrameID.Band: id = "TPE2"; break; case FrameID.Conductor: id = "TPE3"; break; case FrameID.Interpreted: id = "TPE4"; break; case FrameID.PartOfASet: id = "TPOS"; break; case FrameID.Publisher: id = "TPUB"; break; case FrameID.TrackNumber: id = "TRCK"; break; case FrameID.RecordingDates: id = "TRDA"; break; case FrameID.InternetRadioStationName: id = "TRSN"; break; case FrameID.InternetRadioStationOwner: id = "TRSO"; break; case FrameID.Size: id = "TSIZ"; break; case FrameID.ISRC: id = "TSRC"; break; case FrameID.EncodingSettings: id = "TSSE"; break; case FrameID.Year: id = "TYER"; break; case FrameID.UserTextInformation: id = "TXXX"; break; case FrameID.UniqueFileIdentifier: id = "UFID"; break; case FrameID.TermsOfUse: id = "USER"; break; case FrameID.UnsynchronizedLyris: id = "USLT"; break; case FrameID.CommercialInformationURL: id = "WCOM"; break; case FrameID.CopyrightURL: id = "WCOP"; break; case FrameID.OfficialAudioFileWebpage: id = "WOAF"; break; case FrameID.OfficialArtistWebpage: id = "WOAR"; break; case FrameID.OfficialAudioSourceWebpage: id = "WOAS"; break; case FrameID.InternetRadioStationWebpage: id = "WORS"; break; case FrameID.PaymentURL: id = "WPAY"; break; case FrameID.PublishersOfficialWebpage: id = "WPUB"; break; case FrameID.UserURLLinkFrame: id = "WXXX"; break; case FrameID.MusicicanCreditsList: id = "TMCL"; break; case FrameID.Mood: id = "TMOO"; break; case FrameID.ProducedNotice: id = "TPRO"; break; case FrameID.AlbumSortOrder: id = "TSOA"; break; case FrameID.PerformerSortOrder: id = "TSOP"; break; case FrameID.TitleSortOrder: id = "TSOT"; break; case FrameID.SetSubtitle: id = "TSST"; break; default: throw new ArgumentOutOfRangeException("frameid", "Invalid FrameID"); } if (version == ID3Version.ID3v2_2) { id = ConvertVersion3IDToVersion2(id); } return id; }
///<summary> ///Serves as a hash function for a particular type. <see cref="M:System.Object.GetHashCode"></see> is suitable for use in hashing algorithms and data structures like a hash table. ///</summary> ///<returns> ///A hash code for the current <see cref="T:System.Object"></see>. ///</returns> ///<filterpriority>2</filterpriority> public override int GetHashCode() { return(FrameID.GetHashCode() ^ TimeOfFrame.GetHashCode() ^ FrameDuration.GetHashCode()); }
public static void SetHand(PlayerID playerID, int handIndex, FrameID frameID) { globalHandIDs[playerID][handIndex] = frameID; }