mirror of https://github.com/Poikilos/b3view
Allow setting the animation loop.
parent
af22989061
commit
3491183c8f
35
Engine.cpp
35
Engine.cpp
|
@ -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!
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
32
changelog.md
32
changelog.md
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue