c++ features

This commit is contained in:
Benedikt Galbavy 2025-01-14 15:56:47 +01:00
parent f9eb278c33
commit 0d0df75c87

View File

@ -91,7 +91,7 @@ Hate
\subsection{ECS} \subsection{ECS}
% ECS slides, split into 3 sections % ECS slides, split into 3 sections
\begin{frame}[allowframebreaks, fragile]{We made an ECS} \begin{frame}[fragile]{We made an ECS}
Why an ECS - Entity Component System? Why an ECS - Entity Component System?
\begin{itemize} \begin{itemize}
\item Encourages reusable code \item Encourages reusable code
@ -143,7 +143,7 @@ public:
\item TypeID: increments through all components - copied from video tutorial \item TypeID: increments through all components - copied from video tutorial
\item NOT beginner friendly \item NOT beginner friendly
} }
\begin{frame}[allowframebreaks, fragile]{We made an ECS - Usage} \begin{frame}[fragile]{We made an ECS - Usage}
Very easy to use: Very easy to use:
\begin{minted}[linenos,autogobble]{c++} \begin{minted}[linenos,autogobble]{c++}
auto& projectile(this->manager->addEntity()); auto& projectile(this->manager->addEntity());
@ -188,7 +188,67 @@ However it does solve memory management\footnote{For \texttt{Entity} classes onl
\item classic example of good on surface level only for a beginner; transition to more such examples \item classic example of good on surface level only for a beginner; transition to more such examples
} }
% Beginner traps
\subsection{C++ beginner traps}
\begin{frame}[fragile]{C++ - Friend or Foe?}
\enquote{I just learned about \underline{\hspace{1cm}}, so I'm going to use it everywhere\dots}
Please do not take any of our claims as factually accurate or best practice
\end{frame} \end{frame}
\begin{frame}[fragile]{C++ - Friend or Foe? - Ternary operator}
If used in moderation:
\begin{minted}[linenos,autogobble,samepage=false,breaklines]{c}
void TextureManager::draw( /* ... */, bool flipped)
{
SDL_FlipMode flip = flipped ? SDL_FLIP_HORIZONTAL : SDL_FLIP_NONE;
// ...
}
\end{minted}
\end{frame}
\begin{frame}[allowframebreaks, fragile]{C++ - Friend or Foe? - \texttt{std::ranges}}
\begin{minted}[linenos,autogobble,samepage=false,breaklines]{c++}
// for each tile set
auto tileConstructorRange = std::views::iota(0)
| std::views::take(this->mapData.tileSets->size())
// return the tile set metadata
| std::views::transform([&](uint16_t i) { /* ... */ })
| std::views::transform([=, this](const TileSetData& data) {
// for each tile on the tile set
return std::views::iota(0)
| std::views::take(this->mapData.mapSize->x * this->mapData.mapSize->y)
// only take tiles that are on the ID range of the tile set
| std::views::filter([=](uint16_t idx) { /* ... */ })
// extract tile data
| std::views::transform([=, this](uint16_t idx) {
/* ... */
return std::function<Entity*()>(
[tilePosX, tilePosY, capture0 = *this->mapData.mapTileSize, u, v, zIndex, capture1 = data.texturePath, collision] {
return Map::addTile(tilePosX, tilePosY, capture0, u, v, zIndex, capture1, collision);
}
);
});
})
// 2D view to 1D vector
| std::views::join
| std::ranges::to<std::vector>();
\end{minted}
\end{frame}
\note[itemize]{
\item context:
\item readable (sort of), efficient (not really due to to<vector>)
\item issues with c++23 (requires at least gcc14)
}
\begin{frame}[fragile]{C++ - Friend or Foe? - \texttt{std::bitset}}
Might be efficient, but\dots
\begin{minted}[linenos,autogobble,samepage=false,breaklines]{c++}
IntersectionBitSet intersections =
(CollisionHandler::getIntersectionWithBounds(entity, Vector2D(positionChange.x, 0)) |
(this->entity->getManager().getGame()->collisionHandler ->getAnyIntersection<IntersectionBitSet>(entity, Vector2D(positionChange.x, 0), colliders)) & IntersectionBitSet("0011")) |
(CollisionHandler::getIntersectionWithBounds(entity, Vector2D(0, positionChange.y)) |
(this->entity->getManager().getGame()->collisionHandler ->getAnyIntersection<IntersectionBitSet>(entity, Vector2D(0, positionChange.y), colliders)) & IntersectionBitSet("1100"));
\end{minted}
\end{frame}
\note{\dots not very readable}
%code example %code example
\begin{frame}[fragile]{Hello, World!} \begin{frame}[fragile]{Hello, World!}
@ -202,12 +262,6 @@ int main()
} }
\end{minted} \end{minted}
\end{frame} \end{frame}
\begin{frame} \note{This is just a slide for testing the minted package}
\begin{enumerate}
\item Eins
\item Zwei
\item Drei
\end{enumerate}
\end{frame}
\end{document} \end{document}