Allow setting the animation loop.

master
poikilos 2020-07-30 23:40:17 -04:00
parent af22989061
commit 3491183c8f
5 changed files with 145 additions and 23 deletions

View File

@ -455,7 +455,40 @@ bool Engine::loadMesh(const wstring& fileName)
this->m_UserInterface->loadNextTexture(0);
}
}
std::cerr << "detecting last frame..." << std::flush;
std::wstring prevStartStr;
std::wstring prevEndStr;
if (this->m_UserInterface->playbackMenu->getItemText(UIE_PLAYBACKSTARTFRAMEEDITBOX) != nullptr)
prevStartStr = std::wstring(this->m_UserInterface->playbackMenu->getItemText(UIE_PLAYBACKSTARTFRAMEEDITBOX));
if (this->m_UserInterface->playbackMenu->getItemText(UIE_PLAYBACKENDFRAMEEDITBOX) != nullptr)
prevEndStr = std::wstring(this->m_UserInterface->playbackMenu->getItemText(UIE_PLAYBACKENDFRAMEEDITBOX));
f32 prevStart = -1;
f32 prevEnd = -1;
if (prevStartStr.length() > 0)
prevStart = Utility::toF32(prevStartStr);
// std::cerr << prevStart << "..." << std::flush;
if (prevEndStr.length() > 0)
prevEnd = Utility::toF32(prevEndStr);
// std::cerr << prevEnd << "..." << std::flush;
f32 endFrameF32 = static_cast<f32>(m_LoadedMesh->getEndFrame());
std::cerr << endFrameF32 << "..." << std::flush;
if (prevEnd < 0 || prevEnd > endFrameF32) {
std::cerr << "showing End Frame..." << std::flush;
this->m_UserInterface->setPlaybackText(
UIE_PLAYBACKENDFRAMEEDITBOX,
Utility::toWstring(endFrameF32).c_str()
);
}
if (prevStart < 0 || prevStart > endFrameF32) {
std::cerr << "showing Start Frame..." << std::flush;
this->m_UserInterface->setPlaybackText(
UIE_PLAYBACKSTARTFRAMEEDITBOX,
L"0.0"
);
}
//this->m_UserInterface->playbackMenu->setItemText(UIE_PLAYBACKSTARTFRAMEEDITBOX, );
//;
std::cerr << "OK" << std::endl;
}
// Don't do anything outside of the mesh != nullptr case that will try to
// use mesh!

View File

