public int AddTemplate(int FolderId, string TxtNewNoteName, string Content) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢筆記資料夾 CNoteFolder myFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == FolderId); int level = CNoteFactory.fn私人筆記查詢(myFolder).Where(n => n.fIsTrash == false).Count(); CNote myNote = new CNote() { fCreateDateTime = DateTime.UtcNow.AddHours(08), fEditDateTime = DateTime.UtcNow.AddHours(08), fFolderId = FolderId, fIsMyFavourite = false, fIsTrash = false, fHTMLContent = "", fJsonContent = Content, fNoteListLevel = level, fNoteListName = TxtNewNoteName, fTheContactPerson = null, fTheShareLink = null }; int noteid = CNoteFactory.fn私人筆記新增(myFolder, myNote); return(noteid); }
public ActionResult DeleteNote(int FolderId, int NoteId) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢筆記資料夾 CNoteFolder myFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == FolderId); CNote myNote = CNoteFactory.fn私人筆記查詢(myFolder) .FirstOrDefault(n => n.fNoteId == NoteId); CNoteFactory.fn私人筆記刪除(myNote); //查詢所有的筆記資料夾 List <CNoteFolder> lsFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .ToList(); //筆記資料夾包含筆記的列表 List <CNoteFolderViewModel> lsNotefolderVM = new List <CNoteFolderViewModel>(); //讀取筆記資料夾內的筆記 foreach (var folder in lsFolder) { List <CNote> myLsNote = CNoteFactory.fn私人筆記查詢(folder) .ToList(); lsNotefolderVM.Add(new CNoteFolderViewModel() { fFolderId = folder.fFolderId, fFolderName = folder.fFolderName, fMemberId = folder.fMemberId, lsNote = myLsNote }); } return(PartialView("_TrashView", lsNotefolderVM)); //return "筆記永久刪除成功!"; }
public string Search(int FolderId, int NoteId) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢指定筆記內容 CNote myNote = CNoteFactory.fn私人筆記全部查詢() .FirstOrDefault(n => n.fNoteId == NoteId && n.fIsTrash == false); return(myNote.fJsonContent); }
public string SearchFavor(int FolderId, int NoteId) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢筆記資料夾 CNoteFolder myFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == (int)FolderId); //查詢指定筆記內容 CNote myNote = CNoteFactory.fn私人筆記查詢(myFolder) .FirstOrDefault(n => n.fNoteId == NoteId && n.fIsTrash == false && n.fIsMyFavourite == true); return(myNote.fJsonContent); }
public string UpdateVersion(int NoteId, string JsonContent) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢指定筆記內容 CNote myNote = CNoteFactory.fn私人筆記全部查詢() .FirstOrDefault(n => n.fNoteId == NoteId); myNote.fJsonContent = JsonContent; myNote.fEditDateTime = DateTime.UtcNow.AddHours(08); CNoteFactory.fn私人筆記更新(myNote); return("筆記更新成功"); }
public string AddVersion(int NoteId) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢指定筆記內容 CNote myNote = CNoteFactory.fn私人筆記全部查詢() .FirstOrDefault(n => n.fNoteId == NoteId); myNote.fEditDateTime = DateTime.UtcNow.AddHours(08); CVersionFactory.fn筆記版本控制新增(myNote); return("版本紀錄新增成功!"); }
public ActionResult SearchVersion(int FolderId, int NoteId) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢筆記資料夾 CNoteFolder myFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == (int)FolderId); //查詢指定筆記內容 CNote myNote = CNoteFactory.fn私人筆記查詢(myFolder) .FirstOrDefault(n => n.fNoteId == NoteId && n.fIsTrash == false); List <CVersion> lsVersion = CVersionFactory.fn筆記版本控制查詢(myNote); return(PartialView("_SearchVersionView", lsVersion)); }
public string UpdateNoteLevel(int FolderId, int NoteId, int Level) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 CNote myNote = CNoteFactory.fn私人筆記全部查詢() .FirstOrDefault(n => n.fNoteId == NoteId); //if(myNote.fFolderId == FolderId && myNote.fNoteId == NoteId && myNote.fNoteListLevel == Level) // return myNote.fNoteListName + " 筆記順序更新成功!"; myNote.fFolderId = FolderId; myNote.fNoteListLevel = Level; CNoteFactory.fn私人筆記更新(myNote); return(myNote.fNoteListName + " 筆記順序更新成功!"); }
public string NoteRename(int FolderId, int NoteId, string NoteName) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢筆記資料夾 CNoteFolder myFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == FolderId); //查詢指定筆記內容 CNote myNote = CNoteFactory.fn私人筆記查詢(myFolder) .FirstOrDefault(n => n.fNoteId == NoteId); myNote.fNoteListName = NoteName; myNote.fEditDateTime = DateTime.UtcNow.AddHours(08); CNoteFactory.fn私人筆記更新(myNote); return("筆記已重新命名!"); }
public string Update(int FolderId, int NoteId, string JsonContent) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢筆記資料夾 CNoteFolder myFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == FolderId); //查詢指定筆記內容 CNote myNote = CNoteFactory.fn私人筆記查詢(myFolder) .FirstOrDefault(n => n.fNoteId == NoteId); myNote.fJsonContent = JsonContent; myNote.fEditDateTime = DateTime.UtcNow.AddHours(08); CNoteFactory.fn私人筆記更新(myNote); return("筆記更新成功"); }
//修改GET抓取JSON資料 //string myProductContent; public JsonResult EditProduct(int?fProductId) { //登入的會員資訊 CMember member = (CMember)Session[CMemberSession.Session_Login_User]; //防止未登入者進入 CProduct myProduct = CProductFactory.fn商品查詢().FirstOrDefault(p => p.fProductId == fProductId); List <CProductPicture> lsMyProductPicture = CProductPictureFactory.fn商品圖片查詢().Where(p => p.fProductId == fProductId).ToList(); List <CProductCompare> lsProductCategory = CProductCompareFactory.fn商品類別對照查詢().Where(c => c.fProductId == fProductId).ToList(); List <CNoteFolder> lsFolder = CNoteFolderFactory.fn筆記資料夾查詢(member).ToList(); //筆記資料夾包含筆記的列表 List <CNoteFolderViewModel> lsNotefolderVM = new List <CNoteFolderViewModel>(); //讀取筆記資料夾內的筆記 foreach (var folder in lsFolder) { List <CNote> myLsNote = CNoteFactory.fn私人筆記查詢(folder).OrderBy(n => n.fNoteListLevel).Where(n => n.fJsonContent == myProduct.fContent).ToList(); lsNotefolderVM.Add(new CNoteFolderViewModel() { fFolderId = folder.fFolderId, fFolderName = folder.fFolderName, fMemberId = folder.fMemberId, lsNote = myLsNote }); } CNote mynote = CNoteFactory.fn私人筆記全部查詢().FirstOrDefault(n => n.fJsonContent == myProduct.fContent); CShoppingAccountCenterVM ShoppingAccountCenter = new CShoppingAccountCenterVM() { lsCategoryCompare = lsProductCategory, lsProductPicture = lsMyProductPicture, Product = myProduct, lsNotefolderVM = lsNotefolderVM, NoteId = mynote.fNoteId //Content = myProductContent, }; string value = string.Empty; value = JsonConvert.SerializeObject(ShoppingAccountCenter, Formatting.Indented, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }); return(Json(value, JsonRequestBehavior.AllowGet)); }
public string UpdateFavor(int FolderId, int NoteId, bool IsFavor) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 //查詢筆記資料夾 CNoteFolder myFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == FolderId); //查詢指定筆記內容 CNote myNote = CNoteFactory.fn私人筆記查詢(myFolder) .FirstOrDefault(n => n.fNoteId == NoteId); myNote.fIsMyFavourite = IsFavor; myNote.fEditDateTime = DateTime.UtcNow.AddHours(08); CNoteFactory.fn私人筆記更新(myNote); return("我的最愛筆記已更新!"); }
public string MoveOutTrash(int FolderId, int NoteId) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 CNoteFolder m原筆記資料夾 = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == FolderId); CNote myNote = CNoteFactory.fn私人筆記查詢(m原筆記資料夾) .FirstOrDefault(n => n.fNoteId == NoteId); myNote.fIsTrash = false; CNoteFactory.fn私人筆記更新(myNote); return("筆記還原!"); }
public ActionResult MoveToTrash(int FolderId, int NoteId) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 CNoteFolder m原筆記資料夾 = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderId == FolderId); CNoteFolder m未分類筆記 = CNoteFolderFactory.fn筆記資料夾查詢(member) .FirstOrDefault(f => f.fFolderName == "未分類筆記"); CNote myNote = CNoteFactory.fn私人筆記查詢(m原筆記資料夾) .FirstOrDefault(n => n.fNoteId == NoteId); myNote.fIsTrash = true; myNote.fFolderId = m未分類筆記.fFolderId; CNoteFactory.fn私人筆記更新(myNote); //查詢所有的筆記資料夾 List <CNoteFolder> lsFolder = CNoteFolderFactory.fn筆記資料夾查詢(member) .ToList(); //筆記資料夾包含筆記的列表 List <CNoteFolderViewModel> lsNotefolderVM = new List <CNoteFolderViewModel>(); //讀取筆記資料夾內的筆記 foreach (var folder in lsFolder) { List <CNote> myLsNote = CNoteFactory.fn私人筆記查詢(folder) .ToList(); lsNotefolderVM.Add(new CNoteFolderViewModel() { fFolderId = folder.fFolderId, fFolderName = folder.fFolderName, fMemberId = folder.fMemberId, lsNote = myLsNote }); } return(PartialView("_TrashView", lsNotefolderVM)); //return "筆記移到垃圾桶!"; }
public void ToOrder(int totalprice, int remain, int cartId) { CMember member = (CMember)Session[CMemberSession.Session_Login_User];//會員 COrder o = new COrder(); o.fPurchaseDate = DateTime.UtcNow.AddHours(08); o.fTotalPrice = totalprice; o.fMemberId = member.fMemberId; COrderFactory.fn訂單新增(o); CMemberFactory.fn會員更新點數(member, remain); CNotice c = new CNotice(); c.fCategoryType = "系統"; c.fLink = "超連結"; c.fNoticeDatetime = DateTime.UtcNow.AddHours(08); c.fMemberId = member.fMemberId; c.fNoticeContent = "您的訂單已完成了"; CNoticeFactory.fn通知訂單訊息新增(c); List <CCartProduct> CP = CCartProductFactory.fn購物車商品個人查詢(cartId).ToList(); var f = CNoteFolderFactory.fn筆記資料夾查詢(member).Where(q => q.fFolderName == "未分類筆記").ToList(); int orderid = COrderFactory.fn訂單查詢(member).LastOrDefault().fOrderId; foreach (var a in CP) { CDetailOrderFactory.fn訂單明細新增(orderid, a.fProductId); CNotice c1 = new CNotice(); c1.fCategoryType = "銷售"; c1.fLink = "超連結"; c1.fNoticeDatetime = DateTime.UtcNow.AddHours(08); c1.fMemberId = a.fMemberSellerId; c1.fNoticeContent = "您的" + a.fName + "已被購買"; CNoticeFactory.fn通知訂單訊息新增(c1); CIncome i1 = new CIncome(); i1.fIncome = a.fPrice; i1.fPaymentDateTime = DateTime.UtcNow.AddHours(08); i1.fIncomeCategory = "獲利"; i1.fMemberId = a.fMemberSellerId; CIncomeFactory.fn公司獲利新增(i1); var point = CMemberFactory.fn會員查詢().Where(z => z.fMemberId == a.fMemberSellerId); int point1 = (point.Single().fMoneyPoint) + a.fPrice; CMember cm1 = new CMember(); cm1.fMemberId = point.Single().fMemberId; CMemberFactory.fn會員更新點數(cm1, point1); var t = CNoteFactory.fn私人筆記全部查詢().Where(q => q.fFolderId == f.Single().fFolderId).ToList(); int t1 = t.Count(); CNote n = new CNote(); n.fNoteListName = a.fName; n.fCreateDateTime = DateTime.UtcNow.AddHours(08); n.fEditDateTime = DateTime.UtcNow.AddHours(08); n.fNoteListLevel = t1; n.fIsMyFavourite = false; n.fIsTrash = false; n.fFolderId = f.Single().fFolderId; n.fJsonContent = a.fContent; n.fTheShareLink = null; n.fTheContactPerson = null; n.fHTMLContent = ""; CNoteFactory.fn訂單私人筆記新增(n); } CCartFactory.fn購物車個人更新(cartId); }
public CFumen(string filename) { using (var sr = new StreamReader(filename, Encoding.GetEncoding("Shift_JIS"))) { int nbranch = 0; List <CNote> notes = new List <CNote>(); bool noteload = false; int nowcourse = 0; double dbbpm = 0; double dbscroll = 0; double[] dbmeasure = new double[2]; long ltime = 0; long lhbstime = 0; long lbranchtime = 0; long lbranchhbstime = 0; while (sr.Peek() != -1) { var str = sr.ReadLine(); int slash = 0; int num = 0; foreach (var ch in str) { if (ch == '/') { slash++; } else { if (slash < 2) { num++; slash = 0; } } } if (slash == 2) { str = str.Remove(num, str.Length - num); } var strsplit = str.Split(':'); if (strsplit.Length > 1) { if (strsplit[0].ToUpper() == "TITLE") { strTITLE = strsplit[1]; } if (strsplit[0].ToUpper() == "SUBTITLE") { strSUBTITLE = strsplit[1]; } if (strsplit[0].ToUpper() == "WAVE") { strWAVE = strsplit[1]; } if (strsplit[0].ToUpper() == "BPM") { if (double.TryParse(strsplit[1], out double db)) { dbBPM = db; } else { dbBPM = 150; } } if (strsplit[0].ToUpper() == "OFFSET") { if (double.TryParse(strsplit[1], out double db)) { dbOFFSET = db; } else { dbOFFSET = 150; } } if (strsplit[0].ToUpper() == "DEMOSTART") { if (double.TryParse(strsplit[1], out double db)) { dbDEMOSTART = db; } else { dbDEMOSTART = 150; } } if (strsplit[0].ToUpper() == "COURSE") { nowcourse = StringToCourse(strsplit[1]); } if (strsplit[0].ToUpper() == "LEVEL") { if (int.TryParse(strsplit[1], out int n)) { ClCourse[nowcourse].nLEVEL = n; } else { ClCourse[nowcourse].nLEVEL = 0; } } if (strsplit[0].ToUpper() == "BALLOON") { foreach (var sp in str.Split(',')) { if (int.TryParse(sp, out int n)) { ClCourse[nowcourse].BALLOONS.Add(n); } else { ClCourse[nowcourse].BALLOONS.Add(5); } } } } if (str.ToUpper() == "#END") { noteload = false; } if (str.ToUpper().Contains("#BPMCHANGE")) { dbbpm = double.Parse(str.ToUpper().Replace("#BPMCHANGE", "")); } if (str.ToUpper().Contains("#SCROLL")) { dbscroll = double.Parse(str.ToUpper().Replace("#SCROLL", "")); } if (str.ToUpper().Contains("#MEASURE")) { var split = str.ToUpper().Replace("#MEASURE", "").Split('/'); for (int i = 0; i < 2; i++) { if (double.TryParse(split[i], out double d)) { dbmeasure[i] = double.Parse(split[i]); } else { dbmeasure[i] = 1; } } } if (str.ToUpper().Contains("#BRANCHSTART")) { var sp = str.ToUpper().Replace("#BRANCHSTART", "").Split(','); lbranchtime = ltime; lbranchhbstime = lhbstime; CNote cnote = new CNote(); cnote.chNumber = '0'; cnote.dbBPM = dbbpm; cnote.dbSCROLL = dbscroll; cnote.dbMEASURE[0] = dbmeasure[0]; cnote.dbMEASURE[1] = dbmeasure[1]; cnote.bDraw = true; cnote.lTime = ltime; cnote.lHBSTime = lhbstime; cnote.bBranchStart = true; if (sp[0].Contains("P")) { cnote.eBranchType = CNote.BranchType.P; } if (sp[0].Contains("R")) { cnote.eBranchType = CNote.BranchType.R; } if (int.TryParse(sp[1], out int n1)) { cnote.nBranchX = n1; } if (int.TryParse(sp[2], out int n2)) { cnote.nBranchY = n2; } ClCourse[nowcourse].Notes.Add(cnote); } if (str.ToUpper() == "#BRANCHEND") { nbranch = 0; } if (str.ToUpper() == "#N") { ltime = lbranchtime; lhbstime = lbranchhbstime; nbranch = 0; } if (str.ToUpper() == "#E") { ltime = lbranchtime; lhbstime = lbranchhbstime; nbranch = 1; } if (str.ToUpper() == "#M") { ltime = lbranchtime; lhbstime = lbranchhbstime; nbranch = 2; } if (noteload && !str.Contains("#")) { foreach (var ch in str) { if (ch == '/') { break; } switch (ch) { case ',': { if (notes.Count > 0) { foreach (var cnote in notes) { cnote.lTime = ltime; cnote.lHBSTime = lhbstime; ClCourse[nowcourse].Notes.Add(cnote); ltime += (long)((240000000 / cnote.dbBPM) * (cnote.dbMEASURE[0] / cnote.dbMEASURE[1])) / notes.Count; lhbstime += (long)(740000) / notes.Count; } } else { CNote cnote = new CNote(); if (nbranch == 0) { cnote.bDraw = true; } cnote.chNumber = ch; cnote.dbBPM = dbbpm; cnote.dbSCROLL = dbscroll; cnote.dbMEASURE[0] = dbmeasure[0]; cnote.dbMEASURE[1] = dbmeasure[1]; cnote.lTime = ltime; cnote.lHBSTime = lhbstime; cnote.nBranch = nbranch; ClCourse[nowcourse].Notes.Add(cnote); ltime += (long)((240000000 / cnote.dbBPM) * (cnote.dbMEASURE[0] / cnote.dbMEASURE[1])); lhbstime += (long)(740000); } notes.Clear(); } break; default: { if (ch != ' ') { CNote cnote = new CNote(); if (nbranch == 0) { cnote.bDraw = true; } cnote.nBranch = nbranch; cnote.chNumber = ch; cnote.dbBPM = dbbpm; cnote.dbSCROLL = dbscroll; cnote.dbMEASURE[0] = dbmeasure[0]; cnote.dbMEASURE[1] = dbmeasure[1]; notes.Add(cnote); if (ch == '1' || ch == '2' || ch == '3' || ch == '4') { ClCourse[nowcourse].nNoteCount[nbranch]++; } } } break; } } } if (str.ToUpper() == "#START") { nbranch = 0; dbbpm = dbBPM; dbscroll = 1; dbmeasure[0] = 4; dbmeasure[1] = 4; ltime = 0; lhbstime = 0; noteload = true; } } } }
public static void UpdatePoints(float Time) { bool DEBUG_HIT = false; CSong song = _GameMode.GetSong(); if (song == null) { return; } float b = GetBeatFromTime(Time, song.BPM, song.Gap); if (b <= _Beat) { return; } _Beat = b; _CurrentBeat = (int)Math.Floor(_Beat); _MidBeatD = -0.5f + GetBeatFromTime(Time, song.BPM, song.Gap + CConfig.MicDelay / 1000f); _CurrentBeatD = (int)Math.Floor(_MidBeatD); for (int p = 0; p < _NumPlayer; p++) { CSound.AnalyzeBuffer(p); } if (_OldBeatD >= _CurrentBeatD) { return; } for (int p = 0; p < _NumPlayer; p++) { for (int beat = _OldBeatD + 1; beat <= _CurrentBeatD; beat++) { if ((_GameMode.GetCurrentGameMode() == EGameMode.TR_GAMEMODE_MEDLEY && song.Medley.EndBeat == beat) || (_GameMode.GetCurrentGameMode() == EGameMode.TR_GAMEMODE_SHORTSONG && song.ShortEnd == beat)) { _Player[p].SongFinished = true; } CLine[] lines = song.Notes.GetLines(_Player[p].LineNr).Line; int Line = -1; for (int j = 0; j < lines.Length; j++) { if (beat >= lines[j].StartBeat && beat <= lines[j].EndBeat) { Line = j; break; } } if (Line >= 0) { if (Line != _Player[p].CurrentLine) { _Player[p].CurrentNote = -1; } _Player[p].CurrentLine = Line; while (_Player[p].SingLine.Count <= Line) { _Player[p].SingLine.Add(new CLine()); } CNote[] notes = lines[Line].Notes; int Note = -1; for (int j = 0; j < notes.Length; j++) { if (beat >= notes[j].StartBeat && beat <= notes[j].EndBeat) { Note = j; break; } } if (Note >= 0) { _Player[p].CurrentNote = Note; if (Line == lines.Length - 1) { if (Note == lines[Line].NoteCount - 1) { if (notes[Note].EndBeat == beat) { _Player[p].SongFinished = true; } } } if (notes[Note].PointsForBeat > 0 && (CSound.RecordToneValid(p) || DEBUG_HIT)) { int Tone = notes[Note].Tone; int TonePlayer = CSound.RecordGetTone(p); while (TonePlayer - Tone > 6) { TonePlayer -= 12; } while (TonePlayer - Tone < -6) { TonePlayer += 12; } if (DEBUG_HIT) { TonePlayer = Tone; } _Player[p].NoteDiff = Math.Abs(Tone - TonePlayer); if (_Player[p].NoteDiff <= (2 - (int)_Player[p].Difficulty)) { // valid //CSound.RecordSetTone(p, Tone); double points = (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[Note].PointsForBeat / (double)song.Notes.GetLines(_Player[p].LineNr).Points; if (notes[Note].NoteType == ENoteType.Golden) { _Player[p].PointsGoldenNotes += points; } _Player[p].Points += points; // update player notes (sung notes) if (_Player[p].SingLine[Line].NoteCount > 0) { CNote nt = _Player[p].SingLine[Line].LastNote; if (notes[Note].StartBeat == beat || nt.EndBeat + 1 != beat || nt.Tone != Tone) { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, Tone, String.Empty, true, notes[Note].NoteType)); } else { _Player[p].SingLine[Line].IncLastNoteLength(); } } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, Tone, String.Empty, true, notes[Note].NoteType)); } _Player[p].SingLine[Line].LastNote.IsPerfect(notes[Note]); _Player[p].SingLine[Line].IsPerfect(lines[Line]); } else { if (_Player[p].SingLine[Line].NoteCount > 0) { CNote nt = _Player[p].SingLine[Line].LastNote; if (nt.EndBeat + 1 != beat || nt.Hit) { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, ENoteType.Freestyle)); } else { if (nt.Tone == TonePlayer && nt.EndBeat + 1 == beat) { _Player[p].SingLine[Line].IncLastNoteLength(); } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, ENoteType.Freestyle)); } } } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, ENoteType.Freestyle)); } } } // Line Bonus int NumLinesWithPoints = song.Notes.GetNumLinesWithPoints(_Player[p].LineNr); if (Note == lines[Line].NoteCount - 1 && NumLinesWithPoints > 0) { if (notes[Note].EndBeat == beat && lines[Line].Points > 0f) { double factor = (double)_Player[p].SingLine[Line].Points / (double)lines[Line].Points; if (factor < 0.4) { factor = 0.0; } else if (factor > 0.9) { factor = 1.0; } else { factor -= 0.4; factor *= 2; factor *= factor; } double points = CSettings.LinebonusScore * factor * 1f / NumLinesWithPoints; _Player[p].Points += points; _Player[p].PointsLineBonus += points; } } } } } } _OldBeatD = _CurrentBeatD; }
public virtual void AddNote(int ID, CNote Note) { }
public static void UpdatePoints(float Time) { bool DEBUG_HIT = false; CSong song = _GameMode.GetSong(); if (song == null) { return; } _Beat = GetBeatFromTime(Time, song.BPM, song.Gap); _CurrentBeat = (int)Math.Floor(_Beat); _MidBeatD = -0.5f + GetBeatFromTime(Time, song.BPM, song.Gap + CConfig.MicDelay / 1000f); _CurrentBeatD = (int)Math.Floor(_MidBeatD); for (int p = 0; p < _NumPlayer; p++) { CSound.AnalyzeBuffer(p); } if (_OldBeatD == _CurrentBeatD) { return; } for (int p = 0; p < _NumPlayer; p++) { for (int beat = _OldBeatD + 1; beat <= _CurrentBeatD; beat++) { CLine[] lines = song.Notes.GetLines(_Player[p].LineNr).Line; int Line = -1; for (int j = 0; j < lines.Length; j++) { if (beat >= lines[j].StartBeat && beat <= lines[j].EndBeat) { Line = j; break; } } if (Line >= 0) { if (Line != _Player[p].CurrentLine) { _Player[p].CurrentNote = -1; } _Player[p].CurrentLine = Line; while (_Player[p].SingLine.Count <= Line) { _Player[p].SingLine.Add(new CLine()); } CNote[] notes = lines[Line].Notes; int Note = -1; for (int j = 0; j < notes.Length; j++) { if (beat >= notes[j].StartBeat && beat <= notes[j].EndBeat) { Note = j; break; } } if (Note >= 0) { _Player[p].CurrentNote = Note; if (Line == lines.Length - 1) { if (Note == lines[Line].NoteCount - 1) { if (notes[Note].EndBeat == beat) { _Player[p].SongFinished = true; } } } if (notes[Note].PointsForBeat > 0 && (CSound.RecordToneValid(p) || DEBUG_HIT)) { int Tone = notes[Note].Tone; int TonePlayer = CSound.RecordGetTone(p); while (TonePlayer - Tone > 6) { TonePlayer -= 12; } while (TonePlayer - Tone < -6) { TonePlayer += 12; } if (DEBUG_HIT) { TonePlayer = Tone; } _Player[p].NoteDiff = Math.Abs(Tone - TonePlayer); if (_Player[p].NoteDiff <= (2 - (int)_Player[p].Difficulty)) { // valid CSound.RecordSetTone(p, Tone); _Player[p].Points += (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[Note].PointsForBeat / (double)song.Notes.GetLines(_Player[p].LineNr).Points; // update player notes (sung notes) if (_Player[p].SingLine[Line].NoteCount > 0) { CNote nt = _Player[p].SingLine[Line].LastNote; if (notes[Note].StartBeat == beat || nt.EndBeat + 1 != beat || nt.Tone != Tone) { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, Tone, String.Empty, true, notes[Note].NoteType)); } else { _Player[p].SingLine[Line].IncLastNoteLength(); } } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, Tone, String.Empty, true, notes[Note].NoteType)); } _Player[p].SingLine[Line].LastNote.IsPerfect(notes[Note]); _Player[p].SingLine[Line].IsPerfect(lines[Line]); if (_Player[p].SingLine[Line].PerfectLine) { _Player[p].Points += CSettings.LinebonusScore * (double)lines[Line].Points / (double)song.Notes.GetPoints(_Player[p].LineNr); } } else { if (_Player[p].SingLine[Line].NoteCount > 0) { CNote nt = _Player[p].SingLine[Line].LastNote; if (nt.EndBeat + 1 != beat || nt.Hit) { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } else { if (nt.Tone == TonePlayer && nt.EndBeat + 1 == beat) { _Player[p].SingLine[Line].IncLastNoteLength(); } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } } } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } } } } } } } _OldBeatD = _CurrentBeatD; }