furnace/src/gui/about.cpp

324 lines
9.2 KiB
C++
Raw Normal View History

/**
* Furnace Tracker - multi-system chiptune tracker
2023-01-20 00:18:40 +00:00
* Copyright (C) 2021-2023 tildearrow and contributors
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
2022-03-21 22:38:11 +00:00
#define _USE_MATH_DEFINES
#include "gui.h"
2022-03-21 22:38:11 +00:00
#include <math.h>
const char* aboutLine[]={
"tildearrow",
"is proud to present",
"",
("Furnace " DIV_VERSION),
"",
2022-07-23 23:53:42 +00:00
"the biggest multi-system chiptune tracker!",
"featuring DefleMask song compatibility.",
"",
"> CREDITS <",
"",
"-- program --",
"tildearrow",
2023-02-25 06:54:51 +00:00
"A M 4 N (intro tune)",
"akumanatt",
"cam900",
"djtuBIG-MaliceX",
2023-07-24 19:52:27 +00:00
"Eknous-P",
"laoo",
2023-07-07 20:01:19 +00:00
"MooingLemur",
2022-04-12 09:36:45 +00:00
"OPNA2608",
"superctr",
2022-10-12 20:14:28 +00:00
"System64",
"",
"-- graphics/UI design --",
"tildearrow",
"BlastBrothers",
2023-08-15 01:02:48 +00:00
"Electric Keet",
2022-06-18 07:00:10 +00:00
"Mahbod Karamoozian",
2022-08-21 21:53:45 +00:00
"nicco1690",
"Raijin",
"",
"-- documentation --",
"tildearrow",
"freq-mod",
"nicco1690",
"DeMOSic",
"cam900",
2023-02-11 22:07:12 +00:00
"host12prog",
"WindowxDeveloper",
2023-07-07 20:01:19 +00:00
"polluks",
"Electric Keet",
"",
"-- demo songs --",
"0x5066",
2022-06-18 07:00:10 +00:00
"Abstract 64",
"ActualNK358",
2022-06-18 07:00:10 +00:00
"akumanatt",
"AmigaX",
"AURORA*FIELDS",
"battybeats",
"Bernie",
2022-06-18 07:00:10 +00:00
"BlueElectric05",
"breakthetargets",
2022-08-13 20:53:47 +00:00
"brickblock369",
2022-11-10 04:32:56 +00:00
"Burnt Fishy",
"CaptainMalware",
2023-01-17 23:12:58 +00:00
"Clingojam",
2022-06-18 07:00:10 +00:00
"DeMOSic",
"DevEd",
"Dippy",
2023-01-12 21:04:18 +00:00
"djtuBIG-MaliceX",
2022-12-19 18:50:39 +00:00
"dumbut",
2023-07-08 10:48:22 +00:00
"Eknous-P",
2023-07-30 09:34:24 +00:00
"Electric Keet",
"EpicTyphlosion",
2022-11-02 08:52:49 +00:00
"FΛDE",
2022-06-18 07:00:10 +00:00
"Forte",
"Fragmare",
"freq-mod",
2023-05-05 06:26:12 +00:00
"gtr3qq",
2023-06-01 20:51:39 +00:00
"Hortus",
2023-08-16 21:14:28 +00:00
"ifrit05",
2022-06-18 07:00:10 +00:00
"iyatemu",
2022-11-28 08:24:35 +00:00
"JayBOB18",
2022-12-09 07:37:18 +00:00
"Jimmy-DS",
"Kagamiin~",
"kleeder",
2023-03-06 08:44:11 +00:00
"Korbo",
2022-06-18 07:00:10 +00:00
"jaezu",
"Laggy",
2022-07-23 23:53:42 +00:00
"LovelyA72",
2022-06-18 07:00:10 +00:00
"LunaMoth",
2022-09-11 02:46:10 +00:00
"Lunathir",
"LVintageNerd",
"Mahbod Karamoozian",
"Martin Demsky",
2023-01-24 18:45:20 +00:00
"MelonadeM",
2022-06-18 07:00:10 +00:00
"Miker",
"nicco1690",
2023-06-01 20:55:01 +00:00
"niffuM",
2022-12-09 08:25:49 +00:00
"<nk>",
2023-03-08 06:41:26 +00:00
"NyaongI",
"PichuMario",
2022-10-28 20:05:59 +00:00
"potatoTeto",
2022-09-11 02:21:08 +00:00
"psxdominator",
2022-08-21 21:53:45 +00:00
"Raijin",
2023-07-24 22:48:05 +00:00
"railzen7",
2022-09-11 02:21:08 +00:00
"SnugglyBun",
"SuperJet Spade",
2022-12-01 02:59:49 +00:00
"SwapXFO",
2022-11-07 08:47:27 +00:00
"TakuikaNinja",
2023-01-12 21:04:18 +00:00
"TCORPStudios",
2023-07-27 06:12:50 +00:00
"Teuthida",
2022-11-26 06:13:32 +00:00
"The Blender Fiddler",
"TheDuccinator",
2022-06-18 07:00:10 +00:00
"theloredev",
"The Beesh-Spweesh!",
"TheRealHedgehogSonic",
"tildearrow",
2022-12-02 23:53:03 +00:00
"Uhrwerk Klockwerx",
"Ultraprogramer",
2022-10-27 20:52:28 +00:00
"UserSniper",
2022-06-18 07:00:10 +00:00
"Weeppiko",
2023-06-16 23:43:33 +00:00
"Xan",
2023-03-06 08:44:11 +00:00
"Yuzu4K",
2023-02-11 23:14:38 +00:00
"Zaxolotl",
2022-06-18 07:00:10 +00:00
"ZoomTen (Zumi)",
"",
"-- additional feedback/fixes --",
2023-07-30 09:34:24 +00:00
"Electric Keet",
"fd",
2022-04-13 05:37:48 +00:00
"GENATARi",
2022-07-24 02:19:43 +00:00
"host12prog",
"jvsTSX",
2022-11-06 00:27:46 +00:00
"Lumigado",
2022-09-11 10:14:15 +00:00
"Lunathir",
"plane",
"TheEssem",
"",
"powered by:",
"Dear ImGui by Omar Cornut",
"SDL2 by Sam Lantinga",
"zlib by Jean-loup Gailly",
"and Mark Adler",
"libsndfile by Erik de Castro Lopo",
2022-04-12 09:36:45 +00:00
"Portable File Dialogs by Sam Hocevar",
2022-06-18 07:00:10 +00:00
"Native File Dialog by Frogtoss Games",
2022-04-12 09:36:45 +00:00
"RtMidi by Gary P. Scavone",
"FFTW by Matteo Frigo and Steven G. Johnson",
2022-06-18 07:00:10 +00:00
"backward-cpp by Google",
2022-04-12 09:36:45 +00:00
"adpcm by superctr",
"Nuked-OPL3/OPLL/OPM/OPN2/PSG by Nuke.YKT",
"ymfm by Aaron Giles",
"MAME SN76496 by Nicola Salmoria",
"MAME AY-3-8910 by Couriersud",
2022-05-15 07:37:39 +00:00
"with AY8930 fixes by Eulous, cam900 and Grauw",
"MAME SAA1099 by Juergen Buchmueller and Manuel Abadia",
2022-06-18 07:00:10 +00:00
"MAME Namco WSG by Nicola Salmoria and Aaron Giles",
"MAME RF5C68 core by Olivier Galibert and Aaron Giles",
2022-10-03 00:12:31 +00:00
"MAME MSM5232 core by Jarek Burczynski and Hiromitsu Shioya",
2022-06-18 07:00:10 +00:00
"MAME MSM6258 core by Barry Rodewald",
"MAME YMZ280B core by Aaron Giles",
2022-12-25 04:39:44 +00:00
"MAME GA20 core by Acho A. Tang and R. Belmont",
2023-02-10 07:01:23 +00:00
"MAME SegaPCM core by Hiromitsu Shioya and Olivier Galibert",
2022-04-12 09:36:45 +00:00
"SAASound by Dave Hooper and Simon Owen",
"SameBoy by Lior Halphon",
2022-10-11 07:23:29 +00:00
"Mednafen PCE, WonderSwan, T6W28 and Virtual Boy audio cores",
2022-10-03 00:12:31 +00:00
"SNES DSP core by Blargg",
2022-04-12 09:36:45 +00:00
"puNES (NES, MMC5 and FDS) by FHorse",
2022-06-18 07:00:10 +00:00
"NSFPlay (NES and FDS) by Brad Smith and Brezza",
"reSID by Dag Lem",
2022-08-28 20:10:16 +00:00
"reSIDfp by Dag Lem, Antti Lankila",
"and Leandro Nini",
2023-07-06 01:38:31 +00:00
"dSID by DefleMask Team based on jsSID",
"Stella by Stella Team",
2022-06-18 07:00:10 +00:00
"QSound emulator by superctr and Valley Bell",
2022-04-12 09:36:45 +00:00
"VICE VIC-20 sound core by Rami Rasanen and viznut",
2023-07-23 10:26:25 +00:00
"VICE TED sound core by Andreas Boose, Tibor Biczo",
"and Marco van den Heuvel",
2022-04-12 09:36:45 +00:00
"VERA sound core by Frank van den Hoef",
2022-12-23 00:25:11 +00:00
"mzpokeysnd POKEY emulator by Michael Borisov",
"ASAP POKEY emulator by Piotr Fusik",
"ported by laoo to C++",
2023-08-08 12:27:12 +00:00
"vgsound_emu (second version, modified version) by cam900",
"SM8521 emulator (modified version) by cam900",
"D65010G031 emulator (modified version) by cam900",
"Namco C140 (modified version) emulator by cam900",
"",
2022-06-18 07:00:10 +00:00
"greetings to:",
"NEOART Costa Rica",
"all members of Deflers of Noice!",
"",
2023-01-20 00:18:40 +00:00
"copyright © 2021-2023 tildearrow",
"(and contributors).",
"licensed under GPLv2+! see",
"LICENSE for more information.",
"",
"help Furnace grow:",
"https://github.com/tildearrow/furnace",
"",
"contact tildearrow at:",
"https://tildearrow.org/?p=contact",
"",
"disclaimer:",
"despite the fact this program works",
"with the .dmf file format, it is NOT",
"affiliated with Delek or DefleMask in",
"any way, nor it is a replacement for",
"the original program.",
"",
"it also comes with ABSOLUTELY NO WARRANTY.",
"",
"thanks to all contributors/bug reporters!"
};
const size_t aboutCount=sizeof(aboutLine)/sizeof(aboutLine[0]);
void FurnaceGUI::drawAbout() {
// do stuff
if (ImGui::Begin("About Furnace",NULL,ImGuiWindowFlags_Modal|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoDocking|ImGuiWindowFlags_NoTitleBar)) {
ImGui::SetWindowPos(ImVec2(0,0));
ImGui::SetWindowSize(ImVec2(canvasW,canvasH));
ImGui::PushFont(bigFont);
ImDrawList* dl=ImGui::GetWindowDrawList();
float r=0;
float g=0;
float b=0;
float peakMix=settings.partyTime?0:0.3;
if (settings.partyTime) {
for (int j=0; j<e->getAudioDescGot().outChans; j++) {
peakMix+=peak[j];
}
peakMix/=e->getAudioDescGot().outChans;
}
ImGui::ColorConvertHSVtoRGB(aboutHue,1.0,0.25+MIN(0.75f,peakMix*0.75f),r,g,b);
dl->AddRectFilled(ImVec2(0,0),ImVec2(canvasW,canvasH),0xff000000);
bool skip=false;
bool skip2=false;
for (int i=(-80-sin(double(aboutSin)*2*M_PI/120.0)*80.0)*2*dpiScale; i<canvasW; i+=160*dpiScale) {
skip2=!skip2;
skip=skip2;
for (int j=(-80-cos(double(aboutSin)*2*M_PI/150.0)*80.0)*2*dpiScale; j<canvasH; j+=160*dpiScale) {
skip=!skip;
if (skip) continue;
dl->AddRectFilled(ImVec2(i,j),ImVec2(i+160*dpiScale,j+160*dpiScale),ImGui::GetColorU32(ImVec4(r*0.25,g*0.25,b*0.25,1.0)));
}
}
skip=false;
skip2=false;
for (int i=(-80-cos(double(aboutSin)*2*M_PI/120.0)*80.0)*2*dpiScale; i<canvasW; i+=160*dpiScale) {
skip2=!skip2;
skip=skip2;
for (int j=(-80-sin(double(aboutSin)*2*M_PI/150.0)*80.0)*2*dpiScale; j<canvasH; j+=160*dpiScale) {
skip=!skip;
if (skip) continue;
dl->AddRectFilled(ImVec2(i,j),ImVec2(i+160*dpiScale,j+160*dpiScale),ImGui::GetColorU32(ImVec4(r*0.5,g*0.5,b*0.5,1.0)));
}
}
skip=false;
skip2=false;
for (int i=(-160+fmod(aboutSin*2,160))*2*dpiScale; i<canvasW; i+=160*dpiScale) {
skip2=!skip2;
skip=skip2;
for (int j=(-240-cos(double(aboutSin*M_PI/300.0))*240.0)*2*dpiScale; j<canvasH; j+=160*dpiScale) {
skip=!skip;
if (skip) continue;
dl->AddRectFilled(ImVec2(i,j),ImVec2(i+160*dpiScale,j+160*dpiScale),ImGui::GetColorU32(ImVec4(r*0.75,g*0.75,b*0.75,1.0)));
}
}
for (size_t i=0; i<aboutCount; i++) {
double posX=(canvasW/2.0)+(sin(double(i)*0.5+double(aboutScroll)/(90.0*dpiScale))*120*dpiScale)-(ImGui::CalcTextSize(aboutLine[i]).x*0.5);
double posY=(canvasH-aboutScroll+42*i*dpiScale);
if (posY<-80*dpiScale || posY>canvasH) continue;
dl->AddText(bigFont,bigFont->FontSize,
ImVec2(posX+dpiScale,posY+dpiScale),
0xff000000,aboutLine[i]);
dl->AddText(bigFont,bigFont->FontSize,
ImVec2(posX+dpiScale,posY-dpiScale),
0xff000000,aboutLine[i]);
dl->AddText(bigFont,bigFont->FontSize,
ImVec2(posX-dpiScale,posY+dpiScale),
0xff000000,aboutLine[i]);
dl->AddText(bigFont,bigFont->FontSize,
ImVec2(posX-dpiScale,posY-dpiScale),
0xff000000,aboutLine[i]);
dl->AddText(bigFont,bigFont->FontSize,
ImVec2(posX,posY),
0xffffffff,aboutLine[i]);
}
ImGui::PopFont();
float timeScale=60.0f*ImGui::GetIO().DeltaTime;
aboutHue+=(0.001+peakMix*0.004)*timeScale;
aboutScroll+=(2+(peakMix>0.78)*3)*timeScale*dpiScale;
aboutSin+=(1+(peakMix>0.75)*2)*timeScale;
while (aboutHue>1) aboutHue--;
while (aboutSin>=2400) aboutSin-=2400;
if (aboutScroll>(42*dpiScale*aboutCount+canvasH)) aboutScroll=-20*dpiScale;
WAKE_UP;
}
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_ABOUT;
ImGui::End();
2022-03-21 22:38:11 +00:00
}