{"id":225,"date":"2016-10-25T17:34:08","date_gmt":"2016-10-25T17:34:08","guid":{"rendered":"http:\/\/lawyer2.mythemecloud.io\/?p=225"},"modified":"2025-01-30T07:22:09","modified_gmt":"2025-01-30T07:22:09","slug":"luctus-non-massa-fusce-ac-turpis-quis","status":"publish","type":"post","link":"https:\/\/gabrielgborges.com\/index.php\/2016\/10\/25\/luctus-non-massa-fusce-ac-turpis-quis\/","title":{"rendered":"UMG &#8211; Game Programming Patterns"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"225\" class=\"elementor elementor-225\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8e7d0b6 e-flex e-con-boxed elementor-invisible e-con e-parent\" data-id=\"8e7d0b6\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;fadeIn&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-34143eb elementor-widget elementor-widget-html\" data-id=\"34143eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n    \/\/ Select the first MenuAnchor element\n    var firstAnchor = document.querySelector(\"[id^='MenuAnchor']\");\n    \n    \/\/ Check if the element exists before scrolling\n    if (firstAnchor) {\n        firstAnchor.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-62a3aed elementor-widget elementor-widget-menu-anchor\" data-id=\"62a3aed\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"MenuAnchor\" data-widget_type=\"menu-anchor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-menu-anchor\" id=\"content\"><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8a427db elementor-widget elementor-widget-text-editor\" data-id=\"8a427db\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>A fast-paced fighting game where players take control of unique gladiators, mastering combos and strategies to conquer their opponents in the arena. With an innovative combo system and a focus on scalability, UMG challenges players to create seamless combat sequences while maintaining fluid gameplay.<\/p>\n<hr \/>\n<h3>Making of &#8211; Ultimate Martial Gladiators:<\/h3>\n<p>Including implementations for every single programming pattern in the book <em>Game Programming Patterns, <\/em>UMG is a personal project, developed solo using <strong>Unity<\/strong> and <strong>C#<\/strong>, aimed at building a challenging, expandable codebase inspired by the book <em>Game Programming Patterns<\/em> and advanced C# courses. This project emphasizes clean code architecture and practical application of advanced programming concepts to deliver a polished and maintainable game.<\/p>\n<p>UMG serves as both a technical learning journey and a platform to explore creative game mechanics, including a dynamic <strong>combo system<\/strong> built from scratch to empower game designers with easy editing tools.<\/p>\n<hr \/>\n<h3>Technical Highlights:<\/h3>\n<ul>\n<li>\n<p><strong>All Game Programming Patterns Applied<\/strong>: Each core system was built using different architectural patterns from <em>Game Programming Patterns<\/em> by Robert Nystrom, offering practical insights into scalable game development.<\/p>\n<\/li>\n<li>\n<p><strong>C# Code Architecture<\/strong>: Heavily focused on <strong>Clean Code<\/strong> and <strong>SOLID principles<\/strong>, ensuring maintainability and scalability for future updates.<\/p>\n<\/li>\n<li>\n<p><strong>Tree Node Combo System<\/strong>: Developed using a <strong>node tree data structure<\/strong>, allowing for dynamic and efficient combo creation. This system minimizes memory usage, speeds up combat sequences, and provides game designers with user-friendly tools to modify combos.<\/p>\n<\/li>\n<li>\n<p><strong>No Plugins Used<\/strong>: All systems were built from the ground up, emphasizing hands-on learning and deep technical understanding.<\/p>\n<\/li>\n<\/ul>\n<p>Explore the codebase on GitLab:<br \/>\ud83d\udd17 <a href=\"https:\/\/gitlab.com\/gabriel.goncalves.borges\/umg-fight-game\" target=\"_new\" rel=\"noopener\">UMG Project GitLab Repository<\/a><\/p>\n<p><\/p>\n<p>\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-329bcc5 e-flex e-con-boxed elementor-invisible e-con e-parent\" data-id=\"329bcc5\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;fadeIn&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-163782c elementor-widget elementor-widget-video\" data-id=\"163782c\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;youtube_url&quot;:&quot;https:\\\/\\\/youtu.be\\\/ag30bykzXjU?si=BuG-kfWzNLimjf-R&quot;,&quot;video_type&quot;:&quot;youtube&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-wrapper elementor-open-inline\">\n\t\t\t<div class=\"elementor-video\"><\/div>\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-79e4f59 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"79e4f59\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;fadeIn&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-98bd1e1 elementor-widget elementor-widget-heading\" data-id=\"98bd1e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">contact<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b59cc4a elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"b59cc4a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f4e649b e-con-full e-grid e-con e-child\" data-id=\"f4e649b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-578b182 e-con-full e-flex e-con e-child\" data-id=\"578b182\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9dc35c7 elementor-widget elementor-widget-text-editor\" data-id=\"9dc35c7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u00a0<\/p><div class=\"elementor-element elementor-element-439cd7c4 elementor-widget elementor-widget-heading\" data-id=\"439cd7c4\" data-element_type=\"widget\" data-widget_type=\"heading.default\"><div class=\"elementor-widget-container\"><h1 class=\"elementor-heading-title elementor-size-default\">Let&#8217;s Get in Touch<\/h1><\/div><\/div><div class=\"elementor-element elementor-element-bfaa58b elementor-widget elementor-widget-text-editor\" data-id=\"bfaa58b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\"><div class=\"elementor-widget-container\"><p>I love to connect with fun and talented people! Please don\u2019t hesitate to get in touch for a no obligations chat about yours or any other project.<\/p><\/div><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-246a77d elementor-widget elementor-widget-wpforms\" data-id=\"246a77d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"wpforms.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"wpforms-container wpforms-container-full wpforms-render-modern\" id=\"wpforms-1067\"><form id=\"wpforms-form-1067\" class=\"wpforms-validate wpforms-form wpforms-ajax-form\" data-formid=\"1067\" method=\"post\" enctype=\"multipart\/form-data\" action=\"\/index.php\/wp-json\/wp\/v2\/posts\/225\" data-token=\"436c91a0779c17d58aa15823f981886d\" data-token-time=\"1777036361\"><noscript class=\"wpforms-error-noscript\">Please enable JavaScript in your browser to complete this form.<\/noscript><div id=\"wpforms-error-noscript\" style=\"display: none;\">Please enable JavaScript in your browser to complete this form.<\/div><div class=\"wpforms-field-container\">\t\t<div id=\"wpforms-1067-field_4-container\"\n\t\t\tclass=\"wpforms-field wpforms-field-text\"\n\t\t\tdata-field-type=\"text\"\n\t\t\tdata-field-id=\"4\"\n\t\t\t>\n\t\t\t<label class=\"wpforms-field-label\" for=\"wpforms-1067-field_4\" ><\/label>\n\t\t\t<input type=\"text\" id=\"wpforms-1067-field_4\" class=\"wpforms-field-medium\" name=\"wpforms[fields][4]\" >\n\t\t<\/div>\n\t\t<div id=\"wpforms-1067-field_1-container\" class=\"wpforms-field wpforms-field-name\" data-field-id=\"1\"><input type=\"text\" id=\"wpforms-1067-field_1\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][1]\" placeholder=\"Name\" aria-errormessage=\"wpforms-1067-field_1-error\" required><\/div><div id=\"wpforms-1067-field_2-container\" class=\"wpforms-field wpforms-field-email\" data-field-id=\"2\"><input type=\"email\" id=\"wpforms-1067-field_2\" class=\"wpforms-field-medium wpforms-field-required\" name=\"wpforms[fields][2]\" placeholder=\"Email\" spellcheck=\"false\" aria-errormessage=\"wpforms-1067-field_2-error\" required><\/div><div id=\"wpforms-1067-field_3-container\" class=\"wpforms-field wpforms-field-textarea\" data-field-id=\"3\"><textarea id=\"wpforms-1067-field_3\" class=\"wpforms-field-medium\" name=\"wpforms[fields][3]\" placeholder=\"Message\" aria-errormessage=\"wpforms-1067-field_3-error\" ><\/textarea><\/div><script>\n\t\t\t\t( function() {\n\t\t\t\t\tconst style = document.createElement( 'style' );\n\t\t\t\t\tstyle.appendChild( document.createTextNode( '#wpforms-1067-field_4-container { position: absolute !important; overflow: hidden !important; display: inline !important; height: 1px !important; width: 1px !important; z-index: -1000 !important; padding: 0 !important; } #wpforms-1067-field_4-container input { visibility: hidden; } #wpforms-conversational-form-page #wpforms-1067-field_4-container label { counter-increment: none; }' ) );\n\t\t\t\t\tdocument.head.appendChild( style );\n\t\t\t\t\tdocument.currentScript?.remove();\n\t\t\t\t} )();\n\t\t\t<\/script><\/div><!-- .wpforms-field-container --><div class=\"wpforms-submit-container\" ><input type=\"hidden\" name=\"wpforms[id]\" value=\"1067\"><input type=\"hidden\" name=\"page_title\" value=\"\"><input type=\"hidden\" name=\"page_url\" value=\"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/posts\/225\"><input type=\"hidden\" name=\"url_referer\" value=\"\"><button type=\"submit\" name=\"wpforms[submit]\" id=\"wpforms-submit-1067\" class=\"wpforms-submit\" data-alt-text=\"Sending...\" data-submit-text=\"Send\" aria-live=\"assertive\" value=\"wpforms-submit\">Send<\/button><img decoding=\"async\" src=\"https:\/\/gabrielgborges.com\/wp-content\/plugins\/wpforms-lite\/assets\/images\/submit-spin.svg\" class=\"wpforms-submit-spinner\" style=\"display: none;\" width=\"26\" height=\"26\" alt=\"Loading\"><\/div><\/form><\/div>  <!-- .wpforms-container -->\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>A fast-paced fighting game where players take control of unique gladiators, mastering combos and strategies to conquer their opponents in the arena. With an innovative combo system and a focus on scalability, UMG challenges players to create seamless combat sequences while maintaining fluid gameplay. Making of &#8211; Ultimate Martial Gladiators: Including implementations for every single [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1019,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_eb_attr":"","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"off","ocean_gallery_id":[],"footnotes":""},"categories":[14],"tags":[16],"class_list":["post-225","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tricks","tag-tricks","entry","has-media"],"_links":{"self":[{"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/posts\/225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/comments?post=225"}],"version-history":[{"count":19,"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/posts\/225\/revisions"}],"predecessor-version":[{"id":1585,"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/posts\/225\/revisions\/1585"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/media\/1019"}],"wp:attachment":[{"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/media?parent=225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/categories?post=225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gabrielgborges.com\/index.php\/wp-json\/wp\/v2\/tags?post=225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}