{
  "version": 3,
  "sources": ["ssg:https://framerusercontent.com/modules/NEd4VmDdsxM3StIUbddO/bZxrMUxBPAhoXlARkK9C/YouTube.js", "ssg:https://framerusercontent.com/modules/tEqumO5MaoJWueJ93cKL/92qxbGDVNxs8uIJ7G4hL/JEiDCsz4e.js"],
  "sourcesContent": ["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useReducer,useState}from\"react\";import{ControlType,addPropertyControls}from\"framer\";import{useIsOnCanvas,emptyStateStyle,containerStyles,defaultEvents,useRadius,borderRadiusControl}from\"https://framer.com/m/framer/default-utils.js@^0.45.0\";var PlayOptions;(function(PlayOptions){PlayOptions[\"Normal\"]=\"Off\";PlayOptions[\"Auto\"]=\"On\";PlayOptions[\"Loop\"]=\"Loop\";})(PlayOptions||(PlayOptions={}));var ThumbnailOptions;(function(ThumbnailOptions){ThumbnailOptions[\"High\"]=\"High Quality\";ThumbnailOptions[\"Medium\"]=\"Medium Quality\";ThumbnailOptions[\"Low\"]=\"Low Quality\";ThumbnailOptions[\"Off\"]=\"Off\";})(ThumbnailOptions||(ThumbnailOptions={}));var ThumbnailFormat;(function(ThumbnailFormat){ThumbnailFormat[\"WebP\"]=\"webp\";ThumbnailFormat[\"JPG\"]=\"jpg\";})(ThumbnailFormat||(ThumbnailFormat={}));/**\n * @framerIntrinsicWidth 560\n * @framerIntrinsicHeight 315\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n *\n * @framerComponentPresetProps isRed, borderRadius\n */ export function Youtube({url,play,shouldMute,thumbnail,isRed,onClick,onMouseEnter,onMouseLeave,onMouseDown,onMouseUp,...props}){const onCanvas=useIsOnCanvas();const isAutoplay=play!==PlayOptions.Normal;const showThumbnail=onCanvas||thumbnail!==ThumbnailOptions.Off&&!isAutoplay;const[isPreloading,preloadVideo]=useReducer(()=>true,false);const[showVideo,startVideo]=useReducer(()=>true,!showThumbnail);const[isHovered,setHovered]=useState(false);const borderRadius=useRadius(props);const hasBorderRadius=borderRadius!==\"0px 0px 0px 0px\"&&borderRadius!==\"0px\";if(url===\"\"){return /*#__PURE__*/ _jsx(Instructions,{});}const parsedURL=parseVideoURL(url);if(parsedURL===undefined){return /*#__PURE__*/ _jsx(ErrorMessage,{message:\"Invalid Youtube URL.\"});}const[videoId,embedURL]=parsedURL;// https://stackoverflow.com/questions/2068344/how-do-i-get-a-youtube-video-thumbnail-from-the-youtube-api\nconst thumbnailURL=getThumbnailURL(videoId,thumbnail,getWebPSupported()?ThumbnailFormat.WebP:ThumbnailFormat.JPG);// https://developers.google.com/youtube/player_parameters\nconst searchParams=embedURL.searchParams;searchParams.set(\"iv_load_policy\",\"3\");searchParams.set(\"rel\",\"0\");searchParams.set(\"modestbranding\",\"1\");searchParams.set(\"playsinline\",\"1\");if(isAutoplay||showThumbnail){searchParams.set(\"autoplay\",\"1\");}if(isAutoplay&&shouldMute){searchParams.set(\"mute\",\"1\");}if(play===PlayOptions.Loop){searchParams.set(\"loop\",\"1\");searchParams.set(\"playlist\",videoId);}if(!isRed){searchParams.set(\"color\",\"white\");}return /*#__PURE__*/ _jsxs(\"article\",{onPointerEnter:()=>setHovered(true),onPointerLeave:()=>setHovered(false),onPointerOver:preloadVideo,onClick:startVideo,style:{...wrapperStyle,borderRadius,transform:// Safari sometimes struggles to render border-radius:\n// - on the canvas when changing from 0 to any other value\n// - or when rendering an iframe\nhasBorderRadius&&(showVideo||onCanvas)?\"translateZ(0.000001px)\":\"unset\",cursor:\"pointer\",overflow:\"hidden\"},children:[isPreloading&&/*#__PURE__*/ _jsx(\"link\",{rel:\"preconnect\",href:\"https://www.youtube.com\"}),isPreloading&&/*#__PURE__*/ _jsx(\"link\",{rel:\"preconnect\",href:\"https://www.google.com\"}),/*#__PURE__*/ _jsx(\"div\",{style:{...videoStyle,background:showThumbnail?`center / cover url(${thumbnailURL}) no-repeat`:undefined}}),showVideo?/*#__PURE__*/ _jsx(\"iframe\",{style:videoStyle,src:embedURL.href,frameBorder:\"0\",allow:\"presentation; fullscreen; accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\",onClick:onClick,onMouseEnter:onMouseEnter,onMouseLeave:onMouseLeave,onMouseDown:onMouseDown,onMouseUp:onMouseUp}):/*#__PURE__*/ _jsx(PlayButton,{onClick:startVideo,isHovered:isHovered,isRed:isRed})]});}Youtube.displayName=\"YouTube\";addPropertyControls(Youtube,{url:{type:ControlType.String,title:\"Video\"},play:{type:ControlType.Enum,title:\"Autoplay\",options:Object.values(PlayOptions)},shouldMute:{title:\"Mute\",type:ControlType.Boolean,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden(props){return props.play===PlayOptions.Normal;}},thumbnail:{title:\"Thumbnail\",description:\"Showing a thumbnail improves performance.\",type:ControlType.Enum,options:Object.values(ThumbnailOptions),hidden(props){return props.play!==PlayOptions.Normal;}},isRed:{title:\"Color\",type:ControlType.Boolean,enabledTitle:\"Red\",disabledTitle:\"White\"},...borderRadiusControl,...defaultEvents});const defaultProps={url:\"https://youtu.be/smPos0mJvh8\",play:PlayOptions.Normal,shouldMute:true,thumbnail:ThumbnailOptions.Medium,isRed:true};Youtube.defaultProps=defaultProps;function parseVideoURL(urlString){let url;try{url=new URL(urlString);}catch{const embedURL=getEmbedURL(urlString);return[urlString,embedURL];}if(url.hostname===\"youtube.com\"||url.hostname===\"www.youtube.com\"||url.hostname===\"youtube-nocookie.com\"||url.hostname===\"www.youtube-nocookie.com\"){const pathSegments=url.pathname.slice(1).split(\"/\");// https://www.youtube.com/watch?v=Fop2oskTug8\nif(pathSegments[0]===\"watch\"){const videoId=url.searchParams.get(\"v\");const embedURL1=getEmbedURL(videoId);return[videoId,embedURL1];}// https://www.youtube.com/embed/Fop2oskTug8\nif(pathSegments[0]===\"embed\"){const videoId1=pathSegments[1];return[videoId1,url];}}// https://youtu.be/Fop2oskTug8\nif(url.hostname===\"youtu.be\"){const videoId2=url.pathname.slice(1);const embedURL2=getEmbedURL(videoId2);return[videoId2,embedURL2];}}function getEmbedURL(videoId){return new URL(`https://www.youtube.com/embed/${videoId}`);}function getThumbnailURL(videoId,res,format=ThumbnailFormat.JPG){// https://gist.github.com/a1ip/be4514c1fd392a8c13b05e082c4da363\nconst pre=ThumbnailFormat.WebP?\"https://i.ytimg.com/vi_webp/\":\"https://i.ytimg.com/vi/\";const ext=ThumbnailFormat.WebP?\"webp\":\"jpg\";switch(res){case ThumbnailOptions.Low:return`${pre}${videoId}/hqdefault.${ext}`;case ThumbnailOptions.Medium:return`${pre}${videoId}/sddefault.${ext}`;case ThumbnailOptions.High:return`${pre}${videoId}/maxresdefault.${ext}`;default:return`${pre}${videoId}/0.${ext}`;}}let _getWebPSupported;// https://stackoverflow.com/a/27232658\nfunction getWebPSupported(){// We're going to default to webp because it's pretty widely supported by now\nif(!window){return true;}if(_getWebPSupported!==undefined){return _getWebPSupported;}const element=document.createElement(\"canvas\");if(!!(element.getContext&&element.getContext(\"2d\"))){// was able or not to get WebP representation\nreturn element.toDataURL(\"image/webp\").indexOf(\"data:image/webp\")==0;}else{// very old browser like IE 8, canvas not supported\nreturn false;}}// Helper components\nfunction Instructions(){return /*#__PURE__*/ _jsx(\"div\",{style:{...emptyStateStyle,overflow:\"hidden\"},children:/*#__PURE__*/ _jsx(\"div\",{style:centerTextStyle,children:\"To embed a Youtube video, add the URL to the properties\\xa0panel.\"})});}function ErrorMessage({message}){return /*#__PURE__*/ _jsx(\"div\",{className:\"framerInternalUI-errorPlaceholder\",style:{...containerStyles,overflow:\"hidden\"},children:/*#__PURE__*/ _jsxs(\"div\",{style:centerTextStyle,children:[\"Error: \",message]})});}function PlayButton({onClick,isHovered,isRed}){return /*#__PURE__*/ _jsx(\"button\",{onClick:onClick,\"aria-label\":\"Play\",style:buttonStyle,children:/*#__PURE__*/ _jsxs(\"svg\",{height:\"100%\",version:\"1.1\",viewBox:\"0 0 68 48\",width:\"100%\",children:[/*#__PURE__*/ _jsx(\"path\",{d:\"M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z\",fill:isHovered?isRed?\"#f00\":\"#000\":\"#212121\",fillOpacity:isHovered?isRed?1:.8:.8,style:{transition:\"fill .1s cubic-bezier(0.4, 0, 1, 1), fill-opacity .1s cubic-bezier(0.4, 0, 1, 1)\"}}),/*#__PURE__*/ _jsx(\"path\",{d:\"M 45,24 27,14 27,34\",fill:\"#fff\"})]})});}const buttonStyle={position:\"absolute\",top:\"50%\",left:\"50%\",transform:\"translate(-50%, -50%)\",width:68,height:48,padding:0,border:\"none\",background:\"transparent\",cursor:\"pointer\"};const wrapperStyle={position:\"relative\",width:\"100%\",height:\"100%\"};const centerTextStyle={textAlign:\"center\",minWidth:140};const videoStyle={position:\"absolute\",top:0,left:0,height:\"100%\",width:\"100%\"};\nexport const __FramerMetadata__ = {\"exports\":{\"Youtube\":{\"type\":\"reactComponent\",\"name\":\"Youtube\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"fixed\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicHeight\":\"315\",\"framerIntrinsicWidth\":\"560\",\"framerComponentPresetProps\":\"isRed, borderRadius\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./YouTube.map", "import{jsx as e,jsxs as t}from\"react/jsx-runtime\";import{addPropertyControls as r,ComponentPresetsConsumer as a,ControlType as n,Link as o}from\"framer\";import{motion as i}from\"framer-motion\";import*as s from\"react\";import{Youtube as l}from\"https://framerusercontent.com/modules/NEd4VmDdsxM3StIUbddO/bZxrMUxBPAhoXlARkK9C/YouTube.js\";let h=\"aQ68Df_BQ\",d=\"C4SPgrjlU\",c=\"dte0Ol2mn\",m=\"Hlk8qTrmD\",p=\"yRR2ho3jE\",g=\"IMEehYrd_\",u=\"ZLIoKDqhr\",f=\"DAWZVJH2S\",w=\"Hei4DHswe\",y=\"pZiI8i9Ac\",b=\"PPpPucyaO\",v=(e,t)=>{if(e&&\"object\"==typeof e)return{...e,alt:t};},I=[{index:0,id:\"c4Y1lXVbk\",[h]:\"Smooth Voxel Engine (Surface-Net)\",[d]:\"Project Description\",[c]:\"voxel-smooth\",[m]:v({src:\"https://framerusercontent.com/images/W2wBoBk49Y9D1Nr4VonyvfqtcWQ.gif\",srcSet:\"https://framerusercontent.com/images/W2wBoBk49Y9D1Nr4VonyvfqtcWQ.gif?scale-down-to=512 512w,https://framerusercontent.com/images/W2wBoBk49Y9D1Nr4VonyvfqtcWQ.gif 600w\"},\"\"),[p]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"I've been always a fan of procedural generated content and specially voxels. I grew up playing games like Minecraft or Trove. I wanted to give a go at it mostly for fun and learning purposes.\"}),/*#__PURE__*/t(\"p\",{children:[\"The following is and implementation of a Voxel engine + procedural generation + Naive Surface-Net smoothing algorithm.\",/*#__PURE__*/e(\"br\",{}),/*#__PURE__*/e(\"br\",{}),/*#__PURE__*/e(o,{href:\"https://github.com/MrAlvaroRamirez/Unity-SurfaceNet-VoxelTerrain\",openInNewTab:!0,smoothScroll:!1,children:/*#__PURE__*/e(\"a\",{children:\"[CHECK THE CODE ON GITHUB]\"})})]})]}),[g]:\"Inspiration\",[u]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/t(\"p\",{children:[\"Initially, I wanted to do a blocky art style (the one you find in Minecraft) but that gets boring quickly unless you tweak it very well and add a lot of detail. Instead I researched about voxel and procedural generation techniques and I found the fascinating world of \",/*#__PURE__*/e(\"strong\",{children:'\"'}),/*#__PURE__*/e(o,{href:\"https://emojipedia.org/sparkles\",openInNewTab:!1,smoothScroll:!1,children:/*#__PURE__*/e(\"a\",{children:\"\u2728\"})}),/*#__PURE__*/e(\"strong\",{children:\"Smoothing Algorithms\"}),/*#__PURE__*/e(o,{href:\"https://emojipedia.org/sparkles\",openInNewTab:!1,smoothScroll:!1,children:/*#__PURE__*/e(\"a\",{children:\"\u2728\"})}),/*#__PURE__*/e(\"strong\",{children:'\"'}),\". There is a community crazily dedicated to this kind of game development.\",/*#__PURE__*/e(\"br\",{}),/*#__PURE__*/e(\"br\",{}),\"(Thanks to the people on r/VoxelGameDev for making this possible!)\"]}),/*#__PURE__*/e(\"p\",{children:\"I gathered quite a few references from well known games that implement these methods as well as posts from the community. I want to mention this one (https://thatfrenchgamedev.com/games/nil-order-voxel-smoothing-engine/) as my main inspiration for this project.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,CbuHfREY8hqe89IyKMBfkTxI5BE.png\",\"data-framer-height\":\"909\",\"data-framer-width\":\"1616\",height:\"454\",src:\"https://framerusercontent.com/images/CbuHfREY8hqe89IyKMBfkTxI5BE.png\",srcSet:\"https://framerusercontent.com/images/CbuHfREY8hqe89IyKMBfkTxI5BE.png?scale-down-to=512 512w,https://framerusercontent.com/images/CbuHfREY8hqe89IyKMBfkTxI5BE.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/CbuHfREY8hqe89IyKMBfkTxI5BE.png 1616w\",style:{aspectRatio:\"1616 / 909\"},width:\"808\"})]}),[f]:\"Procedural Generation and Optimizations\",[w]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/t(\"p\",{children:[\"This was probably the easiest part, and it's also very well documented online. For the procedural generation I used some simple \",/*#__PURE__*/e(\"strong\",{children:\"Perlin Noise\"}),\" techniques.\"]}),/*#__PURE__*/t(\"p\",{children:[\"For the optimization I implemented a \",/*#__PURE__*/e(\"strong\",{children:\"Chunking\"}),\" system that divides the entire world into smaller groups of voxels. Also, the inner faces of the voxels are never rendered, since the player will never get to see that geometry. If I have some time, I would like to go a step beyond and implement LOD, but it's a very complex problem if you also have chunks + smoothing.\"]}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,SwCFAnWq7Mgmy4K1rbiMByk.png\",\"data-framer-height\":\"869\",\"data-framer-width\":\"2114\",height:\"434\",src:\"https://framerusercontent.com/images/SwCFAnWq7Mgmy4K1rbiMByk.png\",srcSet:\"https://framerusercontent.com/images/SwCFAnWq7Mgmy4K1rbiMByk.png?scale-down-to=512 512w,https://framerusercontent.com/images/SwCFAnWq7Mgmy4K1rbiMByk.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/SwCFAnWq7Mgmy4K1rbiMByk.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/SwCFAnWq7Mgmy4K1rbiMByk.png 2114w\",style:{aspectRatio:\"2114 / 869\"},width:\"1057\"})]}),[y]:\"Smoothing Algorithm (Surface-Net)\",[b]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"The next two weeks after starting the project, I went down a rabbit hole of voxel smoothing techniques. There are lots of them, but these are the most popular among game developers:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Marching Cubes\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Dual Contouring\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Surface Nets\"})})]}),/*#__PURE__*/e(\"p\",{children:\"While Marching Cubes is the most popular and documented method, I went for Surface Nets since the final look was smoother and more life-like. I'm aware that you can achieve similar results with marching cubes, but that would require some tweaking.\"}),/*#__PURE__*/e(\"p\",{children:\"Now, inside of Surface Nets there's even more techniques! I won't go into deep and just say that I went for Naive Surface Nets, which essentially work by averaging every vertex position with the ones that surround them. Sounds simple, but it's hard to get it right at first. It's also not very well documented, so I had to make my own implementation from scratch based on blogs and papers I found online.\"}),/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,MXjUUAcAomeDDj2324rzxFdro.png\",\"data-framer-height\":\"868\",\"data-framer-width\":\"2114\",height:\"434\",src:\"https://framerusercontent.com/images/MXjUUAcAomeDDj2324rzxFdro.png\",srcSet:\"https://framerusercontent.com/images/MXjUUAcAomeDDj2324rzxFdro.png?scale-down-to=512 512w,https://framerusercontent.com/images/MXjUUAcAomeDDj2324rzxFdro.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/MXjUUAcAomeDDj2324rzxFdro.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/MXjUUAcAomeDDj2324rzxFdro.png 2114w\",style:{aspectRatio:\"2114 / 868\"},width:\"1057\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"br\",{className:\"trailing-break\"})})]})},{index:1,id:\"IUMqZWFI0\",[h]:\"Third Person Action J-RPG\",[d]:\"Project Description\",[c]:\"solo-game-dev\",[m]:v({src:\"https://framerusercontent.com/images/XM5qaYg1LMEsenIs3T9nJ4CMro.gif\",srcSet:\"https://framerusercontent.com/images/XM5qaYg1LMEsenIs3T9nJ4CMro.gif?scale-down-to=512 512w,https://framerusercontent.com/images/XM5qaYg1LMEsenIs3T9nJ4CMro.gif 600w\"},\"\"),[p]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/e(\"p\",{children:\"Over the last years, I've been doing quite a lot of experiments and playing around with ideas. It would be a nightmare trying to show them all, so instead I will talk about the most ambitious (and cringiest) project I've worked on.\"}),/*#__PURE__*/e(\"p\",{children:\"It is essentially an un-released fan-game about a well known anime show. The game is mainly inspired by the J-RPG genre and features a semi-open world, story, lots of NPCs, a free-flow combat system,\u2026 Everything was done by me, art and code - with the exception of a few paid 3D assets.\"}),/*#__PURE__*/e(\"p\",{children:/*#__PURE__*/e(\"em\",{children:\"This was done over the course of 6 months in my spare time.\"})}),/*#__PURE__*/e(\"p\",{children:\"Let's get in-depth with the mechanics.\"})]}),[g]:\"Environment and NPCs\",[u]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/e(i.div,{className:\"framer-text-module\",style:{\"--aspect-ratio\":\"560 / 315\",aspectRatio:\"var(--aspect-ratio)\",height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(a,{componentIdentifier:\"module:NEd4VmDdsxM3StIUbddO/bZxrMUxBPAhoXlARkK9C/YouTube.js:Youtube\",children:t=>/*#__PURE__*/e(l,{...t,play:\"Off\",shouldMute:!0,thumbnail:\"Medium Quality\",url:\"https://youtu.be/YUA7FFA-eQ4\"})})}),/*#__PURE__*/e(\"p\",{children:\"The hardest part of this project was to build systems on top of the engine to achieve a modular story-building system and dynamic NPCs. My goal was to make something similar to games like Skyrim or The Witcher 3 and how they build their worlds.\"}),/*#__PURE__*/e(\"p\",{children:\"I ended up creating my own three systems to make it work:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"A branching dialogue tool\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"A NPC management/schedule system\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"A modular story builder\"})})]}),/*#__PURE__*/t(\"p\",{children:[\"With this three, I was capable of getting pretty close to what I had in mind. There were a lot of obstacles and problems, such as handling NPCs who weren't part of the actual scene but still needed to be updated.\",/*#__PURE__*/e(\"br\",{}),/*#__PURE__*/e(\"br\",{}),\"Two of these systems are hosted on GitHub, though I didn't had the time to properly document them, but in case you are curious:\"]}),/*#__PURE__*/t(\"p\",{children:[\"[\",/*#__PURE__*/e(o,{href:\"https://github.com/MrAlvaroRamirez/NPCScheduleSystem\",openInNewTab:!0,smoothScroll:!1,children:/*#__PURE__*/e(\"a\",{children:\"https://github.com/MrAlvaroRamirez/NPCScheduleSystem\"})}),\"]\"]}),/*#__PURE__*/t(\"p\",{children:[\"[\",/*#__PURE__*/e(o,{href:\"https://github.com/MrAlvaroRamirez/BranchingDialogueGraph\",openInNewTab:!0,smoothScroll:!1,children:/*#__PURE__*/e(\"a\",{children:\"https://github.com/MrAlvaroRamirez/BranchingDialogueGraph\"})}),\"]\"]})]}),[f]:\"Free-Flow Combat\",[w]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/e(i.div,{className:\"framer-text-module\",style:{\"--aspect-ratio\":\"560 / 315\",aspectRatio:\"var(--aspect-ratio)\",height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(a,{componentIdentifier:\"module:NEd4VmDdsxM3StIUbddO/bZxrMUxBPAhoXlARkK9C/YouTube.js:Youtube\",children:t=>/*#__PURE__*/e(l,{...t,play:\"Off\",shouldMute:!0,thumbnail:\"Medium Quality\",url:\"https://youtu.be/Ngiv0FCmc-0\"})})}),/*#__PURE__*/e(\"p\",{children:\"The combat system was mainly inspired by these two games:\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Spiderman (Insomniac Games)\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Batman Arkham Saga (Rocksteady Studios)\"})})]}),/*#__PURE__*/t(\"p\",{children:[\"It was driven by a \",/*#__PURE__*/e(\"strong\",{children:\"Hierarchical State Machine\"}),\" and a modular \",/*#__PURE__*/e(\"strong\",{children:\"Ability System\"}),\". Both of these allowed for an easy integration and iteration of mechanics. The AI of the enemies was nothing very fancy, but I implemented some group management to coordinate their attacks based on the rest of the foes in the near area.\"]}),/*#__PURE__*/e(\"p\",{children:\"Again, I hosted the code of the prototype in GitHub for archiving purposes:\"}),/*#__PURE__*/t(\"p\",{children:[\"[\",/*#__PURE__*/e(o,{href:\"https://github.com/MrAlvaroRamirez/ThirdPersonActionHSM\",openInNewTab:!0,smoothScroll:!1,children:/*#__PURE__*/e(\"a\",{children:\"https://github.com/MrAlvaroRamirez/ThirdPersonActionHSM\"})}),\"]\"]})]}),[y]:\"Character Customization\",[b]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/e(i.div,{className:\"framer-text-module\",style:{\"--aspect-ratio\":\"560 / 315\",aspectRatio:\"var(--aspect-ratio)\",height:\"auto\",width:\"100%\"},children:/*#__PURE__*/e(a,{componentIdentifier:\"module:NEd4VmDdsxM3StIUbddO/bZxrMUxBPAhoXlARkK9C/YouTube.js:Youtube\",children:t=>/*#__PURE__*/e(l,{...t,play:\"Off\",shouldMute:!0,thumbnail:\"Medium Quality\",url:\"https://youtu.be/4AEdTNEcU6E\"})})}),/*#__PURE__*/e(\"p\",{children:\"Lastly, I wanted to showcase the character customization. It's not very deep since I didn't want to spend much time creating the assets, but it does the job pretty well.\"})]})},{index:2,id:\"M68dWtiUe\",[h]:\"SDK & Engine Tools\",[d]:\"Project Description\",[c]:\"enginge-and-sdks\",[m]:v({src:\"https://framerusercontent.com/images/mIqSex6DUjo0mLiw5Tz50zSfTho.gif\",srcSet:\"https://framerusercontent.com/images/mIqSex6DUjo0mLiw5Tz50zSfTho.gif?scale-down-to=512 512w,https://framerusercontent.com/images/mIqSex6DUjo0mLiw5Tz50zSfTho.gif 600w\"},\"\"),[p]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/t(\"p\",{children:[\"There are few things more powerful than developing custom tools for the developer or artist experience. It saves the team \",/*#__PURE__*/e(\"strong\",{children:\"countless hours\"}),\" on repetitive task, increases the \",/*#__PURE__*/e(\"strong\",{children:\"productivity \"}),\"and reduces the headaches.\",/*#__PURE__*/e(\"br\",{}),/*#__PURE__*/e(\"em\",{children:'(I\\'ve done a few of them for my personal projects - you can see them on the \"Solo Game Development\" page)'})]}),/*#__PURE__*/t(\"p\",{children:[\"Today I will share the work I've been doing at Union Avatars and how I helped them bring their experience to Unity and Unreal developer with their own \",/*#__PURE__*/e(\"strong\",{children:\"SDK\"}),\".\"]})]}),[g]:\"Playing as yourself in a game!\",[u]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,xCvzDDXysb4cK6UbHMSrHupDEw.png\",\"data-framer-height\":\"1283\",\"data-framer-width\":\"2230\",height:\"641\",src:\"https://framerusercontent.com/images/xCvzDDXysb4cK6UbHMSrHupDEw.png\",srcSet:\"https://framerusercontent.com/images/xCvzDDXysb4cK6UbHMSrHupDEw.png?scale-down-to=512 512w,https://framerusercontent.com/images/xCvzDDXysb4cK6UbHMSrHupDEw.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/xCvzDDXysb4cK6UbHMSrHupDEw.png?scale-down-to=2048 2048w,https://framerusercontent.com/images/xCvzDDXysb4cK6UbHMSrHupDEw.png 2230w\",style:{aspectRatio:\"2230 / 1283\"},width:\"1115\"}),/*#__PURE__*/t(\"p\",{children:[\"Union Avatars is a company based in Barcelona that is developing a service to turn a single selfie into a rigged 3D avatar. We also have an API which allows for further customization on the clothes, hairs and accessories. They approached me to build their \",/*#__PURE__*/e(\"strong\",{children:\"SDK \"}),\"for\",/*#__PURE__*/e(\"strong\",{children:\" Unity and Unreal Engine\"}),\" so developers can start using these avatars without a single line of code.\"]}),/*#__PURE__*/t(\"p\",{children:[\"The end result is a \",/*#__PURE__*/e(\"strong\",{children:\"powerful tool\"}),\" that is easy to integrate in any existing project. It features:\"]}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"API Interaction from Unity\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"User Interface for creating/managing your avatars\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Support for all platforms (WebGL, Android, Windows,\u2026)\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Support for all render pipelines (Built-In, URP, HDRP)\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"VR Support\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Lots of samples!\"})})]}),/*#__PURE__*/e(\"p\",{children:\"If you want to learn more about it, you can check it here:\"}),/*#__PURE__*/t(\"p\",{children:[/*#__PURE__*/e(\"br\",{}),\"[\",/*#__PURE__*/e(o,{href:\"https://docs.unionavatars.com/docs/-/Integration/Unity_SDK/\",openInNewTab:!0,smoothScroll:!1,children:/*#__PURE__*/e(\"a\",{children:\"Union Avatars Unity SDK Documentation\"})}),\"]\",/*#__PURE__*/e(\"br\",{}),\"[\",/*#__PURE__*/e(o,{href:\"https://docs.unionavatars.com/docs/-/Integration/Unreal_Engine_SDK/\",openInNewTab:!0,smoothScroll:!1,children:/*#__PURE__*/e(\"a\",{children:\"Union Avatars Unreal SDK Documentation\"})}),\"]\"]})]}),[f]:\"Takeaways of developing an SDK (as the single developer)\",[w]:/*#__PURE__*/t(s.Fragment,{children:[/*#__PURE__*/e(\"img\",{alt:\"\",className:\"framer-image\",\"data-framer-asset\":\"data:framer/asset-reference,FxR2ZU1bCFnf72auSWqnUpMN4.png?originalFilename=sdk.png\",\"data-framer-height\":\"1067\",\"data-framer-width\":\"1956\",height:\"533\",src:\"https://framerusercontent.com/images/FxR2ZU1bCFnf72auSWqnUpMN4.png\",srcSet:\"https://framerusercontent.com/images/FxR2ZU1bCFnf72auSWqnUpMN4.png?scale-down-to=512 512w,https://framerusercontent.com/images/FxR2ZU1bCFnf72auSWqnUpMN4.png?scale-down-to=1024 1024w,https://framerusercontent.com/images/FxR2ZU1bCFnf72auSWqnUpMN4.png 1956w\",style:{aspectRatio:\"1956 / 1067\"},width:\"978\"}),/*#__PURE__*/t(\"ul\",{children:[/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Supporting a wide range of platforms, versions and pipelines can get complicated quite fast\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Getting \",/*#__PURE__*/e(\"strong\",{children:\"feedback \"}),\"from the users is key\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Build tools with the end-user in mind\"})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/t(\"p\",{children:[\"Have a friendly \",/*#__PURE__*/e(\"strong\",{children:\"documentation \"}),\"for non-developers\"]})}),/*#__PURE__*/e(\"li\",{\"data-preset-tag\":\"p\",children:/*#__PURE__*/e(\"p\",{children:\"Less is more, don't bloat the package and keep it simple\"})})]})]}),[y]:\"\",[b]:null}];for(let e of I)Object.freeze(e);r(I,{aQ68Df_BQ:{defaultValue:\"\",title:\"Title\",type:n.String},C4SPgrjlU:{defaultValue:\"\",title:\"Sub Titile\",type:n.String},dte0Ol2mn:{title:\"Slug\",type:n.String},Hlk8qTrmD:{title:\"Cover\",type:n.ResponsiveImage},yRR2ho3jE:{defaultValue:\"\",title:\"Description\",type:n.RichText},IMEehYrd_:{defaultValue:\"\",title:\"Header 1\",type:n.String},ZLIoKDqhr:{defaultValue:\"\",title:\"Content 1\",type:n.RichText},DAWZVJH2S:{defaultValue:\"\",title:\"Header 2\",type:n.String},Hei4DHswe:{defaultValue:\"\",title:\"Content 2\",type:n.RichText},pZiI8i9Ac:{defaultValue:\"\",title:\"Header 3\",type:n.String},PPpPucyaO:{defaultValue:\"\",title:\"Content 3\",type:n.RichText}}),I.displayName=\"Projects\";export default I;export const enumToDisplayNameFunctions={};export const utils={async getSlugByRecordId(e,t){var r;return null===(r=I.find(t=>t.id===e))||void 0===r?void 0:r[c];},async getRecordIdBySlug(e,t){var r;return null===(r=I.find(t=>t[c]===e))||void 0===r?void 0:r.id;}};\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"data\",\"name\":\"data\",\"annotations\":{\"framerCollectionId\":\"JEiDCsz4e\",\"framerContractVersion\":\"1\",\"framerRecordIncludedLocalesKey\":\"includedLocales\",\"framerSlug\":\"dte0Ol2mn\",\"framerRecordIndexKey\":\"index\",\"framerCollectionUtils\":\"1\",\"framerEnumToDisplayNameUtils\":\"2\",\"framerData\":\"\",\"framerRecordIdKey\":\"id\"}},\"utils\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"enumToDisplayNameFunctions\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],
  "mappings": "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",
  "names": ["PlayOptions", "ThumbnailOptions", "ThumbnailFormat", "Youtube", "url", "play", "shouldMute", "thumbnail", "isRed", "onClick", "onMouseEnter", "onMouseLeave", "onMouseDown", "onMouseUp", "props", "onCanvas", "useIsOnCanvas", "isAutoplay", "showThumbnail", "isPreloading", "preloadVideo", "le", "showVideo", "startVideo", "isHovered", "setHovered", "ye", "borderRadius", "useRadius", "hasBorderRadius", "p", "Instructions", "parsedURL", "parseVideoURL", "ErrorMessage", "videoId", "embedURL", "thumbnailURL", "getThumbnailURL", "getWebPSupported", "searchParams", "u", "wrapperStyle", "videoStyle", "PlayButton", "addPropertyControls", "ControlType", "borderRadiusControl", "defaultEvents", "defaultProps", "urlString", "getEmbedURL", "pathSegments", "embedURL1", "videoId2", "embedURL2", "res", "format", "pre", "ext", "_getWebPSupported", "window", "element", "emptyStateStyle", "centerTextStyle", "message", "containerStyles", "buttonStyle", "h", "d", "c", "m", "p", "g", "u", "f", "w", "y", "b", "v", "e", "t", "I", "x", "Link", "motion", "ComponentPresetsConsumer", "Youtube", "addPropertyControls", "ControlType", "JEiDCsz4e_default", "enumToDisplayNameFunctions", "utils", "r", "__FramerMetadata__"]
}
