1"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[3051],{2499:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_DynamicInputSystemThumbanil-9c7851a4088f539fcaeee5ba4ce6fd52.png"},2651:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>m,frontMatter:()=>r,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"Modular-Action-System/About-Modular-Action-System","title":"About Modular Action System (MAS)","description":"Modular Action System (in short MAS) will allow you to create actions inside Data Assets. Default Data Asset can be overriden to add your logic inside it. After you populate the instances of your created actions, you can input these actions to your Characters in your Controllers and the actor component Action Manager will handle the rest.","source":"@site/docs/Modular-Action-System/About-Modular-Action-System.md","sourceDirName":"Modular-Action-System","slug":"/Modular-Action-System/About-Modular-Action-System","permalink":"/docs/Modular-Action-System/About-Modular-Action-System","draft":false,"unlisted":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"tutorialSidebar","previous":{"title":"Modular Action System","permalink":"/docs/category/modular-action-system"},"next":{"title":"Actions","permalink":"/docs/category/actions"}}');var a=n(74848),s=n(28453),o=n(85843);const r={sidebar_position:1},l="About Modular Action System (MAS)",c={},d=[{value:"Youtube Video Tutorial",id:"youtube-video-tutorial",level:3},{value:"What You Can Do With MAS",id:"what-you-can-do-with-mas",level:2}];function u(e){const t={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"about-modular-action-system-mas",children:"About Modular Action System (MAS)"})}),"\n",(0,a.jsx)(o.A,{pluginId:"ModularActionSystem"}),"\n",(0,a.jsxs)(t.p,{children:[(0,a.jsx)(t.strong,{children:"Modular Action System"})," (in short ",(0,a.jsx)(t.strong,{children:"MAS"}),") will allow you to create actions inside ",(0,a.jsx)(t.strong,{children:(0,a.jsx)(t.a,{href:"https://docs.unrealengine.com/5.2/en-US/data-assets-in-unreal-engine/",children:"Data Assets"})}),". Default Data Asset can be overriden to add your logic inside it. After you populate the instances of your created actions, you can input these actions to your ",(0,a.jsx)(t.strong,{children:"Characters"})," in your ",(0,a.jsx)(t.strong,{children:(0,a.jsx)(t.a,{href:"https://docs.unrealengine.com/5.2/en-US/data-assets-in-unreal-engine/",children:"Controllers"})})," and the actor component ",(0,a.jsx)(t.strong,{children:"Action Manager"})," will handle the rest."]}),"\n",(0,a.jsx)(t.h3,{id:"youtube-video-tutorial",children:"Youtube Video Tutorial"}),"\n",(0,a.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/-XQRBBMxkSM",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowfullscreen:!0}),"\n",(0,a.jsx)(t.h2,{id:"what-you-can-do-with-mas",children:"What You Can Do With MAS"}),"\n",(0,a.jsxs)(t.ul,{children:["\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Action Buffers"})," is integrated in the ",(0,a.jsx)(t.strong,{children:"Action Component"}),". So input actions will be added to the queue to be played when the higher priority action finishes its prior phase."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Action Chains"})," allows you to input chain of actions to the component. Even the single actions are converted to a single chain. This system will allow you to give bunch of actions related together, and each action will be independent to be overriden.\n(For example 0-GetArrow, 1-DrawBow 2-ReleaseBow)"]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Ability System"})," can be achieved with checking if the character can perform this action by looking the character's current attributes."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Looping Actions"})," can also be done by creating looping montage. As long as the montage is looping action and its phase remains the same. (For example: Blocking, DrawingBow, Falling, Aiming)."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Online Replicated Actions"}
1)," is integrated with the system. Montages will be played, action phases will be updated in both client and the server."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Combo"})," systems for your combat can be easly achived."]}),"\n",(0,a.jsxs)(t.li,{children:[(0,a.jsx)(t.strong,{children:"Gameplay Events"})," can be triggered inside actions. (For example: ",(0,a.jsx)(t.em,{children:"StartInteraction"}),", ",(0,a.jsx)(t.em,{children:"StartWeaponTrail"})," etc.)"]}),"\n"]})]})}function m(e={}){const{wrapper:t}={...(0,s.R)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},8516:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_EasyAbilitySetSystem_Logo-a3d2776b41f405833c0fede2397ff5b1.png"},10968:(e,t,n)=>{n.d(t,{J:()=>a,u:()=>s});var i=n(25901);const a=[{id:"StagedInteractionSystem",title:"Staged Interaction System",Img:n(33037).A,description:"Staged Interaction System that uses stages as a way to create complex player interactions with ease.",DocLink:"docs/Staged-Interaction-System/Overview",FabLink:"https://www.fab.com/listings/ea6cda8e-25b1-434e-a9ab-1c2bbaa5fe67"},{id:"EasyTraceTrailSystem",title:"Easy Trace-Trail System",Img:n(45155).A,description:"A modular, optimized solution for easily controlling and extending hit results from continuous hit trails.",DocLink:"/docs/Easy-Trace-Trail-System/EasyTraceTrailSystem",FabLink:"https://www.fab.com/listings/86d9af14-9ab3-4c47-83b2-96eb6a4b5957"},{title:"Ability Queue Task System",Img:n(67886).A,description:"Extension of Epic's Gameplay Ability System. Enables queueable abilities with priority-based activation.",DocLink:"/docs/Ability-Queue-Task-System/Overview",FabLink:"https://www.fab.com/listings/554398ff-338b-43da-bf43-b081ef166b92"},{title:"Nested Inventory Architecture",Img:n(67378).A,description:"Create customizable, nested, section-based, object-oriented inventory systems for intuitive gameplay.",DocLink:"/docs/Nested-Invnetory-Architecture/AboutNestedInventoryArchitecture",FabLink:"https://www.fab.com/listings/320f157f-9241-47ee-9f32-63aaf744f509"},{title:"Modular Action System",Img:n(60229).A,description:"A modular, data-driven action system for games. Network-ready and easy to customize.",DocLink:"/docs/Modular-Action-System/About-Modular-Action-System",FabLink:"https://www.fab.com/listings/6ef3ecaa-1a2f-4056-a209-cf228df40c3f"},{title:"Easy Skeletal Mesh Merge Async",Img:n(88612).A,description:"A simple and optimized workflow to create modular characters via skele merging.",DocLink:"/docs/Easy-Skeletal-Mesh-Merge-Async/EasySkeletalMeshMergeAsync",FabLink:"https://www.fab.com/listings/616906a0-c73d-4e7a-9002-866a6d9751d5",GitHubLink:"https://github.com/Elmarath/EasySkeletalMeshMergeAsync"},{title:"Easy Ability Set System",Img:n(8516).A,description:"Ability Set Management System that handles both granting and input binding for Gameplay Ability System.",DocLink:"/docs/Easy-Ability-Set-System/EasyAbilitySetSystemStartup",FabLink:"https://www.fab.com/sellers/Elmarath"},{title:"Dynamic Input System",Img:n(2499).A,description:"A flexible, runtime input management system that allows dynamic binding and modification of input mappings during gameplay.",DocLink:"/docs/Dynamic-Input-System/DynamicInputSystem",GitHubLink:"https://www.fab.com/listings/cdf2ad8e-b9b7-4b4e-87bb-fdcfbe3c3b2b",FabLink:"https://www.fab.com/listings/cdf2ad8e-b9b7-4b4e-87bb-fdcfbe3c3b2b"}],s=[{id:"email",label:"Email",value:i.ku.email,link:`mailto:${i.ku.email}`,icon:"mail",action:"link"},{id:"resume",label:"Resume/CV",value:"View my professional CV",link:"/docs/DenizhanToprak_Resume.pdf",icon:"resume",action:"resume"},{id:"linkedin",label:"LinkedIn",value:"Connect with me on LinkedIn",link:i.ku.linkedinUrl,icon:"linkedin",action:"external"},{id:"github",label:"GitHub Profile",value:"View all my projects",link:i.ku.githubUrl,icon:"github",action:"external"},{id:"blog",label:"About Me Blog",value:"Read my personal story and journey",link:i.ku.blogPath,icon:"blog",action:"navigate"}]},25901:(e,t,n)=>{n.d(t,{ku:()=>i});const i={name:"Denizhan Toprak",title:"C++ Gameplay Programmer",email:"[email protected]",github:"https://github.com/elmarath",githubUrl:"https://github.com/elmarath",linkedin:"https://www.linkedin.com/in/denizhan-toprak-006073193/",linkedinUrl:"https://www.linkedin.com/in/denizhan-toprak-006073193/",resume:"https://docs.google.com/document/d/1NyO2H-jLeTuhU76wPoMm6xU3kDFCQn3Dn-A5imPmtfA/edit?tab=t.0",resumeUrl:"https://docs.google.com/document/d/1NyO2H-jLeTuhU76wPoMm6xU3kDFCQn3Dn-A5imPmtfA/edit?tab=t.0",avatar:"https://avatars.githubusercontent.com/u/65414809?v=4",description:"Unreal Engine C++ Developer. Creator of this platform and it's listed tools. Let's connect!",blogPath:"/blog/About Me"}},28453:(e,t,n)=>{n.d(t,{R:()=>o,x:()=>r});var i=n(96540);const a={},s=i.createContext(a);function o(e){const t=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),i.createElement(s.Provider,{value:t},e.children)}},33037:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_StagedInteractionThumbnail-f52c7615a1914b0a177bf067ac5236f8.png"},45155:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_EasyTraceTrailSystemThumbnail-4b9937a81de461b0f69e6d4907adc5b7.png"},51519:(e,t,n)=>{n.d(t,{A:()=>i});const i={pluginLinksContainer:"pluginLinksContainer_Xbps",linksTitle:"linksTitle_v6Hv",linksGrid:"linksGrid_l5Uu",linkButton:"linkButton_FFVW",linkIcon:"linkIcon_j8va",docsButton:"docsButton_y6Gg",fabButton:"fabButton_l3ky",githubButton:"githubButton_eyFH"}}
1,60229:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_ModularActionSystemLogo-8f65d3ec08ebf7cac0efeb4e8a2e5f96.png"},67378:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_NIA_Thumbnail-88027eb5cb699b50479f5d97e32f4ec9.png"},67886:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/T_AbilityQueueTaskSystemThumbnail-5f7d91c59f3881b0d5809c82cb6e6f83.png"},85843:(e,t,n)=>{n.d(t,{A:()=>o});n(96540);var i=n(10968),a=n(51519),s=n(74848);const o=({pluginId:e})=>{const t=i.J.find((t=>t.DocLink.includes(e)||t.title.toLowerCase().includes(e.toLowerCase())));return t?(0,s.jsxs)("div",{className:a.A.pluginLinksContainer,children:[(0,s.jsx)("h3",{className:a.A.linksTitle,children:"Quick Links"}),(0,s.jsxs)("div",{className:a.A.linksGrid,children:[t.FabLink&&(0,s.jsxs)("a",{href:t.FabLink,target:"_blank",rel:"noopener noreferrer",className:`${a.A.linkButton} ${a.A.fabButton}`,title:"View on Fab",children:[(0,s.jsx)("img",{src:"/img/T_Epic_Games_Fab_2024_icon.svg",alt:"Fab",className:a.A.linkIcon}),(0,s.jsx)("span",{children:"Fab"})]}),t.GitHubLink&&(0,s.jsxs)("a",{href:t.GitHubLink,target:"_blank",rel:"noopener noreferrer",className:`${a.A.linkButton} ${a.A.githubButton}`,title:"View on GitHub",children:[(0,s.jsx)("svg",{className:a.A.linkIcon,viewBox:"0 0 24 24",fill:"currentColor",children:(0,s.jsx)("path",{d:"M12,2A10,10 0 0,0 2,12C2,16.42 4.87,20.17 8.84,21.5C9.34,21.58 9.5,21.27 9.5,21C9.5,20.77 9.5,20.14 9.5,19.31C6.73,19.91 6.14,17.97 6.14,17.97C5.68,16.81 5.03,16.5 5.03,16.5C4.12,15.88 5.1,15.9 5.1,15.9C6.1,15.97 6.63,16.93 6.63,16.93C7.5,18.45 8.97,18 9.54,17.76C9.63,17.11 9.89,16.67 10.17,16.42C7.95,16.17 5.62,15.31 5.62,11.5C5.62,10.39 6,9.5 6.65,8.79C6.55,8.54 6.2,7.5 6.75,6.15C6.75,6.15 7.59,5.88 9.5,7.17C10.29,6.95 11.15,6.84 12,6.84C12.85,6.84 13.71,6.95 14.5,7.17C16.41,5.88 17.25,6.15 17.25,6.15C17.8,7.5 17.45,8.54 17.35,8.79C18,9.5 18.38,10.39 18.38,11.5C18.38,15.32 16.04,16.16 13.81,16.41C14.17,16.72 14.5,17.33 14.5,18.26C14.5,19.6 14.5,20.68 14.5,21C14.5,21.27 14.66,21.59 15.17,21.5C19.14,20.16 22,16.42 22,12A10,10 0 0,0 12,2Z"})}),(0,s.jsx)("span",{children:"GitHub"})]})]})]}):null}},88612:(e,t,n)=>{n.d(t,{A:()=>i});const i=n.p+"assets/images/EasySkeletalMeshMergeAsync-f341c8b592d95242c5ff7171ba714117.png"}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.