public void CreateTriangleData() { Initialize(); for (int triangleIndex = 0; triangleIndex < meshTriangles.Length / 3; ++triangleIndex) { SetSortedTriangleVertices(triangleIndex); PreviousBuffers[triangleIndex] = CurrentBuffers[triangleIndex]; CurrentBuffers[triangleIndex] = new TriangleBuffer(currentVertices[0].globalVertex, currentVertices[1].globalVertex, currentVertices[2].globalVertex, Rigidbody3d); TriangleState triangleState = SetTriangleState(); switch (triangleState) { case TriangleState.AboveWater: CurrentBuffers[triangleIndex].submergedArea = 0f; break; case TriangleState.TwoAboveWater: CurrentBuffers[triangleIndex].submergedArea = CuttingAlgorithmTwoAbove(currentVertices[0], currentVertices[1], currentVertices[2], triangleIndex); break; case TriangleState.OneAboveWater: CurrentBuffers[triangleIndex].submergedArea = CuttingAlgorithmOneAbove(currentVertices[0], currentVertices[1], currentVertices[2], triangleIndex); break; case TriangleState.Submerged: CuttingAlgorithmHorizontal(currentVertices[0], currentVertices[1], currentVertices[2], triangleIndex); CurrentBuffers[triangleIndex].submergedArea = CurrentBuffers[triangleIndex].originalArea; break; default: break; } } }
public TriangleState getTriangleState() { if (!isValidTriangle()) { triState = TriangleState.Invalid; } else if (isRightTriangle()) { triState = TriangleState.Right; } else if (isEquilateral()) { triState = TriangleState.Equilateral; } else if (isIsosceles()) { triState = TriangleState.Isoscelese; } else { triState = TriangleState.NotSpecial; } return(triState); }
}; //不同状态下指示部分应该旋转的角度 private void Start() { if (InputHandler.IsInitialized) { InputHandler.Instance.StartListener(gameObject, OnClick); } m_curState = startState; ChangeActiveByState(); }
// Start is called before the first frame update void Start() { int rnd = Random.Range(0, 3); switch (rnd) { case 0: { state = TriangleState.Blue; img.sprite = Resources.Load <Sprite>("Textures/BlueEnemy"); } break; case 1: { state = TriangleState.Green; img.sprite = Resources.Load <Sprite>("Textures/GreenEnemy"); } break; case 2: { state = TriangleState.Red; img.sprite = Resources.Load <Sprite>("Textures/RedEnemy"); } break; } }
// Update is called once per frame void Update() { if (img.sprite == null) { switch (state) { case TriangleState.Blue: state = TriangleState.Blue; img.sprite = Resources.Load <Sprite>("Textures/BlueEnemy"); break; case TriangleState.Green: state = TriangleState.Green; img.sprite = Resources.Load <Sprite>("Textures/GreenEnemy"); break; case TriangleState.Red: state = TriangleState.Red; img.sprite = Resources.Load <Sprite>("Textures/RedEnemy"); break; } } float yPos = transform.position.y - (Time.deltaTime * GameControl.gameSpeed * 100f); transform.position = new Vector3(0, yPos, 0); }
private void SwitchState(TriangleState state) { if (_triangleState == state) { return; } _triangleState = state; switch (_triangleState) { case TriangleState.ENABLED: InitEnableState(); break; case TriangleState.DISABLED: InitDisableState(); break; } }
private void Export_Click(object sender, EventArgs e) { //acquire target using var sfd = new SaveFileDialog { Filter = new FilesystemFilter("Renoise Song Files", new[] { "xrns" }).ToString() }; if (sfd.ShowDialog().IsOk()) { return; } // configuration: var outPath = sfd.FileName; string templatePath = Path.Combine(Path.GetDirectoryName(outPath) ?? "", "template.xrns"); int configuredPatternLength = int.Parse(txtPatternLength.Text); // load template XElement templateRoot; using (var zfTemplate = new ZipArchive(new FileStream(templatePath, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read)) { var entry = zfTemplate.Entries.Single(entry => entry.FullName == "Song.xml"); using var stream = entry.Open(); templateRoot = XElement.Load(stream); } //get the pattern pool, and whack the child nodes var xPatterns = templateRoot.XPathSelectElement("//Patterns"); var xPatternPool = xPatterns.Parent; xPatterns.Remove(); var writer = new StringWriter(); writer.WriteLine("<Patterns>"); int pulse0LastNote = -1; int pulse0LastType = -1; int pulse1LastNote = -1; int pulse1LastType = -1; int triLastNote = -1; int noiseLastNote = -1; int patternCount = 0; int time = 0; while (time < _log.Count) { patternCount++; //begin writing pattern: open the tracks list writer.WriteLine("<Pattern>"); writer.WriteLine("<NumberOfLines>{0}</NumberOfLines>", configuredPatternLength); writer.WriteLine("<Tracks>"); //write the pulse tracks for (int track = 0; track < 2; track++) { writer.WriteLine("<PatternTrack type=\"PatternTrack\">"); writer.WriteLine("<Lines>"); int lastNote = track == 0 ? pulse0LastNote : pulse1LastNote; int lastType = track == 0 ? pulse0LastType : pulse1LastType; for (int i = 0; i < configuredPatternLength; i++) { int patLine = i; int index = i + time; if (index >= _log.Count) { continue; } var rec = _log[index]; PulseState pulse = new PulseState(); if (track == 0) { pulse = rec.Pulse0; } if (track == 1) { pulse = rec.Pulse1; } // transform quieted notes to dead notes // blech its buggy, im tired ////if (pulse.vol == 0) //// pulse.en = false; bool keyOff = false, keyOn = false; if (lastNote != -1 && !pulse.En) { lastNote = -1; lastType = -1; keyOff = true; } else if (lastNote != pulse.Note && pulse.En) { keyOn = true; } if (lastType != pulse.Type && pulse.Note != -1) { keyOn = true; } if (pulse.En) { lastNote = pulse.Note; lastType = pulse.Type; } writer.WriteLine("<Line index=\"{0}\">", patLine); writer.WriteLine("<NoteColumns>"); writer.WriteLine("<NoteColumn>"); if (keyOn) { writer.WriteLine("<Note>{0}</Note>", NameForNote(pulse.Note)); writer.WriteLine("<Instrument>{0:X2}</Instrument>", pulse.Type); } else if (keyOff) { writer.WriteLine("<Note>OFF</Note>"); } if (lastNote != -1) { writer.WriteLine("<Volume>{0:X2}</Volume>", pulse.Vol * 8); } writer.WriteLine("</NoteColumn>"); writer.WriteLine("</NoteColumns>"); writer.WriteLine("</Line>"); } // close PatternTrack writer.WriteLine("</Lines>"); writer.WriteLine("</PatternTrack>"); if (track == 0) { pulse0LastNote = lastNote; pulse0LastType = lastType; } else { pulse1LastNote = lastNote; pulse1LastType = lastType; } } // pulse tracks loop // triangle track generation { writer.WriteLine("<PatternTrack type=\"PatternTrack\">"); writer.WriteLine("<Lines>"); for (int i = 0; i < configuredPatternLength; i++) { int patLine = i; int index = i + time; if (index >= _log.Count) { continue; } var rec = _log[index]; TriangleState tri = rec.Triangle; { bool keyOff = false, keyOn = false; if (triLastNote != -1 && !tri.En) { triLastNote = -1; keyOff = true; } else if (triLastNote != tri.Note && tri.En) { keyOn = true; } if (tri.En) { triLastNote = tri.Note; } writer.WriteLine("<Line index=\"{0}\">", patLine); writer.WriteLine("<NoteColumns>"); writer.WriteLine("<NoteColumn>"); if (keyOn) { writer.WriteLine("<Note>{0}</Note>", NameForNote(tri.Note)); writer.WriteLine("<Instrument>08</Instrument>"); } else if (keyOff) { writer.WriteLine("<Note>OFF</Note>"); } // no need for tons of these ////if(keyon) writer.WriteLine("<Volume>80</Volume>"); writer.WriteLine("</NoteColumn>"); writer.WriteLine("</NoteColumns>"); writer.WriteLine("</Line>"); } } // close PatternTrack writer.WriteLine("</Lines>"); writer.WriteLine("</PatternTrack>"); } // noise track generation { writer.WriteLine("<PatternTrack type=\"PatternTrack\">"); writer.WriteLine("<Lines>"); for (int i = 0; i < configuredPatternLength; i++) { int patLine = i; int index = i + time; if (index >= _log.Count) { continue; } var rec = _log[index]; NoiseState noise = rec.Noise; // transform quieted notes to dead notes // blech its buggy, im tired ////if (noise.vol == 0) //// noise.en = false; { bool keyOff = false, keyOn = false; if (noiseLastNote != -1 && !noise.En) { noiseLastNote = -1; keyOff = true; } else if (noiseLastNote != noise.Note && noise.En) { keyOn = true; } if (noise.En) { noiseLastNote = noise.Note; } writer.WriteLine("<Line index=\"{0}\">", patLine); writer.WriteLine("<NoteColumns>"); writer.WriteLine("<NoteColumn>"); if (keyOn) { writer.WriteLine("<Note>{0}</Note>", NameForNote(noise.Note)); writer.WriteLine("<Instrument>04</Instrument>"); } else if (keyOff) { writer.WriteLine("<Note>OFF</Note>"); } if (noiseLastNote != -1) { writer.WriteLine("<Volume>{0:X2}</Volume>", noise.Vol * 8); } writer.WriteLine("</NoteColumn>"); writer.WriteLine("</NoteColumns>"); writer.WriteLine("</Line>"); } } // close PatternTrack writer.WriteLine("</Lines>"); writer.WriteLine("</PatternTrack>"); } // noise track generation // write empty track for now for pcm for (int track = 4; track < 5; track++) { writer.WriteLine("<PatternTrack type=\"PatternTrack\">"); writer.WriteLine("<Lines>"); writer.WriteLine("</Lines>"); writer.WriteLine("</PatternTrack>"); } // we definitely need a dummy master track now writer.WriteLine("<PatternMasterTrack type=\"PatternMasterTrack\">"); writer.WriteLine("</PatternMasterTrack>"); // close tracks writer.WriteLine("</Tracks>"); // close pattern writer.WriteLine("</Pattern>"); time += configuredPatternLength; } // main pattern loop writer.WriteLine("</Patterns>"); writer.Flush(); var xNewPatternList = XElement.Parse(writer.ToString()); xPatternPool.Add(xNewPatternList); //write pattern sequence writer = new StringWriter(); writer.WriteLine("<SequenceEntries>"); for (int i = 0; i < patternCount; i++) { writer.WriteLine("<SequenceEntry>"); writer.WriteLine("<IsSectionStart>false</IsSectionStart>"); writer.WriteLine("<Pattern>{0}</Pattern>", i); writer.WriteLine("</SequenceEntry>"); } writer.WriteLine("</SequenceEntries>"); var xPatternSequence = templateRoot.XPathSelectElement("//PatternSequence"); xPatternSequence.XPathSelectElement("SequenceEntries").Remove(); xPatternSequence.Add(XElement.Parse(writer.ToString())); //copy template file to target File.Delete(outPath); File.Copy(templatePath, outPath); using var zfOutput = new ZipArchive(new FileStream(outPath, FileMode.Create, FileAccess.Write), ZipArchiveMode.Create); using (var stream = zfOutput.CreateEntry("Song.xml").Open()) { templateRoot.Save(stream); } }
private void btnExport_Click(object sender, EventArgs e) { //acquire target var sfd = new SaveFileDialog(); sfd.Filter = "XRNS (*.xrns)|*.xrns"; if (sfd.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } //configuration: var outPath = sfd.FileName; string templatePath = Path.Combine(Path.GetDirectoryName(outPath), "template.xrns"); int configuredPatternLength = int.Parse(txtPatternLength.Text); //load template MemoryStream msSongXml = new MemoryStream(); var zfTemplate = new ICSharpCode.SharpZipLib.Zip.ZipFile(templatePath); { int zfSongXmlIndex = zfTemplate.FindEntry("Song.xml", true); using (var zis = zfTemplate.GetInputStream(zfTemplate.GetEntry("Song.xml"))) { byte[] buffer = new byte[4096]; // 4K is optimum ICSharpCode.SharpZipLib.Core.StreamUtils.Copy(zis, msSongXml, buffer); } } XElement templateRoot = XElement.Parse(System.Text.Encoding.UTF8.GetString(msSongXml.ToArray())); //get the pattern pool, and whack the child nodes var xPatterns = templateRoot.XPathSelectElement("//Patterns"); var xPatternPool = xPatterns.Parent; xPatterns.Remove(); var writer = new StringWriter(); writer.WriteLine("<Patterns>"); int pulse0_lastNote = -1; int pulse0_lastType = -1; int pulse1_lastNote = -1; int pulse1_lastType = -1; int tri_lastNote = -1; int noise_lastNote = -1; int patternCount = 0; int time = 0; while (time < Log.Count) { patternCount++; //begin writing pattern: open the tracks list writer.WriteLine("<Pattern>"); writer.WriteLine("<NumberOfLines>{0}</NumberOfLines>", configuredPatternLength); writer.WriteLine("<Tracks>"); //write the pulse tracks for (int TRACK = 0; TRACK < 2; TRACK++) { writer.WriteLine("<PatternTrack type=\"PatternTrack\">"); writer.WriteLine("<Lines>"); int lastNote = TRACK == 0 ? pulse0_lastNote : pulse1_lastNote; int lastType = TRACK == 0 ? pulse0_lastType : pulse1_lastType; for (int i = 0; i < configuredPatternLength; i++) { int patLine = i; int index = i + time; if (index >= Log.Count) { continue; } var rec = Log[index]; PulseState pulse = new PulseState(); if (TRACK == 0) { pulse = rec.pulse0; } if (TRACK == 1) { pulse = rec.pulse1; } //transform quieted notes to dead notes //blech its buggy, im tired //if (pulse.vol == 0) // pulse.en = false; bool keyoff = false, keyon = false; if (lastNote != -1 && !pulse.en) { lastNote = -1; lastType = -1; keyoff = true; } else if (lastNote != pulse.note && pulse.en) { keyon = true; } if (lastType != pulse.type && pulse.note != -1) { keyon = true; } if (pulse.en) { lastNote = pulse.note; lastType = pulse.type; } writer.WriteLine("<Line index=\"{0}\">", patLine); writer.WriteLine("<NoteColumns>"); writer.WriteLine("<NoteColumn>"); if (keyon) { writer.WriteLine("<Note>{0}</Note>", NameForNote(pulse.note)); writer.WriteLine("<Instrument>{0:X2}</Instrument>", pulse.type); } else if (keyoff) { writer.WriteLine("<Note>OFF</Note>"); } if (lastNote != -1) { writer.WriteLine("<Volume>{0:X2}</Volume>", pulse.vol * 8); } writer.WriteLine("</NoteColumn>"); writer.WriteLine("</NoteColumns>"); writer.WriteLine("</Line>"); } //close PatternTrack writer.WriteLine("</Lines>"); writer.WriteLine("</PatternTrack>"); if (TRACK == 0) { pulse0_lastNote = lastNote; pulse0_lastType = lastType; } else { pulse1_lastNote = lastNote; pulse1_lastType = lastType; } } //pulse tracks loop //triangle track generation { writer.WriteLine("<PatternTrack type=\"PatternTrack\">"); writer.WriteLine("<Lines>"); for (int i = 0; i < configuredPatternLength; i++) { int patLine = i; int index = i + time; if (index >= Log.Count) { continue; } var rec = Log[index]; TriangleState tri = rec.triangle; { bool keyoff = false, keyon = false; if (tri_lastNote != -1 && !tri.en) { tri_lastNote = -1; keyoff = true; } else if (tri_lastNote != tri.note && tri.en) { keyon = true; } if (tri.en) { tri_lastNote = tri.note; } writer.WriteLine("<Line index=\"{0}\">", patLine); writer.WriteLine("<NoteColumns>"); writer.WriteLine("<NoteColumn>"); if (keyon) { writer.WriteLine("<Note>{0}</Note>", NameForNote(tri.note)); writer.WriteLine("<Instrument>08</Instrument>"); } else if (keyoff) { writer.WriteLine("<Note>OFF</Note>"); } //no need for tons of these //if(keyon) writer.WriteLine("<Volume>80</Volume>"); writer.WriteLine("</NoteColumn>"); writer.WriteLine("</NoteColumns>"); writer.WriteLine("</Line>"); } } //close PatternTrack writer.WriteLine("</Lines>"); writer.WriteLine("</PatternTrack>"); } //noise track generation { writer.WriteLine("<PatternTrack type=\"PatternTrack\">"); writer.WriteLine("<Lines>"); for (int i = 0; i < configuredPatternLength; i++) { int patLine = i; int index = i + time; if (index >= Log.Count) { continue; } var rec = Log[index]; NoiseState noise = rec.noise; //transform quieted notes to dead notes //blech its buggy, im tired //if (noise.vol == 0) // noise.en = false; { bool keyoff = false, keyon = false; if (noise_lastNote != -1 && !noise.en) { noise_lastNote = -1; keyoff = true; } else if (noise_lastNote != noise.note && noise.en) { keyon = true; } if (noise.en) { noise_lastNote = noise.note; } writer.WriteLine("<Line index=\"{0}\">", patLine); writer.WriteLine("<NoteColumns>"); writer.WriteLine("<NoteColumn>"); if (keyon) { writer.WriteLine("<Note>{0}</Note>", NameForNote(noise.note)); writer.WriteLine("<Instrument>04</Instrument>"); } else if (keyoff) { writer.WriteLine("<Note>OFF</Note>"); } if (noise_lastNote != -1) { writer.WriteLine("<Volume>{0:X2}</Volume>", noise.vol * 8); } writer.WriteLine("</NoteColumn>"); writer.WriteLine("</NoteColumns>"); writer.WriteLine("</Line>"); } } //close PatternTrack writer.WriteLine("</Lines>"); writer.WriteLine("</PatternTrack>"); } //noise track generation //write empty track for now for pcm for (int TRACK = 4; TRACK < 5; TRACK++) { writer.WriteLine("<PatternTrack type=\"PatternTrack\">"); writer.WriteLine("<Lines>"); writer.WriteLine("</Lines>"); writer.WriteLine("</PatternTrack>"); } //we definitely need a dummy master track now writer.WriteLine("<PatternMasterTrack type=\"PatternMasterTrack\">"); writer.WriteLine("</PatternMasterTrack>"); //close tracks writer.WriteLine("</Tracks>"); //close pattern writer.WriteLine("</Pattern>"); time += configuredPatternLength; } //main pattern loop writer.WriteLine("</Patterns>"); writer.Flush(); var xNewPatternList = XElement.Parse(writer.ToString()); xPatternPool.Add(xNewPatternList); //write pattern sequence writer = new StringWriter(); writer.WriteLine("<SequenceEntries>"); for (int i = 0; i < patternCount; i++) { writer.WriteLine("<SequenceEntry>"); writer.WriteLine("<IsSectionStart>false</IsSectionStart>"); writer.WriteLine("<Pattern>{0}</Pattern>", i); writer.WriteLine("</SequenceEntry>"); } writer.WriteLine("</SequenceEntries>"); var xPatternSequence = templateRoot.XPathSelectElement("//PatternSequence"); xPatternSequence.XPathSelectElement("SequenceEntries").Remove(); xPatternSequence.Add(XElement.Parse(writer.ToString())); //copy template file to target File.Delete(outPath); File.Copy(templatePath, outPath); var msOutXml = new MemoryStream(); templateRoot.Save(msOutXml); msOutXml.Flush(); msOutXml.Position = 0; var zfOutput = new ICSharpCode.SharpZipLib.Zip.ZipFile(outPath); zfOutput.BeginUpdate(); zfOutput.Add(new Stupid { stream = msOutXml }, "Song.xml"); zfOutput.CommitUpdate(); zfOutput.Close(); //for easier debugging, write patterndata XML //DUMP_TO_DISK(msOutXml.ToArray()) }
private void OnClick() { m_curState = (TriangleState)((int)(m_curState + 1) % 3); ChangeActiveByState(); }