From b9b2b0379f7d15dc2adb27955c8b5bb829c2cc0d Mon Sep 17 00:00:00 2001 From: Jaro Date: Wed, 4 Sep 2024 19:35:21 +0200 Subject: Added Git Workflow (placeholder), Scrum (placeholder), Documentation Standard(placeholder) and Work Agreements --- plan.tex | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/plan.tex b/plan.tex index 4ad9bad..82385f1 100644 --- a/plan.tex +++ b/plan.tex @@ -4,6 +4,90 @@ \title{Project Plan} \begin{document} -hoi + +% Information regarding the git workflow of this project. Diagram explaining the workflow +\section{Git Workflow} + +GitHub is used for version management of both code and documentation, each in its own respective repository. +This keep the documentation and code seperate, resulting in ordened and manageable repositories. + +\begin{itemize} + \item Code Repository: \href{https://github.com/lonkaars/crepe}{crepe} + \item Documentation Repository: \href{https://github.com/lonkaars/crepe-docs}{crepe-docs} +\end{itemize} + +\subsection{Git new branch} +% TODO: add here details from contributing.md? +\subsection{Git merge to master} +% TODO: add here diagram on what actions are taken before merge. +\newpage + +% Information about how and when Scrum will be used in this project (using Miro). +\section{Scrum (Miro)} +\subsection{Scrum Board} +\subsection{Burn down chart} +\newpage + +% Documentation Standard is described here +\section{Documentation Standard} +\newpage + +\section{Work Agreements} +\subsection{Project roles} + +\begin{itemize} + \item \textbf{Loek Le Blansch}: Integrator + \item \textbf{Wouter Boerenkamps}: Project Member + \item \textbf{Jaro Rutjes}: Team Leader / Scrum Master + \item \textbf{Max Smits}: Project Member + \item \textbf{Niels Stunnebrink}: Project Member +\end{itemize} + + +\subsection{Work hours} +Each project member will keep track of their own working hours and +add them to the 'file'. + +\subsection{Absents} +If a project member is going to be absent, they are required to notify the +team through either WhatsApp or Outlook. Additionally, the teacher should +be informed of the absence as well. + +\subsection{Inconsistent Participation} +Inconsistent participation will be addressed in a structured manner: + +\begin{enumerate} + \item \textbf{Initial Discussion}: The team leader will first discuss the + issue of inconsistent participation with the individual team member. + \item \textbf{Team Discussion}: If no improvement is observed, the issue + will be brought up with the entire team to seek a collective solution. + \item \textbf{Project Supervisor Involvement}: Should the problem persist + despite these efforts, it will be escalated to the project supervisor for + further action. +\end{enumerate} + +Valid reasons for absence or inconsistency will be considered, and no +repercussions will be necessary in such cases. However, if the inconsistency +is due to other factors, potential repercussions may include additional +assignments or actions as determined by the project supervisor. + +A team member is considered to have inconsistent participation if their hours +are significantly behind the team’s average or if tasks are not completed +without valid reasons. It is essential that any concerns regarding a team +member's performance be resolved through unanimous agreement within the team. + + +\subsection{Weekly update} +Each team member is required to send their technical weekly update to Jaro +Rutjes before 12:00 on Friday. Personal updates may also be included and will be kept +confidential between the team member, the Team Leader, and/or the teacher, +if requested. + +Jaro Rutjes will compile and send a team update to the project supervisor, +Bob van der Putten, also by Friday. This update will include technical +information on what has been accomplished, plans for upcoming work, and an +overview of the team's overall progress. +\newpage + \end{document} -- cgit v1.2.3 From 014c30c4dfd302cd049f3f52a89dc67f6e1bae5b Mon Sep 17 00:00:00 2001 From: Jaro Date: Wed, 4 Sep 2024 20:44:44 +0200 Subject: Filled placeholder scrum with information --- plan.tex | 51 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/plan.tex b/plan.tex index 82385f1..eaf32be 100644 --- a/plan.tex +++ b/plan.tex @@ -24,14 +24,48 @@ This keep the documentation and code seperate, resulting in ordened and manageab % Information about how and when Scrum will be used in this project (using Miro). \section{Scrum (Miro)} + +The team will start using scrum after the inital fase of sructering the project is over. +This fase is over when proof of concepts are being made. + \subsection{Scrum Board} +The \href{https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}{Scrum board} will consist of the following tabs: + +\begin{itemize} + \item \textbf{Backlog}: This tab contains a list of all tasks and user stories that are planned for future sprints. + \item \textbf{Next Sprint}: This tab includes tasks and user stories that have been selected for the upcoming sprint. + \item \textbf{Current Sprint}: This tab displays the tasks and user stories that are actively being worked on in the current sprint. + \item \textbf{In Progress}: Tasks that are actively being worked on are moved to this tab. + \item \textbf{Review}: Completed tasks that are awaiting review or testing will be placed in this tab. + \item \textbf{Done}: Once tasks have been reviewed and are considered complete, they are moved to the Done tab. + \item \textbf{Blocked}: This tab is used for tasks that cannot proceed due to obstacles or dependencies. +\end{itemize} + +\noindent +To manage tasks effectively: +\begin{itemize} + \item A task from the \textbf{Current Sprint} tab should be selected and moved to the \textbf{In Progress} tab when work begins. + \item The status of the task should be updated to \textbf{In Progress} as soon as work starts. + \item Once the task is completed and reviewed, it should be moved to the \textbf{Done} tab, and its status should be updated to \textbf{Done}. +\end{itemize} + +\noindent +Each task or user story will be assigned user points, which indicate the relative size or complexity of the task compared to these examples. +TODO: add examples + \subsection{Burn down chart} +The Burn Down Chart will be generated using Excel from the Scrum board data every week. +Each user story or tasks marked as done will burn the chart downwards. +This Burn down chart is shared in the weekly updates with the team and the project supervisor. \newpage % Documentation Standard is described here \section{Documentation Standard} \newpage +\section{Documents} +\newpage + \section{Work Agreements} \subsection{Project roles} @@ -48,8 +82,8 @@ This keep the documentation and code seperate, resulting in ordened and manageab Each project member will keep track of their own working hours and add them to the 'file'. -\subsection{Absents} -If a project member is going to be absent, they are required to notify the +\subsection{Absents or delay} +If a project member is going to be absent or delayed, they are required to notify the team through either WhatsApp or Outlook. Additionally, the teacher should be informed of the absence as well. @@ -87,7 +121,20 @@ Jaro Rutjes will compile and send a team update to the project supervisor, Bob van der Putten, also by Friday. This update will include technical information on what has been accomplished, plans for upcoming work, and an overview of the team's overall progress. + +\subsection{Weekly meetings} +The project team will hold at least two meetings each week, with each meeting +lasting a maximum of 30 minutes. Following these meetings, an additional one +hour will be scheduled for discussions on the topics covered. + +Meetings will be planned and discussed one week in advance, with invitations +sent via Outlook. Additional meetings may be scheduled if necessary to address +issues or project needs. + + \newpage + + \end{document} -- cgit v1.2.3 From 0fda79a5d90a66a32b0c21d6951f67d2cf140107 Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 5 Sep 2024 08:55:29 +0200 Subject: Filled in documentation --- plan.tex | 128 ++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 74 insertions(+), 54 deletions(-) diff --git a/plan.tex b/plan.tex index eaf32be..40c0c9a 100644 --- a/plan.tex +++ b/plan.tex @@ -5,70 +5,39 @@ \begin{document} -% Information regarding the git workflow of this project. Diagram explaining the workflow -\section{Git Workflow} - -GitHub is used for version management of both code and documentation, each in its own respective repository. -This keep the documentation and code seperate, resulting in ordened and manageable repositories. - -\begin{itemize} - \item Code Repository: \href{https://github.com/lonkaars/crepe}{crepe} - \item Documentation Repository: \href{https://github.com/lonkaars/crepe-docs}{crepe-docs} -\end{itemize} - -\subsection{Git new branch} -% TODO: add here details from contributing.md? -\subsection{Git merge to master} -% TODO: add here diagram on what actions are taken before merge. +\tablestables \newpage -% Information about how and when Scrum will be used in this project (using Miro). -\section{Scrum (Miro)} - -The team will start using scrum after the inital fase of sructering the project is over. -This fase is over when proof of concepts are being made. - -\subsection{Scrum Board} -The \href{https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}{Scrum board} will consist of the following tabs: - -\begin{itemize} - \item \textbf{Backlog}: This tab contains a list of all tasks and user stories that are planned for future sprints. - \item \textbf{Next Sprint}: This tab includes tasks and user stories that have been selected for the upcoming sprint. - \item \textbf{Current Sprint}: This tab displays the tasks and user stories that are actively being worked on in the current sprint. - \item \textbf{In Progress}: Tasks that are actively being worked on are moved to this tab. - \item \textbf{Review}: Completed tasks that are awaiting review or testing will be placed in this tab. - \item \textbf{Done}: Once tasks have been reviewed and are considered complete, they are moved to the Done tab. - \item \textbf{Blocked}: This tab is used for tasks that cannot proceed due to obstacles or dependencies. -\end{itemize} - -\noindent -To manage tasks effectively: +% Documentation Standard is described here +\section{Documentation} +This section describes the required documentation for the project, including the types of documents to be created and the standards they must adhere to. +\subsection{Documents} +This project consists of five main documents: \begin{itemize} - \item A task from the \textbf{Current Sprint} tab should be selected and moved to the \textbf{In Progress} tab when work begins. - \item The status of the task should be updated to \textbf{In Progress} as soon as work starts. - \item Once the task is completed and reviewed, it should be moved to the \textbf{Done} tab, and its status should be updated to \textbf{Done}. + \item \textbf{Project Plan:} Contains all elements related to the + organization of the project, including timelines, milestones, roles, + responsibilities. + \item \textbf{Requirements:} Details the requirements and + user stories, including both functional and non-functional requirements. + \item \textbf{Research:} Consists of all research related to this project. + \item \textbf{Design:} Describes the design choices, including + architecture, user interface, and system components. + \item \textbf{Qualification:} Includes test cases, test plans, and quality measures to + ensure the project meets its requirements and standards. \end{itemize} -\noindent -Each task or user story will be assigned user points, which indicate the relative size or complexity of the task compared to these examples. -TODO: add examples +\subsection{Documentation Standard} -\subsection{Burn down chart} -The Burn Down Chart will be generated using Excel from the Scrum board data every week. -Each user story or tasks marked as done will burn the chart downwards. -This Burn down chart is shared in the weekly updates with the team and the project supervisor. -\newpage - -% Documentation Standard is described here -\section{Documentation Standard} -\newpage - -\section{Documents} \newpage \section{Work Agreements} -\subsection{Project roles} +Work agreements are the expectations and commitments made by the team members. +This section includes details on roles and responsibilities, documentation of +work hours, protocols for handling absences or delays, guidelines for +addressing inconsistent participation, and procedures for weekly updates and +meetings. All team members reviewed and agreed to these terms. +\subsection{Project roles} \begin{itemize} \item \textbf{Loek Le Blansch}: Integrator \item \textbf{Wouter Boerenkamps}: Project Member @@ -131,10 +100,61 @@ Meetings will be planned and discussed one week in advance, with invitations sent via Outlook. Additional meetings may be scheduled if necessary to address issues or project needs. +\newpage + +% Information about how and when Scrum will be used in this project (using Miro). +\section{Scrum (Miro)} + +The team will start using scrum after the inital fase of sructering the project is over. +This fase is over when proof of concepts are being made. + +\subsection{Scrum Board} +The \href{https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}{Scrum board} will consist of the following tabs: + +\begin{itemize} + \item \textbf{Backlog}: This tab contains a list of all tasks and user stories that are planned for future sprints. + \item \textbf{Next Sprint}: This tab includes tasks and user stories that have been selected for the upcoming sprint. + \item \textbf{Current Sprint}: This tab displays the tasks and user stories that are actively being worked on in the current sprint. + \item \textbf{In Progress}: Tasks that are actively being worked on are moved to this tab. + \item \textbf{Review}: Completed tasks that are awaiting review or testing will be placed in this tab. + \item \textbf{Done}: Once tasks have been reviewed and are considered complete, they are moved to the Done tab. + \item \textbf{Blocked}: This tab is used for tasks that cannot proceed due to obstacles or dependencies. +\end{itemize} + +\noindent +To manage tasks effectively: +\begin{itemize} + \item A task from the \textbf{Current Sprint} tab should be selected and moved to the \textbf{In Progress} tab when work begins. + \item The status of the task should be updated to \textbf{In Progress} as soon as work starts. + \item Once the task is completed and reviewed, it should be moved to the \textbf{Done} tab, and its status should be updated to \textbf{Done}. +\end{itemize} + +\noindent +Each task or user story will be assigned user points, which indicate the relative size or complexity of the task compared to these examples. +TODO: add examples +\subsection{Burn down chart} +The Burn Down Chart will be generated using Excel from the Scrum board data every week. +Each user story or tasks marked as done will burn the chart downwards. +This Burn down chart is shared in the weekly updates with the team and the project supervisor. \newpage +% Information regarding the git workflow of this project. Diagram explaining the workflow +\section{Git Workflow} + +GitHub is used for version management of both code and documentation, each in its own respective repository. +This keep the documentation and code seperate, resulting in ordened and manageable repositories. +\begin{itemize} + \item Code Repository: \href{https://github.com/lonkaars/crepe}{crepe} + \item Documentation Repository: \href{https://github.com/lonkaars/crepe-docs}{crepe-docs} +\end{itemize} + +\subsection{Git new branch} +% TODO: add here details from contributing.md? +\subsection{Git merge to master} +% TODO: add here diagram on what actions are taken before merge. +\newpage \end{document} -- cgit v1.2.3 From 441e03b613064552d8ab11a6a7eacf6d66d5b999 Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 5 Sep 2024 15:26:42 +0200 Subject: Recieved feedback --- plan.tex | 121 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 63 insertions(+), 58 deletions(-) diff --git a/plan.tex b/plan.tex index 40c0c9a..7eea565 100644 --- a/plan.tex +++ b/plan.tex @@ -10,21 +10,27 @@ % Documentation Standard is described here \section{Documentation} -This section describes the required documentation for the project, including the types of documents to be created and the standards they must adhere to. + +This section describes the required documentation for the project, including the + types of documents to be created and the standards they must adhere to. + \subsection{Documents} + This project consists of five main documents: -\begin{itemize} - \item \textbf{Project Plan:} Contains all elements related to the - organization of the project, including timelines, milestones, roles, - responsibilities. - \item \textbf{Requirements:} Details the requirements and - user stories, including both functional and non-functional requirements. - \item \textbf{Research:} Consists of all research related to this project. - \item \textbf{Design:} Describes the design choices, including - architecture, user interface, and system components. - \item \textbf{Qualification:} Includes test cases, test plans, and quality measures to - ensure the project meets its requirements and standards. -\end{itemize} + +\begin{description} + \item[Project Plan] Contains all elements related to the organization of the + project, including timelines, milestones, roles, responsibilities. + \item \textbf{Requirements:} Details the requirements and + user stories, including both functional and non-functional requirements. + \item \textbf{Research:} Consists of all research related to this project. + \item \textbf{Design:} Describes the design choices, including architecture, + user interface, and system components. + \item \textbf{Qualification:} Includes test cases, test plans, and quality + measures to ensure the project meets its requirements and standards. + \item \textbf{Working hours:} + \item \textbf{Api referenece:} +\end{description} \subsection{Documentation Standard} @@ -33,47 +39,47 @@ This project consists of five main documents: \section{Work Agreements} Work agreements are the expectations and commitments made by the team members. This section includes details on roles and responsibilities, documentation of -work hours, protocols for handling absences or delays, guidelines for -addressing inconsistent participation, and procedures for weekly updates and -meetings. All team members reviewed and agreed to these terms. +work hours, protocols for handling absences or delays, guidelines for addressing + inconsistent participation, and procedures for weekly updates and meetings. All + team members reviewed and agreed to these terms. \subsection{Project roles} \begin{itemize} - \item \textbf{Loek Le Blansch}: Integrator - \item \textbf{Wouter Boerenkamps}: Project Member - \item \textbf{Jaro Rutjes}: Team Leader / Scrum Master - \item \textbf{Max Smits}: Project Member - \item \textbf{Niels Stunnebrink}: Project Member + \item \textbf{Loek Le Blansch}: Integrator + \item \textbf{Wouter Boerenkamps}: Project Member + \item \textbf{Jaro Rutjes}: Team Leader / Scrum Master + \item \textbf{Max Smits}: Project Member + \item \textbf{Niels Stunnebrink}: Project Member \end{itemize} \subsection{Work hours} Each project member will keep track of their own working hours and -add them to the 'file'. +add them to the `file'. \subsection{Absents or delay} -If a project member is going to be absent or delayed, they are required to notify the -team through either WhatsApp or Outlook. Additionally, the teacher should -be informed of the absence as well. +If a project member is going to be absent or delayed, they are required to +notify the team through either WhatsApp or Outlook. Additionally, the teacher +should be informed of the absence as well. \subsection{Inconsistent Participation} Inconsistent participation will be addressed in a structured manner: \begin{enumerate} - \item \textbf{Initial Discussion}: The team leader will first discuss the - issue of inconsistent participation with the individual team member. - \item \textbf{Team Discussion}: If no improvement is observed, the issue - will be brought up with the entire team to seek a collective solution. - \item \textbf{Project Supervisor Involvement}: Should the problem persist - despite these efforts, it will be escalated to the project supervisor for - further action. + \item \textbf{Initial Discussion}: The team leader will first discuss the + issue of inconsistent participation with the individual team member. + \item \textbf{Team Discussion}: If no improvement is observed, the issue + will be brought up with the entire team to seek a collective solution. + \item \textbf{Project Supervisor Involvement}: Should the problem persist + despite these efforts, it will be escalated to the project supervisor for + further action. \end{enumerate} Valid reasons for absence or inconsistency will be considered, and no -repercussions will be necessary in such cases. However, if the inconsistency -is due to other factors, potential repercussions may include additional -assignments or actions as determined by the project supervisor. - +repercussions will be necessary in such cases. However, if the inconsistency is +due to other factors, potential repercussions may include additional assignments + or actions as determined by the project supervisor. + A team member is considered to have inconsistent participation if their hours are significantly behind the team’s average or if tasks are not completed without valid reasons. It is essential that any concerns regarding a team @@ -82,14 +88,14 @@ member's performance be resolved through unanimous agreement within the team. \subsection{Weekly update} Each team member is required to send their technical weekly update to Jaro -Rutjes before 12:00 on Friday. Personal updates may also be included and will be kept -confidential between the team member, the Team Leader, and/or the teacher, -if requested. +Rutjes before 12:00 on Friday. Personal updates may also be included and will be + confidential between the team member, the Team Leader, and/or the teacher, if + requested. -Jaro Rutjes will compile and send a team update to the project supervisor, -Bob van der Putten, also by Friday. This update will include technical -information on what has been accomplished, plans for upcoming work, and an -overview of the team's overall progress. +Jaro Rutjes will compile and send a team update to the project supervisor,Bob +van der Putten, also by Friday. This update will include technical information +on what has been accomplished, plans for upcoming work, and an overview of the +team's overall progress. \subsection{Weekly meetings} The project team will hold at least two meetings each week, with each meeting @@ -105,28 +111,27 @@ issues or project needs. % Information about how and when Scrum will be used in this project (using Miro). \section{Scrum (Miro)} -The team will start using scrum after the inital fase of sructering the project is over. -This fase is over when proof of concepts are being made. +The team will start using scrum after the inital fase of sructering the project is over.This fase is over when proof of concepts are being made. \subsection{Scrum Board} The \href{https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}{Scrum board} will consist of the following tabs: - + \begin{itemize} - \item \textbf{Backlog}: This tab contains a list of all tasks and user stories that are planned for future sprints. - \item \textbf{Next Sprint}: This tab includes tasks and user stories that have been selected for the upcoming sprint. - \item \textbf{Current Sprint}: This tab displays the tasks and user stories that are actively being worked on in the current sprint. - \item \textbf{In Progress}: Tasks that are actively being worked on are moved to this tab. - \item \textbf{Review}: Completed tasks that are awaiting review or testing will be placed in this tab. - \item \textbf{Done}: Once tasks have been reviewed and are considered complete, they are moved to the Done tab. - \item \textbf{Blocked}: This tab is used for tasks that cannot proceed due to obstacles or dependencies. + \item \textbf{Backlog}: This tab contains a list of all tasks and user stories that are planned for future sprints. + \item \textbf{Next Sprint}: This tab includes tasks and user stories that have been selected for the upcoming sprint. + \item \textbf{Current Sprint}: This tab displays the tasks and user stories that are actively being worked on in the current sprint. + \item \textbf{In Progress}: Tasks that are actively being worked on are moved to this tab. + \item \textbf{Review}: Completed tasks that are awaiting review or testing will be placed in this tab. + \item \textbf{Done}: Once tasks have been reviewed and are considered complete, they are moved to the Done tab. + \item \textbf{Blocked}: This tab is used for tasks that cannot proceed due to obstacles or dependencies. \end{itemize} \noindent To manage tasks effectively: \begin{itemize} - \item A task from the \textbf{Current Sprint} tab should be selected and moved to the \textbf{In Progress} tab when work begins. - \item The status of the task should be updated to \textbf{In Progress} as soon as work starts. - \item Once the task is completed and reviewed, it should be moved to the \textbf{Done} tab, and its status should be updated to \textbf{Done}. + \item A task from the \textbf{Current Sprint} tab should be selected and moved to the \textbf{In Progress} tab when work begins. + \item The status of the task should be updated to \textbf{In Progress} as soon as work starts. + \item Once the task is completed and reviewed, it should be moved to the \textbf{Done} tab, and its status should be updated to \textbf{Done}. \end{itemize} \noindent @@ -146,8 +151,8 @@ GitHub is used for version management of both code and documentation, each in it This keep the documentation and code seperate, resulting in ordened and manageable repositories. \begin{itemize} - \item Code Repository: \href{https://github.com/lonkaars/crepe}{crepe} - \item Documentation Repository: \href{https://github.com/lonkaars/crepe-docs}{crepe-docs} + \item Code Repository: \href{https://github.com/lonkaars/crepe}{crepe} + \item Documentation Repository: \href{https://github.com/lonkaars/crepe-docs}{crepe-docs} \end{itemize} \subsection{Git new branch} -- cgit v1.2.3 From 8012948973ab4074c74193aff727870706f587fe Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 5 Sep 2024 16:10:18 +0200 Subject: added some feadback --- plan.tex | 56 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/plan.tex b/plan.tex index 7eea565..69a28ae 100644 --- a/plan.tex +++ b/plan.tex @@ -16,27 +16,27 @@ This section describes the required documentation for the project, including the \subsection{Documents} -This project consists of five main documents: +This project consists of five main documents:\noparbreak \begin{description} \item[Project Plan] Contains all elements related to the organization of the project, including timelines, milestones, roles, responsibilities. - \item \textbf{Requirements:} Details the requirements and + \item[Requirements] Details the requirements and user stories, including both functional and non-functional requirements. - \item \textbf{Research:} Consists of all research related to this project. - \item \textbf{Design:} Describes the design choices, including architecture, + \item[Research] Consists of all research related to this project. + \item[Design] Describes the design choices, including architecture, user interface, and system components. - \item \textbf{Qualification:} Includes test cases, test plans, and quality + \item[Qualification] Includes test cases, test plans, and quality measures to ensure the project meets its requirements and standards. - \item \textbf{Working hours:} - \item \textbf{Api referenece:} + \item[Working hours] + \item[Api referenece] \end{description} -\subsection{Documentation Standard} +\subsection{Documentation standard} \newpage -\section{Work Agreements} +\section{Work agreements} Work agreements are the expectations and commitments made by the team members. This section includes details on roles and responsibilities, documentation of work hours, protocols for handling absences or delays, guidelines for addressing @@ -57,23 +57,23 @@ work hours, protocols for handling absences or delays, guidelines for addressing Each project member will keep track of their own working hours and add them to the `file'. -\subsection{Absents or delay} +\subsection{Absence or delay} If a project member is going to be absent or delayed, they are required to notify the team through either WhatsApp or Outlook. Additionally, the teacher should be informed of the absence as well. -\subsection{Inconsistent Participation} +\subsection{Inconsistent participation} Inconsistent participation will be addressed in a structured manner: -\begin{enumerate} - \item \textbf{Initial Discussion}: The team leader will first discuss the +\begin{description} + \item[Initial Discussion] The team leader will first discuss the issue of inconsistent participation with the individual team member. - \item \textbf{Team Discussion}: If no improvement is observed, the issue + \item [Team Discussion]: If no improvement is observed, the issue will be brought up with the entire team to seek a collective solution. - \item \textbf{Project Supervisor Involvement}: Should the problem persist + \item [Project Supervisor Involvement]: Should the problem persist despite these efforts, it will be escalated to the project supervisor for further action. -\end{enumerate} +\end{description} Valid reasons for absence or inconsistency will be considered, and no repercussions will be necessary in such cases. However, if the inconsistency is @@ -116,22 +116,22 @@ The team will start using scrum after the inital fase of sructering the project \subsection{Scrum Board} The \href{https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}{Scrum board} will consist of the following tabs: -\begin{itemize} - \item \textbf{Backlog}: This tab contains a list of all tasks and user stories that are planned for future sprints. - \item \textbf{Next Sprint}: This tab includes tasks and user stories that have been selected for the upcoming sprint. - \item \textbf{Current Sprint}: This tab displays the tasks and user stories that are actively being worked on in the current sprint. - \item \textbf{In Progress}: Tasks that are actively being worked on are moved to this tab. - \item \textbf{Review}: Completed tasks that are awaiting review or testing will be placed in this tab. - \item \textbf{Done}: Once tasks have been reviewed and are considered complete, they are moved to the Done tab. - \item \textbf{Blocked}: This tab is used for tasks that cannot proceed due to obstacles or dependencies. -\end{itemize} +\begin{description} + \item[Backlog]: This tab contains a list of all tasks and user stories that are planned for future sprints. + \item[Next Sprint]: This tab includes tasks and user stories that have been selected for the upcoming sprint. + \item[Current Sprint]: This tab displays the tasks and user stories that are actively being worked on in the current sprint. + \item[In Progress]: Tasks that are actively being worked on are moved to this tab. + \item[Review]: Completed tasks that are awaiting review or testing will be placed in this tab. + \item[Done]: Once tasks have been reviewed and are considered complete, they are moved to the Done tab. + \item [Blocked]: This tab is used for tasks that cannot proceed due to obstacles or dependencies. +\end{description} \noindent To manage tasks effectively: \begin{itemize} - \item A task from the \textbf{Current Sprint} tab should be selected and moved to the \textbf{In Progress} tab when work begins. - \item The status of the task should be updated to \textbf{In Progress} as soon as work starts. - \item Once the task is completed and reviewed, it should be moved to the \textbf{Done} tab, and its status should be updated to \textbf{Done}. + \item A task from the \emph{Current Sprint} tab should be selected and moved to the \emph{In Progress} tab when work begins. + \item The status of the task should be updated to \emph{In Progress} as soon as work starts. + \item Once the task is completed and reviewed, it should be moved to the \emph{Done} tab, and its status should be updated to \emph{Done}. \end{itemize} \noindent -- cgit v1.2.3 From 0df42b1e35603dc127be488e9d79b29d0631df4d Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:33:41 +0200 Subject: added project lessons --- time.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/time.txt b/time.txt index c24e2eb..ad24354 100644 --- a/time.txt +++ b/time.txt @@ -8,6 +8,8 @@ loek: 2024-09-04 45m repository scaffolding / visual studio code latex configura loek: 2024-09-04 20m repository scaffolding / visual studio code cmake configuration loek: 2024-09-05 15m repository scaffolding / additional latex contributing guidelines +max: 2024-09-02 1h30m project kickoff +max: 2024-09-03 1h30m project lesson max: 2024-09-04 1h30m installing and configuring latex max: 2024-09-04 2h reading project info max: 2024-09-05 20m discussing GitHub with Jaro -- cgit v1.2.3 From c6e647b81ce1077b885d9a18d53a651cffcb9432 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 6 Sep 2024 16:42:05 +0200 Subject: added tasks --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index b9d44e7..2ce10e4 100644 --- a/time.txt +++ b/time.txt @@ -17,6 +17,7 @@ max: 2024-09-04 1h30m installing and configuring latex max: 2024-09-04 2h reading project info max: 2024-09-05 20m discussing GitHub with Jaro max: 2024-09-05 1h30m first group meeting +max: 2024-09-06 45m writing email and fixing clang-format/-tidy wouter: 2024-09-03 1h reading project info wouter: 2024-09-04 1h setting up working environment -- cgit v1.2.3 From cbe83a7e0de75bf452bb514c025598382866d4ca Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Mon, 9 Sep 2024 17:54:54 +0200 Subject: added new tasks --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index e686608..1bf9987 100644 --- a/time.txt +++ b/time.txt @@ -19,6 +19,7 @@ max: 2024-09-04 2h reading project info max: 2024-09-05 20m discussing GitHub with Jaro max: 2024-09-05 1h30m first group meeting max: 2024-09-06 45m writing email and fixing clang-format/-tidy +max: 2024-09-09 3h10m investigating Unity (in relation to the class diagram) wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From c95bb1495b7dc781ffd4528dbcf6ec292bd7a645 Mon Sep 17 00:00:00 2001 From: Jaro Date: Mon, 9 Sep 2024 19:00:08 +0200 Subject: Added more topics and filled in problem definition --- plan.tex | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/plan.tex b/plan.tex index 69a28ae..19f7aac 100644 --- a/plan.tex +++ b/plan.tex @@ -8,6 +8,47 @@ \tablestables \newpage +\section{Problem Definition} +The assignment is part of a fourth-year minor. The assignments are not set in stone to give the team an opportunity to discuss with the project supervisor on specifics for this project + +\subsection{Problem Analysis} +CodedFun Games is a small, single-person game company looking to scale up. The owner, who is also a game programmer, graphical artist, and the client, has received government funding, which he wants to invest in a custom-built game engine. The owner has no interest in developing or maintaining a game engine himself, so he has hired a part-time engine programmer. This programmer does not have time to create an entire engine but is willing to maintain or expand an existing engine one day per week. + +The client seeks a custom game engine that is easy to maintain, extend, and user-friendly. Additionally, the engine should be well-documented, which is considered an essential aspect of being user-friendly. + +So far, the client has made all his games in Unity and is very fond of the structure. Therefore, he wants the new engine to adhere to a similar structure. A simple requirements document is defined to specify how strictly this structure should be followed. + +Finally, because the client does not want to dive deeply into the engine himself, he wants a secondary application (preferably a game) that can be used to test the engine's features. This is referred to as the `Validation App.' + +\subsection{Goal} +The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. In addition, a validation application should be created to test the engine's features. + +\subsection{Result} +The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a validation application should be provided to test and showcase the engine's capabilities. + +\newpage + +\section{Planning} +% todo add table of deliverables +week 4: sprint oplevering, project plan +week 7: sprint oplevering +week 10: sprint oplevering, POC and design +week 17: eind oplevering + +\newpage + +\section{Risks} +\subsection{Techincal Risks} +% todo add technical risks +\subsection{Project Management Risks} +Scope Expansion: There is a risk of creating a scope that is bigger than the requirements. +Lack of Team Collaboration: Insufficient collaboration among team members +may hinder progress. +\subsection{Measures} +Scope Expansion: By writing detailed requirements and having weekly team meeting to check if the progress is within the scope should be sufficient to decrease the risk. +Lack of Team Collaboration: Weekly team meetings will result is collaboration among team members and discussing what each other tasks is will decease this risk. +\newpage + % Documentation Standard is described here \section{Documentation} @@ -32,18 +73,18 @@ This project consists of five main documents:\noparbreak \item[Api referenece] \end{description} -\subsection{Documentation standard} - +\subsection{Documentation Standard} +% todo add link to contributing in this repo \newpage -\section{Work agreements} +\section{Work Agreements} Work agreements are the expectations and commitments made by the team members. This section includes details on roles and responsibilities, documentation of work hours, protocols for handling absences or delays, guidelines for addressing inconsistent participation, and procedures for weekly updates and meetings. All team members reviewed and agreed to these terms. -\subsection{Project roles} +\subsection{Project Roles} \begin{itemize} \item \textbf{Loek Le Blansch}: Integrator \item \textbf{Wouter Boerenkamps}: Project Member @@ -53,11 +94,11 @@ work hours, protocols for handling absences or delays, guidelines for addressing \end{itemize} -\subsection{Work hours} +\subsection{Work Hours} Each project member will keep track of their own working hours and add them to the `file'. -\subsection{Absence or delay} +\subsection{Absence Or Delay} If a project member is going to be absent or delayed, they are required to notify the team through either WhatsApp or Outlook. Additionally, the teacher should be informed of the absence as well. @@ -86,7 +127,7 @@ without valid reasons. It is essential that any concerns regarding a team member's performance be resolved through unanimous agreement within the team. -\subsection{Weekly update} +\subsection{Weekly Update} Each team member is required to send their technical weekly update to Jaro Rutjes before 12:00 on Friday. Personal updates may also be included and will be confidential between the team member, the Team Leader, and/or the teacher, if @@ -97,7 +138,7 @@ van der Putten, also by Friday. This update will include technical information on what has been accomplished, plans for upcoming work, and an overview of the team's overall progress. -\subsection{Weekly meetings} +\subsection{Weekly Meetings} The project team will hold at least two meetings each week, with each meeting lasting a maximum of 30 minutes. Following these meetings, an additional one hour will be scheduled for discussions on the topics covered. @@ -111,7 +152,7 @@ issues or project needs. % Information about how and when Scrum will be used in this project (using Miro). \section{Scrum (Miro)} -The team will start using scrum after the inital fase of sructering the project is over.This fase is over when proof of concepts are being made. +The team will start using scrum after the initial fase of structering the project is over. This fase is over when proof of concepts are being made. \subsection{Scrum Board} The \href{https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}{Scrum board} will consist of the following tabs: @@ -138,7 +179,7 @@ To manage tasks effectively: Each task or user story will be assigned user points, which indicate the relative size or complexity of the task compared to these examples. TODO: add examples -\subsection{Burn down chart} +\subsection{Burn Down Chart} The Burn Down Chart will be generated using Excel from the Scrum board data every week. Each user story or tasks marked as done will burn the chart downwards. This Burn down chart is shared in the weekly updates with the team and the project supervisor. @@ -155,9 +196,9 @@ This keep the documentation and code seperate, resulting in ordened and manageab \item Documentation Repository: \href{https://github.com/lonkaars/crepe-docs}{crepe-docs} \end{itemize} -\subsection{Git new branch} +\subsection{Git New Branch} % TODO: add here details from contributing.md? -\subsection{Git merge to master} +\subsection{Git Merge To Master} % TODO: add here diagram on what actions are taken before merge. \newpage -- cgit v1.2.3 From 963430c931a85c3985a99c5bebd3fc6e9ae3b43b Mon Sep 17 00:00:00 2001 From: Jaro Date: Tue, 10 Sep 2024 08:53:39 +0200 Subject: added sources --- plan.tex | 27 ++++++++++++++------------- sources.bib | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 13 deletions(-) diff --git a/plan.tex b/plan.tex index 19f7aac..55a6d12 100644 --- a/plan.tex +++ b/plan.tex @@ -26,7 +26,7 @@ The goal is to develop a custom game engine that meets the client's requirements \subsection{Result} The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a validation application should be provided to test and showcase the engine's capabilities. -\newpage + \section{Planning} % todo add table of deliverables @@ -35,7 +35,7 @@ week 7: sprint oplevering week 10: sprint oplevering, POC and design week 17: eind oplevering -\newpage + \section{Risks} \subsection{Techincal Risks} @@ -47,7 +47,7 @@ may hinder progress. \subsection{Measures} Scope Expansion: By writing detailed requirements and having weekly team meeting to check if the progress is within the scope should be sufficient to decrease the risk. Lack of Team Collaboration: Weekly team meetings will result is collaboration among team members and discussing what each other tasks is will decease this risk. -\newpage + % Documentation Standard is described here \section{Documentation} @@ -69,13 +69,13 @@ This project consists of five main documents:\noparbreak user interface, and system components. \item[Qualification] Includes test cases, test plans, and quality measures to ensure the project meets its requirements and standards. - \item[Working hours] - \item[Api referenece] + \item[Working hours] A tabel which includes all working hours of each team member. + \item[API Reference] Details the available endpoints, request and response formats, authentication methods, error codes, and examples for interacting with the project's API. \end{description} \subsection{Documentation Standard} -% todo add link to contributing in this repo -\newpage +The documentation standard can be found in the contributing.md \autocite{crepe:docs-standard}. + \section{Work Agreements} Work agreements are the expectations and commitments made by the team members. @@ -147,7 +147,7 @@ Meetings will be planned and discussed one week in advance, with invitations sent via Outlook. Additional meetings may be scheduled if necessary to address issues or project needs. -\newpage + % Information about how and when Scrum will be used in this project (using Miro). \section{Scrum (Miro)} @@ -155,7 +155,7 @@ issues or project needs. The team will start using scrum after the initial fase of structering the project is over. This fase is over when proof of concepts are being made. \subsection{Scrum Board} -The \href{https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}{Scrum board} will consist of the following tabs: +The Scrum board \autocite{miro:scrum-board} will consist of the following tabs: \begin{description} \item[Backlog]: This tab contains a list of all tasks and user stories that are planned for future sprints. @@ -183,7 +183,7 @@ TODO: add examples The Burn Down Chart will be generated using Excel from the Scrum board data every week. Each user story or tasks marked as done will burn the chart downwards. This Burn down chart is shared in the weekly updates with the team and the project supervisor. -\newpage + % Information regarding the git workflow of this project. Diagram explaining the workflow \section{Git Workflow} @@ -192,15 +192,16 @@ GitHub is used for version management of both code and documentation, each in it This keep the documentation and code seperate, resulting in ordened and manageable repositories. \begin{itemize} - \item Code Repository: \href{https://github.com/lonkaars/crepe}{crepe} - \item Documentation Repository: \href{https://github.com/lonkaars/crepe-docs}{crepe-docs} + \item Code Repository: crepe \autocite{crepe:code-repo} + \item Documentation Repository: crepe-docs \autocite{crepe:docs-repo} \end{itemize} \subsection{Git New Branch} % TODO: add here details from contributing.md? \subsection{Git Merge To Master} % TODO: add here diagram on what actions are taken before merge. -\newpage +\subsection{Code standard} +The code standard can be found in the contributing.md \autocite{crepe:code-standard}. \end{document} diff --git a/sources.bib b/sources.bib index b088784..5848f86 100644 --- a/sources.bib +++ b/sources.bib @@ -12,3 +12,39 @@ institution = {RFC Editor}, } +@misc{miro:scrum-board, + author = {Jaro Rutjes}, + title = {Scrum Board on Miro}, + url = {https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}, + date = {2024-09-10}, +} + +@misc{crepe:code-repo, + author = {lonkaars}, + title = {Crepe Code Repository}, + url = {https://github.com/lonkaars/crepe}, + date = {2024-09-10}, +} + +@misc{crepe:docs-repo, + author = {lonkaars}, + title = {Crepe Documentation Repository}, + url = {https://github.com/lonkaars}, + date = {2024-09-10}, +} + +@misc{crepe:docs-standard, + author = {lonkaars}, + title = {Crepe Documentation Standard}, + url = {https://github.com/lonkaars/crepe-docs/blob/master/contributing.md}, + date = {2024-09-10}, +} + +@misc{crepe:code-standard, + author = {lonkaars}, + title = {Crepe Code Standard}, + url = {https://github.com/lonkaars/crepe/blob/master/contributing.md}, + date = {2024-09-10}, +} + + -- cgit v1.2.3 From 603db3fe74db94ded146b22e9303dd8c064df494 Mon Sep 17 00:00:00 2001 From: Jaro Date: Tue, 10 Sep 2024 17:13:15 +0200 Subject: Added some risks --- plan.tex | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plan.tex b/plan.tex index 55a6d12..43997f5 100644 --- a/plan.tex +++ b/plan.tex @@ -9,7 +9,7 @@ \newpage \section{Problem Definition} -The assignment is part of a fourth-year minor. The assignments are not set in stone to give the team an opportunity to discuss with the project supervisor on specifics for this project +The assignment is part of a fourth-year minor. The assignments will be discussed with the project supervisor on specifics for this project. This will give the team the ability to direct the project. \subsection{Problem Analysis} CodedFun Games is a small, single-person game company looking to scale up. The owner, who is also a game programmer, graphical artist, and the client, has received government funding, which he wants to invest in a custom-built game engine. The owner has no interest in developing or maintaining a game engine himself, so he has hired a part-time engine programmer. This programmer does not have time to create an entire engine but is willing to maintain or expand an existing engine one day per week. @@ -39,6 +39,9 @@ week 17: eind oplevering \section{Risks} \subsection{Techincal Risks} +Multiplatform: The team works in linux and windows which poses a risk for the development if there is a platform dependencies. +Integration: Users can make a wrong integration causing for delay or risk of losing code. + % todo add technical risks \subsection{Project Management Risks} Scope Expansion: There is a risk of creating a scope that is bigger than the requirements. @@ -47,7 +50,8 @@ may hinder progress. \subsection{Measures} Scope Expansion: By writing detailed requirements and having weekly team meeting to check if the progress is within the scope should be sufficient to decrease the risk. Lack of Team Collaboration: Weekly team meetings will result is collaboration among team members and discussing what each other tasks is will decease this risk. - +Multiplatform: The team can switch any time to a single platform so this risk is metigated. +Integration: By follwing standard and having an integrator which checks every pull request this risk is minimilised. % Documentation Standard is described here \section{Documentation} -- cgit v1.2.3 From 5c20c659ec371957df08a6347fadfac9bf78a5a3 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 11 Sep 2024 15:10:03 +0200 Subject: add notes + callgrind profiling poc --- makefile | 1 + research.tex | 35 ++++++++++++++++++++++++++++++----- time.txt | 1 + 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/makefile b/makefile index 02c583e..15eae95 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,5 @@ all: plan.pdf +all: research.pdf LATEXMKFLAGS += -cd LATEXMKFLAGS += -interaction=nonstopmode diff --git a/research.tex b/research.tex index ca2afed..16dcef4 100644 --- a/research.tex +++ b/research.tex @@ -176,15 +176,36 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Memory/debugging} +% TODO: this entire section +\section{Profiling and debugging} + +% Which profiling and debugging features are wanted? +% How to provide those profiling and debugging features? +% Can most of the profiling/debugging be handled by external tools? + +% Ideas: +% - flame graph +% - watchtable (combine w/ fps/speed control overlay?) +% - debug printing utility functions \subsection{Introduction} \subsection{Findings} +\subsubsection{Callgrind} + +\begin{comparison} + \pro{Source code does not need to be modified for profiling} + \con{Execution speed is severely impacted} +\end{comparison} + \subsection{Conclusion} -\section{Physics/scripting} +% TODO: this entire section +\section{Audio} + +% should audio research be scoped down to SDL2 (if that's what we're going with) or +% standalone libraries only (for modularity?). \subsection{Introduction} @@ -192,7 +213,13 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Conclusion} +\section{Physics/scripting} + +\subsection{Introduction} + +\subsection{Findings} + +\subsection{Conclusion} \section{Gameobjects/components} @@ -202,6 +229,4 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Conclusion} - \end{document} diff --git a/time.txt b/time.txt index 671ea4f..53eeac0 100644 --- a/time.txt +++ b/time.txt @@ -18,6 +18,7 @@ loek: 2024-09-10 1h55m project meeting loek: 2024-09-10 25m briefing :: watch bob videos loek: 2024-09-10 5m docs :: update readme loek: 2024-09-10 12m docs :: add comparison package and more example latex code +loek: 2024-09-11 1h40m research :: profiling and debugging max: 2024-09-02 1h project meeting :: project kickoff max: 2024-09-02 45m project meeting -- cgit v1.2.3 From 57b1d29670d4b8dbe1b3b00cad6f74a172a4d30b Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 11 Sep 2024 15:55:48 +0200 Subject: First review of Jaro's Plan document (the document is not ready to hand in yet, there is still quite some work to do) --- plan.tex | 122 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 60 insertions(+), 62 deletions(-) diff --git a/plan.tex b/plan.tex index 43997f5..2274c87 100644 --- a/plan.tex +++ b/plan.tex @@ -1,79 +1,94 @@ \documentclass{projdoc} \input{meta.tex} +% @Jaro: Zie hieronder +% Version 0.0 seems not right +% I'm also missing a 'version table' +% Shall we use this version system?: +% Version numbers after the comma indicate an interim version and version numbers before the comma indicate versions ready for publication + \title{Project Plan} +\version{0.1} \begin{document} \tablestables \newpage + +\section {Background} +This project is part of the fourth-year minor `Systems Programming in C++'. The minor consists of several courses troughout 20 weeks, which create the basis for this project. The project is focussed on building a game engine using the programming language C++. This document describes our plan of attack for the project. + \section{Problem Definition} -The assignment is part of a fourth-year minor. The assignments will be discussed with the project supervisor on specifics for this project. This will give the team the ability to direct the project. +% The assignments will be discussed with the project supervisor on specifics for this project. This will give the team the ability to direct the project. +% @Jaro: Ik snap niet wat je met deze zinnen wil zeggen. Het lijkt een soort van background information, maar toch niet helemaal ofzo. Hoe dan ook heb ik het er nu even uit gehaald en een nieuw kopje background toegevoegd. \subsection{Problem Analysis} -CodedFun Games is a small, single-person game company looking to scale up. The owner, who is also a game programmer, graphical artist, and the client, has received government funding, which he wants to invest in a custom-built game engine. The owner has no interest in developing or maintaining a game engine himself, so he has hired a part-time engine programmer. This programmer does not have time to create an entire engine but is willing to maintain or expand an existing engine one day per week. +CodedFun Games is a small, single-person game company looking to scale up. The owner, who is also a game programmer, and graphical artist, has received government funding, which he wants to invest in a custom-built game engine. The owner has no interest in developing or maintaining a game engine himself, so he has hired a part-time engine programmer. This programmer does not have time to create an entire engine but is willing to maintain or expand an existing engine one day per week. -The client seeks a custom game engine that is easy to maintain, extend, and user-friendly. Additionally, the engine should be well-documented, which is considered an essential aspect of being user-friendly. +The client seeks a custom game engine that is easy to maintain, easy to extend, and user-friendly. Additionally, the engine should be well-documented, which is considered an essential aspect of being user-friendly. So far, the client has made all his games in Unity and is very fond of the structure. Therefore, he wants the new engine to adhere to a similar structure. A simple requirements document is defined to specify how strictly this structure should be followed. -Finally, because the client does not want to dive deeply into the engine himself, he wants a secondary application (preferably a game) that can be used to test the engine's features. This is referred to as the `Validation App.' +Finally, because the client does not want to dive deeply into the engine himself, he wants a secondary application (preferably a game) that can be used to test the engine's features. This is referred to as the `validation application.' \subsection{Goal} -The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. In addition, a validation application should be created to test the engine's features. +The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. In addition, a validation application should be created to show and test the engine's features. \subsection{Result} The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a validation application should be provided to test and showcase the engine's capabilities. - \section{Planning} -% todo add table of deliverables -week 4: sprint oplevering, project plan -week 7: sprint oplevering -week 10: sprint oplevering, POC and design -week 17: eind oplevering - +The customer specified multiple deliverables troughout the 20 weeks of this project. Despite the fact that 20 weeks have been reserved for this project, the intention is that the game will be delivered in week 17. Any delay/resit will take place between weeks 17 and 20. A rough planning can be found in \cref{tab:planning}. +\begin{table} + \begin{tabularx}{\linewidth}{lXr} + \toprule + Week & Deliverable & \\ + \midrule + 4 & Project Plan & \\ + 7 & Requirements document & \\ + 10 & POCs and Design document & \\ + 17 & Game engine, Validation application, Research document, and Qualification document & \\ + \bottomrule + \end{tabularx} + \caption{Planning} + \label{tab:planning} +\end{table} \section{Risks} \subsection{Techincal Risks} -Multiplatform: The team works in linux and windows which poses a risk for the development if there is a platform dependencies. +Multiplatform: The team works in both linux and windows, which poses a risk for the development if there is a platform dependency. Integration: Users can make a wrong integration causing for delay or risk of losing code. -% todo add technical risks \subsection{Project Management Risks} Scope Expansion: There is a risk of creating a scope that is bigger than the requirements. Lack of Team Collaboration: Insufficient collaboration among team members may hinder progress. + \subsection{Measures} -Scope Expansion: By writing detailed requirements and having weekly team meeting to check if the progress is within the scope should be sufficient to decrease the risk. -Lack of Team Collaboration: Weekly team meetings will result is collaboration among team members and discussing what each other tasks is will decease this risk. -Multiplatform: The team can switch any time to a single platform so this risk is metigated. -Integration: By follwing standard and having an integrator which checks every pull request this risk is minimilised. +Multiplatform: The team can switch any time to a single platform, so this risk is metigated. +Integration: By following standards and having an integrator, which checks every pull request, this risk is minimilised. +Scope Expansion: By writing detailed requirements and having weekly team meetings, to check if the progress is within the scope, should be sufficient to decrease the risk. +Lack of Team Collaboration: Weekly team meetings will result in collaboration among team members and discussing what each other tasks is, will decease this risk. + % Documentation Standard is described here \section{Documentation} - -This section describes the required documentation for the project, including the - types of documents to be created and the standards they must adhere to. +This section describes the required documentation for the project, including the types of documents to be created and the standards they must adhere to. \subsection{Documents} - -This project consists of five main documents:\noparbreak - +This project consists of seven main documents:\noparbreak \begin{description} - \item[Project Plan] Contains all elements related to the organization of the - project, including timelines, milestones, roles, responsibilities. - \item[Requirements] Details the requirements and - user stories, including both functional and non-functional requirements. + \item[Project Plan] Contains all elements related to the organization of the project, including timelines, milestones, roles, and responsibilities. + \item[Requirements] Details the requirements and user stories, including both functional and non-functional requirements. \item[Research] Consists of all research related to this project. \item[Design] Describes the design choices, including architecture, - user interface, and system components. + user interface, and system components. \item[Qualification] Includes test cases, test plans, and quality measures to ensure the project meets its requirements and standards. - \item[Working hours] A tabel which includes all working hours of each team member. + \item[Working hours] A table which includes all working hours of each team member. \item[API Reference] Details the available endpoints, request and response formats, authentication methods, error codes, and examples for interacting with the project's API. \end{description} @@ -84,9 +99,7 @@ The documentation standard can be found in the contributing.md \autocite{crepe:d \section{Work Agreements} Work agreements are the expectations and commitments made by the team members. This section includes details on roles and responsibilities, documentation of -work hours, protocols for handling absences or delays, guidelines for addressing - inconsistent participation, and procedures for weekly updates and meetings. All - team members reviewed and agreed to these terms. +work hours, protocols for handling absences or delays, guidelines for addressing inconsistent participation, and procedures for weekly updates and meetings. All team members reviewed and agreed to these terms. \subsection{Project Roles} \begin{itemize} @@ -97,10 +110,8 @@ work hours, protocols for handling absences or delays, guidelines for addressing \item \textbf{Niels Stunnebrink}: Project Member \end{itemize} - \subsection{Work Hours} -Each project member will keep track of their own working hours and -add them to the `file'. +Each project member will keep track of their own working hours and add them to the `file'. \subsection{Absence Or Delay} If a project member is going to be absent or delayed, they are required to @@ -109,35 +120,28 @@ should be informed of the absence as well. \subsection{Inconsistent participation} Inconsistent participation will be addressed in a structured manner: - \begin{description} - \item[Initial Discussion] The team leader will first discuss the + \item[Initial Discussion]: The team leader will first discuss the issue of inconsistent participation with the individual team member. \item [Team Discussion]: If no improvement is observed, the issue will be brought up with the entire team to seek a collective solution. - \item [Project Supervisor Involvement]: Should the problem persist - despite these efforts, it will be escalated to the project supervisor for - further action. + \item [Project Supervisor Involvement]: Should the problem persist, despite these efforts, it will be escalated to the project supervisor (Bob van der Putten) for further action. \end{description} Valid reasons for absence or inconsistency will be considered, and no repercussions will be necessary in such cases. However, if the inconsistency is -due to other factors, potential repercussions may include additional assignments - or actions as determined by the project supervisor. - +due to other factors, potential repercussions may include additional assignments or actions as determined by the project supervisor. + A team member is considered to have inconsistent participation if their hours are significantly behind the team’s average or if tasks are not completed without valid reasons. It is essential that any concerns regarding a team -member's performance be resolved through unanimous agreement within the team. - +member's performance, should be resolved through unanimous agreement within the team. \subsection{Weekly Update} Each team member is required to send their technical weekly update to Jaro -Rutjes before 12:00 on Friday. Personal updates may also be included and will be - confidential between the team member, the Team Leader, and/or the teacher, if - requested. +Rutjes before 12:00 on Friday. Personal updates may also be included and will be confidential between the team member, the Team Leader, and/or the teacher, if requested. -Jaro Rutjes will compile and send a team update to the project supervisor,Bob +Jaro Rutjes will compile and send a team update to the project supervisor, Bob van der Putten, also by Friday. This update will include technical information on what has been accomplished, plans for upcoming work, and an overview of the team's overall progress. @@ -152,15 +156,12 @@ sent via Outlook. Additional meetings may be scheduled if necessary to address issues or project needs. - % Information about how and when Scrum will be used in this project (using Miro). \section{Scrum (Miro)} - -The team will start using scrum after the initial fase of structering the project is over. This fase is over when proof of concepts are being made. +The team will start using scrum after the initial phase, of structering the project, is finished. This phase is over when proof of concepts are being made. \subsection{Scrum Board} The Scrum board \autocite{miro:scrum-board} will consist of the following tabs: - \begin{description} \item[Backlog]: This tab contains a list of all tasks and user stories that are planned for future sprints. \item[Next Sprint]: This tab includes tasks and user stories that have been selected for the upcoming sprint. @@ -181,20 +182,18 @@ To manage tasks effectively: \noindent Each task or user story will be assigned user points, which indicate the relative size or complexity of the task compared to these examples. -TODO: add examples +% TODO: add examples \subsection{Burn Down Chart} The Burn Down Chart will be generated using Excel from the Scrum board data every week. -Each user story or tasks marked as done will burn the chart downwards. -This Burn down chart is shared in the weekly updates with the team and the project supervisor. +Each user story or task marked as done, will burn the chart downwards. +This Burn Down Chart is shared in the weekly updates with the team and the project supervisor. % Information regarding the git workflow of this project. Diagram explaining the workflow \section{Git Workflow} - GitHub is used for version management of both code and documentation, each in its own respective repository. -This keep the documentation and code seperate, resulting in ordened and manageable repositories. - +This keeps the documentation and code seperate, resulting in ordened and manageable repositories. \begin{itemize} \item Code Repository: crepe \autocite{crepe:code-repo} \item Documentation Repository: crepe-docs \autocite{crepe:docs-repo} @@ -204,8 +203,7 @@ This keep the documentation and code seperate, resulting in ordened and manageab % TODO: add here details from contributing.md? \subsection{Git Merge To Master} % TODO: add here diagram on what actions are taken before merge. -\subsection{Code standard} +\subsection{Code Standard} The code standard can be found in the contributing.md \autocite{crepe:code-standard}. \end{document} - -- cgit v1.2.3 From ef1c7e56de6c9083614b53d6645883c371775b22 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 11 Sep 2024 16:07:58 +0200 Subject: added new tasks and deleted :: at some places (as dicussed during team meeting) --- time.txt | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/time.txt b/time.txt index 1bf9987..2d7a181 100644 --- a/time.txt +++ b/time.txt @@ -12,14 +12,19 @@ loek: 2024-09-05 1h40m project meeting loek: 2024-09-05 1h24m time report script loek: 2024-09-06 55m time report script -max: 2024-09-02 1h project meeting :: project kickoff -max: 2024-09-02 45m project meeting +max: 2024-09-02 1h project kickoff +max: 2024-09-02 45m first project meeting +max: 2024-09-03 1h30m first project lesson max: 2024-09-04 1h30m installing and configuring latex max: 2024-09-04 2h reading project info max: 2024-09-05 20m discussing GitHub with Jaro -max: 2024-09-05 1h30m first group meeting +max: 2024-09-05 1h30m second project meeting max: 2024-09-06 45m writing email and fixing clang-format/-tidy max: 2024-09-09 3h10m investigating Unity (in relation to the class diagram) +max: 2024-09-10 1h30m third project meeting +max: 2024-09-10 20m discussing about class diagram +max: 2024-09-10 40m second project lesson (one-to-one meeting with Bob) +max: 2024-09-11 1h50m first review of Jaro's Plan document wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 08f65674dc02f613c72e84385a8374c0535d88cb Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Wed, 11 Sep 2024 16:31:43 +0200 Subject: research started --- research.tex | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/research.tex b/research.tex index ca2afed..8ce9098 100644 --- a/research.tex +++ b/research.tex @@ -152,12 +152,53 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Gameloop/resource manager} +\section{resource manager} \subsection{Introduction} \subsection{Findings} +\subsection{unity formats} +Unity has many different asset file types that can be imported to use for a game \href{https://docs.unity3d.com/Manual/BuiltInImporters.html}{unity imports}. The most important formats are the audio, text and sprite formats. + +\paragraph{Audio} + +Unity uses a *Audio Source* component that holds the reference of the audio format which are all these different types. +\begin{itemize} + \item ogg. + \item aif. + \item aiff. + \item flac. + \item wav. + \item mp3. + \item mod. + \item it. + \item s3m. + \item xm. +\end{itemize} + +Where then the *Audio clip* contains all the audio data used by the *Audio Source* components. Inside the audio clip are options about each specified audio file to change specific settings from the origanl file. for example load type, compression format, quality, sample rate and more \href{https://docs.unity.cn/2018.4/Documentation/Manual/class-AudioClip.html}{audio clip} + +\paragraph{Sprite formats} +Unity supports many different image formats: +\begin{itemize} + \item jpg. + \item jpeg. + \item tif/tiff. + \item tga. + \item gif. + \item png. + \item psd. + \item bmp. + \item iff. + \item pict. + \item pic. + \item pct. + \item exr. + \item hdr. +\end{itemize} + + \subsection{Conclusion} \section{Rendering} -- cgit v1.2.3 From 37cd579403c86833d3fdb6ebe7f3cd2235649b27 Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Thu, 12 Sep 2024 13:00:55 +0200 Subject: changed some research headers and added time --- research.tex | 31 +++++++++++++++++++++++++------ time.txt | 2 ++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/research.tex b/research.tex index ca2afed..7ae6856 100644 --- a/research.tex +++ b/research.tex @@ -152,7 +152,7 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Gameloop/resource manager} +\section{Resource manager} \subsection{Introduction} @@ -168,7 +168,7 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Event manager} +\section{Event manager/game loop} \subsection{Introduction} @@ -176,7 +176,7 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Memory/debugging} +\section{Profiling/debugging} \subsection{Introduction} @@ -184,7 +184,7 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Physics/scripting} +\section{Physics} \subsection{Introduction} @@ -192,16 +192,35 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Conclusion} +\section{Scripting} + +\subsection{Introduction} + +\subsection{Findings} + +\subsection{Conclusion} +\section{Audio} + +\subsection{Introduction} + +\subsection{Findings} + +\subsection{Conclusion} \section{Gameobjects/components} \subsection{Introduction} +\subsection{Findings} +\subsection{Conclusion} +\section{AI} + +\subsection{Introduction} + \subsection{Findings} \subsection{Conclusion} -\section{Conclusion} +\section{Conclusion} \end{document} diff --git a/time.txt b/time.txt index db345f3..dbf3107 100644 --- a/time.txt +++ b/time.txt @@ -33,6 +33,8 @@ wouter: 2024-09-04 1h30m researching 3rd party tools wouter: 2024-09-05 1h30m first group meeting wouter: 2024-09-05 20m setting up research document wouter: 2024-09-05 1h researching game enigne +wouter: 2024-09-06 3h researching game enigne +wouter: 2024-09-09 2h researching SDL and SFML2 niels: 2024-09-02 1h project meeting :: project kickoff niels: 2024-09-02 45m project meeting -- cgit v1.2.3 From 05911a90908e3fb2bd1c1ca2add2ef4fef1fed1e Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Thu, 12 Sep 2024 14:17:12 +0200 Subject: research --- research.tex | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/research.tex b/research.tex index 8ce9098..b26018e 100644 --- a/research.tex +++ b/research.tex @@ -163,7 +163,7 @@ Unity has many different asset file types that can be imported to use for a game \paragraph{Audio} -Unity uses a *Audio Source* component that holds the reference of the audio format which are all these different types. +The unity engine supports a lot of different audio formats: \begin{itemize} \item ogg. \item aif. @@ -177,9 +177,8 @@ Unity uses a *Audio Source* component that holds the reference of the audio form \item xm. \end{itemize} -Where then the *Audio clip* contains all the audio data used by the *Audio Source* components. Inside the audio clip are options about each specified audio file to change specific settings from the origanl file. for example load type, compression format, quality, sample rate and more \href{https://docs.unity.cn/2018.4/Documentation/Manual/class-AudioClip.html}{audio clip} - \paragraph{Sprite formats} + Unity supports many different image formats: \begin{itemize} \item jpg. @@ -198,6 +197,31 @@ Unity supports many different image formats: \item hdr. \end{itemize} +\paragraph{scripts} +The different text scripts unity supports: + \begin{itemize} + \item txt + \item html + \item htm + \item xml + \item json + \item csv + \item yaml + \item bytes + \item fnt + \item manifest + \item md + \item js + \item boo + \item rsp + \end{itemize} + +\subsection{Audio Format} The choice of audio format for the Crepe game engine depends on several factors, including sound quality, memory usage, and licensing. According to various sources \href{https://dev.to/tenry/comparison-of-audio-formats-for-games-jak}{comparison audio formats}, \href{https://www.universityofgames.net/articles/audio-file-formats-used-in-game-development/}{Audio files in games} , the most commonly used audio formats in game development are WAV, MP3, and Ogg. + +\paragraph{Licensing} Historically, MP3 had patents on the audio format, but these restrictions have expired. Ogg and FLAC, both developed by Xiph.Org, are open-source formats. Additionally, the WAV format, though widely used, does not require a specific license for distribution. + +\paragraph{Conclusion} For the Crepe game engine, Ogg and FLAC are the preferred audio formats due to their open-source licenses and high compatibility. FLAC is ideal for high-quality audio with minimal compression, while Ogg is better suited for lower-quality audio that requires reduced memory usage. Both formats come from the same non-profit organization, Xiph.Org, ensuring that they align with open-source values and licensing flexibility. + \subsection{Conclusion} -- cgit v1.2.3 From 5a803d4b727bab3a8b2f772ac82604a643dada3c Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Thu, 12 Sep 2024 14:48:49 +0200 Subject: design document --- design.tex | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 design.tex diff --git a/design.tex b/design.tex new file mode 100644 index 0000000..30e574b --- /dev/null +++ b/design.tex @@ -0,0 +1,45 @@ +\documentclass{projdoc} +\input{meta.tex} + +\title{design document} + +\begin{document} +\tablestables +\newpage + +\section{Introduction} This document outlines the design and development process of the Crepe Game Engine, detailing the key decisions made during its creation. The primary goal of this engine is to offer a streamlined, Unity-like experience tailored for developing 2D games similar to Jetpack Joyride. + +The Crepe Engine is designed to ease the transition for developers familiar with Unity, ensuring minimal friction when switching platforms. Our aim is to preserve many of Unity’s core features while introducing a lightweight and open-source alternative, licensed under the MIT License. + +The engine is primarily aimed at indie developers who have prior experience with Unity and are looking for a flexible, cost-effective solution with familiar workflows. + + +\section{Architectural overview} + +\subsection{Core} + +\subsection{patterns} + +\section{Design} + +\subsection{Rendering} + +\subsection{Physics} + +\subsection{Scripting} + +\subsection{Audio} + +\subsection{Input} + +\subsection{Physics} + + +\section{Tools} + +\section{Conclusion} + + + +\end{document} + -- cgit v1.2.3 From 541e851ad1d704598f6c6286c9007b3d94e81fb1 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Thu, 12 Sep 2024 16:48:24 +0200 Subject: added new task --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index d7f1fbf..6158bc5 100644 --- a/time.txt +++ b/time.txt @@ -33,6 +33,7 @@ max: 2024-09-10 1h30m third project meeting max: 2024-09-10 20m discussing about class diagram max: 2024-09-10 40m second project lesson (one-to-one meeting with Bob) max: 2024-09-11 1h50m first review of Jaro's Plan document +max: 2024-09-12 1h trying to fix LaTeX and VS code settings wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 4de2d802fcca20c4759e3bf1ce269dbee9c03b8a Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:08:36 +0200 Subject: Started GameObjects section --- research.tex | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/research.tex b/research.tex index ca2afed..9f95428 100644 --- a/research.tex +++ b/research.tex @@ -195,11 +195,10 @@ for audio some options could be: FMOD, Wwise, or iirKlang \section{Conclusion} \section{Gameobjects/components} - \subsection{Introduction} - +One of the requirements of our customer, is that the game engine's structure is similar to Unity. The customer has created a class diagram of the game engine's API, which is (of course) very similar to Unity. One of the most important parts of the class diagram is a so-called gameObject (with several components). It's needed to understand the exact meaning/function of these gameObjects, that's why this research question arose. \subsection{Findings} - +A gameObject itself does/is nothing. \subsection{Conclusion} \section{Conclusion} -- cgit v1.2.3 From f7f4849f1ca92f3b0689e4eacb60291d1306d865 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:44:58 +0200 Subject: Worked on gameObject research --- research.tex | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/research.tex b/research.tex index 9f95428..8f368a1 100644 --- a/research.tex +++ b/research.tex @@ -198,7 +198,15 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Introduction} One of the requirements of our customer, is that the game engine's structure is similar to Unity. The customer has created a class diagram of the game engine's API, which is (of course) very similar to Unity. One of the most important parts of the class diagram is a so-called gameObject (with several components). It's needed to understand the exact meaning/function of these gameObjects, that's why this research question arose. \subsection{Findings} -A gameObject itself does/is nothing. +A gameObject is the most important concept in Unity. Every object in a game is a GameObject, from characters and collectible items to the lights, cameras and special effects. However, a gameObject itself can't do anything on its own. A gameObject needs to be given properties before it can become a character, an envirnment, or a special effect. https://docs.unity3d.com/Manual/GameObjects.html + +A gameObject can be seen as a container for components. Components are the properties of the gameObject. A few examples of components are sprites, animators, audioSources, and so on. Multiple (different) components can be assigned to a single gameObject (e.g. a sprite and an audioSource). + +Since we now know that a gameObject needs components to do something, it's obvious that there should be a way to add components to a gameObject. Some components (e.g. the behaviorScript component) should also be able to reference to its gameObject. + +Each gameObject always has one transform class. The transform class describes the position, rotation, and scale within the scene. Some component use this information to e.g. scale a sprite. Other components eddit this information to e.g. model gravity. https://docs.unity3d.com/Manual/class-Transform.html + +A gameObject can have one (or multiple) children gameObject(s). All children gameObjects, of course, also have one transform class. However, the position, rotation, and scale of this class, is always the same as the child's parent. A child can not have more than one parent. https://docs.unity3d.com/Manual/class-Transform.html \subsection{Conclusion} \section{Conclusion} -- cgit v1.2.3 From 4035609492877364e90e14e6a8c59c4424ddee64 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:47:34 +0200 Subject: worked on gameObject research --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 6158bc5..c9f5261 100644 --- a/time.txt +++ b/time.txt @@ -34,6 +34,7 @@ max: 2024-09-10 20m discussing about class diagram max: 2024-09-10 40m second project lesson (one-to-one meeting with Bob) max: 2024-09-11 1h50m first review of Jaro's Plan document max: 2024-09-12 1h trying to fix LaTeX and VS code settings +max: 2024-09-12 1h worked on gameObject research wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 7ecc34231fb20951cdafb083b909cf133e84c610 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 12 Sep 2024 19:51:42 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index dd12eb5..eb25c7e 100644 --- a/time.txt +++ b/time.txt @@ -19,6 +19,7 @@ loek: 2024-09-10 25m briefing :: watch bob videos loek: 2024-09-10 5m docs :: update readme loek: 2024-09-10 12m docs :: add comparison package and more example latex code loek: 2024-09-10 30m project meeting +loek: 2024-09-12 15m integration :: PR merge max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 188fbffafda0942014b12dd2e2313ad139bcd1cc Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 12 Sep 2024 20:35:24 +0200 Subject: add some audio research --- research.tex | 34 ++++++++++++++++++++++++++++++++++ time.txt | 1 + 2 files changed, 35 insertions(+) diff --git a/research.tex b/research.tex index 00b006d..ad33d10 100644 --- a/research.tex +++ b/research.tex @@ -207,6 +207,40 @@ for audio some options could be: FMOD, Wwise, or iirKlang % should audio research be scoped down to SDL2 (if that's what we're going with) or % standalone libraries only (for modularity?). +The game engine is required to have an audio system with support for playing multiple +audio streams (i.e.~tracks or samples) simultaniously. Since writing a custom live +audio mixing engine is outside the scope of this project, this section compares +various standalone audio engines that could be used in the engine. + +% TODO: requirements first! + +% REQ ~ is cross-platform +% REQ ~ supports multiple audio formats (TODO: which) +% REQ ~ supports simultanious playback / mixing +% REQ ~ has an open-source license +\begin{table} + \centering + \begin{tabular}{llc} + \toprule + \textbf{Library} & \textbf{License} & \textbf{API}\\ + \midrule + miniaudio & MIT-0 & C\\ + YSE & EPL & C++\\ + SoLoud & Zlip/LibPng & C++\\ + \bottomrule + \end{tabular} + \caption{Audio engine library comparison} + \label{tab:audio-engines} +\end{table} +% TODO: ref https://miniaud.io/ +% TODO: ref https://www.attr-x.net/yse/ + +Not considered further: +\begin{description} + \item[FMOD] is proprietary + \item[PortAudio] requires manual mixing +\end{description} + \section{Physics} \subsection{Introduction} diff --git a/time.txt b/time.txt index 3a8b547..d9190f5 100644 --- a/time.txt +++ b/time.txt @@ -20,6 +20,7 @@ loek: 2024-09-10 5m docs :: update readme loek: 2024-09-10 12m docs :: add comparison package and more example latex code loek: 2024-09-10 30m project meeting loek: 2024-09-11 1h40m research :: profiling and debugging +loek: 2024-09-12 30m research :: audio max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 5a1f278d794d19be143b3a2e5059fdf0b1d7db66 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 13 Sep 2024 10:03:11 +0200 Subject: revert line wrapping options in vscode config --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 25effcc..4a05df8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,4 @@ { - "editor.wordWrap": "wordWrapColumn", - "editor.wrappingIndent": "same", - "editor.wordWrapColumn": 85, "files.trimTrailingWhitespace": true, "latex-workshop.latex.recipe.default": "latexmk", "latex-workshop.latex.tools": [ -- cgit v1.2.3 From f62aa77892f22868f204dd777ae5a45eb64460fb Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 13 Sep 2024 10:05:40 +0200 Subject: add latex workshop to extensions.json --- .vscode/extensions.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index e2e2139..1ce5b20 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,6 @@ { "recommendations": [ + "James-Yu.latex-workshop", "EditorConfig.EditorConfig" ] } -- cgit v1.2.3 From 1c519543e2420ab80337b4717333ca0dc69b63f6 Mon Sep 17 00:00:00 2001 From: Jaro Date: Fri, 13 Sep 2024 15:51:54 +0200 Subject: updated time --- .vscode/extensions.json | 1 + .vscode/settings.json | 3 -- comparison.sty | 80 +++++++++++++++++++++++++++++++++++++++++++++++++ example.tex | 27 ++++++++++++++++- research.tex | 67 +++++++++++++++++++++++++++++++++++++---- time.txt | 26 ++++++++++++++-- 6 files changed, 192 insertions(+), 12 deletions(-) create mode 100644 comparison.sty diff --git a/.vscode/extensions.json b/.vscode/extensions.json index e2e2139..1ce5b20 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,6 @@ { "recommendations": [ + "James-Yu.latex-workshop", "EditorConfig.EditorConfig" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 25effcc..4a05df8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,4 @@ { - "editor.wordWrap": "wordWrapColumn", - "editor.wrappingIndent": "same", - "editor.wordWrapColumn": 85, "files.trimTrailingWhitespace": true, "latex-workshop.latex.recipe.default": "latexmk", "latex-workshop.latex.tools": [ diff --git a/comparison.sty b/comparison.sty new file mode 100644 index 0000000..d10f95f --- /dev/null +++ b/comparison.sty @@ -0,0 +1,80 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{comparison}[2024-01-19 package comparison] + +\RequirePackage{booktabs} +\RequirePackage{etoolbox} +\RequirePackage{tabularx} +\RequirePackage{environ} +\RequirePackage{enumitem} + +% comparison environment, usage: +% +% \begin{comparison} +% \pro{reason why thing is good} +% \pro{...} +% \con{reason why thing is bad} +% \con{...} +% \end{comparison} +% +% output: +% +% Pros (2) Cons (2) +% ---------------------------------------------------------- +% - reason why thing is good - reason why thing is bad +% - ... - ... +% + +\newcounter{pro-count} +\newcounter{pro-index} +\newcounter{con-count} +\newcounter{con-index} +\newcounter{cmp-count} +\newcounter{cmp-index} +\NewEnviron{comparison}{% + \par% + \setcounter{pro-count}{0}% + \newcommand{\pro}[1]{% + \stepcounter{pro-count}% + \csdef{pro-\the\value{pro-count}}{##1}% + }% + \setcounter{con-count}{0}% + \newcommand{\con}[1]{% + \stepcounter{con-count}% + \csdef{con-\the\value{con-count}}{##1}% + }% + \BODY% + \def\spacing{3mm}% + \newcommand{\halfbox}[1]{% + \begin{minipage}[t]{\dimexpr(\linewidth - \spacing) / 2\relax}% + ##1% + \end{minipage}% + }% + \begin{minipage}{\linewidth}% + \halfbox{\strut\centering\textsc{Benefits}~(\the\value{pro-count})\strut}% + \hfill% + \halfbox{\strut\centering\textsc{Drawbacks}~(\the\value{con-count})\strut}% + \par% + \vspace*{\dimexpr-\parskip-0.5\baselineskip\relax}% + \noindent\rule{\linewidth}{0.66pt}\par% + \vspace*{\dimexpr-\parskip\relax}% + \halfbox{% + \begin{itemize}[leftmargin=5mm]% + \setcounter{pro-index}{0}% + \whileboolexpr{test{\ifnumcomp{\value{pro-index}}{<}{\value{pro-count}}}}{% + \stepcounter{pro-index}% + \item \csuse{pro-\the\value{pro-index}}% + }% + \end{itemize}% + }\hfill\halfbox{% + \begin{itemize}[leftmargin=5mm]% + \setcounter{con-index}{0}% + \whileboolexpr{test{\ifnumcomp{\value{con-index}}{<}{\value{con-count}}}}{% + \stepcounter{con-index}% + \item \csuse{con-\the\value{con-index}}% + }% + \end{itemize}% + }% + \end{minipage}% + \par% +} + diff --git a/example.tex b/example.tex index 8525973..ce45f6f 100644 --- a/example.tex +++ b/example.tex @@ -108,7 +108,7 @@ The \codeinline{blockcode} environment can be used to insert a code block: This is all included verbatim: \verb|asdf| \ $%!(*@#&)$ \end{blockcode} -\subsection{Lists} +\subsection{Information dumps} Unordered (bullet) list: @@ -136,9 +136,34 @@ Numbered list: (See \cref{item:enum-nest-ref}) +Description: + +\begin{description} + \item[Item one] description of item one + \item[Item two] description of item two + \item[Item three] ... +\end{description} + +\subsection{Comparisons} + +\begin{comparison} + \pro{Good thing} + \con{Bad thing} + \pro{Good thing 2} + \con{Bad thing 2} +\end{comparison} + \subsection{Citations} Citations are inserted using the \codeinline{\autocite} command \autocite{rfc:3339}. +The bibliography is automatically printed after \codeinline{\end{document}}. + +\subsection{Glossary} + +Glossary entries can be inserted using the \codeinline{\gls} commands. Example: +``\Gls{sdl2} handles \glspl{hid} as well!''. In following occurrences of acronyms, +only their short form is printed: `\gls{sdl2}' and `\gls{hid}'. All of these link to +the glossary that is automatically printed after \codeinline{\end{document}}. \end{document} diff --git a/research.tex b/research.tex index ca2afed..1d44c92 100644 --- a/research.tex +++ b/research.tex @@ -152,7 +152,7 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Gameloop/resource manager} +\section{Resource manager} \subsection{Introduction} @@ -168,7 +168,7 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Event manager} +\section{Event manager/game loop} \subsection{Introduction} @@ -176,7 +176,7 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Memory/debugging} +\section{Profiling/debugging} \subsection{Introduction} @@ -184,7 +184,7 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Physics/scripting} +\section{Physics} \subsection{Introduction} @@ -192,14 +192,71 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -\section{Conclusion} +\section{Scripting} + +\subsection{Introduction} + +\subsection{Findings} + +\subsection{Conclusion} +\section{Audio} + +\subsection{Introduction} + +\subsection{Findings} + +\subsection{Conclusion} \section{Gameobjects/components} \subsection{Introduction} +One of the requirements of our customer, is that the game engine's structure is +similar to Unity. The customer has created a class diagram of the game engine's API, +which is (of course) very similar to Unity. One of the most important parts of the +class diagram is a so-called gameObject (with several components). It's needed to +understand the exact meaning/function of these gameObjects, that's why this research +question arose. + \subsection{Findings} +A gameObject is the most important concept in Unity. Every object in a game is a +GameObject, from characters and collectible items to the lights, cameras and special +effects. However, a gameObject itself can't do anything on its own. A gameObject +needs to be given properties before it can become a character, an envirnment, or a +special effect. +% TODO: cite https://docs.unity3d.com/Manual/GameObjects.html + +\subsection{Conclusion} + +\section{AI} + +\subsection{Introduction} + +\subsection{Findings} + +A gameObject can be seen as a container for components. Components are the properties +of the gameObject. A few examples of components are sprites, animators, audioSources, +and so on. Multiple (different) components can be assigned to a single gameObject +(e.g.~a sprite and an audioSource). + +Since we now know that a gameObject needs components to do something, it's obvious +that there should be a way to add components to a gameObject. Some components +(e.g.~the behaviorScript component) should also be able to reference to its +gameObject. + +Each gameObject always has one transform class. The transform class describes the +position, rotation, and scale within the scene. Some component use this information +to e.g. scale a sprite. Other components eddit this information to e.g.~model +gravity. +% TODO: cite https://docs.unity3d.com/Manual/class-Transform.html + +A gameObject can have one (or multiple) children gameObject(s). All children +gameObjects, of course, also have one transform class. However, the position, +rotation, and scale of this class, is always the same as the child's parent. A child +can not have more than one parent. +% TODO: cite https://docs.unity3d.com/Manual/class-Transform.html + \subsection{Conclusion} \section{Conclusion} diff --git a/time.txt b/time.txt index d0ddf37..d25d83b 100644 --- a/time.txt +++ b/time.txt @@ -17,13 +17,25 @@ loek: 2024-09-09 25m documentation style guide loek: 2024-09-10 1h55m project meeting loek: 2024-09-10 25m briefing :: watch bob videos loek: 2024-09-10 5m docs :: update readme +loek: 2024-09-10 12m docs :: add comparison package and more example latex code +loek: 2024-09-10 30m project meeting +loek: 2024-09-12 15m integration :: PR merge -max: 2024-09-02 1h project meeting :: project kickoff -max: 2024-09-02 45m project meeting +max: 2024-09-02 1h project kickoff +max: 2024-09-02 45m first project meeting +max: 2024-09-03 1h30m first project lesson max: 2024-09-04 1h30m installing and configuring latex max: 2024-09-04 2h reading project info max: 2024-09-05 20m discussing GitHub with Jaro -max: 2024-09-05 1h30m first group meeting +max: 2024-09-05 1h30m second project meeting +max: 2024-09-06 45m writing email and fixing clang-format/-tidy +max: 2024-09-09 3h10m investigating Unity (in relation to the class diagram) +max: 2024-09-10 1h30m third project meeting +max: 2024-09-10 20m discussing about class diagram +max: 2024-09-10 40m second project lesson (one-to-one meeting with Bob) +max: 2024-09-11 1h50m first review of Jaro's Plan document +max: 2024-09-12 1h trying to fix LaTeX and VS code settings +max: 2024-09-12 1h worked on gameObject research wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting @@ -33,6 +45,8 @@ wouter: 2024-09-04 1h30m researching 3rd party tools wouter: 2024-09-05 1h30m first group meeting wouter: 2024-09-05 20m setting up research document wouter: 2024-09-05 1h researching game enigne +wouter: 2024-09-06 3h researching game enigne +wouter: 2024-09-09 2h researching SDL and SFML2 niels: 2024-09-02 1h project meeting :: project kickoff niels: 2024-09-02 45m project meeting @@ -56,5 +70,11 @@ jaro: 2024-09-09 1h project plan jaro: 2024-09-10 1h preparing meeting and project plan jaro: 2024-09-10 1h30m project meeting jaro: 2024-09-10 1h project disussing research +jaro: 2024-09-10 45m project videos +jaro: 2024-09-10 1h project plan research physics +jaro: 2024-09-13 1h project preparing meeting and reading review project plan +jaro: 2024-09-13 1h30m project meeting +jaro: 2024-09-13 30m weekly update + # vim:ft=cfg -- cgit v1.2.3 From cbd1673e680c2f55eb60458dd4ecbb5c2060838f Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 13 Sep 2024 16:06:41 +0200 Subject: hide glossary if no glossary entries used --- projdoc.cls | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/projdoc.cls b/projdoc.cls index 388f901..cc25e67 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -206,19 +206,23 @@ \thispagestyle{empty} \end{titlepage} } -\newbool{projdoc@cited} -\apptocmd{\abx@aux@cite}{\global\booltrue{projdoc@cited}}{}{} +\newbool{projdoc@used@cite} +\newbool{projdoc@used@gls} +\apptocmd{\abx@aux@cite}{\global\booltrue{projdoc@used@cite}}{}{} +\apptocmd{\glsxtr@record}{\global\booltrue{projdoc@used@gls}}{}{} \def\projdoc@trailer{ % bibliography (if citations used) - \ifbool{projdoc@cited}{\printbibliography}{}% + \ifbool{projdoc@used@cite}{% + \printbibliography% + }{}% % glossary - \ifcsundef{printunsrtglossary}{}{% + \ifbool{projdoc@used@cite}{% \section*{Glossary}% \begin{multicols}{2}% \renewcommand{\glossarysection}[2][]{}% \printunsrtglossary% \end{multicols}% - }% + }{}% } \AtBeginDocument{\projdoc@header} \AtEndDocument{\projdoc@trailer} -- cgit v1.2.3 From 454b9e222473c67d0b3bb6935bf3bfb8d2e2043d Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 13 Sep 2024 16:40:50 +0200 Subject: merge #10 --- plan.tex | 276 ++++++++++++++++++++++++++++++++++++++++-------------------- projdoc.cls | 18 +++- sources.bib | 10 +-- 3 files changed, 205 insertions(+), 99 deletions(-) diff --git a/plan.tex b/plan.tex index 2274c87..076ce11 100644 --- a/plan.tex +++ b/plan.tex @@ -5,132 +5,200 @@ % Version 0.0 seems not right % I'm also missing a 'version table' % Shall we use this version system?: -% Version numbers after the comma indicate an interim version and version numbers before the comma indicate versions ready for publication +% Version numbers after the comma indicate an interim version and version numbers +% before the comma indicate versions ready for publication \title{Project Plan} \version{0.1} \begin{document} - \tablestables \newpage +\section{Background} -\section {Background} -This project is part of the fourth-year minor `Systems Programming in C++'. The minor consists of several courses troughout 20 weeks, which create the basis for this project. The project is focussed on building a game engine using the programming language C++. This document describes our plan of attack for the project. +This project is part of the fourth-year minor `Systems Programming in C++'. The minor +consists of several courses troughout 20 weeks, which create the basis for this +project. The project is focussed on building a game engine using the programming +language C++. This document describes our plan of attack for the project. \section{Problem Definition} -% The assignments will be discussed with the project supervisor on specifics for this project. This will give the team the ability to direct the project. -% @Jaro: Ik snap niet wat je met deze zinnen wil zeggen. Het lijkt een soort van background information, maar toch niet helemaal ofzo. Hoe dan ook heb ik het er nu even uit gehaald en een nieuw kopje background toegevoegd. + +% The assignments will be discussed with the project supervisor on specifics for this +% project. This will give the team the ability to direct the project. + +% @Jaro: Ik snap niet wat je met deze zinnen wil zeggen. Het lijkt een soort van +% background information, maar toch niet helemaal ofzo. Hoe dan ook heb ik het er nu +% even uit gehaald en een nieuw kopje background toegevoegd. \subsection{Problem Analysis} -CodedFun Games is a small, single-person game company looking to scale up. The owner, who is also a game programmer, and graphical artist, has received government funding, which he wants to invest in a custom-built game engine. The owner has no interest in developing or maintaining a game engine himself, so he has hired a part-time engine programmer. This programmer does not have time to create an entire engine but is willing to maintain or expand an existing engine one day per week. -The client seeks a custom game engine that is easy to maintain, easy to extend, and user-friendly. Additionally, the engine should be well-documented, which is considered an essential aspect of being user-friendly. +CodedFun Games is a small, single-person game company looking to scale up. The owner, +who is also a game programmer, and graphical artist, has received government funding, +which he wants to invest in a custom-built game engine. The owner has no interest in +developing or maintaining a game engine himself, so he has hired a part-time engine +programmer. This programmer does not have time to create an entire engine but is +willing to maintain or expand an existing engine one day per week. -So far, the client has made all his games in Unity and is very fond of the structure. Therefore, he wants the new engine to adhere to a similar structure. A simple requirements document is defined to specify how strictly this structure should be followed. +The client seeks a custom game engine that is easy to maintain, easy to extend, and +user-friendly. Additionally, the engine should be well-documented, which is +considered an essential aspect of being user-friendly. -Finally, because the client does not want to dive deeply into the engine himself, he wants a secondary application (preferably a game) that can be used to test the engine's features. This is referred to as the `validation application.' +So far, the client has made all his games in Unity and is very fond of the structure. +Therefore, he wants the new engine to adhere to a similar structure. A simple +requirements document is defined to specify how strictly this structure should be +followed. + +Finally, because the client does not want to dive deeply into the engine himself, he +wants a secondary application (preferably a game) that can be used to test the +engine's features. This is referred to as the \emph{validation application}. \subsection{Goal} -The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. In addition, a validation application should be created to show and test the engine's features. + +The goal is to develop a custom game engine that meets the client's requirements for +maintainability, extensibility, user-friendliness, and adherence to a Unity-like +structure. In addition, a validation application should be created to show and test +the engine's features. \subsection{Result} -The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a validation application should be provided to test and showcase the engine's capabilities. +The expected result is a well-documented, custom game engine that follows a structure +similar to Unity. Additionally, a validation application should be provided to test +and showcase the engine's capabilities. \section{Planning} -The customer specified multiple deliverables troughout the 20 weeks of this project. Despite the fact that 20 weeks have been reserved for this project, the intention is that the game will be delivered in week 17. Any delay/resit will take place between weeks 17 and 20. A rough planning can be found in \cref{tab:planning}. + +The customer specified multiple deliverables troughout the 20 weeks of this project. +Despite the fact that 20 weeks have been reserved for this project, the intention is +that the game will be delivered in week 17. Any delay/resit will take place between +weeks 17 and 20. A rough planning can be found in \cref{tab:planning}. + \begin{table} - \begin{tabularx}{\linewidth}{lXr} + \begin{tabularx}{\linewidth}{lX} \toprule - Week & Deliverable & \\ + \textbf{Week\#} & \textbf{Deliverable}\\ \midrule - 4 & Project Plan & \\ - 7 & Requirements document & \\ - 10 & POCs and Design document & \\ - 17 & Game engine, Validation application, Research document, and Qualification document & \\ + 4 & Project Plan\\ + 7 & Requirements document\\ + 10 & POCs and Design document\\ + 17 & Game engine, Validation application, Research document, and Qualification + document\\ \bottomrule \end{tabularx} \caption{Planning} \label{tab:planning} \end{table} - \section{Risks} + \subsection{Techincal Risks} -Multiplatform: The team works in both linux and windows, which poses a risk for the development if there is a platform dependency. -Integration: Users can make a wrong integration causing for delay or risk of losing code. + +\begin{description} + \item[Multiplatform] The team works in both linux and windows, which poses a risk + for the development if there is a platform dependency. + \item[Integration] Users can make a wrong integration causing for delay or risk of + losing code. +\end{description} \subsection{Project Management Risks} -Scope Expansion: There is a risk of creating a scope that is bigger than the requirements. -Lack of Team Collaboration: Insufficient collaboration among team members -may hinder progress. + +\begin{description} + \item[Scope Expansion] There is a risk of creating a scope that is bigger than the + requirements. Lack of Team Collaboration: Insufficient collaboration among team + members may hinder progress. +\end{description} \subsection{Measures} -Multiplatform: The team can switch any time to a single platform, so this risk is metigated. -Integration: By following standards and having an integrator, which checks every pull request, this risk is minimilised. -Scope Expansion: By writing detailed requirements and having weekly team meetings, to check if the progress is within the scope, should be sufficient to decrease the risk. -Lack of Team Collaboration: Weekly team meetings will result in collaboration among team members and discussing what each other tasks is, will decease this risk. +\begin{description} + \item[Multiplatform] The team can switch any time to a single platform, so this + risk is metigated. + \item[Integration] By following standards and having an integrator, which checks + every pull request, this risk is minimilised. + \item[Scope Expansion] By writing detailed requirements and having weekly team + meetings, to check if the progress is within the scope, should be sufficient to + decrease the risk. + \item[Lack of Team Collaboration] Weekly team meetings will result in collaboration + among team members and discussing what each other tasks is, will decease this + risk. +\end{description} -% Documentation Standard is described here \section{Documentation} -This section describes the required documentation for the project, including the types of documents to be created and the standards they must adhere to. + +This section describes the required documentation for the project, including the +types of documents to be created and the standards they must adhere to. \subsection{Documents} + This project consists of seven main documents:\noparbreak \begin{description} - \item[Project Plan] Contains all elements related to the organization of the project, including timelines, milestones, roles, and responsibilities. - \item[Requirements] Details the requirements and user stories, including both functional and non-functional requirements. + \item[Project Plan] Contains all elements related to the organization of the + project, including timelines, milestones, roles, and responsibilities. + \item[Requirements] Details the requirements and user stories, including both + functional and non-functional requirements. \item[Research] Consists of all research related to this project. - \item[Design] Describes the design choices, including architecture, - user interface, and system components. - \item[Qualification] Includes test cases, test plans, and quality - measures to ensure the project meets its requirements and standards. + \item[Design] Describes the design choices, including architecture, user interface, + and system components. + \item[Qualification] Includes test cases, test plans, and quality measures to + ensure the project meets its requirements and standards. \item[Working hours] A table which includes all working hours of each team member. - \item[API Reference] Details the available endpoints, request and response formats, authentication methods, error codes, and examples for interacting with the project's API. + \item[API Reference] Details the available endpoints, request and response formats, + authentication methods, error codes, and examples for interacting with the + project's API. \end{description} \subsection{Documentation Standard} -The documentation standard can be found in the contributing.md \autocite{crepe:docs-standard}. +The documentation standard can be found in the contributing.md +\autocite{crepe:docs-standard}. \section{Work Agreements} -Work agreements are the expectations and commitments made by the team members. -This section includes details on roles and responsibilities, documentation of -work hours, protocols for handling absences or delays, guidelines for addressing inconsistent participation, and procedures for weekly updates and meetings. All team members reviewed and agreed to these terms. -\subsection{Project Roles} -\begin{itemize} - \item \textbf{Loek Le Blansch}: Integrator - \item \textbf{Wouter Boerenkamps}: Project Member - \item \textbf{Jaro Rutjes}: Team Leader / Scrum Master - \item \textbf{Max Smits}: Project Member - \item \textbf{Niels Stunnebrink}: Project Member -\end{itemize} +Work agreements are the expectations and commitments made by the team members. This +section includes details on roles and responsibilities, documentation of work hours, +protocols for handling absences or delays, guidelines for addressing inconsistent +participation, and procedures for weekly updates and meetings. All team members +reviewed and agreed to these terms. -\subsection{Work Hours} -Each project member will keep track of their own working hours and add them to the `file'. +\subsection{Project roles} + +\begin{description} + \item[Loek Le Blansch] Integrator + \item[Wouter Boerenkamps] Project Member + \item[Jaro Rutjes] Team Leader / Scrum Master + \item[Max Smits] Project Member + \item[Niels Stunnebrink] Project Member +\end{description} + +\subsection{Work hours} + +Each project member will keep track of their own working hours and add them to the +`file'. + +\subsection{Absence or delay} -\subsection{Absence Or Delay} If a project member is going to be absent or delayed, they are required to notify the team through either WhatsApp or Outlook. Additionally, the teacher should be informed of the absence as well. \subsection{Inconsistent participation} + Inconsistent participation will be addressed in a structured manner: + \begin{description} - \item[Initial Discussion]: The team leader will first discuss the - issue of inconsistent participation with the individual team member. - \item [Team Discussion]: If no improvement is observed, the issue - will be brought up with the entire team to seek a collective solution. - \item [Project Supervisor Involvement]: Should the problem persist, despite these efforts, it will be escalated to the project supervisor (Bob van der Putten) for further action. + \item[Initial Discussion] The team leader will first discuss the issue of + inconsistent participation with the individual team member. + \item [Team Discussion] If no improvement is observed, the issue will be brought up + with the entire team to seek a collective solution. + \item [Project Supervisor Involvement] Should the problem persist, despite these + efforts, it will be escalated to the project supervisor (Bob van der Putten) for + further action. \end{description} -Valid reasons for absence or inconsistency will be considered, and no -repercussions will be necessary in such cases. However, if the inconsistency is -due to other factors, potential repercussions may include additional assignments or actions as determined by the project supervisor. +Valid reasons for absence or inconsistency will be considered, and no repercussions +will be necessary in such cases. However, if the inconsistency is due to other +factors, potential repercussions may include additional assignments or actions as +determined by the project supervisor. A team member is considered to have inconsistent participation if their hours are significantly behind the team’s average or if tasks are not completed @@ -138,8 +206,11 @@ without valid reasons. It is essential that any concerns regarding a team member's performance, should be resolved through unanimous agreement within the team. \subsection{Weekly Update} -Each team member is required to send their technical weekly update to Jaro -Rutjes before 12:00 on Friday. Personal updates may also be included and will be confidential between the team member, the Team Leader, and/or the teacher, if requested. + +Each team member is required to send their technical weekly update to Jaro Rutjes +before 12:00 on Friday. Personal updates may also be included and will be +confidential between the team member, the Team Leader, and/or the teacher, if +requested. Jaro Rutjes will compile and send a team update to the project supervisor, Bob van der Putten, also by Friday. This update will include technical information @@ -147,63 +218,82 @@ on what has been accomplished, plans for upcoming work, and an overview of the team's overall progress. \subsection{Weekly Meetings} -The project team will hold at least two meetings each week, with each meeting -lasting a maximum of 30 minutes. Following these meetings, an additional one -hour will be scheduled for discussions on the topics covered. -Meetings will be planned and discussed one week in advance, with invitations -sent via Outlook. Additional meetings may be scheduled if necessary to address -issues or project needs. +The project team will hold at least two meetings each week, with each meeting lasting +a maximum of 30 minutes. Following these meetings, an additional one hour will be +scheduled for discussions on the topics covered. +Meetings will be planned and discussed one week in advance, with invitations sent via +Outlook. Additional meetings may be scheduled if necessary to address issues or +project needs. % Information about how and when Scrum will be used in this project (using Miro). \section{Scrum (Miro)} -The team will start using scrum after the initial phase, of structering the project, is finished. This phase is over when proof of concepts are being made. + +The team will start using scrum after the initial phase, of structering the project, +is finished. This phase is over when proof of concepts are being made. \subsection{Scrum Board} + The Scrum board \autocite{miro:scrum-board} will consist of the following tabs: + \begin{description} - \item[Backlog]: This tab contains a list of all tasks and user stories that are planned for future sprints. - \item[Next Sprint]: This tab includes tasks and user stories that have been selected for the upcoming sprint. - \item[Current Sprint]: This tab displays the tasks and user stories that are actively being worked on in the current sprint. - \item[In Progress]: Tasks that are actively being worked on are moved to this tab. - \item[Review]: Completed tasks that are awaiting review or testing will be placed in this tab. - \item[Done]: Once tasks have been reviewed and are considered complete, they are moved to the Done tab. - \item [Blocked]: This tab is used for tasks that cannot proceed due to obstacles or dependencies. + \item[Backlog] This tab contains a list of all tasks and user stories that are + planned for future sprints. + \item[Next Sprint] This tab includes tasks and user stories that have been selected + for the upcoming sprint. + \item[Current Sprint] This tab displays the tasks and user stories that are + actively being worked on in the current sprint. + \item[In Progress] Tasks that are actively being worked on are moved to this tab. + \item[Review] Completed tasks that are awaiting review or testing will be placed in + this tab. + \item[Done] Once tasks have been reviewed and are considered complete, they are + moved to the Done tab. + \item [Blocked] This tab is used for tasks that cannot proceed due to obstacles or + dependencies. \end{description} -\noindent To manage tasks effectively: + \begin{itemize} - \item A task from the \emph{Current Sprint} tab should be selected and moved to the \emph{In Progress} tab when work begins. - \item The status of the task should be updated to \emph{In Progress} as soon as work starts. - \item Once the task is completed and reviewed, it should be moved to the \emph{Done} tab, and its status should be updated to \emph{Done}. + \item A task from the \emph{Current Sprint} tab should be selected and moved to the + \emph{In Progress} tab when work begins. + \item The status of the task should be updated to \emph{In Progress} as soon as + work starts. + \item Once the task is completed and reviewed, it should be moved to the + \emph{Done} tab, and its status should be updated to \emph{Done}. \end{itemize} -\noindent -Each task or user story will be assigned user points, which indicate the relative size or complexity of the task compared to these examples. +Each task or user story will be assigned user points, which indicate the relative +size or complexity of the task compared to these examples. % TODO: add examples \subsection{Burn Down Chart} -The Burn Down Chart will be generated using Excel from the Scrum board data every week. -Each user story or task marked as done, will burn the chart downwards. -This Burn Down Chart is shared in the weekly updates with the team and the project supervisor. +The Burn Down Chart will be generated using Excel from the Scrum board data every +week. Each user story or task marked as done, will burn the chart downwards. This +Burn Down Chart is shared in the weekly updates with the team and the project +supervisor. -% Information regarding the git workflow of this project. Diagram explaining the workflow +% Information regarding the git workflow of this project. +% TODO: Diagram explaining the workflow \section{Git Workflow} -GitHub is used for version management of both code and documentation, each in its own respective repository. -This keeps the documentation and code seperate, resulting in ordened and manageable repositories. -\begin{itemize} - \item Code Repository: crepe \autocite{crepe:code-repo} - \item Documentation Repository: crepe-docs \autocite{crepe:docs-repo} -\end{itemize} + +GitHub is used for version management of both code \autocite{crepe:code-repo} and +documentation \autocite{crepe:docs-repo}, each in its own respective repository. This +keeps the documentation and code seperate, resulting in ordened and manageable +repositories. \subsection{Git New Branch} + % TODO: add here details from contributing.md? + \subsection{Git Merge To Master} + % TODO: add here diagram on what actions are taken before merge. + \subsection{Code Standard} + The code standard can be found in the contributing.md \autocite{crepe:code-standard}. \end{document} diff --git a/projdoc.cls b/projdoc.cls index cc25e67..c0257ca 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -119,6 +119,16 @@ itemsep=\dimexpr\style@itemsep-\style@parsep\relax, parsep=\style@parsep, } +\def\projdoc@setdescriptionstyle{% + \renewcommand\makelabel[1]{% + {\bfseries ##1}:% + }% +} +\setdescription{ + before={\projdoc@setdescriptionstyle}, + leftmargin=3em, + labelindent=3ex, +} \makeatother % create a label using \customlabel[]{}{} that displays @@ -213,10 +223,16 @@ \def\projdoc@trailer{ % bibliography (if citations used) \ifbool{projdoc@used@cite}{% + \hfuzz=50pt% reduce overfull hbox warnings for bibliography (mostly URLs) \printbibliography% }{}% % glossary - \ifbool{projdoc@used@cite}{% + \ifbool{projdoc@used@gls}{% + \setdescription{ + before={\projdoc@setdescriptionstyle}, + leftmargin=2ex, + labelindent=0pt, + }% \section*{Glossary}% \begin{multicols}{2}% \renewcommand{\glossarysection}[2][]{}% diff --git a/sources.bib b/sources.bib index 5848f86..50f5ead 100644 --- a/sources.bib +++ b/sources.bib @@ -13,35 +13,35 @@ } @misc{miro:scrum-board, - author = {Jaro Rutjes}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, title = {Scrum Board on Miro}, url = {https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}, date = {2024-09-10}, } @misc{crepe:code-repo, - author = {lonkaars}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, title = {Crepe Code Repository}, url = {https://github.com/lonkaars/crepe}, date = {2024-09-10}, } @misc{crepe:docs-repo, - author = {lonkaars}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, title = {Crepe Documentation Repository}, url = {https://github.com/lonkaars}, date = {2024-09-10}, } @misc{crepe:docs-standard, - author = {lonkaars}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, title = {Crepe Documentation Standard}, url = {https://github.com/lonkaars/crepe-docs/blob/master/contributing.md}, date = {2024-09-10}, } @misc{crepe:code-standard, - author = {lonkaars}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, title = {Crepe Code Standard}, url = {https://github.com/lonkaars/crepe/blob/master/contributing.md}, date = {2024-09-10}, -- cgit v1.2.3 From 4d085ec22a6d8560913f61096a83ebda4bbaa740 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 14 Sep 2024 11:10:00 +0200 Subject: clean up LaTeX build system --- .gitignore | 2 -- example.tex | 10 ++++++---- img/.gitignore | 2 ++ img/example.puml | 6 ++++++ latexmkrc | 61 ++++++++++++++++++++------------------------------------ makefile | 17 ---------------- projdoc.cls | 4 +++- 7 files changed, 39 insertions(+), 63 deletions(-) create mode 100644 img/.gitignore create mode 100644 img/example.puml delete mode 100644 makefile diff --git a/.gitignore b/.gitignore index efae07a..dfaa9e7 100644 --- a/.gitignore +++ b/.gitignore @@ -29,8 +29,6 @@ # output files *.pdf -!img/*.pdf -img/*.puml.pdf # generated files time.tex diff --git a/example.tex b/example.tex index ce45f6f..4ae4d95 100644 --- a/example.tex +++ b/example.tex @@ -35,7 +35,7 @@ These don't show up in the table of contents by default \Cref{fig:example-a} definitely shows something. Referencing multiple things at once is neatly handled by cleveref: -\cref{fig:example-a,fig:example-b,fig:example-c,tab:gate-xor}. +\cref{fig:example-a,fig:example-b,fig:example-puml,tab:gate-xor}. \begin{figure} \centering @@ -46,15 +46,17 @@ is neatly handled by cleveref: \begin{figure} \begin{subfigure}{0.45\textwidth}% + \centering \fitimg{\includegraphics{example-image-b}} \caption{Example image B} \label{fig:example-b} \end{subfigure}% \hfill \begin{subfigure}{0.45\textwidth}% - \fitimg{\includegraphics{example-image-c}} - \caption{Example image C} - \label{fig:example-c} + \centering + \includepumldiag{img/example.puml} + \caption{Example PlantUML diagram} + \label{fig:example-puml} \end{subfigure}% \caption{Subfigures} \end{figure} diff --git a/img/.gitignore b/img/.gitignore new file mode 100644 index 0000000..60a51f5 --- /dev/null +++ b/img/.gitignore @@ -0,0 +1,2 @@ +!*.pdf +*.eps diff --git a/img/example.puml b/img/example.puml new file mode 100644 index 0000000..942dce2 --- /dev/null +++ b/img/example.puml @@ -0,0 +1,6 @@ +@startuml +!include theme.ipuml + +Bob -> Alice : hello + +@enduml diff --git a/latexmkrc b/latexmkrc index 66ed0d1..293cf09 100644 --- a/latexmkrc +++ b/latexmkrc @@ -1,49 +1,32 @@ -$pdflatex = "xelatex %O %S"; +# https://nl.mirrors.cicku.me/ctan/support/latexmk/latexmk.pdf + +$pdflatex = "xelatex --interaction=nonstopmode %O %S"; $pdf_mode = 1; $dvi_mode = 0; $postscript_mode = 0; +$clean_ext .= ' %R.ist %R.xdy bbl run.xml'; +@default_files = ( + 'example', + 'plan', + 'research', + 'timerep', +); -# https://tex.stackexchange.com/questions/400325/latexmkrc-for-bib2gls -add_cus_dep('glo', 'gls', 0, 'run_makeglossaries'); -add_cus_dep('acn', 'acr', 0, 'run_makeglossaries'); -add_cus_dep('aux', 'glstex', 0, 'run_bib2gls'); +push @file_not_found, '^Package .* No file `([^\\\']*)\\\''; +push @generated_exts, 'glo', 'gls', 'glg'; -sub run_makeglossaries { - if ( $silent ) { - system "makeglossaries -q '$_[0]'"; - } else { - system "makeglossaries '$_[0]'"; - }; +add_cus_dep('aux', 'glstex', 0, 'bib2gls'); +sub bib2gls { + return system "bib2gls '$_[0]'"; } -sub run_bib2gls { - if ( $silent ) { - my $ret = system "bib2gls --silent --group '$_[0]'"; - } else { - my $ret = system "bib2gls --group '$_[0]'"; - }; - my ($base, $path) = fileparse( $_[0] ); - if ($path && -e "$base.glstex") { - rename "$base.glstex", "$path$base.glstex"; - } - # Analyze log file. - local *LOG; - $LOG = "$_[0].glg"; - if (!$ret && -e $LOG) { - open LOG, "<$LOG"; - while () { - if (/^Reading (.*\.bib)\s$/) { - rdb_ensure_file( $rule, $1 ); - } - } - close LOG; - } - return $ret; +add_cus_dep('puml', 'eps', 0, 'plantuml'); +sub plantuml { + return system "plantuml -teps '$_[0].puml'"; } -push @file_not_found, '^Package .* No file `([^\\\']*)\\\''; -push @generated_exts, 'glo', 'gls', 'glg'; -push @generated_exts, 'acn', 'acr', 'alg'; -$clean_ext .= ' %R.ist %R.xdy'; -$clean_ext .= ' bbl run.xml'; +add_cus_dep('txt', 'tex', 0, 'time2tex'); +sub time2tex { + return system "./time2tex.py '$_[0].txt' > '$_[0].tex'"; +} diff --git a/makefile b/makefile deleted file mode 100644 index 15eae95..0000000 --- a/makefile +++ /dev/null @@ -1,17 +0,0 @@ -all: plan.pdf -all: research.pdf - -LATEXMKFLAGS += -cd -LATEXMKFLAGS += -interaction=nonstopmode -%.pdf: %.tex - -latexmk $(LATEXMKFLAGS) $< - -%.puml.pdf: %.puml - plantuml -tpdf $< - mv $*.pdf $@ - -%.tex: %.txt - ./time2tex.py $< > $@ - -timerep.pdf: time.tex - diff --git a/projdoc.cls b/projdoc.cls index c0257ca..0d27a1f 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -58,6 +58,7 @@ \RequirePackage{subcaption} \RequirePackage{multicol} \RequirePackage{comparison} % ./comparison.sty +\RequirePackage{xstring} % font style \setmainfont{TeX Gyre Schola} @@ -297,7 +298,8 @@ % adjust scale for puml diagrams \newcommand{\includepumldiag}[1]{% - \fitimg{\includegraphics[scale=0.6]{#1}}% + \StrSubstitute{#1}{.puml}{.eps}[\filename]% + \fitimg{\includegraphics[scale=0.6]{\filename}}% } % prevent page break between two paragraphs -- cgit v1.2.3 From 26feeb970b5ac98747d5a0321d23be01bbf024f8 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 14 Sep 2024 11:14:55 +0200 Subject: update readme + time.txt --- .vimrc | 1 - readme.md | 24 ++++++++++-------------- time.txt | 1 + 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/.vimrc b/.vimrc index 382d2a0..1994b78 100644 --- a/.vimrc +++ b/.vimrc @@ -4,7 +4,6 @@ call vimtex#syntax#core#new_arg('texVerbZoneInline', { \ 'contains': '', \ 'matcher': 'start="{" end="}"' \}) -" and \begin{blockcode} ... \end{blockcode} call vimtex#syntax#core#new_env({ \ 'name': 'blockcode', \ 'region': 'texVerbZone', diff --git a/readme.md b/readme.md index 1375c5e..b63392b 100644 --- a/readme.md +++ b/readme.md @@ -7,20 +7,16 @@ Please see [style.md](./style.md) for writing style and ## Compilation -- A `latexmkrc` file is provided for copmilation with `latexmk`. The documents - should also compile under [Visual Studio Code][vscode] using the [LaTeX - Workshop extension][latexworkshop], as well as [VimTeX][vimtex]. -- A [makefile](./makefile) is used to compile other files (e.g. plantuml - diagrams, [time report](#time-report)) -- These documents use fonts loaded using `fontspec`, please see - [style.md](./style.md) for download links. - -## Time report - -The time report document includes generated LaTeX code which can be compiled -from [time.txt](./time.txt) using [time2tex.py](./time2tex.py). The -[makefile](./makefile) includes a rule that does this, so `make timerep.pdf` -should be used to compile this document specifically. +Requirements: + +- A LaTeX distribution that includes the XeLaTeX compiler +- PlantUML +- Python 3 (timerep only) +- Fonts (see see [style.md](./style.md) for download links) + +A `latexmkrc` file is provided for copmilation with `latexmk`. The documents +should also compile under [Visual Studio Code][vscode] using the [LaTeX +Workshop extension][latexworkshop], as well as [VimTeX][vimtex]. ## Requirements diff --git a/time.txt b/time.txt index e345cde..13fc82a 100644 --- a/time.txt +++ b/time.txt @@ -24,6 +24,7 @@ loek: 2024-09-12 15m integration :: PR merge loek: 2024-09-12 30m research :: audio loek: 2024-09-13 1h10m project meeting loek: 2024-09-13 45m integration :: PR merge +loek: 2024-09-14 45m refactoring :: clean up LaTeX build system max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From c9d4ba22a8b6d0d5fb1062701eda8b1af554d422 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 14 Sep 2024 20:41:10 +0200 Subject: WIP requirements --- .gitignore | 1 + latexmkrc | 8 ++++++-- readme.md | 11 +++-------- reqs.toml | 31 +++++++++++++++++++++++++++++++ reqs2tex.py | 27 +++++++++++++++++++++++++++ requirements.tex | 11 +++++++++++ time2tex.py | 34 +++++++++++++++++++--------------- 7 files changed, 98 insertions(+), 25 deletions(-) create mode 100644 reqs.toml create mode 100755 reqs2tex.py create mode 100644 requirements.tex diff --git a/.gitignore b/.gitignore index dfaa9e7..74caed0 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ # generated files time.tex +reqs.tex diff --git a/latexmkrc b/latexmkrc index 293cf09..2ce20fa 100644 --- a/latexmkrc +++ b/latexmkrc @@ -14,7 +14,6 @@ $clean_ext .= ' %R.ist %R.xdy bbl run.xml'; push @file_not_found, '^Package .* No file `([^\\\']*)\\\''; push @generated_exts, 'glo', 'gls', 'glg'; - add_cus_dep('aux', 'glstex', 0, 'bib2gls'); sub bib2gls { return system "bib2gls '$_[0]'"; @@ -27,6 +26,11 @@ sub plantuml { add_cus_dep('txt', 'tex', 0, 'time2tex'); sub time2tex { - return system "./time2tex.py '$_[0].txt' > '$_[0].tex'"; + return system "python3 time2tex.py '$_[0].txt'"; +} + +add_cus_dep('toml', 'tex', 0, 'reqs2tex'); +sub reqs2tex { + return system "python3 reqs2tex.py '$_[0].toml'"; } diff --git a/readme.md b/readme.md index b63392b..818d445 100644 --- a/readme.md +++ b/readme.md @@ -9,20 +9,15 @@ Please see [style.md](./style.md) for writing style and Requirements: -- A LaTeX distribution that includes the XeLaTeX compiler +- A LaTeX distribution that includes the XeLaTeX compiler and latexmk - PlantUML -- Python 3 (timerep only) +- Python 3 - Fonts (see see [style.md](./style.md) for download links) -A `latexmkrc` file is provided for copmilation with `latexmk`. The documents +A `latexmkrc` file is provided for copmilation with latexmk. The documents should also compile under [Visual Studio Code][vscode] using the [LaTeX Workshop extension][latexworkshop], as well as [VimTeX][vimtex]. -## Requirements - -TODO: how to store + cross-reference requirements w/o extra latex compilation -runs - [vscode]: https://code.visualstudio.com [latexworkshop]: https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop [vimtex]: https://github.com/lervag/vimtex diff --git a/reqs.toml b/reqs.toml new file mode 100644 index 0000000..5e00dd9 --- /dev/null +++ b/reqs.toml @@ -0,0 +1,31 @@ +[audio.async-api] +type = 'system' +priority = 'must' +description = ''' +The public audio \gls{api} supports starting audio samples asynchronously +(i.e.~fire and forget). +''' + +[audio.handle] +type = 'system' +priority = 'must' +description = ''' +The public audio \gls{api} allows the game programmer to control (i.e.~play, +pause and stop) audio samples after they are created/initialized. +''' + +[audio.stream-mix] +type = 'system' +priority = 'must' +description = ''' +The audio system supports playing multiple audio streams simultaniously. +''' + +[aux.license] +type = 'system' +priority = 'must' +description = ''' +External libraries must have a license that is MIT-compatible, or one that +allows linking against MIT code. +''' + diff --git a/reqs2tex.py b/reqs2tex.py new file mode 100755 index 0000000..68c8f40 --- /dev/null +++ b/reqs2tex.py @@ -0,0 +1,27 @@ +#!/bin/python3 +import sys, tomllib + +def fmt(data): + print(data) + return f""" +\\makeatletter +\\makeatother +""" + +def main(input_file): + data = {} + with open(input_file, "rb") as file: + data = tomllib.load(file) + + output = fmt(data) + + output_file = input_file.removesuffix(".toml") + ".tex" + with open(output_file, "w+") as file: + file.write(output) + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("usage: reqs2tex.py reqs.toml") + exit(1) + main(sys.argv[1]) + diff --git a/requirements.tex b/requirements.tex new file mode 100644 index 0000000..39e5831 --- /dev/null +++ b/requirements.tex @@ -0,0 +1,11 @@ +\documentclass{projdoc} +\input{meta.tex} +\input{reqs.tex} + +\title{Requirements} + +\begin{document} + + +\end{document} + diff --git a/time2tex.py b/time2tex.py index fe3091f..6e3de9c 100755 --- a/time2tex.py +++ b/time2tex.py @@ -24,12 +24,12 @@ def fmt_percentage(fac): def fmt_member_overview(times): # calculations out = "" - members = {} + tracked = {} total_time = 0 for time in times: - if not time["name"] in members: - members[time["name"]] = 0 - members[time["name"]] += time["duration"] + if not time["name"] in tracked: + tracked[time["name"]] = 0 + tracked[time["name"]] += time["duration"] total_time += time["duration"] # begin table @@ -38,8 +38,9 @@ def fmt_member_overview(times): out += r"\textbf{Member} & \textbf{Tracked} &\\\midrule{}" # member overview - for name, tracked in members.items(): - out += f"{name} & {fmt_duration(tracked)} & {fmt_percentage(tracked / total_time)}\\\\" + members = sorted(list(set(time["name"] for time in times))) + for name in members: + out += f"{name} & {fmt_duration(tracked[name])} & {fmt_percentage(tracked[name] / total_time)}\\\\" out += r"\midrule{}" # sum @@ -58,7 +59,7 @@ def fmt_weekly_overview(times): weeks = [] member_totals = {} total_time = sum(time["duration"] for time in times) - members = list(set(time["name"] for time in times)) + members = sorted(list(set(time["name"] for time in times))) time_start = min(time["date"] for time in times) time_end = max(time["date"] for time in times) week_start = time_start - timedelta(days=time_start.weekday()) # round down to nearest monday @@ -86,6 +87,7 @@ def fmt_weekly_overview(times): # begin table out += r"\begin{table}\centering" + out += r"\fitimg{" out += f"\\begin{{tabular}}{{l{'r@{~}l' * len(members)}@{{\\qquad}}r}}\\toprule" out += r"\textbf{\#}" for member in members: @@ -105,6 +107,7 @@ def fmt_weekly_overview(times): # end table out += r"\bottomrule\end{tabular}" + out += r"}" # \fitimg out += r"\caption{Tracked time per week}\label{tab:time-weekly}" out += r"\end{table}" @@ -170,17 +173,15 @@ def parse(content): return out def fmt(times): - # TODO: Task overview - print(f""" + return f""" \\section{{Overviews}}\n \\subsection{{Members}}\n {fmt_member_overview(times)} \\subsection{{Weekly}}\n {fmt_weekly_overview(times)} -""") +""" -def main(): - input_file = sys.argv[1] +def main(input_file): content = "" with open(input_file, "r") as file: content = file.read() @@ -189,12 +190,15 @@ def main(): except Exception as e: print(f"{input_file}: {e}") exit(1) + output = fmt(parsed) - fmt(parsed) + output_file = input_file.removesuffix(".txt") + ".tex" + with open(output_file, "w+") as file: + file.write(output) if __name__ == "__main__": if len(sys.argv) != 2: - print("usage: time2tex ") + print("usage: time2tex.py time.txt") exit(1) - main() + main(sys.argv[1]) -- cgit v1.2.3 From 916912dfb6a6bceb58c36862368825d53d33d377 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 14 Sep 2024 20:42:18 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 13fc82a..7b63ae8 100644 --- a/time.txt +++ b/time.txt @@ -25,6 +25,7 @@ loek: 2024-09-12 30m research :: audio loek: 2024-09-13 1h10m project meeting loek: 2024-09-13 45m integration :: PR merge loek: 2024-09-14 45m refactoring :: clean up LaTeX build system +loek: 2024-09-14 1h10m docs :: requirements max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 83999b29846e1338e43bf9b2fe7489d778cb7d0c Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Sun, 15 Sep 2024 13:12:27 +0200 Subject: research --- research.tex | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/research.tex b/research.tex index b26018e..8dfb2a6 100644 --- a/research.tex +++ b/research.tex @@ -197,25 +197,6 @@ Unity supports many different image formats: \item hdr. \end{itemize} -\paragraph{scripts} -The different text scripts unity supports: - \begin{itemize} - \item txt - \item html - \item htm - \item xml - \item json - \item csv - \item yaml - \item bytes - \item fnt - \item manifest - \item md - \item js - \item boo - \item rsp - \end{itemize} - \subsection{Audio Format} The choice of audio format for the Crepe game engine depends on several factors, including sound quality, memory usage, and licensing. According to various sources \href{https://dev.to/tenry/comparison-of-audio-formats-for-games-jak}{comparison audio formats}, \href{https://www.universityofgames.net/articles/audio-file-formats-used-in-game-development/}{Audio files in games} , the most commonly used audio formats in game development are WAV, MP3, and Ogg. \paragraph{Licensing} Historically, MP3 had patents on the audio format, but these restrictions have expired. Ogg and FLAC, both developed by Xiph.Org, are open-source formats. Additionally, the WAV format, though widely used, does not require a specific license for distribution. -- cgit v1.2.3 From 69b9b9c94b09da0fe60cbc5aaf3515f478d7bf3d Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Sun, 15 Sep 2024 13:31:08 +0200 Subject: uren deze week --- time.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/time.txt b/time.txt index 7b63ae8..e6ba896 100644 --- a/time.txt +++ b/time.txt @@ -62,6 +62,14 @@ niels: 2024-09-04 2h setting up vimtex on neovim niels: 2024-09-04 1h researching different code styles and c++ guidelines niels: 2024-09-05 1h30m first group meeting niels: 2024-09-06 2h added c++ guidelines in the contributing.md +niels: 2024-09-09 1h adjusted code of conduct based on feedback +niels: 2024-09-10 1h30m project meeting +niels: 2024-09-10 45m project videos +niels: 2024-09-10 40m second project lesson (one-to-one meeting with Bob) +niels: 2024-09-11 3h researching the different resourches from unity +niels: 2024-09-12 3h researching the best option for audio/sprites format and comparing it to sdl2 and sfml. +niels: 2024-09-13 1h30m project meeting +niels: 2024-09-13 10m weekly update jaro: 2024-09-02 1h project meeting :: project kickoff jaro: 2024-09-02 45m project meeting -- cgit v1.2.3 From f6cb1e9d141d881ae6205027626d6643776e833c Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sun, 15 Sep 2024 20:46:48 +0200 Subject: WIP requirements --- example.tex | 13 +++- latexmkrc | 5 +- projdoc.cls | 8 ++ reqs2tex.py | 27 ------- scripts/.gitignore | 1 + scripts/reqs2tex.py | 83 ++++++++++++++++++++ scripts/tex.py | 43 +++++++++++ scripts/time2tex.py | 213 ++++++++++++++++++++++++++++++++++++++++++++++++++++ time2tex.py | 204 ------------------------------------------------- 9 files changed, 362 insertions(+), 235 deletions(-) delete mode 100755 reqs2tex.py create mode 100644 scripts/.gitignore create mode 100755 scripts/reqs2tex.py create mode 100644 scripts/tex.py create mode 100755 scripts/time2tex.py delete mode 100755 time2tex.py diff --git a/example.tex b/example.tex index 4ae4d95..ee1377a 100644 --- a/example.tex +++ b/example.tex @@ -3,6 +3,8 @@ % with the [draft] option. this replaces all images with placeholders. \input{meta.tex} +\input{reqs.aux} + \title{Example Document} \begin{document} @@ -155,17 +157,24 @@ Description: \con{Bad thing 2} \end{comparison} -\subsection{Citations} +\subsection{References} + +\subsubsection{Citations} Citations are inserted using the \codeinline{\autocite} command \autocite{rfc:3339}. The bibliography is automatically printed after \codeinline{\end{document}}. -\subsection{Glossary} +\subsubsection{Glossary} Glossary entries can be inserted using the \codeinline{\gls} commands. Example: ``\Gls{sdl2} handles \glspl{hid} as well!''. In following occurrences of acronyms, only their short form is printed: `\gls{sdl2}' and `\gls{hid}'. All of these link to the glossary that is automatically printed after \codeinline{\end{document}}. +\subsubsection{Requirements} + +Requirements are referenced like \codeinline{\label}s: +e.g.~\cref{req:audio:handle:id,req:audio:async-api:id}. + \end{document} diff --git a/latexmkrc b/latexmkrc index 2ce20fa..5a49064 100644 --- a/latexmkrc +++ b/latexmkrc @@ -26,11 +26,12 @@ sub plantuml { add_cus_dep('txt', 'tex', 0, 'time2tex'); sub time2tex { - return system "python3 time2tex.py '$_[0].txt'"; + return system "python3 scripts/time2tex.py '$_[0].txt'"; } add_cus_dep('toml', 'tex', 0, 'reqs2tex'); +add_cus_dep('toml', 'aux', 0, 'reqs2tex'); sub reqs2tex { - return system "python3 reqs2tex.py '$_[0].toml'"; + return system "python3 scripts/reqs2tex.py '$_[0].toml'"; } diff --git a/projdoc.cls b/projdoc.cls index 0d27a1f..c11fe61 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -307,3 +307,11 @@ \newcommand\noparbreak{\par\nobreak\@afterheading} \makeatother +% cleveref extra types +\crefname{paragraph}{paragraph}{paragraphs} +\Crefname{paragraph}{Paragraph}{Paragraphs} +\crefname{requirement}{requirement}{requirements} +\Crefname{requirement}{Requirement}{Requirements} +\crefname{test}{test}{tests} +\Crefname{test}{Test}{Tests} + diff --git a/reqs2tex.py b/reqs2tex.py deleted file mode 100755 index 68c8f40..0000000 --- a/reqs2tex.py +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/python3 -import sys, tomllib - -def fmt(data): - print(data) - return f""" -\\makeatletter -\\makeatother -""" - -def main(input_file): - data = {} - with open(input_file, "rb") as file: - data = tomllib.load(file) - - output = fmt(data) - - output_file = input_file.removesuffix(".toml") + ".tex" - with open(output_file, "w+") as file: - file.write(output) - -if __name__ == "__main__": - if len(sys.argv) != 2: - print("usage: reqs2tex.py reqs.toml") - exit(1) - main(sys.argv[1]) - diff --git a/scripts/.gitignore b/scripts/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/scripts/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py new file mode 100755 index 0000000..9e71a48 --- /dev/null +++ b/scripts/reqs2tex.py @@ -0,0 +1,83 @@ +#!/bin/python3 +import sys, tomllib, tex + +def flatten(data): + if 'description' in data: + return [ data ] + out = [] + for key, value in data.items(): + items = flatten(value) + for item in items: + if 'label' in item: + item['label'] = f"{key}:{item['label']}" + else: + item['label'] = f"{key}" + out += items + return out + +id_counter = 0 +def make_id(item): + global id_counter + id_counter += 1 + return "{type_short}#{counter:03d}".format( + type_short = item['type'][0].upper(), + counter = id_counter, + ) + +def convert(data): + reqs = flatten(data) + for index, item in enumerate(reqs): + item['id'] = tex.esc(make_id(item)) + item['index'] = index + item['description'] = item.get('description', '???') + item['done'] = item.get('done', None) + item['priority'] = item.get('priority', 'must') + item['type'] = item.get('type', 'system') + item['deleted'] = item.get('deleted', False) + + # skip deleted requirements (but process for make_id) + reqs = [item for item in reqs if item['deleted'] == False] + + return reqs + +def req2aux(req): + # TODO: this is a dead-end solution, newlabel only works for in-document anchors, not external links + out = [ + tex.scmd('newlabel', f"req:{req['label']}:id", tex.group(req['id'], req['id'], '', './requirements.pdf', '')), + tex.scmd('newlabel', f"req:{req['label']}:id@cref", tex.group(f"[requirement][][]{req['id']}", '')), + ] + return "\n".join([tex.auxout(line) for line in out]) + +def fmt_aux(data): + out = "" + out += tex.cmd('makeatletter') + out += "\n".join([req2aux(req) for req in data]) + out += tex.cmd('makeatother') + return out + +def fmt_tex(data): + return "\n".join([ + tex.cmd('relax') + ]) + +def main(input_file): + data = {} + with open(input_file, "rb") as file: + data = tomllib.load(file) + + requirements = convert(data) + + output_aux = input_file.removesuffix(".toml") + ".aux" + with open(output_aux, "w+") as file: + file.write(fmt_aux(requirements)) + + output_tex = input_file.removesuffix(".toml") + ".tex" + with open(output_tex, "w+") as file: + file.write(fmt_tex(requirements)) + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("usage: reqs2tex.py reqs.toml") + exit(1) + main(sys.argv[1]) + diff --git a/scripts/tex.py b/scripts/tex.py new file mode 100644 index 0000000..b044857 --- /dev/null +++ b/scripts/tex.py @@ -0,0 +1,43 @@ +# utility function for converting latex code + +def group(*args): + return "".join("{" + arg + "}" for arg in args) + +def string(content): + return r"\string" + content + +def cmd(*args): + name = args[0] + args = args[1:] + if len(args) == 0: args = [""] + return f"\\{name}" + group(*args) + +def csdef(*args): + return r"\def" + cmd(*args) + +def auxout(content): + return r"\write\@auxout" + group(content) + +def scmd(*args): + return string(cmd(*args)) + +def env(name, *args): + content = args[-1] + args = args[0:-1] + out = f"\\begin{{{name}}}" + if len(args) > 0: + out += group(*args) + out += content + out += f"\\end{{{name}}}" + return out + +def esc(plain): + plain = plain.replace("\\", "\\string\\") + plain = plain.replace("#", "\\#") + plain = plain.replace("$", "\\$") + plain = plain.replace("%", "\\%") + return plain + +def tabrule(*cells): + return "&".join(cells) + "\\\\" + diff --git a/scripts/time2tex.py b/scripts/time2tex.py new file mode 100755 index 0000000..17661d5 --- /dev/null +++ b/scripts/time2tex.py @@ -0,0 +1,213 @@ +#!/bin/python3 +import sys, tex +from datetime import datetime, timedelta + +def fmt_duration(sec): + mins = (sec + 59) // 60 # integer divide, round up + out = [] + + if mins == 0: + return "--" + + hour = mins // 60 + if hour > 0: + out.append("%02dh" % (hour, )) + mins = mins % 60 + + out.append("%02dm" % (mins, )) + + return "\\,".join(out) + +def fmt_percentage(fac): + return tex.sgroup( + tex.cmd('footnotesize') +\ + tex.cmd('itshape') +\ + tex.esc(f"({round(fac * 100)}%)") + ) + +def fmt_member_overview(times): + # calculations + tracked = {} + total_time = 0 + for time in times: + if not time["name"] in tracked: + tracked[time["name"]] = 0 + tracked[time["name"]] += time["duration"] + total_time += time["duration"] + + out = "" + + # header + out += tex.cmd('toprule') + out += tex.tabrule(tex.cmd('textbf', 'Member'), tex.cmd('textbf', 'Tracked'), '') + out += tex.cmd('midrule') + + # member overview + members = sorted(list(set(time["name"] for time in times))) + for name in members: + out += tex.tabrule(name, fmt_duration(tracked[name]), fmt_percentage(tracked[name] / total_time)) + out += tex.cmd('midrule') + + # sum + out += tex.tabrule('', fmt_duration(total_time), '') + out += tex.cmd('bottomrule') + + out = tex.env('tabular', 'lr@{~}l', out) + out = tex.cmd('centering') +\ + out +\ + tex.cmd('caption', 'Tracked time per group member') +\ + tex.cmd('label', 'tab:time-member') + out = tex.env('table', out) + + return out + +def fmt_weekly_overview(times): + # calculations + out = "" + weeks = [] + member_totals = {} + total_time = sum(time["duration"] for time in times) + members = sorted(list(set(time["name"] for time in times))) + time_start = min(time["date"] for time in times) + time_end = max(time["date"] for time in times) + week_start = time_start - timedelta(days=time_start.weekday()) # round down to nearest monday + week_end = time_end + timedelta(days=7-time_end.weekday()) + + week = week_start + week_num = 1 + while week < week_end: + week_times = [time for time in times if time["date"] >= week and time["date"] < (week + timedelta(days=7))] + + week_entry = { + "num": week_num, + "members": {}, + "total": sum(time["duration"] for time in week_times) + } + + for member in members: + week_entry["members"][member] = sum(time["duration"] for time in week_times if time["name"] == member) + + weeks.append(week_entry) + week_num += 1 + week += timedelta(days=7) + for member in members: + member_totals[member] = sum(time["duration"] for time in times if time["name"] == member) + + # TODO: refactor + # begin table + out += r"\begin{table}\centering" + out += r"\fitimg{" + out += f"\\begin{{tabular}}{{l{'r@{~}l' * len(members)}@{{\\qquad}}r}}\\toprule" + out += r"\textbf{\#}" + for member in members: + out += f"&\\textbf{{{member}}}&" + out += r"&\textbf{Subtotal}\\\midrule{}" + + for entry in weeks: + out += f"{entry['num']}" + for member in members: + out += f"&{fmt_duration(entry['members'][member])}&{fmt_percentage(entry['members'][member] / entry['total'])}" + out += f"&{fmt_duration(entry['total'])}\\\\" + + out += r"\midrule{}" + for member in members: + out += f"&{fmt_duration(member_totals[member])}&{fmt_percentage(member_totals[member] / total_time)}" + out += f"&{fmt_duration(total_time)}\\\\" + + # end table + out += r"\bottomrule\end{tabular}" + out += r"}" # \fitimg + out += r"\caption{Tracked time per week}\label{tab:time-weekly}" + out += r"\end{table}" + + return out + +def duration2secs(duration): + out = 0 # output (seconds) + cur = 0 # current figure (unknown) + for c in duration: + if c.isdigit(): + cur = cur * 10 + int(c) + continue + if c == "h": + out += cur * 3600 + cur = 0 + continue + if c == "m": + out += cur * 60 + cur = 0 + continue + if c == "s": + out += cur * 1 + cur = 0 + continue + + raise Exception("invalid duration format") + if cur != 0: raise Exception("invalid duration format") + return out + +def line2data(line): + # parse fields from input string + data = {} + next = line.find(':') + data["name"] = line[0:next].strip() + line = line[next+1:].strip() + next = line.find(' ') + data["date"] = line[0:next].strip() + line = line[next+1:].strip() + next = line.find(' ') + data["duration"] = line[0:next].strip() + line = line[next+1:].strip() + data["description"] = line + + # deserialize parsed fields + data["name"] = data["name"].title() + data["date"] = datetime.strptime(data["date"], '%Y-%m-%d') + data["duration"] = duration2secs(data["duration"]) + data["description"] = [el.strip() for el in data["description"].split("::")] + + return data + +def parse(content): + # split content at newlines + lines = content.split("\n") + out = [] + for i, line in enumerate(lines): + line = line.strip() + if line.startswith("#"): continue + if len(line) == 0: continue + + try: out.append(line2data(line)) + except Exception as e: raise Exception(f"line {i+1}: {e}") + return out + +def fmt(times): + return "\n\n".join([ + tex.cmd('section', 'Overviews'), + tex.cmd('subsection', 'Members'), + fmt_member_overview(times), + tex.cmd('subsection', 'Weekly'), + fmt_weekly_overview(times), + ]) + +def main(input_file): + content = "" + with open(input_file, "r") as file: + content = file.read() + + try: parsed = parse(content) + except Exception as e: + print(f"{input_file}: {e}") + exit(1) + output = fmt(parsed) + + output_file = input_file.removesuffix(".txt") + ".tex" + with open(output_file, "w+") as file: + file.write(output) + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("usage: time2tex.py time.txt") + exit(1) + main(sys.argv[1]) + diff --git a/time2tex.py b/time2tex.py deleted file mode 100755 index 6e3de9c..0000000 --- a/time2tex.py +++ /dev/null @@ -1,204 +0,0 @@ -#!/bin/python3 -import sys -from datetime import datetime, timedelta - -def fmt_duration(sec): - mins = (sec + 59) // 60 # integer divide, round up - out = [] - - if mins == 0: - return "--" - - hour = mins // 60 - if hour > 0: - out.append("%02dh" % (hour, )) - mins = mins % 60 - - out.append("%02dm" % (mins, )) - - return "\\,".join(out) - -def fmt_percentage(fac): - return f"{{\\footnotesize\\itshape({round(fac * 100)}\\%)}}" - -def fmt_member_overview(times): - # calculations - out = "" - tracked = {} - total_time = 0 - for time in times: - if not time["name"] in tracked: - tracked[time["name"]] = 0 - tracked[time["name"]] += time["duration"] - total_time += time["duration"] - - # begin table - out += r"\begin{table}\centering" - out += r"\begin{tabular}{lr@{~}l}\toprule" - out += r"\textbf{Member} & \textbf{Tracked} &\\\midrule{}" - - # member overview - members = sorted(list(set(time["name"] for time in times))) - for name in members: - out += f"{name} & {fmt_duration(tracked[name])} & {fmt_percentage(tracked[name] / total_time)}\\\\" - out += r"\midrule{}" - - # sum - out += f"&{fmt_duration(total_time)}&\\\\" - - # end table - out += r"\bottomrule\end{tabular}" - out += r"\caption{Tracked time per group member}\label{tab:time-member}" - out += r"\end{table}" - - return out - -def fmt_weekly_overview(times): - # calculations - out = "" - weeks = [] - member_totals = {} - total_time = sum(time["duration"] for time in times) - members = sorted(list(set(time["name"] for time in times))) - time_start = min(time["date"] for time in times) - time_end = max(time["date"] for time in times) - week_start = time_start - timedelta(days=time_start.weekday()) # round down to nearest monday - week_end = time_end + timedelta(days=7-time_end.weekday()) - - week = week_start - week_num = 1 - while week < week_end: - week_times = [time for time in times if time["date"] >= week and time["date"] < (week + timedelta(days=7))] - - week_entry = { - "num": week_num, - "members": {}, - "total": sum(time["duration"] for time in week_times) - } - - for member in members: - week_entry["members"][member] = sum(time["duration"] for time in week_times if time["name"] == member) - - weeks.append(week_entry) - week_num += 1 - week += timedelta(days=7) - for member in members: - member_totals[member] = sum(time["duration"] for time in times if time["name"] == member) - - # begin table - out += r"\begin{table}\centering" - out += r"\fitimg{" - out += f"\\begin{{tabular}}{{l{'r@{~}l' * len(members)}@{{\\qquad}}r}}\\toprule" - out += r"\textbf{\#}" - for member in members: - out += f"&\\textbf{{{member}}}&" - out += r"&\textbf{Subtotal}\\\midrule{}" - - for entry in weeks: - out += f"{entry['num']}" - for member in members: - out += f"&{fmt_duration(entry['members'][member])}&{fmt_percentage(entry['members'][member] / entry['total'])}" - out += f"&{fmt_duration(entry['total'])}\\\\" - - out += r"\midrule{}" - for member in members: - out += f"&{fmt_duration(member_totals[member])}&{fmt_percentage(member_totals[member] / total_time)}" - out += f"&{fmt_duration(total_time)}\\\\" - - # end table - out += r"\bottomrule\end{tabular}" - out += r"}" # \fitimg - out += r"\caption{Tracked time per week}\label{tab:time-weekly}" - out += r"\end{table}" - - return out - -def duration2secs(duration): - out = 0 # output (seconds) - cur = 0 # current figure (unknown) - for c in duration: - if c.isdigit(): - cur = cur * 10 + int(c) - continue - if c == "h": - out += cur * 3600 - cur = 0 - continue - if c == "m": - out += cur * 60 - cur = 0 - continue - if c == "s": - out += cur * 1 - cur = 0 - continue - - raise Exception("invalid duration format") - if cur != 0: raise Exception("invalid duration format") - return out - -def line2data(line): - # parse fields from input string - data = {} - next = line.find(':') - data["name"] = line[0:next].strip() - line = line[next+1:].strip() - next = line.find(' ') - data["date"] = line[0:next].strip() - line = line[next+1:].strip() - next = line.find(' ') - data["duration"] = line[0:next].strip() - line = line[next+1:].strip() - data["description"] = line - - # deserialize parsed fields - data["name"] = data["name"].title() - data["date"] = datetime.strptime(data["date"], '%Y-%m-%d') - data["duration"] = duration2secs(data["duration"]) - data["description"] = [el.strip() for el in data["description"].split("::")] - - return data - -def parse(content): - # split content at newlines - lines = content.split("\n") - out = [] - for i, line in enumerate(lines): - line = line.strip() - if line.startswith("#"): continue - if len(line) == 0: continue - - try: out.append(line2data(line)) - except Exception as e: raise Exception(f"line {i+1}: {e}") - return out - -def fmt(times): - return f""" -\\section{{Overviews}}\n -\\subsection{{Members}}\n -{fmt_member_overview(times)} -\\subsection{{Weekly}}\n -{fmt_weekly_overview(times)} -""" - -def main(input_file): - content = "" - with open(input_file, "r") as file: - content = file.read() - - try: parsed = parse(content) - except Exception as e: - print(f"{input_file}: {e}") - exit(1) - output = fmt(parsed) - - output_file = input_file.removesuffix(".txt") + ".tex" - with open(output_file, "w+") as file: - file.write(output) - -if __name__ == "__main__": - if len(sys.argv) != 2: - print("usage: time2tex.py time.txt") - exit(1) - main(sys.argv[1]) - -- cgit v1.2.3 From 1a7c8385846a49bf7bc572a5fb034084d95d17e1 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sun, 15 Sep 2024 20:47:42 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 7b63ae8..c03b212 100644 --- a/time.txt +++ b/time.txt @@ -26,6 +26,7 @@ loek: 2024-09-13 1h10m project meeting loek: 2024-09-13 45m integration :: PR merge loek: 2024-09-14 45m refactoring :: clean up LaTeX build system loek: 2024-09-14 1h10m docs :: requirements +loek: 2024-09-15 2h55m docs :: requirements max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From fc4df693f53b369b79e3f5c72a29110862390744 Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Mon, 16 Sep 2024 10:23:00 +0200 Subject: added working hours --- time.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/time.txt b/time.txt index ea31ac3..f79885b 100644 --- a/time.txt +++ b/time.txt @@ -54,6 +54,11 @@ wouter: 2024-09-05 20m setting up research document wouter: 2024-09-05 1h researching game enigne wouter: 2024-09-06 3h researching game enigne wouter: 2024-09-09 2h researching SDL and SFML2 +wouter: 2024-09-10 1h30m third project meeting +wouter: 2024-09-10 45m project videos +wouter: 2024-09-10 40m second project lesson +wouter: 2024-09-12 2h researching gameloops +wouter: 2024-09-14 3h working on game loop poc niels: 2024-09-02 1h project meeting :: project kickoff niels: 2024-09-02 45m project meeting -- cgit v1.2.3 From dd2db2b7f62106e6c6c2abdaed73c5f608c690c6 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Mon, 16 Sep 2024 16:40:46 +0200 Subject: update reqs2tex and add comments to reqs.toml --- reqs.toml | 25 +++++++++++++++++++++++++ scripts/reqs2tex.py | 42 +++++++++++++++++++++++++++++++++++------- scripts/tex.py | 3 +++ 3 files changed, 63 insertions(+), 7 deletions(-) diff --git a/reqs.toml b/reqs.toml index 5e00dd9..c05cf71 100644 --- a/reqs.toml +++ b/reqs.toml @@ -1,10 +1,35 @@ +# This is a TOML file containing all project requirements. The reqs2tex script +# can be used to generate the files necessary to compile requirements.tex and +# cross-reference the requirements from other documents. +# +# Note that TOML has a hash table structure, so keys used for defining +# requirement properties cannot be used for requirement IDs. The properties are: +# label, type, id, index, deleted, done, description, priority + +# This is the requirement cross-reference ID. Requirements can be +# (cross-)referenced from LaTeX by prefixing this ID with `req:` and +# substituting dots for colons (i.e. this requirement is referenced as +# \cref{req:audio:async-api}). [audio.async-api] +# Requirement type ('system' | 'user') type = 'system' +# MoSCoW priority ('must' | 'should' | 'could' | 'will not') priority = 'must' +# Requirement body. Supports LaTeX formatting. (tip: use single quotes so +# backslash doesn't act as an escape character) description = ''' The public audio \gls{api} supports starting audio samples asynchronously (i.e.~fire and forget). ''' +# Definition of done (user requirements only). If 'done' is a string, it is +# treated as LaTeX code (like description), if it is a list of strings, each +# item is treated as the ID of another requirement. +#done = 'When I feel like it' +#done = [ 'audio.handle', 'audio.stream-mix' ] +# Requirements that are no longer applicable should set `deleted` to `true`. +# This will make sure the requirements are numbered consistently across +# different document revisions. +#deleted = true [audio.handle] type = 'system' diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 9e71a48..c5ab3dd 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -9,7 +9,7 @@ def flatten(data): items = flatten(value) for item in items: if 'label' in item: - item['label'] = f"{key}:{item['label']}" + item['label'] = f"{key}.{item['label']}" else: item['label'] = f"{key}" out += items @@ -24,16 +24,44 @@ def make_id(item): counter = id_counter, ) +def sanitize(item, ids): + def die(msg): + print(f"[{item['label']}]: {msg}") + exit(1) + + # ensure properties + item['description'] = item.get('description') + item['done'] = item.get('done') + item['priority'] = item.get('priority') + item['type'] = item.get('type') + + # type checks + if item['type'] not in ['system', 'user']: + die(f"unknown or missing requirement type {repr(item['type'])}") + if item['priority'] not in ['must', 'should', 'could', 'will not']: + die(f"unknown or missing requirement priority {repr(item['type'])}") + + # logic checks + if item['type'] != 'user' and item['done'] is not None: + die("has definition of done but is not a user requirement") + + # conversions + if isinstance(item['done'], list): + # safety check + if not set(item['done']).issubset(ids): + die("definition of done includes unknown requirement(s)") + item['done'] = tex.cmd('Cref', tex.label2ref(*item['done'])) + def convert(data): reqs = flatten(data) - for index, item in enumerate(reqs): + index = 0 + for item in reqs: item['id'] = tex.esc(make_id(item)) - item['index'] = index - item['description'] = item.get('description', '???') - item['done'] = item.get('done', None) - item['priority'] = item.get('priority', 'must') - item['type'] = item.get('type', 'system') item['deleted'] = item.get('deleted', False) + if item['deleted']: continue + item['index'] = index + index += 1 + sanitize(item, [req['label'] for req in reqs]) # skip deleted requirements (but process for make_id) reqs = [item for item in reqs if item['deleted'] == False] diff --git a/scripts/tex.py b/scripts/tex.py index b044857..2fd51d8 100644 --- a/scripts/tex.py +++ b/scripts/tex.py @@ -41,3 +41,6 @@ def esc(plain): def tabrule(*cells): return "&".join(cells) + "\\\\" +def label2ref(*labels): + return ",".join(["req:" + label.replace('.', ':') for label in labels]) + -- cgit v1.2.3 From f923835a5e82d727dc27d61ef9ef9d731580b0c9 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Mon, 16 Sep 2024 16:53:41 +0200 Subject: Added popular ECS --- research.tex | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/research.tex b/research.tex index ad33d10..3e2e103 100644 --- a/research.tex +++ b/research.tex @@ -66,10 +66,30 @@ must be stored efficiently, and entities must be provided with the required beha such as audio, position, or physics. To create diverse entities with specific functions: A scene can contain many different kinds of entities, each with different properties and functions. But no matter how different each entity is, it remains an -entity. To assign properties and functions to entities, components are used. Entt is -an example of an \gls{ecs}. +entity. To assign properties and functions to entities, components are used. % TODO: ref?entt +There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most +popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is based +on the amount of stars on GitHub. +\begin{table} + \begin{tabularx}{\linewidth}{lXr} + \toprule + \textbf{Name} & \textbf{Short Description} & \textbf{GitHub Stars} \\ + \midrule + EnTT & Fast and reliable entity-component system & 10k \\ + Flecs & A Multithreaded Entity Component System written for C89 and C99 & 6.3k \\ + EntityX & Fast, type-safe C++ entity component system & 2.2k \\ + \bottomrule + \end{tabularx} + \caption{Popular \gls{ecs} libraries} + \label{tab:popularECSLibraries} +\end{table} +https://github.com/abeimler/ecs_benchmark + +It is, of course, not necessary to use a library to implement an \gls{ecs} architecture. +However, it seems very hard to achieve the same performance as a library. https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#should-i-write-my-own-ecs + \subsection{Conclusion} \section{Third-party Tools} -- cgit v1.2.3 From da5b59c0fff84c60acd893ef9547a46da5e0b664 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Mon, 16 Sep 2024 16:58:07 +0200 Subject: Added tasks --- time.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/time.txt b/time.txt index f79885b..24e31e6 100644 --- a/time.txt +++ b/time.txt @@ -43,6 +43,9 @@ max: 2024-09-10 40m second project lesson (one-to-one meeting with Bob) max: 2024-09-11 1h50m first review of Jaro's Plan document max: 2024-09-12 1h trying to fix LaTeX and VS code settings max: 2024-09-12 1h worked on gameObject research +max: 2024-09-13 1h30m fourth project meeting +max: 2024-09-16 1h researching self-made ECS possibilities +max: 2024-09-16 1h30m researching ECS libraries wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From b31ebef3db3765eef8e0492897e870a9fa4cd32b Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Mon, 16 Sep 2024 18:48:23 +0200 Subject: fix cross-reference links to external file --- example.tex | 4 ++-- projdoc.cls | 1 + readme.md | 6 ++++++ requirements.tex | 1 - scripts/reqs2tex.py | 13 +++++-------- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/example.tex b/example.tex index ee1377a..e0d21c0 100644 --- a/example.tex +++ b/example.tex @@ -3,7 +3,7 @@ % with the [draft] option. this replaces all images with placeholders. \input{meta.tex} -\input{reqs.aux} +\externaldocument{reqs}[./requirements.pdf] \title{Example Document} @@ -174,7 +174,7 @@ the glossary that is automatically printed after \codeinline{\end{document}}. \subsubsection{Requirements} Requirements are referenced like \codeinline{\label}s: -e.g.~\cref{req:audio:handle:id,req:audio:async-api:id}. +e.g.~\cref{req:audio:handle,req:audio:async-api}. \end{document} diff --git a/projdoc.cls b/projdoc.cls index c11fe61..8a592e3 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -40,6 +40,7 @@ \RequirePackage{tabularx} \RequirePackage{booktabs} \RequirePackage{needspace} +\RequirePackage{xr-hyper} \RequirePackage{hyperref} \RequirePackage{microtype} \RequirePackage{xcolor} diff --git a/readme.md b/readme.md index 818d445..7b58cfd 100644 --- a/readme.md +++ b/readme.md @@ -18,6 +18,12 @@ A `latexmkrc` file is provided for copmilation with latexmk. The documents should also compile under [Visual Studio Code][vscode] using the [LaTeX Workshop extension][latexworkshop], as well as [VimTeX][vimtex]. +## TODO + +- Requirement cross-references are broken (they print both the label and the + path to the other document, should be label only). Interesting: + `\creflabelformat` and `\@templabel` (inside #2 of `\creflabelformat`). + [vscode]: https://code.visualstudio.com [latexworkshop]: https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop [vimtex]: https://github.com/lervag/vimtex diff --git a/requirements.tex b/requirements.tex index 39e5831..1b51220 100644 --- a/requirements.tex +++ b/requirements.tex @@ -6,6 +6,5 @@ \begin{document} - \end{document} diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index c5ab3dd..667eeb6 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -69,18 +69,15 @@ def convert(data): return reqs def req2aux(req): - # TODO: this is a dead-end solution, newlabel only works for in-document anchors, not external links + ref = tex.label2ref(req['label']) out = [ - tex.scmd('newlabel', f"req:{req['label']}:id", tex.group(req['id'], req['id'], '', './requirements.pdf', '')), - tex.scmd('newlabel', f"req:{req['label']}:id@cref", tex.group(f"[requirement][][]{req['id']}", '')), + tex.cmd('newlabel', f"{ref}", tex.group(req['id'], req['id'], 'ggg', 'hhh', 'iii')), + tex.cmd('newlabel', f"{ref}@cref", tex.group(f"[requirement][aaa][bbb]{req['id']}", '[ccc][ddd][eee]fff')), ] - return "\n".join([tex.auxout(line) for line in out]) + return "\n".join(out) def fmt_aux(data): - out = "" - out += tex.cmd('makeatletter') - out += "\n".join([req2aux(req) for req in data]) - out += tex.cmd('makeatother') + out = "\n".join([req2aux(req) for req in data]) return out def fmt_tex(data): -- cgit v1.2.3 From 2e49e0e0db184295eb08e930a3ccdf10e80e40fe Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Mon, 16 Sep 2024 19:07:50 +0200 Subject: implement simple requirements dump --- glossary.bib | 5 +++++ projdoc.cls | 25 +++++++++++++++---------- requirements.tex | 12 +++++++++++- scripts/reqs2tex.py | 32 +++++++++++++++++++------------- scripts/tex.py | 8 +++++++- 5 files changed, 57 insertions(+), 25 deletions(-) diff --git a/glossary.bib b/glossary.bib index 4d02e4a..437db86 100644 --- a/glossary.bib +++ b/glossary.bib @@ -28,3 +28,8 @@ description = {Graphics library developed by \hbox{Microsoft}}, } +@acronym{api, + short = {API}, + long = {Application Programming Interface}, +} + diff --git a/projdoc.cls b/projdoc.cls index 8a592e3..fe8c8bc 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -121,16 +121,23 @@ itemsep=\dimexpr\style@itemsep-\style@parsep\relax, parsep=\style@parsep, } -\def\projdoc@setdescriptionstyle{% +\def\projdoc@description@before{% \renewcommand\makelabel[1]{% {\bfseries ##1}:% }% } -\setdescription{ - before={\projdoc@setdescriptionstyle}, - leftmargin=3em, - labelindent=3ex, +\newlength\projdoc@description@leftmargin% +\projdoc@description@leftmargin=3em% +\newlength\projdoc@description@labelindent% +\projdoc@description@labelindent=3ex% +\def\projdoc@setdescriptionstyle{% + \setdescription{ + before={\projdoc@description@before}, + leftmargin=\projdoc@description@leftmargin, + labelindent=\projdoc@description@labelindent, + }% } +\projdoc@setdescriptionstyle% \makeatother % create a label using \customlabel[]{}{} that displays @@ -230,11 +237,9 @@ }{}% % glossary \ifbool{projdoc@used@gls}{% - \setdescription{ - before={\projdoc@setdescriptionstyle}, - leftmargin=2ex, - labelindent=0pt, - }% + \projdoc@description@leftmargin=2ex% + \projdoc@description@labelindent=0pt% + \projdoc@setdescriptionstyle% \section*{Glossary}% \begin{multicols}{2}% \renewcommand{\glossarysection}[2][]{}% diff --git a/requirements.tex b/requirements.tex index 1b51220..dee529d 100644 --- a/requirements.tex +++ b/requirements.tex @@ -1,10 +1,20 @@ \documentclass{projdoc} \input{meta.tex} -\input{reqs.tex} + +\makeatletter +\projdoc@description@leftmargin=2ex +\projdoc@description@labelindent=0pt +\projdoc@setdescriptionstyle +\makeatother \title{Requirements} \begin{document} +\section{Requirements} +\begin{multicols}{2} +\input{reqs.tex} +\end{multicols} + \end{document} diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 667eeb6..3bf0501 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -68,22 +68,28 @@ def convert(data): return reqs -def req2aux(req): - ref = tex.label2ref(req['label']) - out = [ - tex.cmd('newlabel', f"{ref}", tex.group(req['id'], req['id'], 'ggg', 'hhh', 'iii')), - tex.cmd('newlabel', f"{ref}@cref", tex.group(f"[requirement][aaa][bbb]{req['id']}", '[ccc][ddd][eee]fff')), - ] - return "\n".join(out) - def fmt_aux(data): - out = "\n".join([req2aux(req) for req in data]) - return out + out = [] + for req in data: + ref = tex.label2ref(req['label']) + out += [ + tex.cmd('newlabel', f"{ref}", tex.group(req['id'], req['id'], 'ggg', 'hhh', 'iii')), + tex.cmd('newlabel', f"{ref}@cref", tex.group(f"[requirement][aaa][bbb]{req['id']}", '[ccc][ddd][eee]fff')), + ] + return "\n".join(out) def fmt_tex(data): - return "\n".join([ - tex.cmd('relax') - ]) + out = [] + for req in data: + out.append( + tex.cmd('subsection', req['id']) + "\n\n" +\ + tex.env('description', + tex.cmd('item', ['Priority']) + req['priority'].title() +\ + tex.cmd('item', ['Requirement']) + req['description'] +\ + (tex.cmd('item', ['Definition of done']) + req['done'] if req['type'] == 'user' else "") + ) + ) + return "\n\n".join(out) def main(input_file): data = {} diff --git a/scripts/tex.py b/scripts/tex.py index 2fd51d8..2509a87 100644 --- a/scripts/tex.py +++ b/scripts/tex.py @@ -1,7 +1,13 @@ # utility function for converting latex code def group(*args): - return "".join("{" + arg + "}" for arg in args) + out = "" + for arg in args: + if isinstance(arg, list): + out += "[" + arg[0] + "]" + if isinstance(arg, str): + out += "{" + arg + "}" + return out def string(content): return r"\string" + content -- cgit v1.2.3 From 976a8d260fd138161317aac14df5311ef0ef07ca Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Mon, 16 Sep 2024 19:08:37 +0200 Subject: add table of contents to requirements --- requirements.tex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/requirements.tex b/requirements.tex index dee529d..2936272 100644 --- a/requirements.tex +++ b/requirements.tex @@ -10,6 +10,8 @@ \title{Requirements} \begin{document} +\tablestables +\newpage \section{Requirements} \begin{multicols}{2} -- cgit v1.2.3 From f4f901c6e04e9721f998871f0beedf8782b38fe5 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Mon, 16 Sep 2024 22:16:12 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index f79885b..13c2308 100644 --- a/time.txt +++ b/time.txt @@ -27,6 +27,7 @@ loek: 2024-09-13 45m integration :: PR merge loek: 2024-09-14 45m refactoring :: clean up LaTeX build system loek: 2024-09-14 1h10m docs :: requirements loek: 2024-09-15 2h55m docs :: requirements +loek: 2024-09-16 5h35m docs :: requirements max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From bfc6639f6d17d71dfd034ffc43eea2f952df3d32 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Mon, 16 Sep 2024 23:35:45 +0200 Subject: fix time.txt (i can't read) --- time.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time.txt b/time.txt index 13c2308..9f2c398 100644 --- a/time.txt +++ b/time.txt @@ -27,7 +27,7 @@ loek: 2024-09-13 45m integration :: PR merge loek: 2024-09-14 45m refactoring :: clean up LaTeX build system loek: 2024-09-14 1h10m docs :: requirements loek: 2024-09-15 2h55m docs :: requirements -loek: 2024-09-16 5h35m docs :: requirements +loek: 2024-09-16 2h30m docs :: requirements max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 1de74261bef1a4c25250b7390b965093141c88f0 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 10:12:20 +0200 Subject: remove user requirement dod check --- scripts/reqs2tex.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 3bf0501..6b7b77a 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -41,10 +41,6 @@ def sanitize(item, ids): if item['priority'] not in ['must', 'should', 'could', 'will not']: die(f"unknown or missing requirement priority {repr(item['type'])}") - # logic checks - if item['type'] != 'user' and item['done'] is not None: - die("has definition of done but is not a user requirement") - # conversions if isinstance(item['done'], list): # safety check @@ -86,7 +82,7 @@ def fmt_tex(data): tex.env('description', tex.cmd('item', ['Priority']) + req['priority'].title() +\ tex.cmd('item', ['Requirement']) + req['description'] +\ - (tex.cmd('item', ['Definition of done']) + req['done'] if req['type'] == 'user' else "") + (tex.cmd('item', ['Definition of done']) + req['done'] if req['done'] is not None else "") ) ) return "\n\n".join(out) -- cgit v1.2.3 From 8a1a98b8515baa0b7cb24ba2d4932066b72b89a5 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 10:17:21 +0200 Subject: fix time2tex --- scripts/time2tex.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/time2tex.py b/scripts/time2tex.py index 17661d5..8c3dd9b 100755 --- a/scripts/time2tex.py +++ b/scripts/time2tex.py @@ -19,7 +19,7 @@ def fmt_duration(sec): return "\\,".join(out) def fmt_percentage(fac): - return tex.sgroup( + return tex.group( tex.cmd('footnotesize') +\ tex.cmd('itshape') +\ tex.esc(f"({round(fac * 100)}%)") -- cgit v1.2.3 From baab5893578210623bc2fc391c2423fda38b8e65 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 10:29:36 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 9f2c398..34959d3 100644 --- a/time.txt +++ b/time.txt @@ -28,6 +28,7 @@ loek: 2024-09-14 45m refactoring :: clean up LaTeX build system loek: 2024-09-14 1h10m docs :: requirements loek: 2024-09-15 2h55m docs :: requirements loek: 2024-09-16 2h30m docs :: requirements +loek: 2024-09-17 1h20m project meeting max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 26c860fc5018b20aac301ebc297db6ed3887b967 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 12:30:31 +0200 Subject: fix file spec on Windows --- latexmkrc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/latexmkrc b/latexmkrc index 5a49064..907c5a5 100644 --- a/latexmkrc +++ b/latexmkrc @@ -1,5 +1,7 @@ # https://nl.mirrors.cicku.me/ctan/support/latexmk/latexmk.pdf +use File::Spec::Functions; + $pdflatex = "xelatex --interaction=nonstopmode %O %S"; $pdf_mode = 1; $dvi_mode = 0; @@ -26,12 +28,16 @@ sub plantuml { add_cus_dep('txt', 'tex', 0, 'time2tex'); sub time2tex { - return system "python3 scripts/time2tex.py '$_[0].txt'"; + my $script = catfile("scripts", "time2tex.py"); + return system "python3 $script '$_[0].txt'"; } add_cus_dep('toml', 'tex', 0, 'reqs2tex'); add_cus_dep('toml', 'aux', 0, 'reqs2tex'); sub reqs2tex { - return system "python3 scripts/reqs2tex.py '$_[0].toml'"; + my $script = catfile("scripts", "reqs2tex.py"); + return system "python3 $script '$_[0].toml'"; } +# vim:ft=perl + -- cgit v1.2.3 From c38b4833f33d7bb3510962fe3e8c6c9b194b7542 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 12:31:50 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 34959d3..16c0523 100644 --- a/time.txt +++ b/time.txt @@ -29,6 +29,7 @@ loek: 2024-09-14 1h10m docs :: requirements loek: 2024-09-15 2h55m docs :: requirements loek: 2024-09-16 2h30m docs :: requirements loek: 2024-09-17 1h20m project meeting +loek: 2024-09-17 15m bugs :: cross-platform latexmk filespec max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 5aba97da07413c498871c5da4ce8d0f2427ffc69 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 14:59:17 +0200 Subject: fix latexmkrc --- latexmkrc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/latexmkrc b/latexmkrc index 907c5a5..880f859 100644 --- a/latexmkrc +++ b/latexmkrc @@ -18,25 +18,23 @@ push @file_not_found, '^Package .* No file `([^\\\']*)\\\''; push @generated_exts, 'glo', 'gls', 'glg'; add_cus_dep('aux', 'glstex', 0, 'bib2gls'); sub bib2gls { - return system "bib2gls '$_[0]'"; + return Run_msg("bib2gls $_[0]"); } add_cus_dep('puml', 'eps', 0, 'plantuml'); sub plantuml { - return system "plantuml -teps '$_[0].puml'"; + return Run_msg("plantuml -teps $_[0].puml"); } add_cus_dep('txt', 'tex', 0, 'time2tex'); sub time2tex { - my $script = catfile("scripts", "time2tex.py"); - return system "python3 $script '$_[0].txt'"; + return Run_msg("python3 @{[catfile('scripts', 'time2tex.py')]} $_[0].txt"); } add_cus_dep('toml', 'tex', 0, 'reqs2tex'); add_cus_dep('toml', 'aux', 0, 'reqs2tex'); sub reqs2tex { - my $script = catfile("scripts", "reqs2tex.py"); - return system "python3 $script '$_[0].toml'"; + return Run_msg("python3 @{[catfile('scripts', 'reqs2tex.py')]} $_[0].toml"); } # vim:ft=perl -- cgit v1.2.3 From 69bb15bd19cd62b39e2af8a2ab890b1ce25f514c Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 15:04:35 +0200 Subject: update time.txt --- time.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/time.txt b/time.txt index 16c0523..94058da 100644 --- a/time.txt +++ b/time.txt @@ -29,7 +29,7 @@ loek: 2024-09-14 1h10m docs :: requirements loek: 2024-09-15 2h55m docs :: requirements loek: 2024-09-16 2h30m docs :: requirements loek: 2024-09-17 1h20m project meeting -loek: 2024-09-17 15m bugs :: cross-platform latexmk filespec +loek: 2024-09-17 55m bugs :: cross-platform latexmk filespec max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 581044887a16d37c90116da544f5d9d600faa80c Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 16:56:36 +0200 Subject: more fixes for reqs2tex --- scripts/reqs2tex.py | 103 ++++++++++++++++++++++++++++++++++------------------ scripts/tex.py | 3 -- 2 files changed, 68 insertions(+), 38 deletions(-) diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 6b7b77a..db7e174 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -1,17 +1,47 @@ #!/bin/python3 import sys, tomllib, tex - +from enum import StrEnum + +def label2ref(*labels): + return ",".join(["req:" + label.replace('.', ':') for label in labels]) + +class KEY(StrEnum): + LABEL = 'label' + TYPE = 'type' + ID = 'id' + INDEX = 'index' + DELETED = 'deleted' + DONE = 'done' + DESCRIPTION = 'description' + PRIORITY = 'priority' + +class REQ_TYPE(StrEnum): + SYSTEM = 'system' + USER = 'user' + +class REQ_PRIORITY(StrEnum): + MUST = 'must' + SHOULD = 'should' + COULD = 'could' + WONT = 'will not' + +# this doesn't work right def flatten(data): - if 'description' in data: - return [ data ] out = [] + # this key is a requirement + if KEY.DESCRIPTION in data: + out.append(data) + # check for children for key, value in data.items(): + # skip over reserved keys + if key in KEY: continue + items = flatten(value) for item in items: - if 'label' in item: - item['label'] = f"{key}.{item['label']}" + if KEY.LABEL in item: + item[KEY.LABEL] = f"{key}.{item[KEY.LABEL]}" else: - item['label'] = f"{key}" + item[KEY.LABEL] = f"{key}" out += items return out @@ -20,72 +50,75 @@ def make_id(item): global id_counter id_counter += 1 return "{type_short}#{counter:03d}".format( - type_short = item['type'][0].upper(), + type_short = item[KEY.TYPE][0].upper(), counter = id_counter, ) def sanitize(item, ids): def die(msg): - print(f"[{item['label']}]: {msg}") + print(f"[{item[KEY.LABEL]}]: {msg}") exit(1) # ensure properties - item['description'] = item.get('description') - item['done'] = item.get('done') - item['priority'] = item.get('priority') - item['type'] = item.get('type') + item[KEY.DESCRIPTION] = item.get(KEY.DESCRIPTION) + item[KEY.DONE] = item.get(KEY.DONE) + item[KEY.PRIORITY] = item.get(KEY.PRIORITY) + item[KEY.TYPE] = item.get(KEY.TYPE) # type checks - if item['type'] not in ['system', 'user']: - die(f"unknown or missing requirement type {repr(item['type'])}") - if item['priority'] not in ['must', 'should', 'could', 'will not']: - die(f"unknown or missing requirement priority {repr(item['type'])}") + if item[KEY.TYPE] not in REQ_TYPE: + die(f"unknown or missing requirement type: {repr(item[KEY.TYPE])}") + if item[KEY.PRIORITY] not in REQ_PRIORITY: + die(f"unknown or missing requirement priority: {repr(item[KEY.PRIORITY])}") # conversions - if isinstance(item['done'], list): + if isinstance(item[KEY.DONE], list): # safety check - if not set(item['done']).issubset(ids): + if not set(item[KEY.DONE]).issubset(ids): die("definition of done includes unknown requirement(s)") - item['done'] = tex.cmd('Cref', tex.label2ref(*item['done'])) + item[KEY.DONE] = tex.cmd('Cref', label2ref(*item[KEY.DONE])) def convert(data): reqs = flatten(data) + all_ids = [item[KEY.LABEL] for item in reqs] index = 0 for item in reqs: - item['id'] = tex.esc(make_id(item)) - item['deleted'] = item.get('deleted', False) - if item['deleted']: continue - item['index'] = index + item[KEY.ID] = tex.esc(make_id(item)) + item[KEY.DELETED] = item.get(KEY.DELETED, False) + if item[KEY.DELETED]: continue + item[KEY.INDEX] = index index += 1 - sanitize(item, [req['label'] for req in reqs]) + sanitize(item, all_ids) # skip deleted requirements (but process for make_id) - reqs = [item for item in reqs if item['deleted'] == False] + reqs = [item for item in reqs if item[KEY.DELETED] == False] return reqs def fmt_aux(data): out = [] - for req in data: - ref = tex.label2ref(req['label']) + for item in data: + ref = label2ref(item[KEY.LABEL]) out += [ - tex.cmd('newlabel', f"{ref}", tex.group(req['id'], req['id'], 'ggg', 'hhh', 'iii')), - tex.cmd('newlabel', f"{ref}@cref", tex.group(f"[requirement][aaa][bbb]{req['id']}", '[ccc][ddd][eee]fff')), + tex.cmd('newlabel', f"{ref}", tex.group(item[KEY.ID], item[KEY.ID], 'ggg', 'hhh', 'iii')), + tex.cmd('newlabel', f"{ref}@cref", tex.group(f"[requirement][aaa][bbb]{item[KEY.ID]}", '[ccc][ddd][eee]fff')), ] return "\n".join(out) def fmt_tex(data): out = [] - for req in data: + for item in data: out.append( - tex.cmd('subsection', req['id']) + "\n\n" +\ + tex.cmd('subsection', item[KEY.ID]) +\ + tex.cmd('label', label2ref(item[KEY.LABEL])) +\ + tex.cmd('par') +\ tex.env('description', - tex.cmd('item', ['Priority']) + req['priority'].title() +\ - tex.cmd('item', ['Requirement']) + req['description'] +\ - (tex.cmd('item', ['Definition of done']) + req['done'] if req['done'] is not None else "") + tex.cmd('item', ['Priority']) + item[KEY.PRIORITY].title() +\ + tex.cmd('item', ['Requirement']) + item[KEY.DESCRIPTION] +\ + (tex.cmd('item', ['Definition of done']) + item[KEY.DONE] if item[KEY.DONE] is not None else "") ) ) - return "\n\n".join(out) + return "".join(out) def main(input_file): data = {} diff --git a/scripts/tex.py b/scripts/tex.py index 2509a87..59c6895 100644 --- a/scripts/tex.py +++ b/scripts/tex.py @@ -47,6 +47,3 @@ def esc(plain): def tabrule(*cells): return "&".join(cells) + "\\\\" -def label2ref(*labels): - return ",".join(["req:" + label.replace('.', ':') for label in labels]) - -- cgit v1.2.3 From ca5fb75953ae2a73d2d41ceff59e2688b11cbf2b Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 17:06:04 +0200 Subject: fix flatten function --- scripts/reqs2tex.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index db7e174..8c2236a 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -25,18 +25,19 @@ class REQ_PRIORITY(StrEnum): COULD = 'could' WONT = 'will not' -# this doesn't work right def flatten(data): out = [] - # this key is a requirement - if KEY.DESCRIPTION in data: - out.append(data) - # check for children for key, value in data.items(): + # this item is a requirement + if key == KEY.DESCRIPTION: + out.append(data) + # skip over reserved keys if key in KEY: continue + # recursively flatten other requirements items = flatten(value) + # and prefix them with the current key for item in items: if KEY.LABEL in item: item[KEY.LABEL] = f"{key}.{item[KEY.LABEL]}" -- cgit v1.2.3 From ad6a8573c4de484e5435b3f68a1347120b323827 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Tue, 17 Sep 2024 17:16:10 +0200 Subject: Added tasks --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 0db7b22..d016664 100644 --- a/time.txt +++ b/time.txt @@ -49,6 +49,7 @@ max: 2024-09-12 1h worked on gameObject research max: 2024-09-13 1h30m fourth project meeting max: 2024-09-16 1h researching self-made ECS possibilities max: 2024-09-16 1h30m researching ECS libraries +max: 2024-09-17 1h30m fifth project meeting wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 1df61d671706436c17e23bc9dcdc3bbd0f14a167 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 17:35:19 +0200 Subject: labels/refs working inside requirements.tex --- scripts/reqs2tex.py | 28 +++++++++++++++++----------- scripts/tex.py | 17 +++++++++++++++-- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 8c2236a..700d05f 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -107,19 +107,25 @@ def fmt_aux(data): return "\n".join(out) def fmt_tex(data): - out = [] + out = "" for item in data: - out.append( - tex.cmd('subsection', item[KEY.ID]) +\ - tex.cmd('label', label2ref(item[KEY.LABEL])) +\ - tex.cmd('par') +\ - tex.env('description', - tex.cmd('item', ['Priority']) + item[KEY.PRIORITY].title() +\ - tex.cmd('item', ['Requirement']) + item[KEY.DESCRIPTION] +\ - (tex.cmd('item', ['Definition of done']) + item[KEY.DONE] if item[KEY.DONE] is not None else "") - ) + out += tex.join( + tex.cmd('subsection', item[KEY.ID]), + tex.withatletter( + tex.cmd('cref@constructprefix', 'requirement', r'\cref@result'), + tex.pedef('@currentlabel', item[KEY.ID]), + tex.pedef('@currentlabelname', item[KEY.ID]), + tex.pedef('cref@currentlabel', tex.group(['requirement'], [''], [r'\cref@result']) + item[KEY.ID]), + ), + tex.cmd('label', ['requirement'], label2ref(item[KEY.LABEL])), + tex.cmd('par'), + tex.env('description', tex.join( + tex.cmd('item', ['Priority']) + item[KEY.PRIORITY].title(), + tex.cmd('item', ['Requirement']) + item[KEY.DESCRIPTION], + (tex.cmd('item', ['Definition of done']) + item[KEY.DONE] if item[KEY.DONE] is not None else ""), + )) ) - return "".join(out) + return out def main(input_file): data = {} diff --git a/scripts/tex.py b/scripts/tex.py index 59c6895..eebf8ec 100644 --- a/scripts/tex.py +++ b/scripts/tex.py @@ -9,6 +9,9 @@ def group(*args): out += "{" + arg + "}" return out +def join(*things): + return "".join(things) + def string(content): return r"\string" + content @@ -18,11 +21,14 @@ def cmd(*args): if len(args) == 0: args = [""] return f"\\{name}" + group(*args) +def pedef(*args): + return r"\protected@edef" + cmd(*args) + def csdef(*args): return r"\def" + cmd(*args) -def auxout(content): - return r"\write\@auxout" + group(content) +def auxout(*content): + return r"\write\@auxout" + group(join(*content)) def scmd(*args): return string(cmd(*args)) @@ -47,3 +53,10 @@ def esc(plain): def tabrule(*cells): return "&".join(cells) + "\\\\" +def withatletter(*content): + return join( + cmd('makeatletter'), + *content, + cmd('makeatother'), + ) + -- cgit v1.2.3 From de6821389604dc5254b285a1ca13b19ffb1905b5 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 19:33:16 +0200 Subject: cleanup --- scripts/tex.py | 9 +++++ scripts/time2tex.py | 111 ++++++++++++++++++++++++++-------------------------- 2 files changed, 65 insertions(+), 55 deletions(-) diff --git a/scripts/tex.py b/scripts/tex.py index eebf8ec..e8fc65b 100644 --- a/scripts/tex.py +++ b/scripts/tex.py @@ -60,3 +60,12 @@ def withatletter(*content): cmd('makeatother'), ) +def explist(*items): + out = [] + for item in items: + if isinstance(item, str) or not hasattr(item, '__iter__'): + out.append(item) + else: + out += explist(*item) + return out + diff --git a/scripts/time2tex.py b/scripts/time2tex.py index 8c3dd9b..a5d6802 100755 --- a/scripts/time2tex.py +++ b/scripts/time2tex.py @@ -35,35 +35,30 @@ def fmt_member_overview(times): tracked[time["name"]] += time["duration"] total_time += time["duration"] - out = "" - - # header - out += tex.cmd('toprule') - out += tex.tabrule(tex.cmd('textbf', 'Member'), tex.cmd('textbf', 'Tracked'), '') - out += tex.cmd('midrule') - - # member overview members = sorted(list(set(time["name"] for time in times))) - for name in members: - out += tex.tabrule(name, fmt_duration(tracked[name]), fmt_percentage(tracked[name] / total_time)) - out += tex.cmd('midrule') - - # sum - out += tex.tabrule('', fmt_duration(total_time), '') - out += tex.cmd('bottomrule') - - out = tex.env('tabular', 'lr@{~}l', out) - out = tex.cmd('centering') +\ - out +\ - tex.cmd('caption', 'Tracked time per group member') +\ - tex.cmd('label', 'tab:time-member') - out = tex.env('table', out) - - return out + return tex.env('table', tex.join( + tex.cmd('centering'), + tex.env('tabular', 'lr@{~}l', tex.join( + tex.cmd('toprule'), + tex.tabrule(tex.cmd('textbf', 'Member'), tex.cmd('textbf', 'Tracked')), + tex.cmd('midrule'), + *[ + tex.tabrule( + name, + fmt_duration(tracked[name]), + fmt_percentage(tracked[name] / total_time)) + for name in members + ], + tex.cmd('midrule'), + tex.tabrule('', fmt_duration(total_time), ''), + tex.cmd('bottomrule'), + )), + tex.cmd('caption', 'Tracked time per group member'), + tex.cmd('label', 'tab:time-member'), + )) def fmt_weekly_overview(times): # calculations - out = "" weeks = [] member_totals = {} total_time = sum(time["duration"] for time in times) @@ -93,34 +88,40 @@ def fmt_weekly_overview(times): for member in members: member_totals[member] = sum(time["duration"] for time in times if time["name"] == member) - # TODO: refactor - # begin table - out += r"\begin{table}\centering" - out += r"\fitimg{" - out += f"\\begin{{tabular}}{{l{'r@{~}l' * len(members)}@{{\\qquad}}r}}\\toprule" - out += r"\textbf{\#}" - for member in members: - out += f"&\\textbf{{{member}}}&" - out += r"&\textbf{Subtotal}\\\midrule{}" - - for entry in weeks: - out += f"{entry['num']}" - for member in members: - out += f"&{fmt_duration(entry['members'][member])}&{fmt_percentage(entry['members'][member] / entry['total'])}" - out += f"&{fmt_duration(entry['total'])}\\\\" - - out += r"\midrule{}" - for member in members: - out += f"&{fmt_duration(member_totals[member])}&{fmt_percentage(member_totals[member] / total_time)}" - out += f"&{fmt_duration(total_time)}\\\\" - - # end table - out += r"\bottomrule\end{tabular}" - out += r"}" # \fitimg - out += r"\caption{Tracked time per week}\label{tab:time-weekly}" - out += r"\end{table}" - - return out + return tex.env('table', tex.join( + tex.cmd('centering'), + tex.cmd('fitimg', + tex.env('tabular', r'l' + r'r@{~}l' * len(members) + r'@{\qquad}r', tex.join( + tex.cmd('toprule'), + tex.tabrule(*[ + tex.cmd('textbf', cell) + for cell in [ + tex.esc("#"), + *tex.explist([ member, "" ] for member in members), + "Subtotal", + ] + ]), + tex.cmd('midrule'), + *[ + tex.tabrule(*[ + str(entry['num']), + *tex.explist( + [ + fmt_duration(entry['members'][member]), + fmt_percentage(entry['members'][member] / entry['total']), + ] + for member in members + ), + fmt_duration(entry['total']), + ]) + for entry in weeks + ], + tex.cmd('bottomrule'), + )), + ), + tex.cmd('caption', 'Tracked time per week'), + tex.cmd('label', 'tab:time-weekly'), + )) def duration2secs(duration): out = 0 # output (seconds) @@ -182,13 +183,13 @@ def parse(content): return out def fmt(times): - return "\n\n".join([ + return tex.join( tex.cmd('section', 'Overviews'), tex.cmd('subsection', 'Members'), fmt_member_overview(times), tex.cmd('subsection', 'Weekly'), fmt_weekly_overview(times), - ]) + ) def main(input_file): content = "" -- cgit v1.2.3 From 9f736b9e3d4b20c7dae1063bd572c1f802cde649 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Tue, 17 Sep 2024 19:34:38 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 94058da..40de9dc 100644 --- a/time.txt +++ b/time.txt @@ -30,6 +30,7 @@ loek: 2024-09-15 2h55m docs :: requirements loek: 2024-09-16 2h30m docs :: requirements loek: 2024-09-17 1h20m project meeting loek: 2024-09-17 55m bugs :: cross-platform latexmk filespec +loek: 2024-09-17 2h25m docs :: requirements max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 6b034454f35819999cc26cfe472d537bf1eb3fbf Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 13:40:39 +0200 Subject: fix requirement cross-references --- example.tex | 2 -- projdoc.cls | 83 +++++++++++++++++++++++++++++++++++++++++++++++------ readme.md | 6 ---- scripts/reqs2tex.py | 16 +++++++++-- 4 files changed, 88 insertions(+), 19 deletions(-) diff --git a/example.tex b/example.tex index e0d21c0..24c525b 100644 --- a/example.tex +++ b/example.tex @@ -3,8 +3,6 @@ % with the [draft] option. this replaces all images with placeholders. \input{meta.tex} -\externaldocument{reqs}[./requirements.pdf] - \title{Example Document} \begin{document} diff --git a/projdoc.cls b/projdoc.cls index fe8c8bc..23f3ea9 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -145,13 +145,13 @@ % \cref{} is used \makeatletter \NewDocumentCommand{\customlabel}{omm}{% - \begingroup - \cref@constructprefix{#1}{\cref@result}% - \protected@edef\@currentlabel{#3}% - \protected@edef\@currentlabelname{#3}% - \protected@edef\cref@currentlabel{[#1][][\cref@result]#3} - \label[#1]{#2}% - \endgroup + \begingroup + \cref@constructprefix{#1}{\cref@result}% + \protected@edef\@currentlabel{#3}% + \protected@edef\@currentlabelname{#3}% + \protected@edef\cref@currentlabel{[#1][][\cref@result]#3} + \label[#1]{#2}% + \endgroup } \makeatother @@ -215,6 +215,9 @@ selection={recorded and deps and see}, ] +% requirements +\externaldocument{reqs}[./requirements.pdf] + % default document header/trailer \makeatletter \def\projdoc@header{ @@ -293,8 +296,8 @@ \def\UrlRight{\hbox{\,}}% } \DefineVerbatimEnvironment{blockcode}{Verbatim}{ - tabsize=2, - obeytabs, + tabsize=2, + obeytabs, } % scale down image if it exceeds page margins @@ -321,3 +324,65 @@ \crefname{test}{test}{tests} \Crefname{test}{Test}{Tests} +% fix cleveref showing filename to external cross-reference +% see +% edited from cleveref source +\makeatletter +\def\cref@getref#1#2{% + \expandafter\let\expandafter#2\csname r@#1@cref\endcsname% + \expandafter\expandafter\expandafter\def% + \expandafter\expandafter\expandafter#2% + \expandafter\expandafter\expandafter{% + \expandafter\@firstoffive#2}}% +\def\cpageref@getref#1#2{% + \expandafter\let\expandafter#2\csname r@#1@cref\endcsname% + \expandafter\expandafter\expandafter\def% + \expandafter\expandafter\expandafter#2% + \expandafter\expandafter\expandafter{% + \expandafter\@secondoffive#2}}% +\AtBeginDocument{% + \def\label@noarg#1{% + \cref@old@label{#1}% + \@bsphack% + \edef\@tempa{{page}{\the\c@page}}% + \setcounter{page}{1}% + \edef\@tempb{\thepage}% + \expandafter\setcounter\@tempa% + \cref@constructprefix{page}{\cref@result}% + \protected@write\@auxout{}{% + \string\newlabel{#1@cref}{% + {\cref@currentlabel}% + {[\@tempb][\arabic{page}][\cref@result]\thepage}% + {}% + {}% + {}% + }% + }% + \@esphack% + }% + \def\label@optarg[#1]#2{% + \cref@old@label{#2}% + \@bsphack% + \edef\@tempa{{page}{\the\c@page}}% + \setcounter{page}{1}% + \edef\@tempb{\thepage}% + \expandafter\setcounter\@tempa% + \cref@constructprefix{page}{\cref@result}% + \protected@edef\cref@currentlabel{% + \expandafter\cref@override@label@type% + \cref@currentlabel\@nil{#1}% + }% + \protected@write\@auxout{}{% + \string\newlabel{#2@cref}{% + {\cref@currentlabel}% + {[\@tempb][\arabic{page}][\cref@result]\thepage}% + {}% + {}% + {}% + }% + }% + \@esphack% + }% +} +\makeatother + diff --git a/readme.md b/readme.md index 7b58cfd..818d445 100644 --- a/readme.md +++ b/readme.md @@ -18,12 +18,6 @@ A `latexmkrc` file is provided for copmilation with latexmk. The documents should also compile under [Visual Studio Code][vscode] using the [LaTeX Workshop extension][latexworkshop], as well as [VimTeX][vimtex]. -## TODO - -- Requirement cross-references are broken (they print both the label and the - path to the other document, should be label only). Interesting: - `\creflabelformat` and `\@templabel` (inside #2 of `\creflabelformat`). - [vscode]: https://code.visualstudio.com [latexworkshop]: https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop [vimtex]: https://github.com/lervag/vimtex diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 700d05f..8a6976a 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -101,8 +101,20 @@ def fmt_aux(data): for item in data: ref = label2ref(item[KEY.LABEL]) out += [ - tex.cmd('newlabel', f"{ref}", tex.group(item[KEY.ID], item[KEY.ID], 'ggg', 'hhh', 'iii')), - tex.cmd('newlabel', f"{ref}@cref", tex.group(f"[requirement][aaa][bbb]{item[KEY.ID]}", '[ccc][ddd][eee]fff')), + tex.cmd('newlabel', f"{ref}", tex.group( + item[KEY.ID], + '', + '', + ref, + '', + )), + tex.cmd('newlabel', f"{ref}@cref", tex.group( + f"[requirement][][]{item[KEY.ID]}", + '[][][]', + '', + '', + './requirements.pdf', + )), ] return "\n".join(out) -- cgit v1.2.3 From f2e1083970107994a031a394198fde039bdf3b77 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 14:10:59 +0200 Subject: cleanup --- projdoc.cls | 2 +- scripts/reqs2tex.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/projdoc.cls b/projdoc.cls index 23f3ea9..7420d38 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -216,7 +216,7 @@ ] % requirements -\externaldocument{reqs}[./requirements.pdf] +\externaldocument{reqs}[requirements.pdf] % default document header/trailer \makeatletter diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 8a6976a..82b0aae 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -113,7 +113,7 @@ def fmt_aux(data): '[][][]', '', '', - './requirements.pdf', + '', )), ] return "\n".join(out) -- cgit v1.2.3 From 0027f5df316892f121bb9f4b5b6b641646273ff0 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 14:54:48 +0200 Subject: add requirements + improve generated reqs.tex --- projdoc.cls | 7 +++++-- reqs.toml | 39 ++++++++++++++++++++++++++++++--------- requirements.tex | 1 + scripts/reqs2tex.py | 15 ++++++++------- scripts/tex.py | 10 ++++++++++ 5 files changed, 54 insertions(+), 18 deletions(-) diff --git a/projdoc.cls b/projdoc.cls index 7420d38..fccf8c1 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -215,8 +215,11 @@ selection={recorded and deps and see}, ] -% requirements -\externaldocument{reqs}[requirements.pdf] +% allow cross-references to requirements.pdf from all documents except +% requirements.pdf itself +\IfEq*{\jobname}{requirements}{}{ + \externaldocument{reqs}[requirements.pdf] +} % default document header/trailer \makeatletter diff --git a/reqs.toml b/reqs.toml index c05cf71..6645ea4 100644 --- a/reqs.toml +++ b/reqs.toml @@ -10,33 +10,46 @@ # (cross-)referenced from LaTeX by prefixing this ID with `req:` and # substituting dots for colons (i.e. this requirement is referenced as # \cref{req:audio:async-api}). -[audio.async-api] +[audio] # Requirement type ('system' | 'user') -type = 'system' +type = 'user' # MoSCoW priority ('must' | 'should' | 'could' | 'will not') priority = 'must' # Requirement body. Supports LaTeX formatting. (tip: use single quotes so # backslash doesn't act as an escape character) description = ''' -The public audio \gls{api} supports starting audio samples asynchronously -(i.e.~fire and forget). +The engine allows the game programmer to easily start, pause and stop +background music, while simultaniously playing sound effects. ''' -# Definition of done (user requirements only). If 'done' is a string, it is -# treated as LaTeX code (like description), if it is a list of strings, each -# item is treated as the ID of another requirement. +# Definition of done. If 'done' is a string, it is treated as LaTeX code, if it +# is a list of strings, each item is treated as the ID of another requirement, +# and the references are checked before LaTeX runs. +done = [ + 'audio.async-api', + 'audio.handle', + 'audio.stream-mix', + 'audio.volume', +] #done = 'When I feel like it' -#done = [ 'audio.handle', 'audio.stream-mix' ] # Requirements that are no longer applicable should set `deleted` to `true`. # This will make sure the requirements are numbered consistently across # different document revisions. #deleted = true +[audio.async-api] +type = 'system' +priority = 'must' +description = ''' +The public audio \gls{api} supports starting audio samples asynchronously +(i.e.~fire and forget). +''' + [audio.handle] type = 'system' priority = 'must' description = ''' The public audio \gls{api} allows the game programmer to control (i.e.~play, -pause and stop) audio samples after they are created/initialized. +pause, resume and stop) audio samples after they are created/initialized. ''' [audio.stream-mix] @@ -46,6 +59,14 @@ description = ''' The audio system supports playing multiple audio streams simultaniously. ''' +[audio.volume] +type = 'system' +priority = 'must' +description = ''' +The public audio \gls{api} allows the game programmer to control the volume of +audio samples. +''' + [aux.license] type = 'system' priority = 'must' diff --git a/requirements.tex b/requirements.tex index 2936272..cbaba81 100644 --- a/requirements.tex +++ b/requirements.tex @@ -6,6 +6,7 @@ \projdoc@description@labelindent=0pt \projdoc@setdescriptionstyle \makeatother +\setcounter{secnumdepth}{1} \title{Requirements} diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 82b0aae..ff9f3bb 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -122,7 +122,7 @@ def fmt_tex(data): out = "" for item in data: out += tex.join( - tex.cmd('subsection', item[KEY.ID]), + tex.cmd('subsection', f"{item[KEY.ID]}: {item[KEY.LABEL]}".upper()), tex.withatletter( tex.cmd('cref@constructprefix', 'requirement', r'\cref@result'), tex.pedef('@currentlabel', item[KEY.ID]), @@ -130,12 +130,13 @@ def fmt_tex(data): tex.pedef('cref@currentlabel', tex.group(['requirement'], [''], [r'\cref@result']) + item[KEY.ID]), ), tex.cmd('label', ['requirement'], label2ref(item[KEY.LABEL])), - tex.cmd('par'), - tex.env('description', tex.join( - tex.cmd('item', ['Priority']) + item[KEY.PRIORITY].title(), - tex.cmd('item', ['Requirement']) + item[KEY.DESCRIPTION], - (tex.cmd('item', ['Definition of done']) + item[KEY.DONE] if item[KEY.DONE] is not None else ""), - )) + tex.cmd('parbox', tex.cmd('linewidth'), + tex.env('description', tex.join( + tex.cmd('item', ['Priority']) + item[KEY.PRIORITY].title(), + tex.cmd('item', ['Requirement']) + item[KEY.DESCRIPTION], + (tex.cmd('item', ['Definition of done']) + item[KEY.DONE] if item[KEY.DONE] is not None else ""), + )), + ) ) return out diff --git a/scripts/tex.py b/scripts/tex.py index e8fc65b..07d275a 100644 --- a/scripts/tex.py +++ b/scripts/tex.py @@ -69,3 +69,13 @@ def explist(*items): out += explist(*item) return out +def sec(level, heading): + level = max(min(3, level), 0) + section = [ + 'section', + 'subsection', + 'subsubsection', + 'paragraph', + ][level] + return cmd(section, heading) + -- cgit v1.2.3 From f89ee3feb7e514ec7fbb469a16d34569a57bd0dc Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:03:23 +0200 Subject: Added sources to text --- research.tex | 28 ++++++++++++++-------------- sources.bib | 12 ++++++++++++ 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/research.tex b/research.tex index 3e2e103..d453df5 100644 --- a/research.tex +++ b/research.tex @@ -72,23 +72,23 @@ entity. To assign properties and functions to entities, components are used. There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is based on the amount of stars on GitHub. -\begin{table} - \begin{tabularx}{\linewidth}{lXr} - \toprule - \textbf{Name} & \textbf{Short Description} & \textbf{GitHub Stars} \\ - \midrule - EnTT & Fast and reliable entity-component system & 10k \\ - Flecs & A Multithreaded Entity Component System written for C89 and C99 & 6.3k \\ - EntityX & Fast, type-safe C++ entity component system & 2.2k \\ - \bottomrule - \end{tabularx} - \caption{Popular \gls{ecs} libraries} - \label{tab:popularECSLibraries} +\begin{table}[ht] + \centering + \begin{tabular}{ll@{\qquad}lr} + \toprule + \textbf{Name} & \textbf{Short Description} & \textbf{Stars} & \textbf{License} \\ + \midrule + EnTT & Fast and reliable entity-component system & 10k & MIT \\ + Flecs & A Multithreaded Entity Component System & 6.3k & MIT \\ + EntityX & Fast, type-safe C++ entity component system & 2.2k & MIT \\ + \bottomrule + \end{tabular} + \caption{Popular \gls{ecs} libraries \autocite{github:001}} + \label{tab:popularECSLibraries} \end{table} -https://github.com/abeimler/ecs_benchmark It is, of course, not necessary to use a library to implement an \gls{ecs} architecture. -However, it seems very hard to achieve the same performance as a library. https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#should-i-write-my-own-ecs +However, it seems very hard to achieve the same performance as a library. \autocite{github:002} \subsection{Conclusion} diff --git a/sources.bib b/sources.bib index 50f5ead..9b08c96 100644 --- a/sources.bib +++ b/sources.bib @@ -47,4 +47,16 @@ date = {2024-09-10}, } +@misc{github:001, + author = {Sangjun Lee}, + title = {Awesome Entity Component System}, + url = {https://github.com/jslee02/awesome-entity-component-system?tab=readme-ov-file}, + date = {2023} +} +@misc{github:002, + author = {Sander Mertens}, + title = {ECS FAQ}, + url = {https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#should-i-write-my-own-ecs}, + date = {2023} +} -- cgit v1.2.3 From abab5051391b7f8a212539400433eb1db0bb4f06 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 15:06:45 +0200 Subject: abbreviate requirement field labels after first occurrence on every page --- glossary.bib | 13 +++++++++++++ requirements.tex | 21 +++++++++++++++++++++ scripts/reqs2tex.py | 11 ++++++++--- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/glossary.bib b/glossary.bib index 437db86..8bf48ac 100644 --- a/glossary.bib +++ b/glossary.bib @@ -33,3 +33,16 @@ long = {Application Programming Interface}, } +@acronym{reqlabel-priority, + short = {pri}, + long = {priority}, +} +@acronym{reqlabel-description, + short = {req}, + long = {requirement}, +} +@acronym{reqlabel-done, + short = {DoD}, + long = {definition of done}, +} + diff --git a/requirements.tex b/requirements.tex index cbaba81..78496e8 100644 --- a/requirements.tex +++ b/requirements.tex @@ -8,6 +8,27 @@ \makeatother \setcounter{secnumdepth}{1} +\usepackage{bophook} +\makeatletter +\def\reqlabel#1{\csuse{reqlabel@#1}} +\def\reqlabelreset{% + \global\def\reqlabel@priority{% + \Glsdesc{reqlabel-priority}% + \global\def\reqlabel@priority{\Glstext{reqlabel-priority}}% + }% + \global\def\reqlabel@description{% + \Glsdesc{reqlabel-description}% + \global\def\reqlabel@description{\Glstext{reqlabel-description}}% + }% + \global\def\reqlabel@done{% + \Glsdesc{reqlabel-done}% + \global\def\reqlabel@done{\Glstext{reqlabel-done}}% + }% +} +% Abbreviate requirement field labels after first occurrence on every page +\AtBeginPage{\reqlabelreset} +\makeatother + \title{Requirements} \begin{document} diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index ff9f3bb..e5f063d 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -132,9 +132,14 @@ def fmt_tex(data): tex.cmd('label', ['requirement'], label2ref(item[KEY.LABEL])), tex.cmd('parbox', tex.cmd('linewidth'), tex.env('description', tex.join( - tex.cmd('item', ['Priority']) + item[KEY.PRIORITY].title(), - tex.cmd('item', ['Requirement']) + item[KEY.DESCRIPTION], - (tex.cmd('item', ['Definition of done']) + item[KEY.DONE] if item[KEY.DONE] is not None else ""), + tex.cmd('item', [tex.cmd('reqlabel', 'priority')]), + item[KEY.PRIORITY].title(), + tex.cmd('item', [tex.cmd('reqlabel', 'description')]), + item[KEY.DESCRIPTION], + *([ + tex.cmd('item', [tex.cmd('reqlabel', 'done')]), + item[KEY.DONE] + ] if item[KEY.DONE] is not None else []), )), ) ) -- cgit v1.2.3 From 468138831f7f3cd526a0b23d829d6e8c38b11702 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 15:10:12 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 40de9dc..ecece0e 100644 --- a/time.txt +++ b/time.txt @@ -31,6 +31,7 @@ loek: 2024-09-16 2h30m docs :: requirements loek: 2024-09-17 1h20m project meeting loek: 2024-09-17 55m bugs :: cross-platform latexmk filespec loek: 2024-09-17 2h25m docs :: requirements +loek: 2024-09-18 2h20m docs :: requirements max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 6b3fa9ceaf539b1bdcddf6284326a67c127d93a4 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 16:05:07 +0200 Subject: update readme --- readme.md | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index 818d445..ece6512 100644 --- a/readme.md +++ b/readme.md @@ -3,20 +3,35 @@ systems programming in c++ minor project documentation Please see [style.md](./style.md) for writing style and -[contributing.md](./contributing.md) for coding and git standards. +[contributing.md](./contributing.md) for coding and git standards. There is +also [an example document](./example.tex) which may be used to copy/paste LaTeX +snippets for specific formatting. ## Compilation -Requirements: - -- A LaTeX distribution that includes the XeLaTeX compiler and latexmk +Prerequisites: +- A LaTeX distribution that includes XeLaTeX and latexmk - PlantUML - Python 3 - Fonts (see see [style.md](./style.md) for download links) -A `latexmkrc` file is provided for copmilation with latexmk. The documents -should also compile under [Visual Studio Code][vscode] using the [LaTeX -Workshop extension][latexworkshop], as well as [VimTeX][vimtex]. +All documents are compiled using latexmk, and this repository contains +additional configuration files for the following editors: +- [Visual Studio Code][vscode] + [LaTeX Workshop][latexworkshop] +- (Neo)Vim + [VimTeX][vimtex] (source `.vimrc` to fix custom verb command + highlighting) + +## Special files + +- `time.txt` contains tracked time for each team member. This file is + automatically converted using [time2tex](scripts/time2tex.py) when compiling + [timerep.tex](./timerep.tex). +- `reqs.toml` contains the project requirements. This file is converted using + [reqs2tex](scripts/reqs2tex.py) for [requirements.tex](./requirements.tex) + and also generates an `.aux` file for cross-referencing the requirements from + other documents. +- `sources.bib` contains all bibliography entries / references +- `glossary.bib` contains all glossary entries [vscode]: https://code.visualstudio.com [latexworkshop]: https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop -- cgit v1.2.3 From 105cab5fc6f88f7e71e71910c5f598d39fba3262 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 18 Sep 2024 16:25:37 +0200 Subject: Rectified gameObject/components section, added references to gameObject/components section and created new subsubsection for the game engine's structure --- research.tex | 34 ++++++++++++++++++---------------- sources.bib | 16 ++++++++++++++++ 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/research.tex b/research.tex index d453df5..f62f736 100644 --- a/research.tex +++ b/research.tex @@ -44,13 +44,17 @@ layers are divided into the following categories:\noparbreak performance profiling. \item[Scripting layer] Runs scripts, such as Lua or Python. \item[Memory systems] Handles and monitors memory usage. - \item[\gls{ecs}] Provides a modular way to create game objects, add physics, and - define how the engine interacts with objects. \item[Physics] Adds specific physics to objects. \item[Audio] Processes audio. \item[AI] Provides artificial inteligent behavior. \end{description} +\subsubsection{Structure} + +The above mentioned layers should be structured, somehow. One of the requirements is +that the game engine's API uses a so-called gameObject (with one or more component(s)). +The gameObject is described in more detail at \cref{sec:Gameobjects/components}. ... + \subsubsection{ECS} A game engine must have the ability to keep track and update several game objects. To @@ -286,6 +290,7 @@ Not considered further: \subsection{Conclusion} \section{Gameobjects/components} +\label{sec:Gameobjects/components} \subsection{Introduction} @@ -302,16 +307,7 @@ A gameObject is the most important concept in Unity. Every object in a game is a GameObject, from characters and collectible items to the lights, cameras and special effects. However, a gameObject itself can't do anything on its own. A gameObject needs to be given properties before it can become a character, an envirnment, or a -special effect. -% TODO: cite https://docs.unity3d.com/Manual/GameObjects.html - -\subsection{Conclusion} - -\section{AI} - -\subsection{Introduction} - -\subsection{Findings} +special effect. \autocite{man:unityGameobjects} A gameObject can be seen as a container for components. Components are the properties of the gameObject. A few examples of components are sprites, animators, audioSources, @@ -326,14 +322,20 @@ gameObject. Each gameObject always has one transform class. The transform class describes the position, rotation, and scale within the scene. Some component use this information to e.g. scale a sprite. Other components eddit this information to e.g.~model -gravity. -% TODO: cite https://docs.unity3d.com/Manual/class-Transform.html +gravity. \autocite{man:unityTransformClass} A gameObject can have one (or multiple) children gameObject(s). All children gameObjects, of course, also have one transform class. However, the position, rotation, and scale of this class, is always the same as the child's parent. A child -can not have more than one parent. -% TODO: cite https://docs.unity3d.com/Manual/class-Transform.html +can not have more than one parent. \autocite{man:unityTransformClass} + +\subsection{Conclusion} + +\section{AI} + +\subsection{Introduction} + +\subsection{Findings} \subsection{Conclusion} diff --git a/sources.bib b/sources.bib index 9b08c96..d6b960b 100644 --- a/sources.bib +++ b/sources.bib @@ -60,3 +60,19 @@ url = {https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#should-i-write-my-own-ecs}, date = {2023} } + +@manual{man:unityGameobjects, + title = {GameObject}, + author = {Unity Technologies}, + organization = {Unity}, + url = {https://docs.unity3d.com/Manual/GameObjects.html}, + date = {2024} +} + +@manual{man:unityTransformClass, + title = {Transform Class}, + author = {Unity Technologies}, + organization = {Unity}, + url = {https://docs.unity3d.com/Manual/class-Transform.html}, + date = {2024} +} -- cgit v1.2.3 From c37f21e48f17abe9fb6bf1549f680e6f730aed8c Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 16:52:40 +0200 Subject: WIP research --- projdoc.cls | 3 +++ reqs.toml | 16 ++++++++++- research.tex | 34 ++++++++++------------- scripts/reqs2tex.py | 3 +++ sources.bib | 77 +++++++++++++++++++++++++++++++++++++++-------------- 5 files changed, 92 insertions(+), 41 deletions(-) diff --git a/projdoc.cls b/projdoc.cls index fccf8c1..05e401c 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -389,3 +389,6 @@ } \makeatother +% missing reference marker +\def\mref{\textsuperscript{\textit{\,ref?}}} + diff --git a/reqs.toml b/reqs.toml index 6645ea4..2da91ac 100644 --- a/reqs.toml +++ b/reqs.toml @@ -67,7 +67,9 @@ The public audio \gls{api} allows the game programmer to control the volume of audio samples. ''' -[aux.license] +# TODO: audio encoding support? + +[lib.license] type = 'system' priority = 'must' description = ''' @@ -75,3 +77,15 @@ External libraries must have a license that is MIT-compatible, or one that allows linking against MIT code. ''' +[lib.platform] +type = 'system' +priority = 'must' +description = ''' +External libraries must have cross-platform support for at least Linux and +Windows. +''' + +# TODO: library popularity as quality factor? +# TODO: library documentation as quality factor? +# TODO: modularity over less libraries? (i.e. why don't we just SDL2 everything?) + diff --git a/research.tex b/research.tex index ad33d10..abfde3b 100644 --- a/research.tex +++ b/research.tex @@ -201,44 +201,38 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Conclusion} -% TODO: this entire section \section{Audio} -% should audio research be scoped down to SDL2 (if that's what we're going with) or -% standalone libraries only (for modularity?). - -The game engine is required to have an audio system with support for playing multiple -audio streams (i.e.~tracks or samples) simultaniously. Since writing a custom live -audio mixing engine is outside the scope of this project, this section compares +The game engine is required to have an audio system +\autocite[\ref{req:audio}]{crepe:requirements}. Since writing a custom real-time +audio mixing engine is outside the scope of this project\mref, this section compares various standalone audio engines that could be used in the engine. -% TODO: requirements first! +\subsection{Libraries} + +\Cref{tab:audio-engines} compares several standalone audio engine libraries that fit +\cref{req:audio,req:lib:license}. -% REQ ~ is cross-platform -% REQ ~ supports multiple audio formats (TODO: which) -% REQ ~ supports simultanious playback / mixing -% REQ ~ has an open-source license \begin{table} \centering \begin{tabular}{llc} \toprule \textbf{Library} & \textbf{License} & \textbf{API}\\ \midrule - miniaudio & MIT-0 & C\\ - YSE & EPL & C++\\ - SoLoud & Zlip/LibPng & C++\\ + miniaudio \autocite{lib:miniaudio} & MIT-0 & C\\ + YSE \autocite{lib:yse} & EPL & C++\\ + SoLoud \autocite{lib:soloud} & Zlip/LibPng & C++\\ \bottomrule \end{tabular} \caption{Audio engine library comparison} \label{tab:audio-engines} \end{table} -% TODO: ref https://miniaud.io/ -% TODO: ref https://www.attr-x.net/yse/ -Not considered further: +Other popular libraries that were researched but are unsuitable for this project +include:\noparbreak \begin{description} - \item[FMOD] is proprietary - \item[PortAudio] requires manual mixing + \item[FMOD \autocite{lib:fmod}] Is proprietary (violates \cref{req:lib:license}) + \item[PortAudio \autocite{lib:portaudio}] Does not handle mixing \end{description} \section{Physics} diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index e5f063d..6984466 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -94,6 +94,9 @@ def convert(data): # skip deleted requirements (but process for make_id) reqs = [item for item in reqs if item[KEY.DELETED] == False] + # sort by label + reqs = sorted(reqs, key=lambda item: item[KEY.LABEL]) + return reqs def fmt_aux(data): diff --git a/sources.bib b/sources.bib index 50f5ead..6f5ce0c 100644 --- a/sources.bib +++ b/sources.bib @@ -13,38 +13,75 @@ } @misc{miro:scrum-board, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Scrum Board on Miro}, - url = {https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Scrum Board on Miro}, + url = {https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}, + date = {2024-09-10}, } @misc{crepe:code-repo, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Crepe Code Repository}, - url = {https://github.com/lonkaars/crepe}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Crepe Code Repository}, + url = {https://github.com/lonkaars/crepe}, + date = {2024-09-10}, } @misc{crepe:docs-repo, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Crepe Documentation Repository}, - url = {https://github.com/lonkaars}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Crepe Documentation Repository}, + url = {https://github.com/lonkaars}, + date = {2024-09-10}, } @misc{crepe:docs-standard, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Crepe Documentation Standard}, - url = {https://github.com/lonkaars/crepe-docs/blob/master/contributing.md}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Crepe Documentation Standard}, + url = {https://github.com/lonkaars/crepe-docs/blob/master/contributing.md}, + date = {2024-09-10}, } @misc{crepe:code-standard, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Crepe Code Standard}, - url = {https://github.com/lonkaars/crepe/blob/master/contributing.md}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Crepe Code Standard}, + url = {https://github.com/lonkaars/crepe/blob/master/contributing.md}, + date = {2024-09-10}, } +@report{crepe:requirements, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Requirements}, + date = {2024-09-18}, +} + +@online{lib:miniaudio, + title = {miniaudio - A single file audio playback and capture library.}, + % author = {David Reid}, + url = {https://miniaud.io}, + urldate = {2024-09-18}, +} + +@online{lib:yse, + title = {YSE - cross-platform sound engine}, + url = {https://www.attr-x.net/yse}, + urldate = {2024-09-18}, +} + +@online{lib:soloud, + title = {SoLoud}, + % author = {Jari Komppa}, + url = {https://solhsa.com/soloud}, + urldate = {2024-09-18}, +} + +@online{lib:fmod, + title = {FMOD}, + url = {https://www.fmod.com}, + urldate = {2024-09-18}, +} + +@online{lib:portaudio, + title = {PortAudio - an Open-Source Cross-Platform Audio API}, + url = {https://www.portaudio.com}, + urldate = {2024-09-18}, +} -- cgit v1.2.3 From ea452a59151c1e9bae39aaee568a2d9c7bd006a2 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 16:58:53 +0200 Subject: small fixes --- projdoc.cls | 3 +++ requirements.tex | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/projdoc.cls b/projdoc.cls index fccf8c1..fe6317b 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -75,6 +75,9 @@ \bigskipamount=7mm \medskipamount=4mm +% number paragraphs by default +\setcounter{secnumdepth}{4} + % section placement / appearance \newlength{\sectionpenalty} \newlength{\subsectionpenalty} diff --git a/requirements.tex b/requirements.tex index 78496e8..be0e103 100644 --- a/requirements.tex +++ b/requirements.tex @@ -8,7 +8,6 @@ \makeatother \setcounter{secnumdepth}{1} -\usepackage{bophook} \makeatletter \def\reqlabel#1{\csuse{reqlabel@#1}} \def\reqlabelreset{% @@ -26,7 +25,7 @@ }% } % Abbreviate requirement field labels after first occurrence on every page -\AtBeginPage{\reqlabelreset} +\AtBeginShipout{\reqlabelreset} \makeatother \title{Requirements} -- cgit v1.2.3 From 395ef912d0b5d398874cc37021ea0e6c0e94f38a Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 17:39:53 +0200 Subject: WIP research --- research.tex | 49 ++++++++++++++++++++++++++++++++++++++++++++++--- sources.bib | 6 ++++++ 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/research.tex b/research.tex index abfde3b..175c92b 100644 --- a/research.tex +++ b/research.tex @@ -206,11 +206,17 @@ for audio some options could be: FMOD, Wwise, or iirKlang The game engine is required to have an audio system \autocite[\ref{req:audio}]{crepe:requirements}. Since writing a custom real-time audio mixing engine is outside the scope of this project\mref, this section compares -various standalone audio engines that could be used in the engine. +various standalone audio libraries for suitability in the engine. + +\Cref{sec:audio:libs} details which libraries were considered, +\cref{sec:audio:benchmark} compares their performance, and +\cref{sec:audio:conclusion} concludes with a recommendation for most performant audio +library. \subsection{Libraries} +\label{sec:audio:libs} -\Cref{tab:audio-engines} compares several standalone audio engine libraries that fit +\Cref{tab:audio:libs} lists the standalone audio engine libraries that fit \cref{req:audio,req:lib:license}. \begin{table} @@ -225,7 +231,7 @@ various standalone audio engines that could be used in the engine. \bottomrule \end{tabular} \caption{Audio engine library comparison} - \label{tab:audio-engines} + \label{tab:audio:libs} \end{table} Other popular libraries that were researched but are unsuitable for this project @@ -235,6 +241,43 @@ include:\noparbreak \item[PortAudio \autocite{lib:portaudio}] Does not handle mixing \end{description} +\subsection{Benchmarks} +\label{sec:audio:benchmark} + +The same benchmark application was written for each of the libraries listed in +\cref{tab:audio:libs}. The application does the following:\noparbreak +\begin{enumerate} + \item Load a background track (Ogg Vorbis) + \item Load three short samples (WAV) + \item Start the background track + \item Play each sample sequentially while pausing and resuming the background track + \item Play all samples simultaniously + \item Stop all audio and exit +\end{enumerate} + +Each benchmark was profiled using \emph{perf} \autocite{tool:perf} and compared based +on total CPU and memory utilization. The results of these benchmarks are listed in +\cref{tab:audio:benchmark}. + +\begin{table} + \centering + \begin{tabular}{lr} + \toprule + \textbf{Library} & \textbf{???}\\ + \midrule + miniaudio &\\ + YSE &\\ + SoLoud &\\ + \bottomrule + \end{tabular} + \caption{Audio engine library benchmark results} + \label{tab:audio:benchmark} +\end{table} + +\subsection{Conclusion} +\label{sec:audio:conclusion} + + \section{Physics} \subsection{Introduction} diff --git a/sources.bib b/sources.bib index 6f5ce0c..33f3a2e 100644 --- a/sources.bib +++ b/sources.bib @@ -85,3 +85,9 @@ urldate = {2024-09-18}, } +@online{tool:perf, + title = {\texttt{perf:} Linux profiling with performance counters}, + url = {https://perf.wiki.kernel.org/index.php/Main_Page}, + urldate = {2024-09-18}, +} + -- cgit v1.2.3 From 074c28335b85775b7c1b53a05e6622be63cf4fe9 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 17:40:48 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index ecece0e..d0e5272 100644 --- a/time.txt +++ b/time.txt @@ -32,6 +32,7 @@ loek: 2024-09-17 1h20m project meeting loek: 2024-09-17 55m bugs :: cross-platform latexmk filespec loek: 2024-09-17 2h25m docs :: requirements loek: 2024-09-18 2h20m docs :: requirements +loek: 2024-09-18 1h50m research :: audio max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From d8d57711c340ae58bf14946372fdffd9642532b5 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 18 Sep 2024 17:51:58 +0200 Subject: Described possible game engine structures --- img/DecoratorDesignPattern.png | Bin 0 -> 13528 bytes research.tex | 30 +++++++++++++++++++++++++++--- sources.bib | 23 +++++++++++++++++++++++ 3 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 img/DecoratorDesignPattern.png diff --git a/img/DecoratorDesignPattern.png b/img/DecoratorDesignPattern.png new file mode 100644 index 0000000..8830a3d Binary files /dev/null and b/img/DecoratorDesignPattern.png differ diff --git a/research.tex b/research.tex index f62f736..052a5b2 100644 --- a/research.tex +++ b/research.tex @@ -53,9 +53,34 @@ layers are divided into the following categories:\noparbreak The above mentioned layers should be structured, somehow. One of the requirements is that the game engine's API uses a so-called gameObject (with one or more component(s)). -The gameObject is described in more detail at \cref{sec:Gameobjects/components}. ... +The gameObject is described in more detail at \cref{sec:Gameobjects/components}. + +There are multiple structures that could be used to structure a game engine. It's of +course possible to use inheritance. A major disadvantages of inheritance is that it's +not flexible. However, the provided class diagram of the game engine's API already +specifies that composition should be used (in stead of inheritance). So, let's take a +look at structures that use composition. + +The Decorator design pattern (as shown in \cref{fig:decorator}) could be used to structure +the game engine. A gameObject's propperties/behavior is determined by one (or more) +components. The Decorator design pattern allows to modify an object's propperties/behavior +by adding one (or more) Decorators. The object that is modified, could be the gameObject and +the components could be the Decorators. This is not exactly the same as the required API, +but it's very close. A major disadvantage of such Decorator design pattern, is that the +interface of all components should be the same (they should share the same methods), because +the client (which is the scene in our case) can only call/reach the components through the +interface. This would require very general methods (at the interface), which might make the +programming harder. \autocite{man:DecoratorDesignPattern} \autocite{man:Decorator} +\begin{figure}[H] + \centering + \includegraphics[width=0.5\textwidth]{img/DecoratorDesignPattern.png} + \caption{Decorator design pattern \autocite{img:Decorator}} + \label{fig:decorator} +\end{figure} + +Another very popular design pattern, is the Entity Component System (\gls{ecs}). ... -\subsubsection{ECS} +\paragraph{ECS} A game engine must have the ability to keep track and update several game objects. To do this most game engines employ an \gls{ecs} model which uses modulair components to @@ -71,7 +96,6 @@ such as audio, position, or physics. To create diverse entities with specific functions: A scene can contain many different kinds of entities, each with different properties and functions. But no matter how different each entity is, it remains an entity. To assign properties and functions to entities, components are used. -% TODO: ref?entt There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is based diff --git a/sources.bib b/sources.bib index d6b960b..e754959 100644 --- a/sources.bib +++ b/sources.bib @@ -76,3 +76,26 @@ url = {https://docs.unity3d.com/Manual/class-Transform.html}, date = {2024} } + +@misc{img:Decorator, + title = {Decorator Pattern Structure Diagram}, + author = {Refactoring Guru}, + url = {https://refactoring.guru/images/patterns/diagrams/decorator/structure.png}, + date = {2024} +} + +@manual{man:DecoratorDesignPattern, + title = {Extension Object Design Pattern}, + author = {James Fawcett}, + organization = {Syracuse University}, + url = {https://ecs.syr.edu/faculty/fawcett/handouts/CSE776/PatternPDFs/ExtensionObject.pdf}, + date = {2024} +} + +@manual{man:Decorator, + title = {Decorator Design Pattern}, + author = {Refactoring Guru}, + organization = {Refactoring Guru}, + url = {https://refactoring.guru/design-patterns/decorator}, + date = {2024} +} -- cgit v1.2.3 From c69c8815df1c0e1e6ef155a9cfc4747132e0e1c6 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 18 Sep 2024 18:11:19 +0200 Subject: Made a begin for the ECS --- research.tex | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/research.tex b/research.tex index 052a5b2..1ca5a2e 100644 --- a/research.tex +++ b/research.tex @@ -49,7 +49,7 @@ layers are divided into the following categories:\noparbreak \item[AI] Provides artificial inteligent behavior. \end{description} -\subsubsection{Structure} +\subsubsection{Structures} The above mentioned layers should be structured, somehow. One of the requirements is that the game engine's API uses a so-called gameObject (with one or more component(s)). @@ -78,24 +78,16 @@ programming harder. \autocite{man:DecoratorDesignPattern} \autocite{man:Decorato \label{fig:decorator} \end{figure} -Another very popular design pattern, is the Entity Component System (\gls{ecs}). ... - -\paragraph{ECS} - -A game engine must have the ability to keep track and update several game objects. To -do this most game engines employ an \gls{ecs} model which uses modulair components to -give entities properties and features. The need for an entity component system arises -because multiple game objects are required to create a scene in a game. These game -objects exist within the scene and perform actions, such as a UI display for a score. -This game object does not need to be rendered; it could be a script running in the -background. It could also be a player sprite that is controlled. These entities need -to be aware of other entities, for example, during collisions. For this to function, -a scene is required to host all game objects. Within this scene, the game objects -must be stored efficiently, and entities must be provided with the required behavior, -such as audio, position, or physics. To create diverse entities with specific -functions: A scene can contain many different kinds of entities, each with different -properties and functions. But no matter how different each entity is, it remains an -entity. To assign properties and functions to entities, components are used. +TODO: Add Extension Objects design pattern (if this is applicable)! + +Another (very popular) design pattern to structure the game engine, is the Entity Component +System (\gls{ecs}). The \gls{ecs} is made out of three main subsystems, namely entities, +components and systems. Entities are just IDs. An entity is made out of a gameObject and one +(or more) components. Components are the classes that hold the data. The components determine +what kind of entity it is (e.g. a sprite, audio, and so on). Systems take care of the behavior +of the entities. Systems mainly read and write the enity's components data. The \gls{ecs} +clearly distinguishes the data (components) from the functionality (systems). +TODO: Continue this explanation (also add some diagrams to make the ECS more clear)! There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is based -- cgit v1.2.3 From 30ef1a314477cf4495dcbb1d8d47de538810a140 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 18 Sep 2024 18:15:17 +0200 Subject: Added task --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 4793de9..9e012de 100644 --- a/time.txt +++ b/time.txt @@ -53,6 +53,7 @@ max: 2024-09-13 1h30m fourth project meeting max: 2024-09-16 1h researching self-made ECS possibilities max: 2024-09-16 1h30m researching ECS libraries max: 2024-09-17 1h30m fifth project meeting +max: 2024-09-18 4h researching engine structure wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 40f485af1bdcc04477a2cfcb71c899d397d7c6e6 Mon Sep 17 00:00:00 2001 From: Jaro Date: Wed, 18 Sep 2024 19:03:53 +0200 Subject: removed TODO and change some small typos --- plan.tex | 70 +++++++++++++++++++++------------------------------------------- 1 file changed, 23 insertions(+), 47 deletions(-) diff --git a/plan.tex b/plan.tex index 076ce11..2f9cc94 100644 --- a/plan.tex +++ b/plan.tex @@ -20,7 +20,7 @@ This project is part of the fourth-year minor `Systems Programming in C++'. The minor consists of several courses troughout 20 weeks, which create the basis for this project. The project is focussed on building a game engine using the programming -language C++. This document describes our plan of attack for the project. +language C++. This document describes the plan of attack for the project. \section{Problem Definition} @@ -34,7 +34,7 @@ language C++. This document describes our plan of attack for the project. \subsection{Problem Analysis} CodedFun Games is a small, single-person game company looking to scale up. The owner, -who is also a game programmer, and graphical artist, has received government funding, +who is a game programmer, and graphical artist, has received government funding, which he wants to invest in a custom-built game engine. The owner has no interest in developing or maintaining a game engine himself, so he has hired a part-time engine programmer. This programmer does not have time to create an entire engine but is @@ -49,29 +49,19 @@ Therefore, he wants the new engine to adhere to a similar structure. A simple requirements document is defined to specify how strictly this structure should be followed. -Finally, because the client does not want to dive deeply into the engine himself, he -wants a secondary application (preferably a game) that can be used to test the -engine's features. This is referred to as the \emph{validation application}. +Finally, because the client does not want to dive deeply into the engine himself, he wants a secondary application (preferably a game) that can be used to test the engine's features. This is referred to as the \emph{validation application}. \subsection{Goal} -The goal is to develop a custom game engine that meets the client's requirements for -maintainability, extensibility, user-friendliness, and adherence to a Unity-like -structure. In addition, a validation application should be created to show and test -the engine's features. +The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. In addition, a validation application is created to show and test the engine's features. \subsection{Result} -The expected result is a well-documented, custom game engine that follows a structure -similar to Unity. Additionally, a validation application should be provided to test -and showcase the engine's capabilities. +The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a validation application should be provided to test and showcase the engine's capabilities. \section{Planning} -The customer specified multiple deliverables troughout the 20 weeks of this project. -Despite the fact that 20 weeks have been reserved for this project, the intention is -that the game will be delivered in week 17. Any delay/resit will take place between -weeks 17 and 20. A rough planning can be found in \cref{tab:planning}. +The customer specified multiple deliverables throughout the 20 weeks of this project. Despite the fact that 20 weeks have been reserved for this project, the game will be delivered in week 17. Any delay/resit will take place between weeks 17 and 20. A rough planning can be found in \cref{tab:planning}. \begin{table} \begin{tabularx}{\linewidth}{lX} @@ -106,21 +96,20 @@ weeks 17 and 20. A rough planning can be found in \cref{tab:planning}. \item[Scope Expansion] There is a risk of creating a scope that is bigger than the requirements. Lack of Team Collaboration: Insufficient collaboration among team members may hinder progress. + \item[Lack of Team Collaboration] Within the team a lack of collaboration can result in miscommunication or delay in work. \end{description} \subsection{Measures} \begin{description} \item[Multiplatform] The team can switch any time to a single platform, so this - risk is metigated. + risk is metigated. \item[Integration] By following standards and having an integrator, which checks every pull request, this risk is minimilised. \item[Scope Expansion] By writing detailed requirements and having weekly team meetings, to check if the progress is within the scope, should be sufficient to decrease the risk. - \item[Lack of Team Collaboration] Weekly team meetings will result in collaboration - among team members and discussing what each other tasks is, will decease this - risk. + \item[Lack of Team Collaboration] Weekly team meetings will result in collaboration among team members and discussing what each other tasks is, will decease this risk. \end{description} \section{Documentation} @@ -177,8 +166,8 @@ Each project member will keep track of their own working hours and add them to t \subsection{Absence or delay} -If a project member is going to be absent or delayed, they are required to -notify the team through either WhatsApp or Outlook. Additionally, the teacher +If a project member is going to be absent or delayed, they are required to +notify the team through either WhatsApp or Outlook. Additionally, the teacher should be informed of the absence as well. \subsection{Inconsistent participation} @@ -200,9 +189,9 @@ will be necessary in such cases. However, if the inconsistency is due to other factors, potential repercussions may include additional assignments or actions as determined by the project supervisor. -A team member is considered to have inconsistent participation if their hours -are significantly behind the team’s average or if tasks are not completed -without valid reasons. It is essential that any concerns regarding a team +A team member is considered to have inconsistent participation if their hours +are significantly behind the team’s average or if tasks are not completed +without valid reasons. It is essential that any concerns regarding a team member's performance, should be resolved through unanimous agreement within the team. \subsection{Weekly Update} @@ -212,9 +201,9 @@ before 12:00 on Friday. Personal updates may also be included and will be confidential between the team member, the Team Leader, and/or the teacher, if requested. -Jaro Rutjes will compile and send a team update to the project supervisor, Bob -van der Putten, also by Friday. This update will include technical information -on what has been accomplished, plans for upcoming work, and an overview of the +Jaro Rutjes will compile and send a team update to the project supervisor, Bob +van der Putten, also by Friday. This update will include technical information +on what has been accomplished, plans for upcoming work, and an overview of the team's overall progress. \subsection{Weekly Meetings} @@ -230,8 +219,7 @@ project needs. % Information about how and when Scrum will be used in this project (using Miro). \section{Scrum (Miro)} -The team will start using scrum after the initial phase, of structering the project, -is finished. This phase is over when proof of concepts are being made. +The team starts using scrum after the initial phase, of structering the project, is finished. This phase is finished after a initial design of the product is made. \subsection{Scrum Board} @@ -257,26 +245,22 @@ To manage tasks effectively: \begin{itemize} \item A task from the \emph{Current Sprint} tab should be selected and moved to the - \emph{In Progress} tab when work begins. + \emph{In Progress} tab when work begins. \item The status of the task should be updated to \emph{In Progress} as soon as work starts. \item Once the task is completed and reviewed, it should be moved to the \emph{Done} tab, and its status should be updated to \emph{Done}. \end{itemize} -Each task or user story will be assigned user points, which indicate the relative -size or complexity of the task compared to these examples. -% TODO: add examples +Each task or user story will be assigned user points, which indicate the relative size or complexity of the task. Examples of certain tasks will be available in the scrumboard. \subsection{Burn Down Chart} The Burn Down Chart will be generated using Excel from the Scrum board data every week. Each user story or task marked as done, will burn the chart downwards. This -Burn Down Chart is shared in the weekly updates with the team and the project -supervisor. +Burn Down Chart is shared in the weekly updates with the team. % Information regarding the git workflow of this project. -% TODO: Diagram explaining the workflow \section{Git Workflow} GitHub is used for version management of both code \autocite{crepe:code-repo} and @@ -284,16 +268,8 @@ documentation \autocite{crepe:docs-repo}, each in its own respective repository. keeps the documentation and code seperate, resulting in ordened and manageable repositories. -\subsection{Git New Branch} +\subsection{Code Standard and git workflow} -% TODO: add here details from contributing.md? - -\subsection{Git Merge To Master} - -% TODO: add here diagram on what actions are taken before merge. - -\subsection{Code Standard} - -The code standard can be found in the contributing.md \autocite{crepe:code-standard}. +The code standard and the git workflow can be found in the contributing.md \autocite{crepe:code-standard}. \end{document} -- cgit v1.2.3 From 28d0733146aa3a8ba720bda20ff66ffa4cf4e64d Mon Sep 17 00:00:00 2001 From: Jaro Date: Wed, 18 Sep 2024 19:30:48 +0200 Subject: added feedback to project plan --- plan.tex | 5 ++++- sources.bib | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/plan.tex b/plan.tex index 2f9cc94..147e49c 100644 --- a/plan.tex +++ b/plan.tex @@ -53,7 +53,10 @@ Finally, because the client does not want to dive deeply into the engine himself \subsection{Goal} -The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. In addition, a validation application is created to show and test the engine's features. +The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. The engine may integrate third-party software (as agreed with the client) to support specific features, such as audio, physics, and rendering. In addition, a validation application is created to show and test the engine's features. + +\subsection{Scope} +The requirements document \autocite{crepe:requirements} has several requirements with a MoSCoW `must', `should', `could' or `won't' priority to indicate the project's scope. \subsection{Result} diff --git a/sources.bib b/sources.bib index 50f5ead..8d96ce1 100644 --- a/sources.bib +++ b/sources.bib @@ -47,4 +47,11 @@ date = {2024-09-10}, } +@misc{crepe:requirements, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Requirements}, + url = {https://github.com/lonkaars/crepe/blob/master/requirements.pdf}, + date = {2024-09-10}, +} + -- cgit v1.2.3 From 7dc00a616e186bb8b02902e06b7cb38164acbbbd Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 20:51:55 +0200 Subject: merge #15 --- img/decorator-design-pattern.puml | 62 +++++++++++++++++++++++++ img/theme.ipuml | 9 +++- research.tex | 93 ++++++++++++++++++++----------------- sources.bib | 97 ++++++++++++++++++++------------------- 4 files changed, 169 insertions(+), 92 deletions(-) create mode 100644 img/decorator-design-pattern.puml diff --git a/img/decorator-design-pattern.puml b/img/decorator-design-pattern.puml new file mode 100644 index 0000000..2bc406b --- /dev/null +++ b/img/decorator-design-pattern.puml @@ -0,0 +1,62 @@ +@startuml +!include theme.ipuml +skinparam style strictuml +skinparam Linetype ortho + +class Client +class Component <> { + + execute() + -- +} +class ConcComponent as "Concrete\nComponent" { + ... + -- + + execute() +} +class BaseDecorator as "Base Decorator" { + - wrappee: Component + + BaseDecorator(c: Component) + + execute() +} +class ConcDecorator as "Concrete\nDecorators" { + ... + -- + + execute() + + extra() +} + +hide Client members +hide circle + +Client --> Component +Component <|.. ConcComponent +Component <|.. BaseDecorator +Component <--o BaseDecorator +BaseDecorator <|-- ConcDecorator + +ConcComponent -right[hidden] BaseDecorator + +note right of Client + a = new ConcComponent() + b = new ConcDecorator1(a) + c = new ConcDecorator1(b) + c.execute() + // Decorator -> Decorator -> Component +end note + +note right of BaseDecorator::BaseDecorator + wrappee = c +end note + +note right of BaseDecorator::execute + wrappee.execute() +end note + +note right of ConcDecorator::execute + super::execute() + extra() +end note + +@enduml + +" referenced from diff --git a/img/theme.ipuml b/img/theme.ipuml index 88d183a..4e3613e 100644 --- a/img/theme.ipuml +++ b/img/theme.ipuml @@ -1,5 +1,10 @@ !theme plain -skinparam DefaultFontSize 14 +skinparam ClassAttributeIconSize 0 +skinparam ClassFontStyle bold skinparam DefaultFontName Inter +skinparam DefaultFontSize 14 +skinparam MaxMessageSize 200 +skinparam Nodesep 25 +skinparam Padding 2 +skinparam Ranksep 50 skinparam RoundCorner 0 -skinparam maxMessageSize 200 diff --git a/research.tex b/research.tex index 1ca5a2e..e07a428 100644 --- a/research.tex +++ b/research.tex @@ -52,8 +52,9 @@ layers are divided into the following categories:\noparbreak \subsubsection{Structures} The above mentioned layers should be structured, somehow. One of the requirements is -that the game engine's API uses a so-called gameObject (with one or more component(s)). -The gameObject is described in more detail at \cref{sec:Gameobjects/components}. +that the game engine's API uses a so-called gameObject (with one or more +component(s)). The gameObject is described in more detail at +\cref{sec:Gameobjects/components}. There are multiple structures that could be used to structure a game engine. It's of course possible to use inheritance. A major disadvantages of inheritance is that it's @@ -61,54 +62,62 @@ not flexible. However, the provided class diagram of the game engine's API alrea specifies that composition should be used (in stead of inheritance). So, let's take a look at structures that use composition. -The Decorator design pattern (as shown in \cref{fig:decorator}) could be used to structure -the game engine. A gameObject's propperties/behavior is determined by one (or more) -components. The Decorator design pattern allows to modify an object's propperties/behavior -by adding one (or more) Decorators. The object that is modified, could be the gameObject and -the components could be the Decorators. This is not exactly the same as the required API, -but it's very close. A major disadvantage of such Decorator design pattern, is that the -interface of all components should be the same (they should share the same methods), because -the client (which is the scene in our case) can only call/reach the components through the -interface. This would require very general methods (at the interface), which might make the -programming harder. \autocite{man:DecoratorDesignPattern} \autocite{man:Decorator} -\begin{figure}[H] - \centering - \includegraphics[width=0.5\textwidth]{img/DecoratorDesignPattern.png} - \caption{Decorator design pattern \autocite{img:Decorator}} - \label{fig:decorator} +The Decorator design pattern (as shown in \cref{fig:decorator}) could be used to +structure the game engine. A gameObject's propperties/behavior is determined by one +(or more) components. The Decorator design pattern allows to modify an object's +propperties/behavior by adding one (or more) Decorators. The object that is modified, +could be the gameObject and the components could be the Decorators. This is not +exactly the same as the required API, but it's very close. A major disadvantage of +such Decorator design pattern, is that the interface of all components should be the +same (they should share the same methods), because the client (which is the scene in +our case) can only call/reach the components through the interface. This would +require very general methods (at the interface), which might make the programming +harder \autocite{man:DecoratorDesignPattern,man:Decorator}. + +\begin{figure} + \centering + \includepumldiag{img/decorator-design-pattern.puml} + \caption{Decorator design pattern} + Source: \autocite{img:Decorator} + \label{fig:decorator} \end{figure} TODO: Add Extension Objects design pattern (if this is applicable)! -Another (very popular) design pattern to structure the game engine, is the Entity Component -System (\gls{ecs}). The \gls{ecs} is made out of three main subsystems, namely entities, -components and systems. Entities are just IDs. An entity is made out of a gameObject and one -(or more) components. Components are the classes that hold the data. The components determine -what kind of entity it is (e.g. a sprite, audio, and so on). Systems take care of the behavior -of the entities. Systems mainly read and write the enity's components data. The \gls{ecs} -clearly distinguishes the data (components) from the functionality (systems). -TODO: Continue this explanation (also add some diagrams to make the ECS more clear)! +Another (very popular) design pattern to structure the game engine, is the Entity +Component System (\gls{ecs}). The \gls{ecs} is made out of three main subsystems, +namely entities, components and systems. Entities are just IDs. An entity is made out +of a gameObject and one (or more) components. Components are the classes that hold +the data. The components determine what kind of entity it is (e.g. a sprite, audio, +and so on). Systems take care of the behavior of the entities. Systems mainly read +and write the enity's components data. The \gls{ecs} clearly distinguishes the data +(components) from the functionality (systems). + +% TODO: Continue this explanation (also add some diagrams to make the ECS more clear)! There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most -popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is based -on the amount of stars on GitHub. -\begin{table}[ht] - \centering - \begin{tabular}{ll@{\qquad}lr} - \toprule - \textbf{Name} & \textbf{Short Description} & \textbf{Stars} & \textbf{License} \\ - \midrule - EnTT & Fast and reliable entity-component system & 10k & MIT \\ - Flecs & A Multithreaded Entity Component System & 6.3k & MIT \\ - EntityX & Fast, type-safe C++ entity component system & 2.2k & MIT \\ - \bottomrule - \end{tabular} - \caption{Popular \gls{ecs} libraries \autocite{github:001}} - \label{tab:popularECSLibraries} +popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is +based on the amount of stars on GitHub. + +\begin{table} + \centering + \begin{tabular}{ll@{\qquad}lr} + \toprule + \textbf{Name} & \textbf{Short Description} & \textbf{Stars} & \textbf{License}\\ + \midrule + EnTT & Fast and reliable entity-component system & 10k & MIT\\ + Flecs & A Multithreaded Entity Component System & 6.3k & MIT\\ + EntityX & Fast, type-safe C++ entity component system & 2.2k & MIT\\ + \bottomrule + \end{tabular} + \caption{Popular \gls{ecs} libraries} + Source: \autocite{github:awesome-ecs} + \label{tab:popularECSLibraries} \end{table} -It is, of course, not necessary to use a library to implement an \gls{ecs} architecture. -However, it seems very hard to achieve the same performance as a library. \autocite{github:002} +It is, of course, not necessary to use a library to implement an \gls{ecs} +architecture. However, it seems very hard to achieve the same performance as a +library \autocite{github:ecsfaq}. \subsection{Conclusion} diff --git a/sources.bib b/sources.bib index e754959..bf04165 100644 --- a/sources.bib +++ b/sources.bib @@ -13,89 +13,90 @@ } @misc{miro:scrum-board, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Scrum Board on Miro}, - url = {https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Scrum Board on Miro}, + url = {https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474}, + date = {2024-09-10}, } @misc{crepe:code-repo, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Crepe Code Repository}, - url = {https://github.com/lonkaars/crepe}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Crepe Code Repository}, + url = {https://github.com/lonkaars/crepe}, + date = {2024-09-10}, } @misc{crepe:docs-repo, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Crepe Documentation Repository}, - url = {https://github.com/lonkaars}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Crepe Documentation Repository}, + url = {https://github.com/lonkaars}, + date = {2024-09-10}, } @misc{crepe:docs-standard, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Crepe Documentation Standard}, - url = {https://github.com/lonkaars/crepe-docs/blob/master/contributing.md}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Crepe Documentation Standard}, + url = {https://github.com/lonkaars/crepe-docs/blob/master/contributing.md}, + date = {2024-09-10}, } @misc{crepe:code-standard, - author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, - title = {Crepe Code Standard}, - url = {https://github.com/lonkaars/crepe/blob/master/contributing.md}, - date = {2024-09-10}, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Crepe Code Standard}, + url = {https://github.com/lonkaars/crepe/blob/master/contributing.md}, + date = {2024-09-10}, } -@misc{github:001, - author = {Sangjun Lee}, - title = {Awesome Entity Component System}, - url = {https://github.com/jslee02/awesome-entity-component-system?tab=readme-ov-file}, +@misc{github:awesome-ecs, + author = {Sangjun Lee}, + title = {Awesome Entity Component System}, + url = {https://github.com/jslee02/awesome-entity-component-system?tab=readme-ov-file}, date = {2023} } -@misc{github:002, - author = {Sander Mertens}, - title = {ECS FAQ}, - url = {https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#should-i-write-my-own-ecs}, +@misc{github:ecsfaq, + author = {Sander Mertens}, + title = {ECS FAQ}, + url = {https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#should-i-write-my-own-ecs}, date = {2023} } @manual{man:unityGameobjects, title = {GameObject}, author = {Unity Technologies}, - organization = {Unity}, - url = {https://docs.unity3d.com/Manual/GameObjects.html}, + organization = {Unity}, + url = {https://docs.unity3d.com/Manual/GameObjects.html}, date = {2024} } @manual{man:unityTransformClass, - title = {Transform Class}, - author = {Unity Technologies}, - organization = {Unity}, - url = {https://docs.unity3d.com/Manual/class-Transform.html}, - date = {2024} + title = {Transform Class}, + author = {Unity Technologies}, + organization = {Unity}, + url = {https://docs.unity3d.com/Manual/class-Transform.html}, + date = {2024} } @misc{img:Decorator, - title = {Decorator Pattern Structure Diagram}, - author = {Refactoring Guru}, - url = {https://refactoring.guru/images/patterns/diagrams/decorator/structure.png}, - date = {2024} + title = {Decorator Pattern Structure Diagram}, + author = {Refactoring Guru}, + url = {https://refactoring.guru/images/patterns/diagrams/decorator/structure.png}, + date = {2024} } @manual{man:DecoratorDesignPattern, - title = {Extension Object Design Pattern}, - author = {James Fawcett}, - organization = {Syracuse University}, - url = {https://ecs.syr.edu/faculty/fawcett/handouts/CSE776/PatternPDFs/ExtensionObject.pdf}, - date = {2024} + title = {Extension Object Design Pattern}, + author = {James Fawcett}, + organization = {Syracuse University}, + url = {https://ecs.syr.edu/faculty/fawcett/handouts/CSE776/PatternPDFs/ExtensionObject.pdf}, + date = {2024} } @manual{man:Decorator, - title = {Decorator Design Pattern}, - author = {Refactoring Guru}, + title = {Decorator Design Pattern}, + author = {Refactoring Guru}, organization = {Refactoring Guru}, - url = {https://refactoring.guru/design-patterns/decorator}, - date = {2024} + url = {https://refactoring.guru/design-patterns/decorator}, + date = {2024} } + -- cgit v1.2.3 From 14788335ba110076e8beb72a0330712d238cf12a Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 20:54:41 +0200 Subject: refactor pro/cons in research --- research.tex | 60 +++++++++++++++++++++++++----------------------------------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/research.tex b/research.tex index e07a428..5340bf5 100644 --- a/research.tex +++ b/research.tex @@ -152,23 +152,18 @@ software, emulators, and popular games, including Valve's award-winning catalog many Humble Bundle games.''} \gls{sdl2} is written in the C programming language, and therefore, structs and functions are used instead of objects and methods. -The advantages of \gls{sdl2} are:\noparbreak -\begin{itemize} - \item Controller support is provided. - \item 2D and 3D rendering are supported. - \item Broad multiplatform support is offered, including older consoles such as the - Wii. - \item Low-level control is available. - \item A large community ensures wide usage. - \item Extended libraries can be used to add functionalities, such as SDL\_Mixer for - sound. -\end{itemize} - -The disadvantages of \gls{sdl2} are:\noparbreak -\begin{itemize} - \item A limited built-in 2D renderer is provided. - \item Extended libraries require setup. -\end{itemize} +\begin{comparison} + \pro{Controller support is provided.} + \pro{2D and 3D rendering are supported.} + \pro{Broad multiplatform support is offered, including older consoles such as the + Wii.} + \pro{Low-level control is available.} + \pro{A large community ensures wide usage.} + \pro{Extended libraries can be used to add functionalities, such as SDL\_Mixer for + sound.} + \con{A limited built-in 2D renderer is provided.} + \con{Extended libraries require setup.} +\end{comparison} \paragraph{SFML} @@ -176,24 +171,19 @@ The disadvantages of \gls{sdl2} are:\noparbreak network, system, and window. This framework, written in C++, was designed to simplify game development. -The advantages of \gls{sfml} are: -\begin{itemize} - \item Object-oriented design is provided since it is written in C++. - \item A built-in 2D renderer is available for ease of use. - \item A built-in audio system is included. - \item Cross-platform support is available for Linux, Windows, and macOS. - \item Networking capabilities are provided for multiplayer or networked - applications. -\end{itemize} - -The disadvantages of \gls{sfml} are: -\begin{itemize} - \item The 2D rendering engine may experience performance issues in large-scale - games. - \item The community is smaller compared to \gls{sdl2}. - \item No native 3D support is provided. - \item Not all image formats are supported. -\end{itemize} +\begin{comparison} + \pro{Object-oriented design is provided since it is written in C++.} + \pro{A built-in 2D renderer is available for ease of use.} + \pro{A built-in audio system is included.} + \pro{Cross-platform support is available for Linux, Windows, and macOS.} + \pro{Networking capabilities are provided for multiplayer or networked + applications.} + \con{The 2D rendering engine may experience performance issues in large-scale + games.} + \con{The community is smaller compared to \gls{sdl2}.} + \con{No native 3D support is provided.} + \con{Not all image formats are supported.} +\end{comparison} \subsubsection{Audio} -- cgit v1.2.3 From 5d13bc5999c4abc51b9bcccf4b8b2cbd44a0193c Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 18 Sep 2024 20:55:13 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 9e012de..509ed5b 100644 --- a/time.txt +++ b/time.txt @@ -33,6 +33,7 @@ loek: 2024-09-17 55m bugs :: cross-platform latexmk filespec loek: 2024-09-17 2h25m docs :: requirements loek: 2024-09-18 2h20m docs :: requirements loek: 2024-09-18 1h50m research :: audio +loek: 2024-09-18 1h05m integration :: PR merge max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From f63057474a461fe814458c66515e281700f296df Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 19 Sep 2024 09:52:35 +0200 Subject: fix requirement ordering in reqs2tex --- reqs.toml | 27 +++++++++------------- scripts/reqs2tex.py | 65 ++++++++++++++++++++++++++++------------------------- 2 files changed, 45 insertions(+), 47 deletions(-) diff --git a/reqs.toml b/reqs.toml index 6645ea4..35c7a96 100644 --- a/reqs.toml +++ b/reqs.toml @@ -1,15 +1,10 @@ # This is a TOML file containing all project requirements. The reqs2tex script # can be used to generate the files necessary to compile requirements.tex and # cross-reference the requirements from other documents. -# -# Note that TOML has a hash table structure, so keys used for defining -# requirement properties cannot be used for requirement IDs. The properties are: -# label, type, id, index, deleted, done, description, priority # This is the requirement cross-reference ID. Requirements can be -# (cross-)referenced from LaTeX by prefixing this ID with `req:` and -# substituting dots for colons (i.e. this requirement is referenced as -# \cref{req:audio:async-api}). +# (cross-)referenced from LaTeX by prefixing this ID with `req:` (i.e. this +# requirement is referenced as \cref{req:audio}). [audio] # Requirement type ('system' | 'user') type = 'user' @@ -25,10 +20,10 @@ background music, while simultaniously playing sound effects. # is a list of strings, each item is treated as the ID of another requirement, # and the references are checked before LaTeX runs. done = [ - 'audio.async-api', - 'audio.handle', - 'audio.stream-mix', - 'audio.volume', + 'audio:async-api', + 'audio:handle', + 'audio:stream-mix', + 'audio:volume', ] #done = 'When I feel like it' # Requirements that are no longer applicable should set `deleted` to `true`. @@ -36,7 +31,7 @@ done = [ # different document revisions. #deleted = true -[audio.async-api] +[audio:async-api] type = 'system' priority = 'must' description = ''' @@ -44,7 +39,7 @@ The public audio \gls{api} supports starting audio samples asynchronously (i.e.~fire and forget). ''' -[audio.handle] +[audio:handle] type = 'system' priority = 'must' description = ''' @@ -52,14 +47,14 @@ The public audio \gls{api} allows the game programmer to control (i.e.~play, pause, resume and stop) audio samples after they are created/initialized. ''' -[audio.stream-mix] +[audio:stream-mix] type = 'system' priority = 'must' description = ''' The audio system supports playing multiple audio streams simultaniously. ''' -[audio.volume] +[audio:volume] type = 'system' priority = 'must' description = ''' @@ -67,7 +62,7 @@ The public audio \gls{api} allows the game programmer to control the volume of audio samples. ''' -[aux.license] +[aux:license] type = 'system' priority = 'must' description = ''' diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index e5f063d..1863b0d 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -1,9 +1,9 @@ #!/bin/python3 -import sys, tomllib, tex +import sys, tomllib, tex, re from enum import StrEnum def label2ref(*labels): - return ",".join(["req:" + label.replace('.', ':') for label in labels]) + return ",".join(["req:" + label for label in labels]) class KEY(StrEnum): LABEL = 'label' @@ -25,27 +25,6 @@ class REQ_PRIORITY(StrEnum): COULD = 'could' WONT = 'will not' -def flatten(data): - out = [] - for key, value in data.items(): - # this item is a requirement - if key == KEY.DESCRIPTION: - out.append(data) - - # skip over reserved keys - if key in KEY: continue - - # recursively flatten other requirements - items = flatten(value) - # and prefix them with the current key - for item in items: - if KEY.LABEL in item: - item[KEY.LABEL] = f"{key}.{item[KEY.LABEL]}" - else: - item[KEY.LABEL] = f"{key}" - out += items - return out - id_counter = 0 def make_id(item): global id_counter @@ -79,8 +58,7 @@ def sanitize(item, ids): die("definition of done includes unknown requirement(s)") item[KEY.DONE] = tex.cmd('Cref', label2ref(*item[KEY.DONE])) -def convert(data): - reqs = flatten(data) +def convert(reqs): all_ids = [item[KEY.LABEL] for item in reqs] index = 0 for item in reqs: @@ -94,6 +72,9 @@ def convert(data): # skip deleted requirements (but process for make_id) reqs = [item for item in reqs if item[KEY.DELETED] == False] + # sort by label + reqs = sorted(reqs, key=lambda req: req[KEY.LABEL]) + return reqs def fmt_aux(data): @@ -145,20 +126,42 @@ def fmt_tex(data): ) return out +def tomlload(content): + # replace requirement labels with temp value + label_map = dict() + label_idx = 0 + lines = content.split("\n") + for index, line in enumerate(lines): + match = re.search(r"^\s*\[(.+)\]", line) + if match is None: continue + lines[index] = f"[{label_idx}]" + label_map[str(label_idx)] = match.group(1) + label_idx += 1 + content = "\n".join(lines) + + # load TOML and replace temporary labels with real labels + data_dict = tomllib.loads(content) + data_list = [] + for key, value in data_dict.items(): + value[KEY.LABEL] = label_map[key] + data_list.append(value) + + return data_list + def main(input_file): - data = {} - with open(input_file, "rb") as file: - data = tomllib.load(file) + data = [] + with open(input_file, "r") as file: + data = tomlload(file.read()) - requirements = convert(data) + items = convert(data) output_aux = input_file.removesuffix(".toml") + ".aux" with open(output_aux, "w+") as file: - file.write(fmt_aux(requirements)) + file.write(fmt_aux(items)) output_tex = input_file.removesuffix(".toml") + ".tex" with open(output_tex, "w+") as file: - file.write(fmt_tex(requirements)) + file.write(fmt_tex(items)) if __name__ == "__main__": if len(sys.argv) != 2: -- cgit v1.2.3 From 43597e2e405276868aac640175e50931513a1ae0 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 19 Sep 2024 09:53:21 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 509ed5b..afbfa38 100644 --- a/time.txt +++ b/time.txt @@ -34,6 +34,7 @@ loek: 2024-09-17 2h25m docs :: requirements loek: 2024-09-18 2h20m docs :: requirements loek: 2024-09-18 1h50m research :: audio loek: 2024-09-18 1h05m integration :: PR merge +loek: 2024-09-19 30m docs :: requirements max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From e99bf20eff8eb26a5b6f5ec31b7ba1dfc6480931 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 19 Sep 2024 12:20:58 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index afbfa38..1566870 100644 --- a/time.txt +++ b/time.txt @@ -35,6 +35,7 @@ loek: 2024-09-18 2h20m docs :: requirements loek: 2024-09-18 1h50m research :: audio loek: 2024-09-18 1h05m integration :: PR merge loek: 2024-09-19 30m docs :: requirements +loek: 2024-09-19 15m project meeting max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 6655651c11bafde04122a451f35ed4bb9ed1808f Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 19 Sep 2024 14:51:47 +0200 Subject: update time.txt --- time.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/time.txt b/time.txt index 1566870..5f07bac 100644 --- a/time.txt +++ b/time.txt @@ -36,6 +36,8 @@ loek: 2024-09-18 1h50m research :: audio loek: 2024-09-18 1h05m integration :: PR merge loek: 2024-09-19 30m docs :: requirements loek: 2024-09-19 15m project meeting +loek: 2024-09-19 1h30m project meeting +loek: 2024-09-19 45m project meeting max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 33c573aa26198822e7873edcd567553eb6aebd79 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Thu, 19 Sep 2024 15:34:57 +0200 Subject: Added tasks --- time.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/time.txt b/time.txt index 9e012de..e764073 100644 --- a/time.txt +++ b/time.txt @@ -54,6 +54,9 @@ max: 2024-09-16 1h researching self-made ECS possibilities max: 2024-09-16 1h30m researching ECS libraries max: 2024-09-17 1h30m fifth project meeting max: 2024-09-18 4h researching engine structure +max: 2024-09-19 20m sixt project meeting (part one) +max: 2024-09-19 1h30m third project lesson +max: 2024-09-19 45m sixt project meeting (part two) wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From b5ad864b5f020a73e4e0a068302cd22209f01fbb Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 19 Sep 2024 17:27:21 +0200 Subject: remove version from documents --- contributing.md | 4 ---- latexmkrc | 2 +- meta.tex | 1 - plan.tex | 8 -------- projdoc.cls | 11 ++++++++--- 5 files changed, 9 insertions(+), 17 deletions(-) diff --git a/contributing.md b/contributing.md index c11c834..db58388 100644 --- a/contributing.md +++ b/contributing.md @@ -2,10 +2,6 @@ This document is an extension of the [crêpe engine contribution guidelines][crepe-engine-contrib]. Rules in this document override those in the other document. -# Versioning - -- TODO: discuss w/ group - # Code style - Indent using tabs diff --git a/latexmkrc b/latexmkrc index 880f859..d2c3cdc 100644 --- a/latexmkrc +++ b/latexmkrc @@ -2,7 +2,7 @@ use File::Spec::Functions; -$pdflatex = "xelatex --interaction=nonstopmode %O %S"; +$pdflatex = "xelatex --interaction=nonstopmode --shell-escape %O %S"; $pdf_mode = 1; $dvi_mode = 0; $postscript_mode = 0; diff --git a/meta.tex b/meta.tex index cad4b81..db7c7b1 100644 --- a/meta.tex +++ b/meta.tex @@ -1,6 +1,5 @@ \organization{Avans University of Applied Sciences} \project{Project cr\^epe} -\version{0.0} \author{% Loek Le Blansch\and% Wouter Boerenkamps\and% diff --git a/plan.tex b/plan.tex index 076ce11..6ebd73a 100644 --- a/plan.tex +++ b/plan.tex @@ -1,15 +1,7 @@ \documentclass{projdoc} \input{meta.tex} -% @Jaro: Zie hieronder -% Version 0.0 seems not right -% I'm also missing a 'version table' -% Shall we use this version system?: -% Version numbers after the comma indicate an interim version and version numbers -% before the comma indicate versions ready for publication - \title{Project Plan} -\version{0.1} \begin{document} \tablestables diff --git a/projdoc.cls b/projdoc.cls index fe6317b..ee94835 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -164,8 +164,6 @@ \def\project#1{\def\@project{#1}} \let\@organization\relax \def\organization#1{\def\@organization{#1}} -\let\@version\relax -\def\version#1{\def\@version{#1}} \def\@maketitle{% \centering% \parskip=0pt% @@ -195,8 +193,15 @@ }% \vfill\flushright% \par{% - \par{\strut{}Version \@version\strut}% \par{\strut\@date\strut}% + \begingroup% + \endlinechar=\m@ne\everyeof{\noexpand}% + \edef\x{% + \endgroup% + \def\noexpand\commit{\@@input|"git rev-parse --short HEAD" }% + }% + \x% + \par{\strut\footnotesize({\ttfamily\commit})\strut}% }% \par\vspace*{2in}% } -- cgit v1.2.3 From 41ac21680ef13e2db543ff56728ecffe504d6850 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 19 Sep 2024 17:27:51 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 5f07bac..165e927 100644 --- a/time.txt +++ b/time.txt @@ -38,6 +38,7 @@ loek: 2024-09-19 30m docs :: requirements loek: 2024-09-19 15m project meeting loek: 2024-09-19 1h30m project meeting loek: 2024-09-19 45m project meeting +loek: 2024-09-19 15m docs :: remove versioning max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 7b6efb26f0ae722b5e5d65a9014c841a281d11f1 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:38:30 +0200 Subject: Added task --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index bde1a6f..be48100 100644 --- a/time.txt +++ b/time.txt @@ -63,6 +63,7 @@ max: 2024-09-18 4h researching engine structure max: 2024-09-19 20m sixt project meeting (part one) max: 2024-09-19 1h30m third project lesson max: 2024-09-19 45m sixt project meeting (part two) +max: 2024-09-19 20m researching facade design pattern wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From be63aadea11619a08878c25a26b7ccafc6174b53 Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 19 Sep 2024 18:10:43 +0200 Subject: added some feedback --- plan.tex | 32 +++++++++++--------------------- sources.bib | 7 +++++++ 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/plan.tex b/plan.tex index 147e49c..13c487d 100644 --- a/plan.tex +++ b/plan.tex @@ -1,13 +1,6 @@ \documentclass{projdoc} \input{meta.tex} -% @Jaro: Zie hieronder -% Version 0.0 seems not right -% I'm also missing a 'version table' -% Shall we use this version system?: -% Version numbers after the comma indicate an interim version and version numbers -% before the comma indicate versions ready for publication - \title{Project Plan} \version{0.1} @@ -18,19 +11,12 @@ \section{Background} This project is part of the fourth-year minor `Systems Programming in C++'. The minor -consists of several courses troughout 20 weeks, which create the basis for this -project. The project is focussed on building a game engine using the programming +consists of several courses throughout 20 weeks, which create the basis for this +project. The project focus is on building a game engine using the programming language C++. This document describes the plan of attack for the project. \section{Problem Definition} -% The assignments will be discussed with the project supervisor on specifics for this -% project. This will give the team the ability to direct the project. - -% @Jaro: Ik snap niet wat je met deze zinnen wil zeggen. Het lijkt een soort van -% background information, maar toch niet helemaal ofzo. Hoe dan ook heb ik het er nu -% even uit gehaald en een nieuw kopje background toegevoegd. - \subsection{Problem Analysis} CodedFun Games is a small, single-person game company looking to scale up. The owner, @@ -45,7 +31,7 @@ user-friendly. Additionally, the engine should be well-documented, which is considered an essential aspect of being user-friendly. So far, the client has made all his games in Unity and is very fond of the structure. -Therefore, he wants the new engine to adhere to a similar structure. A simple +Therefore, the client wants the new engine to adhere to a similar structure. A simple requirements document is defined to specify how strictly this structure should be followed. @@ -62,6 +48,10 @@ The requirements document \autocite{crepe:requirements} has several requirements The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a validation application should be provided to test and showcase the engine's capabilities. +\subsection{validation application} + +The validation application \autocite{crepe:validation-application} is explained in a document where the features of the validation application are linked to the user stories. + \section{Planning} The customer specified multiple deliverables throughout the 20 weeks of this project. Despite the fact that 20 weeks have been reserved for this project, the game will be delivered in week 17. Any delay/resit will take place between weeks 17 and 20. A rough planning can be found in \cref{tab:planning}. @@ -72,10 +62,9 @@ The customer specified multiple deliverables throughout the 20 weeks of this pro \textbf{Week\#} & \textbf{Deliverable}\\ \midrule 4 & Project Plan\\ - 7 & Requirements document\\ + 7 & POCs\\ 10 & POCs and Design document\\ - 17 & Game engine, Validation application, Research document, and Qualification - document\\ + 17 & Game engine, Validation application\\ \bottomrule \end{tabularx} \caption{Planning} @@ -100,6 +89,7 @@ The customer specified multiple deliverables throughout the 20 weeks of this pro requirements. Lack of Team Collaboration: Insufficient collaboration among team members may hinder progress. \item[Lack of Team Collaboration] Within the team a lack of collaboration can result in miscommunication or delay in work. + \item[Falling out of specific team member] Within the team the scrum master and integrator have additional roles. If one or both members can not continue it can hinder progress of the project. \end{description} \subsection{Measures} @@ -113,6 +103,7 @@ The customer specified multiple deliverables throughout the 20 weeks of this pro meetings, to check if the progress is within the scope, should be sufficient to decrease the risk. \item[Lack of Team Collaboration] Weekly team meetings will result in collaboration among team members and discussing what each other tasks is, will decease this risk. + \item[Falling out of specific team member] The scrum master can be taken over by any other team member. All tools (e.g. scrum board) are open to all members. The tasks of the integrator can be taken over by the team. Within GitHub the team as a whole has the same rights as the integrator. \end{description} \section{Documentation} @@ -128,7 +119,6 @@ This project consists of seven main documents:\noparbreak project, including timelines, milestones, roles, and responsibilities. \item[Requirements] Details the requirements and user stories, including both functional and non-functional requirements. - \item[Research] Consists of all research related to this project. \item[Design] Describes the design choices, including architecture, user interface, and system components. \item[Qualification] Includes test cases, test plans, and quality measures to diff --git a/sources.bib b/sources.bib index 8d96ce1..31262fb 100644 --- a/sources.bib +++ b/sources.bib @@ -54,4 +54,11 @@ date = {2024-09-10}, } +@misc{crepe:validation-application, + author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink}, + title = {Validation Application}, + url = {https://github.com/lonkaars/crepe/blob/master/Validation-Application.pdf}, + date = {2024-09-10}, +} + -- cgit v1.2.3 From 3c6a635c6a8d38aae2284cbe744c060e765968a6 Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 19 Sep 2024 18:13:16 +0200 Subject: removed qualification --- plan.tex | 2 -- 1 file changed, 2 deletions(-) diff --git a/plan.tex b/plan.tex index 74f6a2b..54cc9d6 100644 --- a/plan.tex +++ b/plan.tex @@ -120,8 +120,6 @@ This project consists of seven main documents:\noparbreak functional and non-functional requirements. \item[Design] Describes the design choices, including architecture, user interface, and system components. - \item[Qualification] Includes test cases, test plans, and quality measures to - ensure the project meets its requirements and standards. \item[Working hours] A table which includes all working hours of each team member. \item[API Reference] Details the available endpoints, request and response formats, authentication methods, error codes, and examples for interacting with the -- cgit v1.2.3 From a265cb94ede152b9f17361c9b4177ea9f84b880e Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 19 Sep 2024 18:34:24 +0200 Subject: updated time --- time.txt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/time.txt b/time.txt index 165e927..b3ec641 100644 --- a/time.txt +++ b/time.txt @@ -112,6 +112,18 @@ jaro: 2024-09-10 1h project plan research physics jaro: 2024-09-13 1h project preparing meeting and reading review project plan jaro: 2024-09-13 1h30m project meeting jaro: 2024-09-13 30m weekly update - +jaro: 2024-09-16 1h30m Meeting Niels resource manager +jaro: 2024-09-16 2h requirements and sdl2 example +jaro: 2024-09-16 30m requirements +jaro: 2024-09-17 30m preparing meeting +jaro: 2024-09-17 1h30m meeting +jaro: 2024-09-17 30m requirements +jaro: 2024-09-17 2h30m class diagram +jaro: 2024-09-18 45m project plan (feedback) +jaro: 2024-09-19 1h30m research physics +jaro: 2024-09-19 30m project meeting +jaro: 2024-09-19 1h30m project lesson +jaro: 2024-09-19 1h project meeting +jaro: 2024-09-19 30m project plan and class diagram # vim:ft=cfg -- cgit v1.2.3 From 23ceaf0edc1db82240740dbcc6d305d1e10726c8 Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 19 Sep 2024 18:37:07 +0200 Subject: changed role max --- plan.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plan.tex b/plan.tex index 54cc9d6..a1cbb15 100644 --- a/plan.tex +++ b/plan.tex @@ -145,7 +145,7 @@ reviewed and agreed to these terms. \item[Loek Le Blansch] Integrator \item[Wouter Boerenkamps] Project Member \item[Jaro Rutjes] Team Leader / Scrum Master - \item[Max Smits] Project Member + \item[Max Smits] Project Member / Product owner \item[Niels Stunnebrink] Project Member \end{description} -- cgit v1.2.3 From 34c2031eabff221f2d8928eae2de53ab1d75fa60 Mon Sep 17 00:00:00 2001 From: Jaro Date: Thu, 19 Sep 2024 18:57:37 +0200 Subject: added class diagram from client --- figs.drawio | 761 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 761 insertions(+) create mode 100644 figs.drawio diff --git a/figs.drawio b/figs.drawio new file mode 100644 index 0000000..7c961d1 --- /dev/null +++ b/figs.drawio @@ -0,0 +1,761 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 77c9588359df6a72097e46074b1ff14f80350285 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Thu, 19 Sep 2024 20:02:17 +0200 Subject: Read through the plan.tex and fixed some issues --- plan.tex | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plan.tex b/plan.tex index a1cbb15..11d8d41 100644 --- a/plan.tex +++ b/plan.tex @@ -72,10 +72,10 @@ The customer specified multiple deliverables throughout the 20 weeks of this pro \section{Risks} -\subsection{Techincal Risks} +\subsection{Technical Risks} \begin{description} - \item[Multiplatform] The team works in both linux and windows, which poses a risk + \item[Multiplatform] The team works in both Linux and windows, which poses a risk for the development if there is a platform dependency. \item[Integration] Users can make a wrong integration causing for delay or risk of losing code. @@ -95,9 +95,9 @@ The customer specified multiple deliverables throughout the 20 weeks of this pro \begin{description} \item[Multiplatform] The team can switch any time to a single platform, so this - risk is metigated. + risk is mitigated. \item[Integration] By following standards and having an integrator, which checks - every pull request, this risk is minimilised. + every pull request, this risk is minimized. \item[Scope Expansion] By writing detailed requirements and having weekly team meetings, to check if the progress is within the scope, should be sufficient to decrease the risk. @@ -209,7 +209,7 @@ project needs. % Information about how and when Scrum will be used in this project (using Miro). \section{Scrum (Miro)} -The team starts using scrum after the initial phase, of structering the project, is finished. This phase is finished after a initial design of the product is made. +The team starts using scrum after the initial phase, of structuring the project, is finished. This phase is finished after a initial design of the product is made. \subsection{Scrum Board} @@ -255,7 +255,7 @@ Burn Down Chart is shared in the weekly updates with the team. GitHub is used for version management of both code \autocite{crepe:code-repo} and documentation \autocite{crepe:docs-repo}, each in its own respective repository. This -keeps the documentation and code seperate, resulting in ordened and manageable +keeps the documentation and code separate, resulting in ordered and manageable repositories. \subsection{Code Standard and git workflow} -- cgit v1.2.3 From c5482cda65f82b0891eef831b89e925c5c659937 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Thu, 19 Sep 2024 20:10:54 +0200 Subject: time updated --- time.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/time.txt b/time.txt index 165e927..4dc3224 100644 --- a/time.txt +++ b/time.txt @@ -93,6 +93,13 @@ niels: 2024-09-11 3h researching the different resourches from unity niels: 2024-09-12 3h researching the best option for audio/sprites format and comparing it to sdl2 and sfml. niels: 2024-09-13 1h30m project meeting niels: 2024-09-13 10m weekly update +niels: 2024-09-16 1h30m Discussing with jaro about resource manager +niels: 2024-09-16 4h programming resource manager POC +niels: 2024-09-17 1h30m project meeting +niels: 2024-09-18 2h Continued with programming resource manager +niels: 2024-09-19 15m project meeting +niels: 2024-09-19 1h30m project meeting +niels: 2024-09-19 45m project meeting jaro: 2024-09-02 1h project meeting :: project kickoff jaro: 2024-09-02 45m project meeting -- cgit v1.2.3 From 2d6d898677040212778b72638678cd36a1fb98b4 Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Thu, 19 Sep 2024 20:12:13 +0200 Subject: forgetted one time addition --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 4dc3224..7301a54 100644 --- a/time.txt +++ b/time.txt @@ -100,6 +100,7 @@ niels: 2024-09-18 2h Continued with programming resource manager niels: 2024-09-19 15m project meeting niels: 2024-09-19 1h30m project meeting niels: 2024-09-19 45m project meeting +niels: 2024-09-19 15m PvA reviewing jaro: 2024-09-02 1h project meeting :: project kickoff jaro: 2024-09-02 45m project meeting -- cgit v1.2.3 From b4ed1daabf7272490d555e39aa3829d839748e71 Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Fri, 20 Sep 2024 09:17:17 +0200 Subject: updated time --- time.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/time.txt b/time.txt index 165e927..c9e85e8 100644 --- a/time.txt +++ b/time.txt @@ -76,6 +76,13 @@ wouter: 2024-09-10 45m project videos wouter: 2024-09-10 40m second project lesson wouter: 2024-09-12 2h researching gameloops wouter: 2024-09-14 3h working on game loop poc +wouter: 2024-09-16 4h working on gameloop poc +wouter: 2024-09-17 1h30m fifth project meeting +wouter: 2024-09-18 3h finishing gameloop poc and starting event manager +wouter: 2024-09-19 15m project meeting +wouter: 2024-09-19 1h30m project meeting +wouter: 2024-09-19 45m project meeting +wouter: 2024-09-19 15m docs :: remove versioning niels: 2024-09-02 1h project meeting :: project kickoff niels: 2024-09-02 45m project meeting -- cgit v1.2.3 From 17b996ebd1c01402fb49332e45bcedb5a8706d36 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 20 Sep 2024 10:17:30 +0200 Subject: fix DeprecationWarning for python <3.12 --- scripts/reqs2tex.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py index 1863b0d..31303ff 100755 --- a/scripts/reqs2tex.py +++ b/scripts/reqs2tex.py @@ -15,15 +15,17 @@ class KEY(StrEnum): DESCRIPTION = 'description' PRIORITY = 'priority' -class REQ_TYPE(StrEnum): - SYSTEM = 'system' - USER = 'user' - -class REQ_PRIORITY(StrEnum): - MUST = 'must' - SHOULD = 'should' - COULD = 'could' - WONT = 'will not' +REQ_TYPE = [ + 'system', + 'user', +] + +REQ_PRIORITY = [ + 'must', + 'should', + 'could', + 'will not', +] id_counter = 0 def make_id(item): -- cgit v1.2.3 From dcd17e39494010e3696f8e6b935e2da1d63ea37a Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 10:22:07 +0200 Subject: Corrected cappital letters --- plan.tex | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plan.tex b/plan.tex index 11d8d41..55707ce 100644 --- a/plan.tex +++ b/plan.tex @@ -47,7 +47,7 @@ The requirements document \autocite{crepe:requirements} has several requirements The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a validation application should be provided to test and showcase the engine's capabilities. -\subsection{validation application} +\subsection{Validation Application} The validation application \autocite{crepe:validation-application} is explained in a document where the features of the validation application are linked to the user stories. @@ -61,7 +61,7 @@ The customer specified multiple deliverables throughout the 20 weeks of this pro \textbf{Week\#} & \textbf{Deliverable}\\ \midrule 4 & Project Plan\\ - 7 & POCs\\ + 7 & Some POCs\\ 10 & POCs and Design document\\ 17 & Game engine, Validation application\\ \bottomrule @@ -139,7 +139,7 @@ protocols for handling absences or delays, guidelines for addressing inconsisten participation, and procedures for weekly updates and meetings. All team members reviewed and agreed to these terms. -\subsection{Project roles} +\subsection{Project Roles} \begin{description} \item[Loek Le Blansch] Integrator @@ -149,18 +149,18 @@ reviewed and agreed to these terms. \item[Niels Stunnebrink] Project Member \end{description} -\subsection{Work hours} +\subsection{Work Hours} Each project member will keep track of their own working hours and add them to the `file'. -\subsection{Absence or delay} +\subsection{Absence or Delay} If a project member is going to be absent or delayed, they are required to notify the team through either WhatsApp or Outlook. Additionally, the teacher should be informed of the absence as well. -\subsection{Inconsistent participation} +\subsection{Inconsistent Participation} Inconsistent participation will be addressed in a structured manner: @@ -258,7 +258,7 @@ documentation \autocite{crepe:docs-repo}, each in its own respective repository. keeps the documentation and code separate, resulting in ordered and manageable repositories. -\subsection{Code Standard and git workflow} +\subsection{Code Standard and Git Workflow} The code standard and the git workflow can be found in the contributing.md \autocite{crepe:code-standard}. -- cgit v1.2.3 From f55937c99dfdd08d89d3d7db24780d42b9f4ea75 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:03:16 +0200 Subject: Last minor changes --- plan.tex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plan.tex b/plan.tex index 55707ce..c439aa7 100644 --- a/plan.tex +++ b/plan.tex @@ -38,18 +38,18 @@ Finally, because the client does not want to dive deeply into the engine himself \subsection{Goal} -The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. The engine may integrate third-party software (as agreed with the client) to support specific features, such as audio, physics, and rendering. In addition, a validation application is created to show and test the engine's features. +The goal is to develop a custom game engine that meets the client's requirements for maintainability, extensibility, user-friendliness, and adherence to a Unity-like structure. The engine may integrate third-party software (as agreed with the client) to support specific features, such as audio, physics, and rendering. In addition, a \emph{validation application} is created to show and test the engine's features. \subsection{Scope} The requirements document \autocite{crepe:requirements} has several requirements with a MoSCoW `must', `should', `could' or `won't' priority to indicate the project's scope. \subsection{Result} -The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a validation application should be provided to test and showcase the engine's capabilities. +The expected result is a well-documented, custom game engine that follows a structure similar to Unity. Additionally, a \emph{validation application} should be provided to test and showcase the engine's capabilities. \subsection{Validation Application} -The validation application \autocite{crepe:validation-application} is explained in a document where the features of the validation application are linked to the user stories. +The \emph{validation application} \autocite{crepe:validation-application} is explained in a document where the features of the \emph{validation application} are linked to the user stories. \section{Planning} @@ -63,7 +63,7 @@ The customer specified multiple deliverables throughout the 20 weeks of this pro 4 & Project Plan\\ 7 & Some POCs\\ 10 & POCs and Design document\\ - 17 & Game engine, Validation application\\ + 17 & Game engine, \emph{validation application}\\ \bottomrule \end{tabularx} \caption{Planning} @@ -145,7 +145,7 @@ reviewed and agreed to these terms. \item[Loek Le Blansch] Integrator \item[Wouter Boerenkamps] Project Member \item[Jaro Rutjes] Team Leader / Scrum Master - \item[Max Smits] Project Member / Product owner + \item[Max Smits] Project Member / Product Owner \item[Niels Stunnebrink] Project Member \end{description} -- cgit v1.2.3 From 64366a72ab1507245870d82951d50b7d5d88c955 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:11:19 +0200 Subject: Added task --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 1241aa6..e898db5 100644 --- a/time.txt +++ b/time.txt @@ -64,6 +64,7 @@ max: 2024-09-19 20m sixt project meeting (part one) max: 2024-09-19 1h30m third project lesson max: 2024-09-19 45m sixt project meeting (part two) max: 2024-09-19 20m researching facade design pattern +max: 2024-09-20 1h30m checking PvA (and fixing LaTeX) wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 7102902f319d450253159a20da207b013d77f7ce Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 13:13:33 +0200 Subject: Replaced .puml with .png, since .puml was causing LaTeX errors --- research.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/research.tex b/research.tex index 5340bf5..ffba7ca 100644 --- a/research.tex +++ b/research.tex @@ -76,7 +76,7 @@ harder \autocite{man:DecoratorDesignPattern,man:Decorator}. \begin{figure} \centering - \includepumldiag{img/decorator-design-pattern.puml} + \includegraphics[width=0.5\textwidth]{img/DecoratorDesignPattern.png} \caption{Decorator design pattern} Source: \autocite{img:Decorator} \label{fig:decorator} -- cgit v1.2.3 From 6f802231674685b9d1bb365d345c96aa15cdd311 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 14:47:03 +0200 Subject: Added the Extension Objects and ECS design patterns --- img/ECSBlockDiagram.png | Bin 0 -> 64822 bytes img/ECSComponentManager.png | Bin 0 -> 247012 bytes img/ExtensionObjects.jpg | Bin 0 -> 48639 bytes research.tex | 72 ++++++++++++++++++++++++++++++++++++-------- sources.bib | 32 ++++++++++++++++++-- 5 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 img/ECSBlockDiagram.png create mode 100644 img/ECSComponentManager.png create mode 100644 img/ExtensionObjects.jpg diff --git a/img/ECSBlockDiagram.png b/img/ECSBlockDiagram.png new file mode 100644 index 0000000..4d36afa Binary files /dev/null and b/img/ECSBlockDiagram.png differ diff --git a/img/ECSComponentManager.png b/img/ECSComponentManager.png new file mode 100644 index 0000000..6602cd6 Binary files /dev/null and b/img/ECSComponentManager.png differ diff --git a/img/ExtensionObjects.jpg b/img/ExtensionObjects.jpg new file mode 100644 index 0000000..4807ff7 Binary files /dev/null and b/img/ExtensionObjects.jpg differ diff --git a/research.tex b/research.tex index ffba7ca..bec9471 100644 --- a/research.tex +++ b/research.tex @@ -24,7 +24,7 @@ A game engine is not the game itself but a platform with which games are built. should provide the functionalities with which the game is constructed. The purpose of a game engine is not to create data out of nothing. Instead, data is read, and the correlating features and effects are generated. However, the engine is also used to -create these files, referred to as ``assets.'' The game engine must be able to accept +create these files, referred to as ``assets''. The game engine must be able to accept a certain format of these assets---whether levels, sprites, or textures---and convert them into usable data. @@ -72,7 +72,7 @@ such Decorator design pattern, is that the interface of all components should be same (they should share the same methods), because the client (which is the scene in our case) can only call/reach the components through the interface. This would require very general methods (at the interface), which might make the programming -harder \autocite{man:DecoratorDesignPattern,man:Decorator}. +harder \autocite{man:DecoratorDesignPattern}. \begin{figure} \centering @@ -82,18 +82,66 @@ harder \autocite{man:DecoratorDesignPattern,man:Decorator}. \label{fig:decorator} \end{figure} -TODO: Add Extension Objects design pattern (if this is applicable)! +The Extension Objects design pattern (as shown in \cref{fig:extension objects}) could +also be used to structure the game engine. The Extension Objects design pattern allows +to modify an object's propperties/behavior by adding one (or more) Extensions. The +object that is modified, could be the gameObject and the components could be the +Extensions. This is quite the same as the required API. An advantage is, that the client +(which is the scene in our case) can call all kind of different Extension's methods +(depending on the kind of Externsion, e.g. the method render() for the sprite Extension +and the method update() for the script Extension). In other words, the interfaces of the +different Extensions should not be the same. This is way more flexible than the Decorator +design pattern. A disadvantage is that the data and functionality are in the same class +(namely inside the Extion's methods), so it's not sepperated. Another disadvantage is +that the Extension Objects design pattern can be quite slow, because objects are scattered +in memory (and it is very hard to quickly get their memory address) +\autocite{man:ExtensionObjectDesignPattern, man:extionsionObjectsStackOverflow}. + +\begin{figure} + \centering + \includegraphics[width=0.5\textwidth]{img/ExtensionObjects.jpg} + \caption{Extension Objects design pattern} + Source: \autocite{img:extionsionObjects} + \label{fig:extension objects} +\end{figure} Another (very popular) design pattern to structure the game engine, is the Entity -Component System (\gls{ecs}). The \gls{ecs} is made out of three main subsystems, -namely entities, components and systems. Entities are just IDs. An entity is made out -of a gameObject and one (or more) components. Components are the classes that hold -the data. The components determine what kind of entity it is (e.g. a sprite, audio, -and so on). Systems take care of the behavior of the entities. Systems mainly read -and write the enity's components data. The \gls{ecs} clearly distinguishes the data -(components) from the functionality (systems). - -% TODO: Continue this explanation (also add some diagrams to make the ECS more clear)! +Component System (\gls{ecs}) (as shown in \cref{fig:ECS Block Diagram}). The +\gls{ecs} is made out of three main subsystems, namely entities, components and +systems. Entities are just IDs. An entity is made out of a gameObject and one (or +more) components. Components are the classes that hold the data. The components +determine what kind of entity it is (e.g. a sprite, audio, and so on). Systems +take care of the behavior of the entities. Systems mainly read and write the enity's +components data. The \gls{ecs} clearly distinguishes the data (components) from +the functionality (systems), which is an advantage. + +\begin{figure} + \centering + \includegraphics[width=0.5\textwidth]{img/ECSBlockDiagram.png} + \caption{ECS design pattern} + Source: \autocite{img:ECSBlockDiagram} + \label{fig:ECS Block Diagram} +\end{figure} + +The \gls{ecs} is normally equipped with a component manager (as shown in +\cref{fig:ECS Component manager}). The component manager keeps track of the entities +(Alien, Player, Target, etc in \cref{fig:ECS Component manager}) and the connected +components (Position, Movement, Render, etc in \cref{fig:ECS Component manager}). +The component manager stores two lists (key value pairs). The key of the first list +is the ID of an entity, and the value of this list are the connected components. The key +of the second list is the component, and the value of this list are the entities that +have this component. These two lists make it possible to very quickly gather components +or entities. This makes the \gls{ecs} very fast, which is of course an advantage. + +\begin{figure} + \centering + \includegraphics[width=0.5\textwidth]{img/ECSComponentManager.png} + \caption{ECS Component manager} + Source: \autocite{img:ECSComponentSystem} + \label{fig:ECS Component manager} +\end{figure} + +Disadvantage: systems have to cummincate with each other... There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is diff --git a/sources.bib b/sources.bib index bf04165..e025492 100644 --- a/sources.bib +++ b/sources.bib @@ -84,7 +84,7 @@ date = {2024} } -@manual{man:DecoratorDesignPattern, +@manual{man:ExtensionObjectDesignPattern, title = {Extension Object Design Pattern}, author = {James Fawcett}, organization = {Syracuse University}, @@ -92,7 +92,7 @@ date = {2024} } -@manual{man:Decorator, +@manual{man:DecoratorDesignPattern, title = {Decorator Design Pattern}, author = {Refactoring Guru}, organization = {Refactoring Guru}, @@ -100,3 +100,31 @@ date = {2024} } +@misc{img:extionsionObjects, + title = {Extension Objects Diagram}, + author = {stackoverflow}, + url = {https://i.sstatic.net/GoIQ6.jpg}, + date = {2024} +} + +@manual{man:extionsionObjectsStackOverflow, + title = {Extension Object Design Pattern}, + author = {Supun Wijerathne}, + organization = {stackoverflow}, + url = {https://stackoverflow.com/questions/39331752/what-is-the-difference-between-extension-objects-pattern-and-adapter-pattern}, + date = {2016} +} + +@misc{img:ECSBlockDiagram, + title = {ECS Diagram}, + author = {Unity}, + url = {https://docs.unity3d.com/Packages/com.unity.entities@0.1/manual/images/ECSBlockDiagram.png}, + date = {2024} +} + +@misc{img:ECSComponentSystem, + title = {ECS Component System}, + author = {Joel van der Werf}, + url = {https://i.imgur.com/VMQFIjW.png}, + date = {2024} +} -- cgit v1.2.3 From 110ffb785a8eaf54106b92f49f008f0003193a2b Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:13:48 +0200 Subject: Continued ECS research --- research.tex | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/research.tex b/research.tex index bec9471..8a2ad7b 100644 --- a/research.tex +++ b/research.tex @@ -141,7 +141,25 @@ or entities. This makes the \gls{ecs} very fast, which is of course an advantage \label{fig:ECS Component manager} \end{figure} -Disadvantage: systems have to cummincate with each other... +Another aspect that makes the \gls{ecs} very fast, is that a system can handle all +components (of the same type) together at once. This is possible because all entities +are independent of each other. + +There are many ways of implementing the systems. Some say that each component type has +their own system. This interpretation of the systems does not take the interplay of +different component types, into account. A less restrictive approach is to let different +systems deal with all components they should be concerned with. For instance a Physics +Systems should be aware of Collision Components and Rigidbody Components, as both +probably contain necessary information regarding physics simulation. It's best to see +systems as “closed environments”. That is, they do not take ownership of entities nor +components. They do access them through independent manager objects, which in turn will +take care of the entities and components life-cycle. + +Sometimes systems, entities and even components need to cummincate with each other. This +might be very hard because systems, entities and components are more or less independent. +One option is to use an event systems. A system, entity and component can raise an event +and other systems, entities and components can react to that event. This is what makes the +\gls{ecs} a complicated system (disadvantage). There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is -- cgit v1.2.3 From af0fa4a2ffce5f6a000c376cdadaec935dfc2fc4 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:22:50 +0200 Subject: Added sources --- research.tex | 7 ++++--- sources.bib | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/research.tex b/research.tex index 8a2ad7b..f9de6a5 100644 --- a/research.tex +++ b/research.tex @@ -131,7 +131,8 @@ The component manager stores two lists (key value pairs). The key of the first l is the ID of an entity, and the value of this list are the connected components. The key of the second list is the component, and the value of this list are the entities that have this component. These two lists make it possible to very quickly gather components -or entities. This makes the \gls{ecs} very fast, which is of course an advantage. +or entities. This makes the \gls{ecs} very fast, which is of course an advantage +\autocite{man:ECSComponentManager}. \begin{figure} \centering @@ -153,13 +154,13 @@ Systems should be aware of Collision Components and Rigidbody Components, as bot probably contain necessary information regarding physics simulation. It's best to see systems as “closed environments”. That is, they do not take ownership of entities nor components. They do access them through independent manager objects, which in turn will -take care of the entities and components life-cycle. +take care of the entities and components life-cycle \autocite{man:ECSExplanation}. Sometimes systems, entities and even components need to cummincate with each other. This might be very hard because systems, entities and components are more or less independent. One option is to use an event systems. A system, entity and component can raise an event and other systems, entities and components can react to that event. This is what makes the -\gls{ecs} a complicated system (disadvantage). +\gls{ecs} a complicated system (disadvantage) \autocite{man:ECSExplanation}. There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is diff --git a/sources.bib b/sources.bib index e025492..f48e8c3 100644 --- a/sources.bib +++ b/sources.bib @@ -128,3 +128,20 @@ url = {https://i.imgur.com/VMQFIjW.png}, date = {2024} } + +@manual{man:ECSExplanation, + title = {The Entity Component System C++ Game Design Pattern - Part 1}, + author = {GameDev.net}, + organization = {GameDev.net}, + url = {https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/the-entity-component-system-c-game-design-pattern-part-1-r4803/}, + date = {2024} +} + +@manual{man:ECSComponentManager, + title = {ECS Core API}, + author = {Unity Technologies}, + organization = {Unity}, + url = {https://docs.unity3d.com/Packages/com.unity.entities@0.1/manual/ecs_core.html}, + date = {2024} +} + -- cgit v1.2.3 From b8e3fcbe333558d3c0aa1ae36fe80c161d8202c1 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:34:19 +0200 Subject: Moved the section GameObject/Components upwards --- research.tex | 84 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/research.tex b/research.tex index f9de6a5..ed3d2cf 100644 --- a/research.tex +++ b/research.tex @@ -188,6 +188,48 @@ library \autocite{github:ecsfaq}. \subsection{Conclusion} +\section{Gameobjects/components} +\label{sec:Gameobjects/components} + +\subsection{Introduction} + +One of the requirements of our customer, is that the game engine's structure is +similar to Unity. The customer has created a class diagram of the game engine's API, +which is (of course) very similar to Unity. One of the most important parts of the +class diagram is a so-called gameObject (with several components). It's needed to +understand the exact meaning/function of these gameObjects, that's why this research +question arose. + +\subsection{Findings} + +A gameObject is the most important concept in Unity. Every object in a game is a +GameObject, from characters and collectible items to the lights, cameras and special +effects. However, a gameObject itself can't do anything on its own. A gameObject +needs to be given properties before it can become a character, an envirnment, or a +special effect. \autocite{man:unityGameobjects} + +A gameObject can be seen as a container for components. Components are the properties +of the gameObject. A few examples of components are sprites, animators, audioSources, +and so on. Multiple (different) components can be assigned to a single gameObject +(e.g.~a sprite and an audioSource). + +Since we now know that a gameObject needs components to do something, it's obvious +that there should be a way to add components to a gameObject. Some components +(e.g.~the behaviorScript component) should also be able to reference to its +gameObject. + +Each gameObject always has one transform class. The transform class describes the +position, rotation, and scale within the scene. Some component use this information +to e.g. scale a sprite. Other components eddit this information to e.g.~model +gravity. \autocite{man:unityTransformClass} + +A gameObject can have one (or multiple) children gameObject(s). All children +gameObjects, of course, also have one transform class. However, the position, +rotation, and scale of this class, is always the same as the child's parent. A child +can not have more than one parent. \autocite{man:unityTransformClass} + +\subsection{Conclusion} + \section{Third-party Tools} \subsection{Introduction} @@ -371,48 +413,6 @@ Not considered further: \subsection{Conclusion} -\section{Gameobjects/components} -\label{sec:Gameobjects/components} - -\subsection{Introduction} - -One of the requirements of our customer, is that the game engine's structure is -similar to Unity. The customer has created a class diagram of the game engine's API, -which is (of course) very similar to Unity. One of the most important parts of the -class diagram is a so-called gameObject (with several components). It's needed to -understand the exact meaning/function of these gameObjects, that's why this research -question arose. - -\subsection{Findings} - -A gameObject is the most important concept in Unity. Every object in a game is a -GameObject, from characters and collectible items to the lights, cameras and special -effects. However, a gameObject itself can't do anything on its own. A gameObject -needs to be given properties before it can become a character, an envirnment, or a -special effect. \autocite{man:unityGameobjects} - -A gameObject can be seen as a container for components. Components are the properties -of the gameObject. A few examples of components are sprites, animators, audioSources, -and so on. Multiple (different) components can be assigned to a single gameObject -(e.g.~a sprite and an audioSource). - -Since we now know that a gameObject needs components to do something, it's obvious -that there should be a way to add components to a gameObject. Some components -(e.g.~the behaviorScript component) should also be able to reference to its -gameObject. - -Each gameObject always has one transform class. The transform class describes the -position, rotation, and scale within the scene. Some component use this information -to e.g. scale a sprite. Other components eddit this information to e.g.~model -gravity. \autocite{man:unityTransformClass} - -A gameObject can have one (or multiple) children gameObject(s). All children -gameObjects, of course, also have one transform class. However, the position, -rotation, and scale of this class, is always the same as the child's parent. A child -can not have more than one parent. \autocite{man:unityTransformClass} - -\subsection{Conclusion} - \section{AI} \subsection{Introduction} -- cgit v1.2.3 From 444550c8fa8c88fcfe4c450012156051a0ea60c7 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:48:13 +0200 Subject: Added a TODO --- research.tex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/research.tex b/research.tex index ed3d2cf..ed34730 100644 --- a/research.tex +++ b/research.tex @@ -182,6 +182,8 @@ based on the amount of stars on GitHub. \label{tab:popularECSLibraries} \end{table} +TODO: Add library benchmark to find the best library. + It is, of course, not necessary to use a library to implement an \gls{ecs} architecture. However, it seems very hard to achieve the same performance as a library \autocite{github:ecsfaq}. -- cgit v1.2.3 From ff4747f5cd102283b0bca221d55ad425a15d5dee Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Fri, 20 Sep 2024 15:51:21 +0200 Subject: Added task --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index e898db5..43f70df 100644 --- a/time.txt +++ b/time.txt @@ -65,6 +65,7 @@ max: 2024-09-19 1h30m third project lesson max: 2024-09-19 45m sixt project meeting (part two) max: 2024-09-19 20m researching facade design pattern max: 2024-09-20 1h30m checking PvA (and fixing LaTeX) +max: 2024-09-20 3h researching engine structure wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 375a551a1b59bfa34b3a419b2f00363afd4206ea Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 21 Sep 2024 14:50:19 +0200 Subject: merge #21 --- research.tex | 79 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 41 insertions(+), 38 deletions(-) diff --git a/research.tex b/research.tex index ed34730..1f55d70 100644 --- a/research.tex +++ b/research.tex @@ -83,18 +83,19 @@ harder \autocite{man:DecoratorDesignPattern}. \end{figure} The Extension Objects design pattern (as shown in \cref{fig:extension objects}) could -also be used to structure the game engine. The Extension Objects design pattern allows -to modify an object's propperties/behavior by adding one (or more) Extensions. The -object that is modified, could be the gameObject and the components could be the -Extensions. This is quite the same as the required API. An advantage is, that the client -(which is the scene in our case) can call all kind of different Extension's methods -(depending on the kind of Externsion, e.g. the method render() for the sprite Extension -and the method update() for the script Extension). In other words, the interfaces of the -different Extensions should not be the same. This is way more flexible than the Decorator -design pattern. A disadvantage is that the data and functionality are in the same class -(namely inside the Extion's methods), so it's not sepperated. Another disadvantage is -that the Extension Objects design pattern can be quite slow, because objects are scattered -in memory (and it is very hard to quickly get their memory address) +also be used to structure the game engine. The Extension Objects design pattern +allows to modify an object's propperties/behavior by adding one (or more) Extensions. +The object that is modified, could be the gameObject and the components could be the +Extensions. This is quite the same as the required API. An advantage is, that the +client (which is the scene in our case) can call all kind of different Extension's +methods (depending on the kind of Externsion, e.g.~the method \codeinline{render()} +for the sprite Extension and the method \codeinline{update()} for the script +Extension). In other words, the interfaces of the different Extensions should not be +the same. This is way more flexible than the Decorator design pattern. A disadvantage +is that the data and functionality are in the same class (namely inside the Extion's +methods), so it's not sepperated. Another disadvantage is that the Extension Objects +design pattern can be quite slow, because objects are scattered in memory (and it is +very hard to quickly get their memory address) \autocite{man:ExtensionObjectDesignPattern, man:extionsionObjectsStackOverflow}. \begin{figure} @@ -110,10 +111,10 @@ Component System (\gls{ecs}) (as shown in \cref{fig:ECS Block Diagram}). The \gls{ecs} is made out of three main subsystems, namely entities, components and systems. Entities are just IDs. An entity is made out of a gameObject and one (or more) components. Components are the classes that hold the data. The components -determine what kind of entity it is (e.g. a sprite, audio, and so on). Systems -take care of the behavior of the entities. Systems mainly read and write the enity's -components data. The \gls{ecs} clearly distinguishes the data (components) from -the functionality (systems), which is an advantage. +determine what kind of entity it is (e.g.~a sprite, audio, and so on). Systems take +care of the behavior of the entities. Systems mainly read and write the enity's +components data. The \gls{ecs} clearly distinguishes the data (components) from the +functionality (systems), which is an advantage. \begin{figure} \centering @@ -126,13 +127,13 @@ the functionality (systems), which is an advantage. The \gls{ecs} is normally equipped with a component manager (as shown in \cref{fig:ECS Component manager}). The component manager keeps track of the entities (Alien, Player, Target, etc in \cref{fig:ECS Component manager}) and the connected -components (Position, Movement, Render, etc in \cref{fig:ECS Component manager}). -The component manager stores two lists (key value pairs). The key of the first list -is the ID of an entity, and the value of this list are the connected components. The key +components (Position, Movement, Render, etc in \cref{fig:ECS Component manager}). The +component manager stores two lists (key value pairs). The key of the first list is +the ID of an entity, and the value of this list are the connected components. The key of the second list is the component, and the value of this list are the entities that -have this component. These two lists make it possible to very quickly gather components -or entities. This makes the \gls{ecs} very fast, which is of course an advantage -\autocite{man:ECSComponentManager}. +have this component. These two lists make it possible to very quickly gather +components or entities. This makes the \gls{ecs} very fast, which is of course an +advantage \autocite{man:ECSComponentManager}. \begin{figure} \centering @@ -146,21 +147,23 @@ Another aspect that makes the \gls{ecs} very fast, is that a system can handle a components (of the same type) together at once. This is possible because all entities are independent of each other. -There are many ways of implementing the systems. Some say that each component type has -their own system. This interpretation of the systems does not take the interplay of -different component types, into account. A less restrictive approach is to let different -systems deal with all components they should be concerned with. For instance a Physics -Systems should be aware of Collision Components and Rigidbody Components, as both -probably contain necessary information regarding physics simulation. It's best to see -systems as “closed environments”. That is, they do not take ownership of entities nor -components. They do access them through independent manager objects, which in turn will -take care of the entities and components life-cycle \autocite{man:ECSExplanation}. - -Sometimes systems, entities and even components need to cummincate with each other. This -might be very hard because systems, entities and components are more or less independent. -One option is to use an event systems. A system, entity and component can raise an event -and other systems, entities and components can react to that event. This is what makes the -\gls{ecs} a complicated system (disadvantage) \autocite{man:ECSExplanation}. +There are many ways of implementing the systems. Some say that each component type +has their own system. This interpretation of the systems does not take the interplay +of different component types, into account. A less restrictive approach is to let +different systems deal with all components they should be concerned with. For +instance a Physics Systems should be aware of Collision Components and Rigidbody +Components, as both probably contain necessary information regarding physics +simulation. It's best to see systems as ``closed environments''. That is, they do not +take ownership of entities nor components. They do access them through independent +manager objects, which in turn will take care of the entities and components +life-cycle \autocite{man:ECSExplanation}. + +Sometimes systems, entities and even components need to cummincate with each other. +This might be very hard because systems, entities and components are more or less +independent. One option is to use an event systems. A system, entity and component +can raise an event and other systems, entities and components can react to that +event. This is what makes the \gls{ecs} a complicated system (disadvantage) +\autocite{man:ECSExplanation}. There are many C/C++ libraries available, completely dedicated to \gls{ecs}. The most popular libraries are shown in \cref{tab:popularECSLibraries}. The popularity is @@ -222,7 +225,7 @@ gameObject. Each gameObject always has one transform class. The transform class describes the position, rotation, and scale within the scene. Some component use this information -to e.g. scale a sprite. Other components eddit this information to e.g.~model +to e.g.~scale a sprite. Other components eddit this information to e.g.~model gravity. \autocite{man:unityTransformClass} A gameObject can have one (or multiple) children gameObject(s). All children -- cgit v1.2.3 From aa80bd19d2242636ffb20bb7a384a97e436bd6dc Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 21 Sep 2024 15:13:38 +0200 Subject: update writing and code style --- contributing.md | 2 ++ style.md | 61 +++++++++++++++++++++++++++++---------------------------- 2 files changed, 33 insertions(+), 30 deletions(-) diff --git a/contributing.md b/contributing.md index db58388..46cfeca 100644 --- a/contributing.md +++ b/contributing.md @@ -17,6 +17,8 @@ other document. - Only environments indent the LaTeX source code - Insert a non-breaking space (`~`) after (Latin) abbreviations such as "i.e." or "e.g.". Never place a comma after either of these. +- Multiple references (both `\cref` and `\autocite`) should be done in a single + command (i.e. `\cref{fig:a,fig:b}` and `\autocite{source1,source2}`) # Banned practices diff --git a/style.md b/style.md index c518e7c..8dca81b 100644 --- a/style.md +++ b/style.md @@ -4,6 +4,28 @@ LaTeX commands and LaTeX source style requirements are detailed in a number of frequently used snippets that may be used as a cheat-sheet style reference. +# General rules + +- All documentation is written in U.S. English +- Section headers are in sentence case (i.e. only the first word and proper + nouns are capitalized) +- Section headers should not contain punctuation (e.g. no question marks, "or" + instead of a slash, etc.) +- Quotes are closed before punctuation marks. +- Do not use contractions, modal adverbs or rhetorical questions. + +# References + +- Citations are inserted before the full stop at the end of a sentence. +- When a library or piece of software is introduced in a document, reference + the project homepage using the bibliography. +- Direct quotations or paraphased text must be cited. +- Acronyms, abbreviations and jargon reference the glossary. +- All figures and tables must be referenced in the body text. Don't write + paragraphs that 'lead up' to figures, as this forces LaTeX to not break the + page between the paragraph and figure. +- Figures from third-party sources must be cited. + # Fonts The documents use the following fonts. All of these are free and open source, @@ -27,15 +49,18 @@ workshop and VimTeX. [texgyreschola-math]: https://www.gust.org.pl/projects/e-foundry/tg-math/download/index_html#Schola_Math [jetbrains-mono]: https://www.jetbrains.com/lp/mono -# Spelling +# Figures -- All documentation is written in U.S. English -- Section headers are in sentence case (i.e. only the first word and proper - nouns are capitalized) +Non-raster figures are preferred over rasterized figures (where applicable). +Please note that LaTeX does not support SVG images, and these need to be +converted to PDF (e.g. using `svg2pdf` on linux). + +Raster images should only be used when the source is already in a raster format +(e.g. for photos) or when otherwise impractical. -# Grammar +# Specific rules -## Comma And +## Comma and **In lists**, the last element is mentioned using the word 'and', *without* a comma. @@ -50,27 +75,3 @@ consistency. > > Action X was performed, and this had Y impact. -# Figures - -Non-raster figures are preferred over rasterized figures (where applicable). -Please note that LaTeX does not support SVG images, and these need to be -converted to PDF (e.g. using `svg2pdf` on linux). - -Raster images should only be used when the source is already in a raster format -(e.g. for photos) or when otherwise impractical. - -# References - -- When a library or piece of software is introduced in a document, reference - the project homepage using the bibliography. -- Direct quotations or paraphased text must be cited. -- Acronyms, abbreviations and jargon reference the glossary. -- All figures and tables must be referenced in the body text. Don't write - paragraphs that 'lead up' to figures, as this forces LaTeX to not break the - page between the paragraph and figure. - -# Document structure - -- Use `\section`, `\subsection`, `\subsubsection` and `\paragraph` to insert - headings. - -- cgit v1.2.3 From 153f7be519d18248461c315df647f743ff17d721 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 21 Sep 2024 15:14:17 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 43f70df..8b4931b 100644 --- a/time.txt +++ b/time.txt @@ -39,6 +39,7 @@ loek: 2024-09-19 15m project meeting loek: 2024-09-19 1h30m project meeting loek: 2024-09-19 45m project meeting loek: 2024-09-19 15m docs :: remove versioning +loek: 2024-09-19 30m PR merge and style guide update max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 46d07c2c9e68597f3f6af76b4f8e837786781029 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sun, 22 Sep 2024 19:25:02 +0200 Subject: finish audio research --- glossary.bib | 6 +++++ research.tex | 72 +++++++++++++++++------------------------------------------- sources.bib | 4 ++-- 3 files changed, 28 insertions(+), 54 deletions(-) diff --git a/glossary.bib b/glossary.bib index 8bf48ac..fda634f 100644 --- a/glossary.bib +++ b/glossary.bib @@ -46,3 +46,9 @@ long = {definition of done}, } +@abbreviation{poc, + short = {POC}, + long = {proof-of-concept}, +} + + diff --git a/research.tex b/research.tex index f3424c4..4ca3d3d 100644 --- a/research.tex +++ b/research.tex @@ -247,44 +247,14 @@ The game engine is required to have an audio system audio mixing engine is outside the scope of this project\mref, this section compares various standalone audio libraries for suitability in the engine. -\Cref{sec:audio:libs} details which libraries were considered, -\cref{sec:audio:benchmark} compares their performance, and -\cref{sec:audio:conclusion} concludes with a recommendation for most performant audio -library. - \subsection{Libraries} \label{sec:audio:libs} -\Cref{tab:audio:libs} lists the standalone audio engine libraries that fit -\cref{req:audio,req:lib:license}. - -\begin{table} - \centering - \begin{tabular}{llc} - \toprule - \textbf{Library} & \textbf{License} & \textbf{API}\\ - \midrule - miniaudio \autocite{lib:miniaudio} & MIT-0 & C\\ - YSE \autocite{lib:yse} & EPL & C++\\ - SoLoud \autocite{lib:soloud} & Zlip/LibPng & C++\\ - \bottomrule - \end{tabular} - \caption{Audio engine library comparison} - \label{tab:audio:libs} -\end{table} - -Other popular libraries that were researched but are unsuitable for this project -include:\noparbreak -\begin{description} - \item[FMOD \autocite{lib:fmod}] Is proprietary (violates \cref{req:lib:license}) - \item[PortAudio \autocite{lib:portaudio}] Does not handle mixing -\end{description} - -\subsection{Benchmarks} -\label{sec:audio:benchmark} - -The same benchmark application was written for each of the libraries listed in -\cref{tab:audio:libs}. The application does the following:\noparbreak +After searching for libraries (search terms: `dynamic/adaptive audio', `real-time +audio', `audio library', `game audio engine'), several libraries were found. These +libraries were checked against the audio engine requirements +\autocite{crepe:requirements} and then tested by writing the same benchmark-style +\gls{poc} using the remaining qualifying libraries:\noparbreak \begin{enumerate} \item Load a background track (Ogg Vorbis) \item Load three short samples (WAV) @@ -294,28 +264,26 @@ The same benchmark application was written for each of the libraries listed in \item Stop all audio and exit \end{enumerate} -Each benchmark was profiled using \emph{perf} \autocite{tool:perf} and compared based -on total CPU and memory utilization. The results of these benchmarks are listed in -\cref{tab:audio:benchmark}. +Of these libraries the following were determined to be unsuitable for use in this +project due to various reasons:\noparbreak +\begin{description} + \item[FMOD \autocite{lib:fmod}] Is proprietary (violates \cref{req:lib:license}) + \item[PortAudio \autocite{lib:portaudio}] Does not handle mixing + \item[miniaudio \autocite{lib:miniaudio}] With finished \gls{poc}, but dropped due + to very limited codec support (WAV, MP3 and FLAC only); Also does not have an + \gls{api} reference (only programming manual) + \item[YSE \autocite{lib:yse}] Attempted to write \gls{poc}, but CMake configuration + in repository is broken; This project seems to have been abandoned +\end{description} -\begin{table} - \centering - \begin{tabular}{lr} - \toprule - \textbf{Library} & \textbf{???}\\ - \midrule - miniaudio &\\ - YSE &\\ - SoLoud &\\ - \bottomrule - \end{tabular} - \caption{Audio engine library benchmark results} - \label{tab:audio:benchmark} -\end{table} +The only library that remained after these tests is SoLoud \autocite{lib:soloud}. It +is Zlib/LibPng licensed and provides a high-level object-oriented C++ \gls{api}. \subsection{Conclusion} \label{sec:audio:conclusion} +Due to a severe shortage of libraries that fit our requirements, SoLoud appears to be +the most suitable (and only) audio library for use in this project. \section{Physics} diff --git a/sources.bib b/sources.bib index bb68067..adcfdd5 100644 --- a/sources.bib +++ b/sources.bib @@ -56,8 +56,8 @@ @online{lib:miniaudio, title = {miniaudio - A single file audio playback and capture library.}, % author = {David Reid}, - url = {https://miniaud.io}, - urldate = {2024-09-18}, + url = {https://miniaud.io/docs/manual/index.html}, + urldate = {2024-09-22}, } @online{lib:yse, -- cgit v1.2.3 From 9a05cb4acb4eb3304744be1b57809ad67466d9f4 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sun, 22 Sep 2024 19:27:08 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 8b4931b..40b7c9f 100644 --- a/time.txt +++ b/time.txt @@ -40,6 +40,7 @@ loek: 2024-09-19 1h30m project meeting loek: 2024-09-19 45m project meeting loek: 2024-09-19 15m docs :: remove versioning loek: 2024-09-19 30m PR merge and style guide update +loek: 2024-09-22 2h15m docs :: research max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 7202e04b143e06d4411869c0cf77a7b9a8cc979b Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Sun, 22 Sep 2024 19:51:22 +0200 Subject: Today time update --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 40b7c9f..b989d53 100644 --- a/time.txt +++ b/time.txt @@ -116,6 +116,7 @@ niels: 2024-09-19 15m project meeting niels: 2024-09-19 1h30m project meeting niels: 2024-09-19 45m project meeting niels: 2024-09-19 15m PvA reviewing +niels: 2024-09-22 2h30m Adding spritesheet functionalities jaro: 2024-09-02 1h project meeting :: project kickoff jaro: 2024-09-02 45m project meeting -- cgit v1.2.3 From 4022fe99a9a6e1d6e697625800f25aad1073682b Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:27:45 +0200 Subject: Added tasks --- time.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/time.txt b/time.txt index 43f70df..fcc3adb 100644 --- a/time.txt +++ b/time.txt @@ -66,6 +66,9 @@ max: 2024-09-19 45m sixt project meeting (part two) max: 2024-09-19 20m researching facade design pattern max: 2024-09-20 1h30m checking PvA (and fixing LaTeX) max: 2024-09-20 3h researching engine structure +max: 2024-09-24 2h seventh project meeting +max: 2024-09-24 45m PvA review with Bob +max: 2024-09-25 7h30m Creating EnTT POC and considering other ECS wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 11811b7f53b468f5585c17fbd6afa4ebef9d7b00 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 25 Sep 2024 17:27:37 +0200 Subject: Added task --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index fcc3adb..6894803 100644 --- a/time.txt +++ b/time.txt @@ -69,6 +69,7 @@ max: 2024-09-20 3h researching engine structure max: 2024-09-24 2h seventh project meeting max: 2024-09-24 45m PvA review with Bob max: 2024-09-25 7h30m Creating EnTT POC and considering other ECS +max: 2024-09-25 1h wrote email to Bob wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 1d641c7a907f02c16275aa6f5df1b2933f4af80e Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 25 Sep 2024 17:37:59 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index b989d53..3e027af 100644 --- a/time.txt +++ b/time.txt @@ -41,6 +41,7 @@ loek: 2024-09-19 45m project meeting loek: 2024-09-19 15m docs :: remove versioning loek: 2024-09-19 30m PR merge and style guide update loek: 2024-09-22 2h15m docs :: research +loek: 2024-09-24 1h45m project meeting max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 762f422c2dbf93b88460f9f677ae124fee6643fc Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 25 Sep 2024 17:39:01 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 3e027af..68f3054 100644 --- a/time.txt +++ b/time.txt @@ -42,6 +42,7 @@ loek: 2024-09-19 15m docs :: remove versioning loek: 2024-09-19 30m PR merge and style guide update loek: 2024-09-22 2h15m docs :: research loek: 2024-09-24 1h45m project meeting +loek: 2024-09-25 3h implementation :: audio facade and API max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 4865777f7e98ab10c3381a0a36680415bc123113 Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Wed, 25 Sep 2024 21:11:18 +0200 Subject: Added task --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 6894803..020c578 100644 --- a/time.txt +++ b/time.txt @@ -70,6 +70,7 @@ max: 2024-09-24 2h seventh project meeting max: 2024-09-24 45m PvA review with Bob max: 2024-09-25 7h30m Creating EnTT POC and considering other ECS max: 2024-09-25 1h wrote email to Bob +max: 2024-09-25 2h40m make my own ECS (homemade ECS) wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 7a385155a6b89077ec53b25efea10aa77b0a746d Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 26 Sep 2024 14:07:45 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 68f3054..fc1394c 100644 --- a/time.txt +++ b/time.txt @@ -43,6 +43,7 @@ loek: 2024-09-19 30m PR merge and style guide update loek: 2024-09-22 2h15m docs :: research loek: 2024-09-24 1h45m project meeting loek: 2024-09-25 3h implementation :: audio facade and API +loek: 2024-09-26 2h project meeting max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 6329755a372d90985bda1cd164fae8d91d4a60c6 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 26 Sep 2024 15:50:58 +0200 Subject: remove meta.tex and just set defaults directly in projdoc.cls --- example.tex | 1 - meta.tex | 9 --------- plan.tex | 1 - projdoc.cls | 15 +++++++++++++-- requirements.tex | 1 - research.tex | 1 - timerep.tex | 1 - 7 files changed, 13 insertions(+), 16 deletions(-) delete mode 100644 meta.tex diff --git a/example.tex b/example.tex index 24c525b..9f36f59 100644 --- a/example.tex +++ b/example.tex @@ -1,7 +1,6 @@ \documentclass{projdoc} % if the document compiles too slow (likely due to many/large images), try compiling % with the [draft] option. this replaces all images with placeholders. -\input{meta.tex} \title{Example Document} diff --git a/meta.tex b/meta.tex deleted file mode 100644 index db7c7b1..0000000 --- a/meta.tex +++ /dev/null @@ -1,9 +0,0 @@ -\organization{Avans University of Applied Sciences} -\project{Project cr\^epe} -\author{% - Loek Le Blansch\and% - Wouter Boerenkamps\and% - Jaro Rutjes\and% - Max Smits\and% - Niels Stunnebrink% -} diff --git a/plan.tex b/plan.tex index c439aa7..a67598e 100644 --- a/plan.tex +++ b/plan.tex @@ -1,5 +1,4 @@ \documentclass{projdoc} -\input{meta.tex} \title{Project Plan} diff --git a/projdoc.cls b/projdoc.cls index 16b1790..8a2c05d 100644 --- a/projdoc.cls +++ b/projdoc.cls @@ -1,6 +1,19 @@ \NeedsTeXFormat{LaTeX2e} \ProvidesClass{projdoc}[2024-09-03 class projdoc] +% project defaults +\makeatletter +\def\@project{Project cr\^epe} +\def\@organization{Avans University of Applied Sciences} +\def\@author{% + Loek Le Blansch\and% + Wouter Boerenkamps\and% + Jaro Rutjes\and% + Max Smits\and% + Niels Stunnebrink% +} +\makeatother + % based on article \LoadClass{article} @@ -160,9 +173,7 @@ % \maketitle format \makeatletter -\let\@project\relax \def\project#1{\def\@project{#1}} -\let\@organization\relax \def\organization#1{\def\@organization{#1}} \def\@maketitle{% \centering% diff --git a/requirements.tex b/requirements.tex index be0e103..6b4a87a 100644 --- a/requirements.tex +++ b/requirements.tex @@ -1,5 +1,4 @@ \documentclass{projdoc} -\input{meta.tex} \makeatletter \projdoc@description@leftmargin=2ex diff --git a/research.tex b/research.tex index 228f3ac..5aa7c4f 100644 --- a/research.tex +++ b/research.tex @@ -1,5 +1,4 @@ \documentclass{projdoc} -\input{meta.tex} \title{Research document} diff --git a/timerep.tex b/timerep.tex index 7590217..34a30ea 100644 --- a/timerep.tex +++ b/timerep.tex @@ -1,5 +1,4 @@ \documentclass{projdoc} -\input{meta.tex} \title{Time Report} -- cgit v1.2.3 From 2da0290d4e40bc15ec7b17723627daa7da201fa7 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Thu, 26 Sep 2024 17:09:23 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index fc1394c..1a935ec 100644 --- a/time.txt +++ b/time.txt @@ -44,6 +44,7 @@ loek: 2024-09-22 2h15m docs :: research loek: 2024-09-24 1h45m project meeting loek: 2024-09-25 3h implementation :: audio facade and API loek: 2024-09-26 2h project meeting +loek: 2024-09-25 1h20m implementation :: audio facade and API max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 426402e42fe5ba66675cba05859af990b51a6a9e Mon Sep 17 00:00:00 2001 From: Max-001 <80035972+Max-001@users.noreply.github.com> Date: Thu, 26 Sep 2024 20:14:08 +0200 Subject: Added tasks --- time.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/time.txt b/time.txt index 47b02e3..2b31a68 100644 --- a/time.txt +++ b/time.txt @@ -76,6 +76,8 @@ max: 2024-09-24 45m PvA review with Bob max: 2024-09-25 7h30m Creating EnTT POC and considering other ECS max: 2024-09-25 1h wrote email to Bob max: 2024-09-25 2h40m make my own ECS (homemade ECS) +max: 2024-09-26 2h eight project meeting +max: 2024-09-26 1h wrote email to Bob (after project meeting) wouter: 2024-09-02 1h project meeting :: project kickoff wouter: 2024-09-02 45m project meeting -- cgit v1.2.3 From 96cd8c6ff8221f0bd5de84d9793dd4fc0e6c0a2b Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Fri, 27 Sep 2024 10:28:59 +0200 Subject: time update --- time.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/time.txt b/time.txt index c53b4e4..3426b35 100644 --- a/time.txt +++ b/time.txt @@ -128,6 +128,11 @@ niels: 2024-09-19 1h30m project meeting niels: 2024-09-19 45m project meeting niels: 2024-09-19 15m PvA reviewing niels: 2024-09-22 2h30m Adding spritesheet functionalities +niels: 2024-09-23 2h researching and POC tiled library tmxlite +niels: 2024-09-24 2h project Meeting +niels: 2024-09-24 45m meeting with Bob +niels: 2024-09-25 6h integrate the resource manager spritesheet, tmxlite, texture. +niels: 2024-09-26 2h project meeting jaro: 2024-09-02 1h project meeting :: project kickoff jaro: 2024-09-02 45m project meeting -- cgit v1.2.3 From 3e31b868d4a090c8cc40d4801ea24bde027f5624 Mon Sep 17 00:00:00 2001 From: WBoerenkamps Date: Fri, 27 Sep 2024 11:10:02 +0200 Subject: updated time --- time.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/time.txt b/time.txt index c53b4e4..6a785e7 100644 --- a/time.txt +++ b/time.txt @@ -102,6 +102,9 @@ wouter: 2024-09-19 15m project meeting wouter: 2024-09-19 1h30m project meeting wouter: 2024-09-19 45m project meeting wouter: 2024-09-19 15m docs :: remove versioning +wouter: 2024-09-26 2h eight project meeting +wouter: 2024-09-26 3h researching event manager + niels: 2024-09-02 1h project meeting :: project kickoff niels: 2024-09-02 45m project meeting -- cgit v1.2.3 From 61013ec6bfdc98105816a535bf2ce67f578fe675 Mon Sep 17 00:00:00 2001 From: Jaro Date: Fri, 27 Sep 2024 13:48:21 +0200 Subject: added notulen --- notulen/wk1-1.txt | 22 ++++++++++++++++++++++ notulen/wk1-2.txt | 32 ++++++++++++++++++++++++++++++++ notulen/wk2-1.txt | 41 +++++++++++++++++++++++++++++++++++++++++ notulen/wk2-2.txt | 40 ++++++++++++++++++++++++++++++++++++++++ notulen/wk3-1.txt | 38 ++++++++++++++++++++++++++++++++++++++ notulen/wk3-2.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ notulen/wk4-1.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ notulen/wk4-2.txt | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 306 insertions(+) create mode 100644 notulen/wk1-1.txt create mode 100644 notulen/wk1-2.txt create mode 100644 notulen/wk2-1.txt create mode 100644 notulen/wk2-2.txt create mode 100644 notulen/wk3-1.txt create mode 100644 notulen/wk3-2.txt create mode 100644 notulen/wk4-1.txt create mode 100644 notulen/wk4-2.txt diff --git a/notulen/wk1-1.txt b/notulen/wk1-1.txt new file mode 100644 index 0000000..eb48e74 --- /dev/null +++ b/notulen/wk1-1.txt @@ -0,0 +1,22 @@ + Documents + Project plan + Setup project plan + 2 meetings 30 minutes standup + 1 hour discussion + document standard + Ask if APA is a requirement. + Git + Setup document repo + Setup code repo + Setup code standard + Environments + Setup environment code + Setup environment document + Research + 3rd party tools + SDL2 + SFML + Watch video project introduction unity + + + + diff --git a/notulen/wk1-2.txt b/notulen/wk1-2.txt new file mode 100644 index 0000000..36b3c3f --- /dev/null +++ b/notulen/wk1-2.txt @@ -0,0 +1,32 @@ + Documents + Research Document + Setup research document + Project plan + [closed]Setup project plan + [closed] 2 meetings 30 minutes standup + 1 hour discussion + Continue adding information to project plan + document standard + Add updates when needed + [closed] Ask if APA is a requirement. (not needed) + Git + [closed] Setup document repo + [closed] Setup code repo + [closed] Setup code standard + Code standard + Add updates when needed + add doxygen code comments + Environments + [closed]Setup environment code + + Setup environment document + issues with windows and linux compatibility latex + Research + 3rd party tools + SDL2 + SFML + [closed] Watch video project introduction unity + research unity game engine + + + + diff --git a/notulen/wk2-1.txt b/notulen/wk2-1.txt new file mode 100644 index 0000000..a83e028 --- /dev/null +++ b/notulen/wk2-1.txt @@ -0,0 +1,41 @@ + Documents + Research Document + [closed] Setup research document + Project plan + Continue adding information to project plan + Review document + document standard + Add updates when needed + use autocite for sources + requirement + setup requirement document + add userstories to requirement + design document + setup design document + Git + Code standard + Add updates when needed + add doxygen code comments + Environments + Setup environment document + issues with windows and linux compatibility latex. (different issue) + Research + [closed] 3rd party tools (added to research document) + SDL2 + SFML + research unity game engine (reviewing added information) + start research gameloop + eventmanager + start research resource manager + start research renderer + start research scripting + start research debugging/profiling + start research gameobject + start research physics + start research audio + Design + discussed class diagram + Discussion SDL2 and SFML + + + + diff --git a/notulen/wk2-2.txt b/notulen/wk2-2.txt new file mode 100644 index 0000000..2835d9b --- /dev/null +++ b/notulen/wk2-2.txt @@ -0,0 +1,40 @@ + Documents + Research Document + Continue adding research information + Project plan + [closed] Continue adding information to project plan + Review document + document standard + Add updates when needed + [closed] use autocite for sources + requirement + [closed] setup requirement document + [closed] add userstories to requirement + design document + [closed] setup design document + Git + Code standard + Add updates when needed + add doxygen code comments + Environments + Setup environment document + [closed] issues with windows and linux compatibility latex. + Research + [closed] research unity game engine (reviewing added information) + start research gameloop + eventmanager + start research resource manager + start research renderer + start research scripting + start research debugging/profiling + start research gameobject + start research physics + start research audio + start research ecs + Design + discussed class diagram + Discussing validation application + [closed] Discussion SDL2 and SFML + + + + diff --git a/notulen/wk3-1.txt b/notulen/wk3-1.txt new file mode 100644 index 0000000..5894627 --- /dev/null +++ b/notulen/wk3-1.txt @@ -0,0 +1,38 @@ + Documents + Research Document + Continue adding research information + Project plan + Final Review document + document standard + Add updates when needed + requirement + - + design document + - + no version control + Git + Code standard + Add updates when needed + add doxygen code comments + Environments + - + Research + start research gameloop + eventmanager Starting POC + start research resource manager POC + start research renderer + start research scripting + start research debugging/profiling + start research gameobject + start research physics Starting POC + start research audio POC + start research ecs + Design + discussed class diagram + Making first version of class diagram + Change string from audio and sprint to a instance of an object (resource) + [closed] Discussing validation application + + + + + diff --git a/notulen/wk3-2.txt b/notulen/wk3-2.txt new file mode 100644 index 0000000..699bd2c --- /dev/null +++ b/notulen/wk3-2.txt @@ -0,0 +1,43 @@ + Documents + Research Document + Continue adding research information + Project plan + Final Review document + document standard + Add updates when needed + requirement + - + design document + - + [closed] no version control + [closed] Converting meeting nodes + Git + Code standard + Add updates when needed + add doxygen code comments + Environments + - + Research + start research gameloop + eventmanager Starting POC adding to documentation + start research resource manager POC add to documentation + start research renderer + start research scripting + start research debugging/profiling + start research gameobject + start research physics Starting POC + start research audio finishing POC + start research ecs + start research particels + start research loading level and sprite (visuals) + Design + discussed class diagram + Making first version of class diagram + [closed] Change string from audio and sprint to a instance of an object (resource) + [closed] Discussing validation application + Product + Creating 3rd party tool facade audio + + + + + diff --git a/notulen/wk4-1.txt b/notulen/wk4-1.txt new file mode 100644 index 0000000..f6d49ce --- /dev/null +++ b/notulen/wk4-1.txt @@ -0,0 +1,43 @@ + Documents + Research Document + Continue adding research information + Project plan + [closed] Final Review document + document standard + Add updates when needed + requirement + - + design document + - + Git + Code standard + Add updates when needed + add doxygen code comments + Environments + - + Research + start research gameloop + eventmanager Starting POC adding to documentation + start research resource manager POC move some functionality + start research renderer + start research scripting + start research debugging/profiling + start research gameobject + start research physics Starting POC + Discussed functional phiscics requirements + [closed] start research audio finishing POC + start research ecs (creating POC) + start research particels + [closed] start research loading level and sprite (visuals) + Design + discussed class diagram + [closed] Making first version of class diagram + Adding design audio + Adding design resource manager + + Product + Creating 3rd party tool facade audio + + + + + diff --git a/notulen/wk4-2.txt b/notulen/wk4-2.txt new file mode 100644 index 0000000..2bfbadb --- /dev/null +++ b/notulen/wk4-2.txt @@ -0,0 +1,47 @@ + Documents + Research Document + Continue adding research information + Project plan + - + document standard + Add updates when needed + requirement + - + design document + - + Git + Code standard + Add updates when needed + add doxygen code comments + Environments + - + Research + [closed] start research gameloop + eventmanager + start research resource manager POC move some functionality + start research renderer + start research scripting + start research debugging/profiling + start research gameobject + start research physics Starting POC + Discussed functional phiscics requirements + start research ecs (showed poc design must change asked customer if design can change) + start research particels + Design + discussed class diagram + one instance of rigidbody and collider + Gameobject is not the owner of the component but the manager is + and one component type per gameobject. + Functions within a model can they change? + Adding design audio + Adding design resource manager + Adding design gameloop + eventmanager + Product + Creating 3rd party tool facade audio + class diagram to c++ will wait until some design changes + Test + Add unit test for audio + + + + + -- cgit v1.2.3 From ea9cef29f089a7f72d990e2e0878157e54b15519 Mon Sep 17 00:00:00 2001 From: Jaro Date: Fri, 27 Sep 2024 14:33:13 +0200 Subject: updated time.txt --- time.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/time.txt b/time.txt index 6a785e7..b9fd96b 100644 --- a/time.txt +++ b/time.txt @@ -163,5 +163,10 @@ jaro: 2024-09-19 30m project meeting jaro: 2024-09-19 1h30m project lesson jaro: 2024-09-19 1h project meeting jaro: 2024-09-19 30m project plan and class diagram - +jaro: 2024-09-24 3h45m physics research and poc +jaro: 2024-09-24 3h30m project: meeting + delivery project plan +jaro: 2024-09-26 2h30m physics research and poc +jaro: 2024-09-26 30m preparing meeting +jaro: 2024-09-26 2h team meeting +jaro: 2024-09-27 45m converting notes # vim:ft=cfg -- cgit v1.2.3 From e89a3fa70f59cd32cba4572aef2b9c2967c22f77 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 27 Sep 2024 15:08:36 +0200 Subject: merge #26 + style guide update --- contributing.md | 2 +- design.tex | 25 +++++++++++++++---------- research.tex | 49 +++++++++++++++++++++++++++++++++++++++---------- style.md | 3 +++ 4 files changed, 58 insertions(+), 21 deletions(-) diff --git a/contributing.md b/contributing.md index 46cfeca..8105e0d 100644 --- a/contributing.md +++ b/contributing.md @@ -7,7 +7,7 @@ other document. - Indent using tabs - Wrap long lines at column 80 - ASCII only (LaTeX syntax should be used instead of UTF-8, i.e. `fa\c{c}ade` - instead of `façade`, `---` instead of `—`) + instead of `façade`, `---` instead of `—`, `cr\^epe` instead of `crêpe`) - Images should be placed in the img/ folder - Labels and bibliography keys should only consist of characters from the following set: `[a-z0-9:-]` (lower-case, numbers, colon, dash). diff --git a/design.tex b/design.tex index 30e574b..c5bd017 100644 --- a/design.tex +++ b/design.tex @@ -1,24 +1,32 @@ \documentclass{projdoc} -\input{meta.tex} -\title{design document} +\title{Software Design} \begin{document} \tablestables \newpage -\section{Introduction} This document outlines the design and development process of the Crepe Game Engine, detailing the key decisions made during its creation. The primary goal of this engine is to offer a streamlined, Unity-like experience tailored for developing 2D games similar to Jetpack Joyride. +\section{Introduction} -The Crepe Engine is designed to ease the transition for developers familiar with Unity, ensuring minimal friction when switching platforms. Our aim is to preserve many of Unity’s core features while introducing a lightweight and open-source alternative, licensed under the MIT License. +This document outlines the design and development process of the cr\^epe game engine, +detailing the key decisions made during its creation. The primary goal of this engine +is to offer a streamlined, Unity-like experience tailored for developing 2D games +similar to Jetpack Joyride. -The engine is primarily aimed at indie developers who have prior experience with Unity and are looking for a flexible, cost-effective solution with familiar workflows. +The cr\^epe engine is designed to ease the transition for developers familiar with +Unity, ensuring minimal friction when switching platforms. Our aim is to preserve +many of Unity’s core features while introducing a lightweight and open-source +alternative, licensed under the MIT License. +The engine is primarily aimed at indie developers who have prior experience with +Unity and are looking for a flexible, cost-effective solution with familiar +workflows. -\section{Architectural overview} +\section{Overview} \subsection{Core} -\subsection{patterns} +\subsection{Patterns} \section{Design} @@ -34,12 +42,9 @@ The engine is primarily aimed at indie developers who have prior experience with \subsection{Physics} - \section{Tools} \section{Conclusion} - - \end{document} diff --git a/research.tex b/research.tex index 4a65ec3..1b8a5ab 100644 --- a/research.tex +++ b/research.tex @@ -1,6 +1,6 @@ \documentclass{projdoc} -\title{Research document} +\title{Research Document} \begin{document} \tablestables @@ -310,12 +310,18 @@ for audio some options could be: FMOD, Wwise, or iirKlang \subsection{Findings} -\subsection{unity formats} -Unity has many different asset file types that can be imported to use for a game \href{https://docs.unity3d.com/Manual/BuiltInImporters.html}{unity imports}. The most important formats are the audio, text and sprite formats. +\subsection{Unity formats} -\paragraph{Audio} +% TODO: +ref (urldate 2024-09-11) +Unity has many different asset file types that can be imported to use for a game +\href{https://docs.unity3d.com/Manual/BuiltInImporters.html}{unity imports}. The most +important formats are the audio, text and sprite formats. -The unity engine supports a lot of different audio formats: +\subsubsection{Audio} + +% NOTE: multicols to save space (is this list necessary?) +The unity engine supports a lot of different audio formats:\noparbreak +\begin{multicols}{5} \begin{itemize} \item ogg. \item aif. @@ -328,10 +334,13 @@ The unity engine supports a lot of different audio formats: \item s3m. \item xm. \end{itemize} +\end{multicols} -\paragraph{Sprite formats} +\subsubsection{Sprite formats} -Unity supports many different image formats: +% NOTE: multicols to save space (is this list necessary?) +Unity supports many different image formats:\noparbreak +\begin{multicols}{5} \begin{itemize} \item jpg. \item jpeg. @@ -348,13 +357,32 @@ Unity supports many different image formats: \item exr. \item hdr. \end{itemize} +\end{multicols} + +\subsection{Audio Format} -\subsection{Audio Format} The choice of audio format for the Crepe game engine depends on several factors, including sound quality, memory usage, and licensing. According to various sources \href{https://dev.to/tenry/comparison-of-audio-formats-for-games-jak}{comparison audio formats}, \href{https://www.universityofgames.net/articles/audio-file-formats-used-in-game-development/}{Audio files in games} , the most commonly used audio formats in game development are WAV, MP3, and Ogg. +% TODO: +ref (both urldate 2024-09-12) +The choice of audio format for the cr\^epe game engine depends on several factors, +including sound quality, memory usage, and licensing. According to various sources +\href{https://dev.to/tenry/comparison-of-audio-formats-for-games-jak}{comparison audio formats}, +\href{https://www.universityofgames.net/articles/audio-file-formats-used-in-game-development/}{Audio files in games}, +the most commonly used audio formats in game development are WAV, MP3, and Ogg. -\paragraph{Licensing} Historically, MP3 had patents on the audio format, but these restrictions have expired. Ogg and FLAC, both developed by Xiph.Org, are open-source formats. Additionally, the WAV format, though widely used, does not require a specific license for distribution. +\subsubsection{Licensing} -\paragraph{Conclusion} For the Crepe game engine, Ogg and FLAC are the preferred audio formats due to their open-source licenses and high compatibility. FLAC is ideal for high-quality audio with minimal compression, while Ogg is better suited for lower-quality audio that requires reduced memory usage. Both formats come from the same non-profit organization, Xiph.Org, ensuring that they align with open-source values and licensing flexibility. +Historically, MP3 had patents on the audio format, but these restrictions have +expired. Ogg and FLAC, both developed by Xiph.Org, are open-source formats. +Additionally, the WAV format, though widely used, does not require a specific license +for distribution. +\subsubsection{Conclusion} + +For the cr\^epe game engine, Ogg and FLAC are the preferred audio formats due to +their open-source licenses and high compatibility. FLAC is ideal for high-quality +audio with minimal compression, while Ogg is better suited for lower-quality audio +that requires reduced memory usage. Both formats come from the same non-profit +organization, Xiph.Org, ensuring that they align with open-source values and +licensing flexibility. \subsection{Conclusion} @@ -477,3 +505,4 @@ the most suitable (and only) audio library for use in this project. \subsection{Conclusion} \end{document} + diff --git a/style.md b/style.md index 8dca81b..2229947 100644 --- a/style.md +++ b/style.md @@ -13,6 +13,9 @@ reference. instead of a slash, etc.) - Quotes are closed before punctuation marks. - Do not use contractions, modal adverbs or rhetorical questions. +- The engine is stylized in lowercase, and is just called 'crêpe'. Additional + words describing what crêpe is (i.e. '(game) engine') should not be + capitalized, as crêpe is not written like a porper noun. # References -- cgit v1.2.3 From a2476f312f7f00b1462df55275e55e602382f558 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 28 Sep 2024 15:03:06 +0200 Subject: update time.txt --- time.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/time.txt b/time.txt index e385e49..e85f602 100644 --- a/time.txt +++ b/time.txt @@ -45,6 +45,8 @@ loek: 2024-09-24 1h45m project meeting loek: 2024-09-25 3h implementation :: audio facade and API loek: 2024-09-26 2h project meeting loek: 2024-09-25 1h20m implementation :: audio facade and API +loek: 2024-09-27 20m PR merge and style guide update +loek: 2024-09-27 55m implementation :: fix library import structure max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 044cb743be15d61581c06e6b8a8024372206373d Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sat, 28 Sep 2024 17:10:27 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index e85f602..1e118af 100644 --- a/time.txt +++ b/time.txt @@ -47,6 +47,7 @@ loek: 2024-09-26 2h project meeting loek: 2024-09-25 1h20m implementation :: audio facade and API loek: 2024-09-27 20m PR merge and style guide update loek: 2024-09-27 55m implementation :: fix library import structure +loek: 2024-09-28 2h20m implementation :: audio facade and API max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 7a044bb0081f73e2b500f2c1c82d6ad298fc98a1 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sun, 29 Sep 2024 16:39:28 +0200 Subject: update time.txt --- time.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/time.txt b/time.txt index 1e118af..6dc2f0c 100644 --- a/time.txt +++ b/time.txt @@ -48,6 +48,8 @@ loek: 2024-09-25 1h20m implementation :: audio facade and API loek: 2024-09-27 20m PR merge and style guide update loek: 2024-09-27 55m implementation :: fix library import structure loek: 2024-09-28 2h20m implementation :: audio facade and API +loek: 2024-09-29 1h55m implementation :: debug logging facilities +loek: 2024-09-29 20m implementation :: audio facade max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From 439dfafb69375363fd024670ba16f797fe0ebb7c Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Sun, 29 Sep 2024 17:22:26 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 6dc2f0c..87457a0 100644 --- a/time.txt +++ b/time.txt @@ -50,6 +50,7 @@ loek: 2024-09-27 55m implementation :: fix library import structure loek: 2024-09-28 2h20m implementation :: audio facade and API loek: 2024-09-29 1h55m implementation :: debug logging facilities loek: 2024-09-29 20m implementation :: audio facade +loek: 2024-09-29 45m docs :: audio facade design max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3 From f0cacf550e7b621d58ae9e92b5a1ee66b5e60be0 Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Mon, 30 Sep 2024 13:38:09 +0200 Subject: update time.txt --- time.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/time.txt b/time.txt index 87457a0..07c04c6 100644 --- a/time.txt +++ b/time.txt @@ -51,6 +51,7 @@ loek: 2024-09-28 2h20m implementation :: audio facade and API loek: 2024-09-29 1h55m implementation :: debug logging facilities loek: 2024-09-29 20m implementation :: audio facade loek: 2024-09-29 45m docs :: audio facade design +loek: 2024-09-30 1h40m project meeting max: 2024-09-02 1h project kickoff max: 2024-09-02 45m first project meeting -- cgit v1.2.3