@ -105,6 +105,44 @@ void UserInterface::setupUserInterface()
s32 size_x = playbackWindow->getClientRect().getWidth() - 8;
s32 size_y = 24;
s32 y = 24;
playbackStartFrameStaticText = m_Gui->addStaticText(
L"Start Frame:",
rect<s32>(vector2d<s32>(spacing_x, y),
dimension2d<s32>(size_x, size_y)),
true,
true,
playbackWindow,
UIE_PLAYBACKSTARTFRAMESTATICTEXT,
false);
y += size_y;
playbackStartFrameEditBox = m_Gui->addEditBox(
L"",
rect<s32>(vector2d<s32>(spacing_x, y),
dimension2d<s32>(size_x, size_y)),
true,
playbackWindow,
UIE_PLAYBACKSTARTFRAMEEDITBOX);
y += size_y + spacing_y;
playbackEndFrameStaticText = m_Gui->addStaticText(
L"End Frame:",
rect<s32>(vector2d<s32>(spacing_x, y),
dimension2d<s32>(size_x, size_y)),
true,
true,
playbackWindow,
UIE_PLAYBACKENDFRAMESTATICTEXT,
false);
y += size_y;
playbackEndFrameEditBox = m_Gui->addEditBox(
L"",
rect<s32>(vector2d<s32>(spacing_x, y),
dimension2d<s32>(size_x, size_y)),
true,
playbackWindow,
UIE_PLAYBACKENDFRAMEEDITBOX);
y += size_y + spacing_y;
playbackStartStopButton = m_Gui->addButton(
rect<s32>(vector2d<s32>(spacing_x, y),
dimension2d<s32>(size_x, size_y)),
@ -481,6 +519,21 @@ bool UserInterface::OnSelectMesh() {
return true;
}
void UserInterface::setPlaybackText(s32 id, const wchar_t* text)
{
switch (id) {
case (UIE_PLAYBACKSTARTFRAMEEDITBOX):
this->playbackStartFrameEditBox->setText(text);
break;
case (UIE_PLAYBACKENDFRAMEEDITBOX):
this->playbackEndFrameEditBox->setText(text);
break;
default:
std::cerr << "ERROR: setPlaybackText got a bad id: " << id << std::endl;
// break;
}
}
/**
* Load the next texture from the list of found textures.
* Files are only listed once for speed, so you must reload the
@ -797,6 +850,26 @@ bool UserInterface::OnEvent(const SEvent& event)
}
}
break;
case UIE_PLAYBACKSTARTFRAMEEDITBOX:
if (ge->EventType == EGET_EDITBOX_ENTER) {
if (this->m_Engine->m_LoadedMesh != nullptr) {
this->m_Engine->m_LoadedMesh->setFrameLoop(
Utility::toF32(this->playbackStartFrameEditBox->getText()),
Utility::toF32(this->playbackEndFrameEditBox->getText())
);
}
}
break;
case UIE_PLAYBACKENDFRAMEEDITBOX:
if (ge->EventType == EGET_EDITBOX_ENTER) {
if (this->m_Engine->m_LoadedMesh != nullptr) {
this->m_Engine->m_LoadedMesh->setFrameLoop(
Utility::toF32(this->playbackStartFrameEditBox->getText()),
Utility::toF32(this->playbackEndFrameEditBox->getText())
);
}
}
break;
case UIE_TEXTUREPATHEDITBOX:
if (ge->EventType == EGET_EDITBOX_ENTER) {
if (this->m_Engine->m_LoadedMesh != nullptr) {

View File

@ -22,15 +22,19 @@ enum UserInterfaceElements {
UIE_VIEWMENU = 3000,
UIE_PLAYBACKWINDOW = 10000,
UIE_PLAYBACKSTARTSTOPBUTTON = 10001,
UIE_PLAYBACKSETFRAMEEDITBOX = 10002,
UIE_PLAYBACKINCREASEBUTTON = 10003,
UIE_PLAYBACKDECREASEBUTTON = 10004,
UIE_FPSEDITBOX = 10005,
UIE_TEXTUREPATHSTATICTEXT = 10006,
UIE_TEXTUREPATHEDITBOX = 10007,
UIE_AXISSIZESTATICTEXT = 10008,
UIE_AXISSIZEEDITBOX = 10009
UIE_PLAYBACKSTARTFRAMESTATICTEXT= 10001,
UIE_PLAYBACKSTARTFRAMEEDITBOX = 10002,
UIE_PLAYBACKENDFRAMESTATICTEXT = 10003,
UIE_PLAYBACKENDFRAMEEDITBOX = 10004,
UIE_PLAYBACKSTARTSTOPBUTTON = 10005,
UIE_PLAYBACKSETFRAMEEDITBOX = 10006,
UIE_PLAYBACKINCREASEBUTTON = 10007,
UIE_PLAYBACKDECREASEBUTTON = 10008,
UIE_FPSEDITBOX = 10009,
UIE_TEXTUREPATHSTATICTEXT = 10010,
UIE_TEXTUREPATHEDITBOX = 10011,
UIE_AXISSIZESTATICTEXT = 10012,
UIE_AXISSIZEEDITBOX = 10013
};
enum UserInterfaceCommands {
@ -82,6 +86,10 @@ public:
irr::gui::IGUIContextMenu* fileMenu;
irr::gui::IGUIContextMenu* playbackMenu;
irr::gui::IGUIContextMenu* viewMenu;
irr::gui::IGUIStaticText* playbackStartFrameStaticText;
irr::gui::IGUIEditBox* playbackStartFrameEditBox;
irr::gui::IGUIStaticText* playbackEndFrameStaticText;
irr::gui::IGUIEditBox* playbackEndFrameEditBox;
irr::gui::IGUIButton* playbackStartStopButton;
irr::gui::IGUIEditBox* playbackSetFrameEditBox;
irr::gui::IGUIButton* playbackIncreaseButton;
@ -108,6 +116,7 @@ public:
bool loadNextTexture(int direction);
void exportMeshToHome(std::string extension);
bool OnSelectMesh();
void setPlaybackText(irr::s32 id, const wchar_t* str);
// IEventReceiver
virtual bool OnEvent(const irr::SEvent& event);

View File

@ -4,8 +4,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2020-07-30
(Poikilos)
### Added
- Allow setting the animation loop.
## [git] - 2020-03-10
(poikilos)
(Poikilos)
### Added
- `replaceAll`
- `TestUtility` ("Utility.cpp" now tests itself, but only one feature
@ -44,7 +50,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-07-03
(poikilos)
(Poikilos)
### Changes
- Move the display mode booleans to Engine.
- Add more string utilities.
@ -53,7 +59,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-05-16
(poikilos)
(Poikilos)
### Added
- playback menu
- Move framerate controls to playback menu.
@ -62,7 +68,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-05-16
(poikilos)
(Poikilos)
### Changed
- improve minetest texture detection (alternate conventions)
- turn off interpolation if loadNextTexture detects minetest directory
@ -70,7 +76,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-05-16
(poikilos)
(Poikilos)
### Added
- export COLLADA (non-Blender), IRR, IRRMESH, OBJ, STL
- show dialog box if operation can't be performed
@ -81,7 +87,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-04-19
(poikilos)
(Poikilos)
### Added
- box for axis length (size of the axis widget)
- box for frame rate
@ -100,7 +106,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-04-08
(poikilos)
(Poikilos)
### Added
- snapWidgets (move playbackWindow on resize, not leave past edge)
@ -114,7 +120,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-04-08
(poikilos)
(Poikilos)
### Added
- toggle texture interpolation (via checkbox and `x` hotkey)
- INDEX_ variables to store ID of GUI elements
@ -129,7 +135,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-03-09
(poikilos)
(Poikilos)
### Added
- completed rotation controls (Blender-like)
- pan up and down (Blender-like, but only up and down)
@ -139,7 +145,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-03-09
(poikilos)
(Poikilos)
### Added
- hotkeys to reload model/texture
- license (see README.md for licensing history)
@ -156,13 +162,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git] - 2019-03-07
(poikilos)
(Poikilos)
### Added
- playback controls
## [git] - 2019-03-06
(poikilos)
(Poikilos)
### Added
- created install.sh and install.bat, and added Install and Usage
to README.md
@ -184,7 +190,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [git-94e3b8f] - 2019-03-06
(poikilos)
(Poikilos)
### Added
- README.md

View File

@ -30,6 +30,7 @@ Website: [poikilos.org](https://poikilos.org)
"<texture directory>" is either `.` (same directory as model)
or `../textures` (where model would be in a parallel directory next to
textures).
* Set the animation loop range (the animation includes the end frame).
## Related Software